diff --git a/Error/.gitignore b/Error/.gitignore new file mode 100644 index 000000000..7a9d1bcab --- /dev/null +++ b/Error/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.vercel diff --git a/Error/Contracts/PayStreamV2.sol b/Error/Contracts/PayStreamV2.sol new file mode 100644 index 000000000..28a10fcaf --- /dev/null +++ b/Error/Contracts/PayStreamV2.sol @@ -0,0 +1,859 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +interface IHRS { + function transfer(address to, uint256 value) external returns (bool); + function transferFrom(address from, address to, uint256 value) external returns (bool); + function balanceOf(address account) external view returns (uint256); +} + +/// @title PayStream V2 — Corporate Payroll Streaming Protocol +/// @notice Real-time salary streaming with yield, scheduled bonuses, off-ramp, and compliance +/// @dev Optimized for HeLa testnet — minimal gas, maximum features +/// @author PayStream Protocol + +contract PayStreamV2 { + + // ============================================ + // CUSTOM ERRORS + // ============================================ + + error NotHR(); + error NotPlatformOwner(); + error NoActiveStream(); + error ZeroAddress(); + error ZeroAmount(); + error Reentrancy(); + error StreamAlreadyActive(); + error StreamNotPaused(); + error StreamAlreadyPaused(); + error StreamIsPaused(); + error HRCannotBeEmployee(); + error SalaryTooLow(); + error TaxExceedsMax(); + error FeeExceedsMax(); + error InsufficientTreasury(); + error NothingToWithdraw(); + error NoPlatformFees(); + error NoTaxToCollect(); + error TransferFailed(); + error IndexOutOfBounds(); + error SameAddress(); + error BonusNotReady(); + error NoBonusScheduled(); + error OffRampDisabled(); + error InvalidCurrencyCode(); + error NoYieldToCollect(); + error YieldExceedsMax(); + error AlreadyProcessed(); + + // ============================================ + // STORAGE + // ============================================ + + IHRS public immutable token; + + address public hr; + uint8 public platformFeePercent; + uint8 public defaultTaxPercent; + uint8 private _locked; + + address public platformOwner; + uint16 public yieldRateBps; + bool public offRampEnabled; + + uint256 public treasuryBalance; + uint256 public taxVault; + uint256 public platformVault; + uint256 public totalYieldGenerated; + + uint256 public constant MAX_FEE_PERCENT = 10; + uint256 public constant MAX_TAX_PERCENT = 50; + uint256 public constant MAX_YIELD_BPS = 1000; + uint256 public constant SECONDS_PER_YEAR = 365 days; + + // ============================================ + // STRUCTS + // ============================================ + + struct Stream { + uint256 salaryPerSecond; + uint48 startTime; + uint48 lastClaimTime; + uint8 taxPercent; + bool active; + bool paused; + uint256 withdrawn; + } + + struct ScheduledBonus { + uint256 amount; + uint48 releaseTime; + bool claimed; + bool exists; + } + + struct OffRampRequest { + uint256 amount; + uint48 timestamp; + uint8 currencyCode; + bool processed; + bool exists; + } + + // ============================================ + // MAPPINGS + // ============================================ + + mapping(address => Stream) public streams; + mapping(address => ScheduledBonus[]) private _scheduledBonuses; + mapping(address => OffRampRequest[]) private _offRampRequests; + mapping(address => uint256) public employeeYieldEarned; + mapping(uint8 => uint256) public exchangeRates; + + address[] public employeeList; + mapping(address => bool) private _isEmployee; + + // ============================================ + // EVENTS + // ============================================ + + event TreasuryDeposited(address indexed by, uint256 amount); + event TreasuryWithdrawn(address indexed by, uint256 amount); + event StreamStarted(address indexed employee, uint256 salaryPerSecond); + event StreamPaused(address indexed employee); + event StreamResumed(address indexed employee); + event SalaryUpdated(address indexed employee, uint256 oldRate, uint256 newRate); + event TaxUpdated(address indexed employee, uint256 oldTax, uint256 newTax); + event EmployeeTerminated(address indexed employee, uint256 finalPayout); + event SalaryWithdrawn(address indexed employee, uint256 gross, uint256 net, uint256 tax, uint256 fee); + event BonusIssued(address indexed employee, uint256 amount); + event PlatformFeesCollected(address indexed collector, uint256 amount); + event TaxCollected(address indexed collector, uint256 amount); + event HRTransferred(address indexed oldHR, address indexed newHR); + event PlatformOwnerTransferred(address indexed oldOwner, address indexed newOwner); + event PlatformFeeUpdated(uint256 oldFee, uint256 newFee); + event DefaultTaxUpdated(uint256 oldTax, uint256 newTax); + event BonusScheduled(address indexed employee, uint256 amount, uint48 releaseTime); + event BonusClaimed(address indexed employee, uint256 amount, uint256 bonusIndex); + event BonusCancelled(address indexed employee, uint256 amount, uint256 bonusIndex); + event YieldRateUpdated(uint256 oldRate, uint256 newRate); + event YieldDistributed(address indexed employee, uint256 amount); + event YieldCollected(address indexed employee, uint256 amount); + event OffRampRequested(address indexed employee, uint256 tokenAmount, uint8 currencyCode, uint256 localAmount, uint256 requestIndex); + event OffRampProcessed(address indexed employee, uint256 requestIndex); + event OffRampToggled(bool enabled); + event ExchangeRateUpdated(uint8 currencyCode, uint256 rate); + + // ============================================ + // MODIFIERS + // ============================================ + + modifier onlyHR() { + if (msg.sender != hr) revert NotHR(); + _; + } + + modifier onlyPlatformOwner() { + if (msg.sender != platformOwner) revert NotPlatformOwner(); + _; + } + + modifier streamExists(address employee) { + if (!streams[employee].active) revert NoActiveStream(); + _; + } + + modifier noReentrant() { + if (_locked == 1) revert Reentrancy(); + _locked = 1; + _; + _locked = 0; + } + + // ============================================ + // CONSTRUCTOR + // ============================================ + + constructor(address tokenAddress) { + if (tokenAddress == address(0)) revert ZeroAddress(); + token = IHRS(tokenAddress); + hr = msg.sender; + platformOwner = msg.sender; + platformFeePercent = 2; + defaultTaxPercent = 5; + yieldRateBps = 500; + offRampEnabled = true; + + exchangeRates[1] = 83_500_000; + exchangeRates[2] = 1_000_000; + exchangeRates[3] = 920_000; + exchangeRates[4] = 790_000; + } + + // ============================================ + // TREASURY + // ============================================ + + function deposit(uint256 amount) external onlyHR noReentrant { + if (amount == 0) revert ZeroAmount(); + bool success = token.transferFrom(msg.sender, address(this), amount); + if (!success) revert TransferFailed(); + unchecked { + treasuryBalance += amount; + } + emit TreasuryDeposited(msg.sender, amount); + } + + function withdrawUnused(uint256 amount) external onlyHR noReentrant { + if (amount == 0) revert ZeroAmount(); + uint256 _treasury = treasuryBalance; + if (_treasury < amount) revert InsufficientTreasury(); + unchecked { + treasuryBalance = _treasury - amount; + } + bool success = token.transfer(hr, amount); + if (!success) revert TransferFailed(); + emit TreasuryWithdrawn(msg.sender, amount); + } + + // ============================================ + // STREAM MANAGEMENT + // ============================================ + + function startStream(address employee, uint256 salaryPerSecond) external onlyHR { + if (employee == address(0)) revert ZeroAddress(); + if (streams[employee].active) revert StreamAlreadyActive(); + if (salaryPerSecond == 0) revert SalaryTooLow(); + if (employee == hr) revert HRCannotBeEmployee(); + + uint48 currentTime = uint48(block.timestamp); + + streams[employee] = Stream({ + salaryPerSecond: salaryPerSecond, + startTime: currentTime, + lastClaimTime: currentTime, + withdrawn: 0, + taxPercent: defaultTaxPercent, + active: true, + paused: false + }); + + if (!_isEmployee[employee]) { + employeeList.push(employee); + _isEmployee[employee] = true; + } + + emit StreamStarted(employee, salaryPerSecond); + } + + function pauseStream(address employee) external onlyHR streamExists(employee) { + Stream storage s = streams[employee]; + if (s.paused) revert StreamAlreadyPaused(); + s.paused = true; + emit StreamPaused(employee); + } + + function resumeStream(address employee) external onlyHR streamExists(employee) { + Stream storage s = streams[employee]; + if (!s.paused) revert StreamNotPaused(); + s.paused = false; + s.lastClaimTime = uint48(block.timestamp); + emit StreamResumed(employee); + } + + function updateSalary(address employee, uint256 newRate) external onlyHR streamExists(employee) { + if (newRate == 0) revert SalaryTooLow(); + uint256 oldRate = streams[employee].salaryPerSecond; + streams[employee].salaryPerSecond = newRate; + emit SalaryUpdated(employee, oldRate, newRate); + } + + function updateTax(address employee, uint256 newTaxPercent) external onlyHR streamExists(employee) { + if (newTaxPercent > MAX_TAX_PERCENT) revert TaxExceedsMax(); + uint256 oldTax = streams[employee].taxPercent; + streams[employee].taxPercent = uint8(newTaxPercent); + emit TaxUpdated(employee, oldTax, newTaxPercent); + } + + function terminateEmployee(address employee) external onlyHR streamExists(employee) noReentrant { + uint256 pendingGross = earned(employee); + uint256 finalPayout; + + if (pendingGross != 0) { + uint256 _treasury = treasuryBalance; + if (_treasury >= pendingGross) { + Stream storage s = streams[employee]; + + uint256 pFee; + uint256 tAmt; + uint256 net; + + unchecked { + pFee = (pendingGross * platformFeePercent) / 100; + tAmt = (pendingGross * s.taxPercent) / 100; + net = pendingGross - pFee - tAmt; + treasuryBalance = _treasury - pendingGross; + s.withdrawn += pendingGross; + platformVault += pFee; + taxVault += tAmt; + } + + s.lastClaimTime = uint48(block.timestamp); + + bool success = token.transfer(employee, net); + if (!success) revert TransferFailed(); + finalPayout = net; + + emit SalaryWithdrawn(employee, pendingGross, net, tAmt, pFee); + } + } + + streams[employee].active = false; + streams[employee].paused = false; + emit EmployeeTerminated(employee, finalPayout); + } + + // ============================================ + // INSTANT BONUS + // ============================================ + + function giveBonus(address employee, uint256 amount) external onlyHR noReentrant { + if (employee == address(0)) revert ZeroAddress(); + if (amount == 0) revert ZeroAmount(); + uint256 _treasury = treasuryBalance; + if (_treasury < amount) revert InsufficientTreasury(); + unchecked { + treasuryBalance = _treasury - amount; + } + bool success = token.transfer(employee, amount); + if (!success) revert TransferFailed(); + emit BonusIssued(employee, amount); + } + + // ============================================ + // SCHEDULED BONUSES + // ============================================ + + function scheduleBonus( + address employee, + uint256 amount, + uint48 releaseTime + ) external onlyHR { + if (employee == address(0)) revert ZeroAddress(); + if (amount == 0) revert ZeroAmount(); + if (releaseTime <= uint48(block.timestamp)) revert BonusNotReady(); + + uint256 _treasury = treasuryBalance; + if (_treasury < amount) revert InsufficientTreasury(); + + unchecked { + treasuryBalance = _treasury - amount; + } + + _scheduledBonuses[employee].push(ScheduledBonus({ + amount: amount, + releaseTime: releaseTime, + claimed: false, + exists: true + })); + + emit BonusScheduled(employee, amount, releaseTime); + } + + function claimScheduledBonus(uint256 bonusIndex) external noReentrant { + uint256 len = _scheduledBonuses[msg.sender].length; + if (bonusIndex >= len) revert IndexOutOfBounds(); + + ScheduledBonus storage b = _scheduledBonuses[msg.sender][bonusIndex]; + if (!b.exists) revert NoBonusScheduled(); + if (b.claimed) revert NoBonusScheduled(); + if (uint48(block.timestamp) < b.releaseTime) revert BonusNotReady(); + + b.claimed = true; + uint256 amount = b.amount; + + bool success = token.transfer(msg.sender, amount); + if (!success) revert TransferFailed(); + + emit BonusClaimed(msg.sender, amount, bonusIndex); + } + + function cancelScheduledBonus( + address employee, + uint256 bonusIndex + ) external onlyHR { + uint256 len = _scheduledBonuses[employee].length; + if (bonusIndex >= len) revert IndexOutOfBounds(); + + ScheduledBonus storage b = _scheduledBonuses[employee][bonusIndex]; + if (!b.exists || b.claimed) revert NoBonusScheduled(); + + b.exists = false; + uint256 amount = b.amount; + + unchecked { + treasuryBalance += amount; + } + + emit BonusCancelled(employee, amount, bonusIndex); + } + + // ============================================ + // YIELD INTEGRATION + // ============================================ + + function calculateYield(address employee) public view returns (uint256 yieldAmount) { + Stream memory s = streams[employee]; + if (!s.active || s.paused) return 0; + + uint256 elapsed = block.timestamp - s.lastClaimTime; + uint256 stakedAmount = elapsed * s.salaryPerSecond; + + if (stakedAmount == 0) return 0; + + unchecked { + yieldAmount = (stakedAmount * yieldRateBps * elapsed) / (SECONDS_PER_YEAR * 10000); + } + } + + function distributeYield(address employee) external onlyHR streamExists(employee) { + uint256 yieldAmount = calculateYield(employee); + if (yieldAmount == 0) revert NoYieldToCollect(); + + uint256 _treasury = treasuryBalance; + if (_treasury < yieldAmount) revert InsufficientTreasury(); + + unchecked { + treasuryBalance = _treasury - yieldAmount; + employeeYieldEarned[employee] += yieldAmount; + totalYieldGenerated += yieldAmount; + } + + emit YieldDistributed(employee, yieldAmount); + } + + function claimYield() external noReentrant { + uint256 amount = employeeYieldEarned[msg.sender]; + if (amount == 0) revert NoYieldToCollect(); + + employeeYieldEarned[msg.sender] = 0; + + bool success = token.transfer(msg.sender, amount); + if (!success) revert TransferFailed(); + + emit YieldCollected(msg.sender, amount); + } + + function updateYieldRate(uint16 newRateBps) external onlyPlatformOwner { + if (newRateBps > MAX_YIELD_BPS) revert YieldExceedsMax(); + uint256 oldRate = yieldRateBps; + yieldRateBps = newRateBps; + emit YieldRateUpdated(oldRate, newRateBps); + } + + // ============================================ + // OFF-RAMP + // ============================================ + + function requestOffRamp( + uint256 amount, + uint8 currencyCode + ) external noReentrant { + if (!offRampEnabled) revert OffRampDisabled(); + if (amount == 0) revert ZeroAmount(); + if (currencyCode == 0 || currencyCode > 4) revert InvalidCurrencyCode(); + + bool success = token.transferFrom(msg.sender, address(this), amount); + if (!success) revert TransferFailed(); + + uint256 localAmount; + unchecked { + localAmount = (amount * exchangeRates[currencyCode]) / 1e24; + } + + uint256 requestIndex = _offRampRequests[msg.sender].length; + + _offRampRequests[msg.sender].push(OffRampRequest({ + amount: amount, + timestamp: uint48(block.timestamp), + currencyCode: currencyCode, + processed: false, + exists: true + })); + + emit OffRampRequested(msg.sender, amount, currencyCode, localAmount, requestIndex); + } + + function processOffRamp( + address employee, + uint256 requestIndex + ) external onlyHR { + uint256 len = _offRampRequests[employee].length; + if (requestIndex >= len) revert IndexOutOfBounds(); + + OffRampRequest storage req = _offRampRequests[employee][requestIndex]; + if (!req.exists) revert NoBonusScheduled(); + if (req.processed) revert AlreadyProcessed(); + + req.processed = true; + + emit OffRampProcessed(employee, requestIndex); + } + + function toggleOffRamp() external onlyHR { + offRampEnabled = !offRampEnabled; + emit OffRampToggled(offRampEnabled); + } + + function updateExchangeRate(uint8 currencyCode, uint256 rate) external onlyHR { + if (currencyCode == 0 || currencyCode > 4) revert InvalidCurrencyCode(); + if (rate == 0) revert ZeroAmount(); + exchangeRates[currencyCode] = rate; + emit ExchangeRateUpdated(currencyCode, rate); + } + + // ============================================ + // EARN CALCULATION + // ============================================ + + function earned(address employee) public view returns (uint256) { + Stream memory s = streams[employee]; + if (!s.active || s.paused) return 0; + unchecked { + return (block.timestamp - s.lastClaimTime) * s.salaryPerSecond; + } + } + + function earnedBreakdown(address employee) + external + view + returns ( + uint256 netSalary, + uint256 taxAmount, + uint256 platformFee, + uint256 yieldEarned + ) + { + uint256 gross = earned(employee); + if (gross == 0) return (0, 0, 0, 0); + Stream memory s = streams[employee]; + unchecked { + platformFee = (gross * platformFeePercent) / 100; + taxAmount = (gross * s.taxPercent) / 100; + netSalary = gross - platformFee - taxAmount; + } + yieldEarned = calculateYield(employee) + employeeYieldEarned[employee]; + } + + // ============================================ + // WITHDRAW + // ============================================ + + function withdrawSalary() external streamExists(msg.sender) noReentrant { + Stream storage s = streams[msg.sender]; + if (s.paused) revert StreamIsPaused(); + + uint256 gross = earned(msg.sender); + if (gross == 0) revert NothingToWithdraw(); + + uint256 _treasury = treasuryBalance; + if (_treasury < gross) revert InsufficientTreasury(); + + uint256 pFee; + uint256 tAmt; + uint256 net; + + unchecked { + pFee = (gross * platformFeePercent) / 100; + tAmt = (gross * s.taxPercent) / 100; + net = gross - pFee - tAmt; + treasuryBalance = _treasury - gross; + s.withdrawn += gross; + platformVault += pFee; + taxVault += tAmt; + } + + s.lastClaimTime = uint48(block.timestamp); + + bool success = token.transfer(msg.sender, net); + if (!success) revert TransferFailed(); + + emit SalaryWithdrawn(msg.sender, gross, net, tAmt, pFee); + } + + // ============================================ + // PLATFORM COLLECTION + // ============================================ + + function collectPlatformFees() external onlyPlatformOwner noReentrant { + uint256 amount = platformVault; + if (amount == 0) revert NoPlatformFees(); + platformVault = 0; + bool success = token.transfer(platformOwner, amount); + if (!success) revert TransferFailed(); + emit PlatformFeesCollected(platformOwner, amount); + } + + function collectTax() external onlyHR noReentrant { + uint256 amount = taxVault; + if (amount == 0) revert NoTaxToCollect(); + taxVault = 0; + bool success = token.transfer(hr, amount); + if (!success) revert TransferFailed(); + emit TaxCollected(hr, amount); + } + + // ============================================ + // ADMIN + // ============================================ + + function transferHR(address newHR) external onlyHR { + if (newHR == address(0)) revert ZeroAddress(); + if (newHR == hr) revert SameAddress(); + address oldHR = hr; + hr = newHR; + emit HRTransferred(oldHR, newHR); + } + + function transferPlatformOwner(address newOwner) external onlyPlatformOwner { + if (newOwner == address(0)) revert ZeroAddress(); + if (newOwner == platformOwner) revert SameAddress(); + address oldOwner = platformOwner; + platformOwner = newOwner; + emit PlatformOwnerTransferred(oldOwner, newOwner); + } + + function updatePlatformFee(uint256 newFeePercent) external onlyPlatformOwner { + if (newFeePercent > MAX_FEE_PERCENT) revert FeeExceedsMax(); + uint256 oldFee = platformFeePercent; + platformFeePercent = uint8(newFeePercent); + emit PlatformFeeUpdated(oldFee, newFeePercent); + } + + function updateDefaultTax(uint256 newTaxPercent) external onlyHR { + if (newTaxPercent > MAX_TAX_PERCENT) revert TaxExceedsMax(); + uint256 oldTax = defaultTaxPercent; + defaultTaxPercent = uint8(newTaxPercent); + emit DefaultTaxUpdated(oldTax, newTaxPercent); + } + + // ============================================ + // VIEW FUNCTIONS + // ============================================ + + function contractBalance() external view returns (uint256) { + return token.balanceOf(address(this)); + } + + function streamDetails(address employee) external view returns (Stream memory) { + return streams[employee]; + } + + function totalEmployees() external view returns (uint256) { + return employeeList.length; + } + + function getEmployee(uint256 index) external view returns (address) { + if (index >= employeeList.length) revert IndexOutOfBounds(); + return employeeList[index]; + } + + function totalLiability() external view returns (uint256) { + uint256 total; + uint256 len = employeeList.length; + for (uint256 i; i < len;) { + address emp = employeeList[i]; + Stream memory s = streams[emp]; + if (s.active && !s.paused) { + unchecked { + total += (block.timestamp - s.lastClaimTime) * s.salaryPerSecond; + } + } + unchecked { ++i; } + } + return total; + } + + function getScheduledBonusCount(address employee) external view returns (uint256) { + return _scheduledBonuses[employee].length; + } + + function getScheduledBonus( + address employee, + uint256 index + ) external view returns (uint256 amount, uint48 releaseTime, bool claimed, bool exists) { + uint256 len = _scheduledBonuses[employee].length; + if (index >= len) revert IndexOutOfBounds(); + ScheduledBonus storage b = _scheduledBonuses[employee][index]; + amount = b.amount; + releaseTime = b.releaseTime; + claimed = b.claimed; + exists = b.exists; + } + + function getPendingBonuses(address employee) + external + view + returns (uint256 totalPending, uint256 totalClaimable) + { + uint256 len = _scheduledBonuses[employee].length; + uint48 now_ = uint48(block.timestamp); + + for (uint256 i; i < len;) { + ScheduledBonus storage b = _scheduledBonuses[employee][i]; + if (b.exists && !b.claimed) { + totalPending += b.amount; + if (now_ >= b.releaseTime) { + totalClaimable += b.amount; + } + } + unchecked { ++i; } + } + } + + function getOffRampCount(address employee) external view returns (uint256) { + return _offRampRequests[employee].length; + } + + function getOffRampRequest( + address employee, + uint256 index + ) external view returns (uint256 amount, uint48 timestamp, uint8 currencyCode, bool processed, bool exists) { + uint256 len = _offRampRequests[employee].length; + if (index >= len) revert IndexOutOfBounds(); + OffRampRequest storage req = _offRampRequests[employee][index]; + amount = req.amount; + timestamp = req.timestamp; + currencyCode = req.currencyCode; + processed = req.processed; + exists = req.exists; + } + + function previewOffRamp( + uint256 amount, + uint8 currencyCode + ) external view returns (uint256 localAmount) { + if (currencyCode == 0 || currencyCode > 4) revert InvalidCurrencyCode(); + unchecked { + localAmount = (amount * exchangeRates[currencyCode]) / 1e24; + } + } + + function getCurrencyName(uint8 code) external pure returns (string memory) { + if (code == 1) return "INR"; + if (code == 2) return "USD"; + if (code == 3) return "EUR"; + if (code == 4) return "GBP"; + return "UNKNOWN"; + } + + // ============================================ + // DASHBOARD — Split into separate functions to avoid stack too deep + // ============================================ + + /// @notice Get employee salary info + function getEmployeeSalaryInfo(address employee) + external + view + returns ( + uint256 grossEarned, + uint256 netEarned, + uint256 taxAmount, + uint256 platformFee, + uint256 totalWithdrawn, + uint256 salaryPerSecond, + bool isActive, + bool isPaused + ) + { + Stream memory s = streams[employee]; + isActive = s.active; + isPaused = s.paused; + salaryPerSecond = s.salaryPerSecond; + totalWithdrawn = s.withdrawn; + + grossEarned = earned(employee); + if (grossEarned != 0) { + unchecked { + platformFee = (grossEarned * platformFeePercent) / 100; + taxAmount = (grossEarned * s.taxPercent) / 100; + netEarned = grossEarned - platformFee - taxAmount; + } + } + } + + /// @notice Get employee yield info + function getEmployeeYieldInfo(address employee) + external + view + returns ( + uint256 yieldPending, + uint256 yieldClaimable + ) + { + yieldPending = calculateYield(employee); + yieldClaimable = employeeYieldEarned[employee]; + } + + /// @notice Get employee bonus info + function getEmployeeBonusInfo(address employee) + external + view + returns ( + uint256 pendingBonuses, + uint256 claimableBonuses + ) + { + uint256 len = _scheduledBonuses[employee].length; + uint48 now_ = uint48(block.timestamp); + + for (uint256 i; i < len;) { + ScheduledBonus storage b = _scheduledBonuses[employee][i]; + if (b.exists && !b.claimed) { + pendingBonuses += b.amount; + if (now_ >= b.releaseTime) { + claimableBonuses += b.amount; + } + } + unchecked { ++i; } + } + } + + /// @notice Get HR dashboard — treasury and platform stats + function getHRDashboard() + external + view + returns ( + uint256 treasury, + uint256 totalTax, + uint256 totalPlatformFees, + uint256 totalYield, + uint256 liability, + uint256 employeeCount, + uint256 activeCount, + uint256 contractBal + ) + { + treasury = treasuryBalance; + totalTax = taxVault; + totalPlatformFees = platformVault; + totalYield = totalYieldGenerated; + contractBal = token.balanceOf(address(this)); + employeeCount = employeeList.length; + + for (uint256 i; i < employeeCount;) { + address emp = employeeList[i]; + Stream memory s = streams[emp]; + if (s.active) { + unchecked { ++activeCount; } + if (!s.paused) { + unchecked { + liability += (block.timestamp - s.lastClaimTime) * s.salaryPerSecond; + } + } + } + unchecked { ++i; } + } + } +} \ No newline at end of file diff --git a/Error/index.html b/Error/index.html new file mode 100644 index 000000000..64a8ca87d --- /dev/null +++ b/Error/index.html @@ -0,0 +1,13 @@ + + + + + + + paystream-ui + + +
+ + + diff --git a/Error/public/vite.svg b/Error/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/Error/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Error/src/App.css b/Error/src/App.css new file mode 100644 index 000000000..e3f529549 --- /dev/null +++ b/Error/src/App.css @@ -0,0 +1,124 @@ +:root { + --bg: #0f172a; + --card: #1e293b; + --primary: #6366f1; + --primary-dark: #4f46e5; + --text: #f8fafc; + --text-muted: #94a3b8; + --success: #10b981; + --danger: #ef4444; + --warning: #f59e0b; +} + +body { + background: var(--bg); + color: var(--text); + font-family: 'Inter', system-ui, sans-serif; + margin: 0; + -webkit-font-smoothing: antialiased; +} + +.container { max-width: 1100px; margin: 0 auto; padding: 20px; } + +/* Header */ +header { display: flex; justify-content: space-between; align-items: center; padding: 20px 0; margin-bottom: 40px; border-bottom: 1px solid #334155; } +.logo { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 1.5rem; } +.wallet-badge { background: var(--card); padding: 8px 16px; border-radius: 20px; display: flex; align-items: center; gap: 10px; border: 1px solid #334155; } +.role-tag { font-size: 0.8rem; font-weight: bold; padding: 2px 8px; border-radius: 4px; } +.role-tag.hr { background: rgba(99, 102, 241, 0.2); color: #818cf8; } +.role-tag.emp { background: rgba(16, 185, 129, 0.2); color: #34d399; } + +/* Buttons */ +button { cursor: pointer; border: none; border-radius: 8px; font-weight: 600; transition: 0.2s; display: flex; align-items: center; justify-content: center; } +.btn-primary { background: var(--primary); color: white; padding: 10px 20px; } +.btn-primary:hover { background: var(--primary-dark); } +.btn-success { background: var(--success); color: white; padding: 10px 20px; } +.btn-outline { background: transparent; border: 1px solid #475569; color: var(--text); padding: 10px 20px; } +.btn-outline:hover { border-color: var(--primary); } +.icon-btn { padding: 8px; background: var(--card); border: 1px solid #334155; color: var(--text-muted); } +.icon-btn:hover { color: var(--text); border-color: var(--text); } +.icon-btn.danger:hover { color: var(--danger); border-color: var(--danger); } +.small { padding: 6px 12px; font-size: 0.85rem; } +.large { padding: 12px 24px; font-size: 1rem; } + +/* Inputs */ +input { background: #020617; border: 1px solid #334155; color: white; padding: 10px 15px; border-radius: 6px; width: 100%; box-sizing: border-box; } +input:focus { outline: none; border-color: var(--primary); } + +/* Layout */ +.dashboard { display: flex; flex-direction: column; gap: 30px; } +.card { background: var(--card); padding: 25px; border-radius: 12px; border: 1px solid #334155; } +.stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } +.stat-card { background: var(--card); padding: 20px; border-radius: 12px; border: 1px solid #334155; } +.stat-card .label { color: var(--text-muted); font-size: 0.9rem; margin-bottom: 5px; } +.stat-card .value { font-size: 1.8rem; font-weight: 700; } +.grid-split { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } + +/* Tabs */ +.tabs { display: flex; gap: 10px; border-bottom: 1px solid #334155; padding-bottom: 10px; } +.tabs button { background: transparent; color: var(--text-muted); padding: 8px 16px; border-radius: 6px; } +.tabs button.active { background: var(--card); color: var(--text); font-weight: bold; } + +/* Table */ +table { width: 100%; border-collapse: collapse; margin-top: 15px; } +th { text-align: left; color: var(--text-muted); padding: 12px; border-bottom: 1px solid #334155; } +td { padding: 12px; border-bottom: 1px solid #334155; } +.mono { font-family: monospace; color: #94a3b8; } + +/* Status */ +.status { padding: 4px 8px; border-radius: 4px; font-size: 0.8rem; font-weight: bold; } +.status.active { background: rgba(16, 185, 129, 0.2); color: #34d399; } +.status.paused { background: rgba(245, 158, 11, 0.2); color: #fbbf24; } +.status.terminated { background: rgba(239, 68, 68, 0.2); color: #f87171; } + +/* Live Card */ +.live-card { background: linear-gradient(145deg, #1e293b, #0f172a); border: 1px solid var(--primary); padding: 40px; border-radius: 16px; text-align: center; } +.live-card .dot { height: 10px; width: 10px; background: var(--success); border-radius: 50%; display: inline-block; margin-right: 8px; box-shadow: 0 0 10px var(--success); } +.live-card .dot.red { background: var(--danger); box-shadow: 0 0 10px var(--danger); } +.live-card .header { color: var(--success); font-weight: bold; letter-spacing: 1px; margin-bottom: 20px; } +.live-card .amount { font-size: 4rem; font-weight: 800; line-height: 1; margin-bottom: 10px; } +.live-card .amount span { font-size: 1.5rem; color: var(--text-muted); } +.live-card .rate { color: var(--text-muted); margin-bottom: 30px; } +.live-card .actions { display: flex; justify-content: center; gap: 15px; } + +/* Modals */ +.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.8); display: flex; justify-content: center; align-items: center; z-index: 1000; } +.modal { background: var(--card); padding: 30px; border-radius: 12px; border: 1px solid var(--primary); width: 400px; max-width: 90%; position: relative; } +.close-btn { position: absolute; top: 15px; right: 15px; background: transparent; color: var(--text-muted); cursor: pointer; } +.item-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid #334155; } +.row-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } +.new-stream-box { display: flex; gap: 10px; } + +.hero { text-align: center; margin-top: 80px; } +.hero h1 { font-size: 3rem; margin-bottom: 10px; background: linear-gradient(to right, #6366f1, #a855f7); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } +/* Modal Styles */ +.modal-overlay { + position: fixed; top: 0; left: 0; right: 0; bottom: 0; + background: rgba(0,0,0,0.8); + display: flex; justify-content: center; align-items: center; + z-index: 1000; +} + +.modal { + background: var(--card); + padding: 30px; + border-radius: 12px; + border: 1px solid var(--primary); + width: 400px; + max-width: 90%; + position: relative; +} + +.close-btn { + position: absolute; top: 10px; right: 10px; + background: transparent; color: var(--text-muted); + font-size: 1.2rem; cursor: pointer; +} + +.item-row { + display: flex; justify-content: space-between; align-items: center; + padding: 10px; + border-bottom: 1px solid #334155; +} + +.small { padding: 5px 10px; font-size: 0.85rem; } \ No newline at end of file diff --git a/Error/src/App.jsx b/Error/src/App.jsx new file mode 100644 index 000000000..66b4b9df0 --- /dev/null +++ b/Error/src/App.jsx @@ -0,0 +1,752 @@ + +import React, { useState, useEffect, useCallback } from 'react'; +import { ethers } from 'ethers'; +import { + Wallet, Users, Landmark, Settings, Activity, Download, + Play, Pause, Ban, Coins, Gift, ArrowRightLeft, ShieldCheck, Percent, X, Repeat, Lock, Key +} from 'lucide-react'; +import './App.css'; +import { + PAYSTREAM_ADDRESS, PAYSTREAM_ABI, TOKEN_ADDRESS, TOKEN_ABI, HELA_CHAIN_ID +} from './config'; + +// Utility Helpers +const formatEth = (val) => val ? parseFloat(ethers.formatEther(val)).toFixed(4) : '0.0000'; +const parseEth = (val) => ethers.parseEther(val.toString()); +const formatDate = (ts) => new Date(Number(ts) * 1000).toLocaleString(); + +function App() { + const [contract, setContract] = useState(null); + const [tokenContract, setTokenContract] = useState(null); + const [account, setAccount] = useState(''); + const [role, setRole] = useState('employee'); // 'hr', 'owner', 'both', 'employee' + const [viewMode, setViewMode] = useState('employee'); // 'hr', 'dev', 'employee' + const [loading, setLoading] = useState(false); + const [devUnlocked, setDevUnlocked] = useState(false); // Password State + + const connectWallet = async () => { + if (!window.ethereum) return alert("Please install MetaMask"); + setLoading(true); + try { + const _provider = new ethers.BrowserProvider(window.ethereum); + const _signer = await _provider.getSigner(); + const _account = await _signer.getAddress(); + const { chainId } = await _provider.getNetwork(); + + if (Number(chainId) !== HELA_CHAIN_ID) { + try { + await window.ethereum.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: '0xA2D58' }], + }); + } catch (e) { + setLoading(false); + return alert("Please switch to HeLa Testnet (Chain ID 666888)"); + } + } + + const psContract = new ethers.Contract(PAYSTREAM_ADDRESS, PAYSTREAM_ABI, _signer); + const tokContract = new ethers.Contract(TOKEN_ADDRESS, TOKEN_ABI, _signer); + + setContract(psContract); + setTokenContract(tokContract); + setAccount(_account); + + } catch (err) { console.error(err); } + setLoading(false); + }; + + // Role Detection + useEffect(() => { + const checkRole = async () => { + if (!contract || !account) return; + try { + const hrAddr = (await contract.hr()).toLowerCase(); + const ownerAddr = (await contract.platformOwner()).toLowerCase(); + const user = account.toLowerCase(); + + if (user === hrAddr && user === ownerAddr) { + setRole('both'); + setViewMode('hr'); + } else if (user === hrAddr) { + setRole('hr'); + setViewMode('hr'); + } else if (user === ownerAddr) { + setRole('owner'); + setViewMode('dev'); + } else { + setRole('employee'); + setViewMode('employee'); + } + } catch (e) { console.error(e); } + }; + checkRole(); + }, [contract, account]); + + const switchView = () => { + if (viewMode === 'hr') { + setViewMode('dev'); + } else { + setViewMode('hr'); + setDevUnlocked(false); // Lock it again when leaving + } + } + + return ( +
+
+
+ + PayStream V2 +
+
+ {account ? ( +
+ {role === 'both' && ( + + )} +
+ + {viewMode === 'dev' ? '🛠️ Developer' : viewMode === 'hr' ? '👑 HR Admin' : '👷 Employee'} + + {account.slice(0, 6)}...{account.slice(-4)} +
+
+ ) : ( + + )} +
+
+ + {loading ?

Connecting...

: + !account ? ( +
+

Corporate Payroll Streaming

+

Real-time salary, bonuses, and yield on HeLa Chain.

+ +
+ ) : ( + <> + {viewMode === 'hr' && } + + {viewMode === 'dev' && ( + !devUnlocked ? + setDevUnlocked(true)} /> : + + )} + + {viewMode === 'employee' && } + + )} +
+ ); +} + +// ============================================ +// 🔒 DEVELOPER LOCK SCREEN +// ============================================ +function DevLockScreen({ onUnlock }) { + const [pass, setPass] = useState(''); + const [error, setError] = useState(false); + + const check = () => { + if(pass === 'admin123') { + onUnlock(); + } else { + setError(true); + setPass(''); + } + } + + return ( +
+
+ +

Developer Access

+

Restricted Area. Enter Admin Password.

+ {setPass(e.target.value); setError(false)}} + style={{textAlign:'center', fontSize:'1.2rem'}} + /> + {error &&

Incorrect Password

} + +
+
+ ) +} + +// ============================================ +// 👑 HR DASHBOARD (Payroll, Employees, Settings) +// ============================================ +function HRDashboard({ contract, tokenContract, account }) { + const [stats, setStats] = useState({}); + const [employees, setEmployees] = useState([]); + const [activeTab, setActiveTab] = useState('employees'); + const [selectedEmp, setSelectedEmp] = useState(null); + const [modalType, setModalType] = useState(''); + + // Settings State + const [offRampEnabled, setOffRampEnabled] = useState(true); + const [yieldRate, setYieldRate] = useState(0); + const [newYieldRate, setNewYieldRate] = useState(''); + const [exchangeRate, setExchangeRate] = useState(''); + + // Forms + const [depositAmt, setDepositAmt] = useState(''); + const [streamAddr, setStreamAddr] = useState(''); + const [streamRate, setStreamRate] = useState(''); + + const refreshData = useCallback(async () => { + if (!contract) return; + try { + const data = await contract.getHRDashboard(); + const _offRamp = await contract.offRampEnabled(); + const _yield = await contract.yieldRateBps(); + + setStats({ + treasury: formatEth(data.treasury), + taxVault: formatEth(data.totalTax), + employees: Number(data.employeeCount), + active: Number(data.activeCount), + }); + setOffRampEnabled(_offRamp); + setYieldRate(Number(_yield)); + + const empList = []; + for (let i = 0; i < Number(data.employeeCount); i++) { + const addr = await contract.employeeList(i); + const info = await contract.getEmployeeSalaryInfo(addr); + const streamData = await contract.streams(addr); + empList.push({ + address: addr, + rate: formatEth(info.salaryPerSecond), + earned: formatEth(info.grossEarned), + isActive: info.isActive, + isPaused: info.isPaused, + taxRate: Number(streamData.taxPercent) + }); + } + setEmployees(empList); + } catch (e) { console.error("HR Fetch Error:", e); } + }, [contract]); + + useEffect(() => { refreshData(); }, [refreshData]); + + // Actions + const handleDeposit = async () => { + try { + const amt = parseEth(depositAmt); + const tx1 = await tokenContract.approve(PAYSTREAM_ADDRESS, amt); await tx1.wait(); + const tx2 = await contract.deposit(amt); await tx2.wait(); + alert("Deposit Success"); refreshData(); + } catch (e) { alert(e.message); } + }; + + const startStream = async () => { + try { + const tx = await contract.startStream(streamAddr, parseEth(streamRate)); + await tx.wait(); alert("Stream Started"); refreshData(); + } catch (e) { alert(e.message); } + }; + + const terminateStream = async (empAddr) => { + if(!window.confirm("⚠️ Terminate Employee? This action cannot be undone.")) return; + try { + const tx = await contract.terminateEmployee(empAddr); + await tx.wait(); alert("Terminated"); refreshData(); + } catch(e) { alert(e.message); } + }; + + const collectTax = async () => { + try { + const tx = await contract.collectTax(); + await tx.wait(); alert("Tax Collected"); refreshData(); + } catch (e) { alert(e.message); } + } + + // Settings Actions + const toggleOffRamp = async () => { + try { + const tx = await contract.toggleOffRamp(); + await tx.wait(); alert("Toggled"); refreshData(); + } catch (e) { alert(e.message); } + } + + const updateYield = async () => { + try { + const tx = await contract.updateYieldRate(newYieldRate); + await tx.wait(); alert("Yield Updated"); refreshData(); + } catch (e) { alert(e.message); } + } + + const updateINR = async () => { + try { + const tx = await contract.updateExchangeRate(1, exchangeRate); + await tx.wait(); alert("Rate Updated"); + } catch (e) { alert(e.message); } + } + + const openModal = (empAddr, type) => { setSelectedEmp(empAddr); setModalType(type); } + + return ( +
+
+
+
Payroll Treasury
+
{stats.treasury || 0} HRS
+
+
+
Tax Vault
+
{stats.taxVault || 0} HRS
+
+
+
System Status
+
+ Off-Ramp: {offRampEnabled ? '✅' : '❌'} | Yield: {yieldRate} bps +
+
+
+ +
+ + + +
+ + {activeTab === 'employees' && ( +
+
+

Employee Management

+
+ setStreamAddr(e.target.value)} /> + setStreamRate(e.target.value)} style={{width:'80px'}} /> + +
+
+ + + + + + + + + + + + {employees.map(emp => ( + + + + + + + + ))} + +
AddressRateTax %StatusManage
{emp.address.slice(0,6)}...{emp.rate}{emp.taxRate}%{emp.isActive ? (emp.isPaused ? '⏸️' : '🟢') : '🔴'} + + + + + + {emp.isActive && ( + + )} +
+
+ )} + + {activeTab === 'treasury' && ( +
+

Treasury Operations

+
+ setDepositAmt(e.target.value)} /> + +
+
+ + +
+
+ )} + + {activeTab === 'settings' && ( +
+
+

Protocol Settings

+
+ +
+ {offRampEnabled ? "✅ ON" : "❌ OFF"} + +
+
+
+ +
+ setNewYieldRate(e.target.value)} style={{width:'70px'}}/> + +
+
+
+ +
+ setExchangeRate(e.target.value)} style={{width:'100px'}}/> + +
+
+
+
+ )} + + {selectedEmp && ( +
+
+ + {modalType === 'bonus' && } + {modalType === 'offramp' && } + {modalType === 'tax' && {setSelectedEmp(null); refreshData()}} />} +
+
+ )} +
+ ); +} + +// ============================================ +// 🛠️ DEVELOPER DASHBOARD (Platform Revenue Only) +// ============================================ +function DeveloperDashboard({ contract, account }) { + const [stats, setStats] = useState({}); + const [platformFee, setPlatformFee] = useState(0); + const [newFee, setNewFee] = useState(''); + + const refreshData = useCallback(async () => { + if (!contract) return; + try { + const data = await contract.getHRDashboard(); + const _pFee = await contract.platformFeePercent(); + + setStats({ platformVault: formatEth(data.totalPlatformFees) }); + setPlatformFee(Number(_pFee)); + } catch (e) { console.error("Dev Fetch Error:", e); } + }, [contract]); + + useEffect(() => { refreshData(); }, [refreshData]); + + const updatePlatformCharge = async () => { + try { + const tx = await contract.updatePlatformFee(newFee); + await tx.wait(); alert("Fee Updated"); refreshData(); + } catch (e) { alert(e.message); } + } + + const collectPlatformFees = async () => { + try { + const tx = await contract.collectPlatformFees(); + await tx.wait(); alert("Fees Collected"); refreshData(); + } catch (e) { alert(e.message); } + } + + return ( +
+
+

Platform Revenue

+

Manage platform fees charged on employee streams.

+ +
+
Current Fee Rate
+
{platformFee}%
+
+ +
+
+
Vault Balance
+
{stats.platformVault} HRS
+
+ +
+ +
+ + +
+ setNewFee(e.target.value)} /> + +
+
+
+ ); +} + +// ============================================ +// 👷 EMPLOYEE DASHBOARD +// ============================================ +function EmployeeDashboard({ contract, tokenContract, account }) { + const [data, setData] = useState(null); + const [liveEarned, setLiveEarned] = useState(0); + const [bonuses, setBonuses] = useState([]); + const [offRampAmt, setOffRampAmt] = useState(''); + const [loading, setLoading] = useState(true); + + const fetchData = useCallback(async () => { + if (!contract) return; + try { + const info = await contract.getEmployeeSalaryInfo(account); + const yieldInfo = await contract.getEmployeeYieldInfo(account); + + setData({ + rate: Number(ethers.formatEther(info.salaryPerSecond)), + gross: Number(ethers.formatEther(info.grossEarned)), + yield: formatEth(yieldInfo.yieldClaimable), + active: info.isActive, + paused: info.isPaused, + // FIX: Check salaryPerSecond instead of grossEarned to detect termination on zero-balance + terminated: !info.isActive && info.salaryPerSecond > 0n + }); + setLiveEarned(Number(ethers.formatEther(info.grossEarned))); + + const bCount = await contract.getScheduledBonusCount(account); + const bList = []; + for(let i=0; i { fetchData(); }, [fetchData]); + + useEffect(() => { + let interval; + if (data && data.active && !data.paused) { + interval = setInterval(() => { setLiveEarned(prev => prev + data.rate) }, 1000); + } + return () => clearInterval(interval); + }, [data]); + + const claimBonus = async (idx) => { + try { + const tx = await contract.claimScheduledBonus(idx); + await tx.wait(); alert("Bonus Claimed!"); fetchData(); + } catch(e) { alert(e.message); } + } + + const handleOffRamp = async () => { + try { + const amt = parseEth(offRampAmt); + const allow = await tokenContract.allowance(account, PAYSTREAM_ADDRESS); + if(allow < amt) { + const tx1 = await tokenContract.approve(PAYSTREAM_ADDRESS, amt); + await tx1.wait(); + } + const tx2 = await contract.requestOffRamp(amt, 1); + await tx2.wait(); alert("Request Sent"); + } catch(e) { alert(e.message); } + } + + if(loading) return

Loading Profile...

; + if(!data) return

Welcome! Ask HR to start a stream.

; + + return ( +
+ {data.terminated && ( +
+

+ ACCOUNT TERMINATED +

+

Stream stopped. You can withdraw remaining funds.

+
+ )} + +
+
{data.terminated ? 'FINAL BALANCE' : 'LIVE SALARY'}
+ + {/* STATUS INDICATOR */} +
+ Status: {data.terminated ? 'TERMINATED' : data.paused ? 'PAUSED' : 'ACTIVE STREAMING'} +
+ +
{liveEarned.toFixed(6)} HRS
+ {!data.terminated &&
Streaming Rate: {data.rate} HRS / sec
} + +
+ + +
+
+ +
+
+

Scheduled Bonuses

+ {bonuses.length === 0 &&

No bonuses found.

} + {bonuses.map(b => ( +
+
+
{b.amount} HRS
+
{new Date(b.time*1000).toLocaleString()}
+
+ {b.claimed ? Claimed : + (Date.now()/1000 > b.time) ? + : + Locked + } +
+ ))} +
+
+

Off-Ramp (Fiat)

+

Convert HRS to INR directly.

+
+ setOffRampAmt(e.target.value)} /> + +
+
+
+
+ ); +} + +// ---------------------------------------------------- +// MODAL COMPONENTS +// ---------------------------------------------------- +function HRTaxPanel({ contract, employee, onClose }) { + const [newTax, setNewTax] = useState(''); + const update = async () => { + try { + if(Number(newTax) > 50) return alert("Max tax is 50%"); + const tx = await contract.updateTax(employee, newTax); + await tx.wait(); alert("Tax Updated"); onClose(); + } catch(e) { alert(e.message); } + } + return ( +
+

Update Tax Rate

+

Employee: {employee.slice(0,8)}...

+ setNewTax(e.target.value)} type="number" /> + +
+ ) +} + +function HRBonusPanel({ contract, employee }) { + const [bonuses, setBonuses] = useState([]); + const [amount, setAmount] = useState(''); + const [delayMin, setDelayMin] = useState(''); + + const load = async () => { + const count = await contract.getScheduledBonusCount(employee); + const list = []; + for(let i=0; i{load()}, [employee]); + + const schedule = async () => { + try { + const releaseTime = Math.floor(Date.now()/1000) + (Number(delayMin)*60); + const tx = await contract.scheduleBonus(employee, parseEth(amount), releaseTime); + await tx.wait(); alert("Scheduled"); load(); + } catch(e) { alert(e.message); } + } + + const cancel = async (idx) => { + try { + const tx = await contract.cancelScheduledBonus(employee, idx); + await tx.wait(); alert("Cancelled"); load(); + } catch(e) { alert(e.message); } + } + + return ( +
+

Manage Bonuses

+
+
+ setAmount(e.target.value)} style={{flex:1}}/> + setDelayMin(e.target.value)} style={{flex:1}}/> +
+ +
+
+ {bonuses.length === 0 &&

No active bonuses

} + {bonuses.map(b => ( +
+
{b.amount} HRS
{formatDate(b.time)}
+ {b.claimed ? Claimed : } +
+ ))} +
+
+ ) +} + +function HROffRampPanel({ contract, employee }) { + const [requests, setRequests] = useState([]); + + const load = async () => { + const count = await contract.getOffRampCount(employee); + const list = []; + for(let i=0; i{load()}, [employee]); + + const process = async (idx) => { + try { + const tx = await contract.processOffRamp(employee, idx); + await tx.wait(); alert("Processed"); load(); + } catch(e) { alert(e.message); } + } + + return ( +
+

Off-Ramp Requests

+ {requests.length === 0 &&

No requests found.

} +
+ {requests.map(r => ( +
+
{r.amount} HRS
{r.currency === 1n ? '🇮🇳 INR' : '💵 Fiat'}
+ {r.processed ? Processed : } +
+ ))} +
+
+ ) +} + +export default App; \ No newline at end of file diff --git a/Error/src/assets/react.svg b/Error/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/Error/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Error/src/config.js b/Error/src/config.js new file mode 100644 index 000000000..c3bbfabcf --- /dev/null +++ b/Error/src/config.js @@ -0,0 +1,71 @@ +// src/config.js +export const HELA_CHAIN_ID = 666888; +export const HELA_RPC_URL = "https://testnet-rpc.helachain.com"; + +// 👇 REPLACE WITH YOUR ADDRESSES 👇 +export const PAYSTREAM_ADDRESS = "0x5E40Fe27d3CA6BD463A408ff94c98259C03C3742"; +export const TOKEN_ADDRESS = "0x982961771df729EB5acACd59c0daA4CB797a4F3D"; + +export const TOKEN_ABI = [ + "function balanceOf(address) view returns (uint256)", + "function decimals() view returns (uint8)", + "function symbol() view returns (string)", + "function approve(address spender, uint256 value) returns (bool)", + "function allowance(address owner, address spender) view returns (uint256)", + "function transfer(address to, uint256 amount) returns (bool)", + "function mint(address to, uint256 amount)" +]; + +export const PAYSTREAM_ABI = [ + // --- READ FUNCTIONS --- + "function hr() view returns (address)", + "function platformOwner() view returns (address)", + "function offRampEnabled() view returns (bool)", + "function yieldRateBps() view returns (uint16)", + "function platformFeePercent() view returns (uint8)", + "function defaultTaxPercent() view returns (uint8)", + "function exchangeRates(uint8) view returns (uint256)", + + // Dashboard Data + "function getHRDashboard() view returns (uint256 treasury, uint256 totalTax, uint256 totalPlatformFees, uint256 totalYield, uint256 liability, uint256 employeeCount, uint256 activeCount, uint256 contractBal)", + "function getEmployeeSalaryInfo(address) view returns (uint256 grossEarned, uint256 netEarned, uint256 taxAmount, uint256 platformFee, uint256 totalWithdrawn, uint256 salaryPerSecond, bool isActive, bool isPaused)", + "function getEmployeeYieldInfo(address) view returns (uint256 yieldPending, uint256 yieldClaimable)", + "function getEmployeeBonusInfo(address) view returns (uint256 pendingBonuses, uint256 claimableBonuses)", + + // Lists & Maps + "function employeeList(uint256) view returns (address)", + "function streams(address) view returns (uint256 salaryPerSecond, uint48 startTime, uint48 lastClaimTime, uint8 taxPercent, bool active, bool paused, uint256 withdrawn)", + "function getScheduledBonusCount(address) view returns (uint256)", + "function getScheduledBonus(address, uint256) view returns (uint256 amount, uint48 releaseTime, bool claimed, bool exists)", + "function getOffRampCount(address) view returns (uint256)", + "function getOffRampRequest(address, uint256) view returns (uint256 amount, uint48 timestamp, uint8 currencyCode, bool processed, bool exists)", + + // --- WRITE FUNCTIONS (HR) --- + "function deposit(uint256 amount)", + "function startStream(address employee, uint256 salaryPerSecond)", + "function updateSalary(address employee, uint256 newRate)", + "function terminateEmployee(address employee)", + "function pauseStream(address employee)", + "function resumeStream(address employee)", + "function updateTax(address employee, uint256 newTaxPercent)", + "function collectTax()", + + // Bonus & Off-Ramp (HR) + "function scheduleBonus(address employee, uint256 amount, uint48 releaseTime)", + "function cancelScheduledBonus(address employee, uint256 bonusIndex)", + "function distributeYield(address employee)", + "function updateExchangeRate(uint8 currencyCode, uint256 rate)", + "function toggleOffRamp()", + "function processOffRamp(address employee, uint256 requestIndex)", + + // --- WRITE FUNCTIONS (PLATFORM OWNER) --- + "function collectPlatformFees()", + "function updatePlatformFee(uint256 newFeePercent)", + "function updateYieldRate(uint16 newRateBps)", + + // --- WRITE FUNCTIONS (EMPLOYEE) --- + "function withdrawSalary()", + "function claimYield()", + "function claimScheduledBonus(uint256 bonusIndex)", + "function requestOffRamp(uint256 amount, uint8 currencyCode)" +]; \ No newline at end of file diff --git a/Error/src/index.css b/Error/src/index.css new file mode 100644 index 000000000..08a3ac9e1 --- /dev/null +++ b/Error/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/Error/src/main.jsx b/Error/src/main.jsx new file mode 100644 index 000000000..b9a1a6dea --- /dev/null +++ b/Error/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/Error/vite.config.js b/Error/vite.config.js new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/Error/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/Nexus/paystream-main/.env.example b/Nexus/paystream-main/.env.example new file mode 100644 index 000000000..0cd5fb853 --- /dev/null +++ b/Nexus/paystream-main/.env.example @@ -0,0 +1,5 @@ +# Private key for deployment (without 0x prefix) +PRIVATE_KEY=your_private_key_here + +# HeLa Testnet RPC URL +HELA_RPC_URL=https://testnet-rpc.helachain.com diff --git a/Nexus/paystream-main/.gitignore b/Nexus/paystream-main/.gitignore new file mode 100644 index 000000000..3be144499 --- /dev/null +++ b/Nexus/paystream-main/.gitignore @@ -0,0 +1,7 @@ +node_modules +.env +cache +artifacts +typechain-types +coverage +coverage.json diff --git a/Nexus/paystream-main/README.md b/Nexus/paystream-main/README.md new file mode 100644 index 000000000..033d84cd3 --- /dev/null +++ b/Nexus/paystream-main/README.md @@ -0,0 +1,82 @@ +# 🌊 PayStream: Decentralized Payroll Streaming + +**PayStream** is a decentralized payroll application built on the **HeLa Testnet** that enables employers to stream salaries to employees in real-time. Instead of monthly paychecks, employees earn their salary second-by-second and can withdraw their earnings instantly. The system features a dual-dashboard interface (HR Admin & Employee Portal), automatic tax deduction routing, and support for bonuses, all powered by native HLUSD. + +## 🚀 Quick Start + +### Prerequisites +- Node.js (v18+) +- MetaMask Wallet (configured for HeLa Testnet) +- Native HLUSD (for gas and funding) + +### 1. Clone & Install +```bash +git clone https://github.com/KB156/paystream.git +cd paystream +npm install +``` + +### 2. Configure Environment +Create a `.env` file in the root directory (see `.env.example`): +```env +PRIVATE_KEY=your_wallet_private_key +HELA_RPC_URL=https://testnet-rpc.helachain.com +``` + +### 3. Deploy Contracts (Optional) +If you want to deploy your own instances: +```bash +npx hardhat run scripts/deploy.js --network hela +``` + +### 4. Run Frontend +```bash +cd frontend/paystream-app +npm install +npm run dev +``` +Open [http://localhost:5173](http://localhost:5173) to view the app. + +--- + +## 🔗 Deployment Details (HeLa Testnet) + +**Date**: Feb 15, 2026 +**Chain ID**: `666888` (0xA2D08) + +| Contract | Address | +|----------|---------| +| **PayStream** | \`0xc582Bc0317dbb0908203541971a358c44b1F3766\` | +| **TaxVault** | \`0xe1Fd27F4390DcBE165f4D60DBF821e4B9Bb02dEd\` | + +--- + +## 📜 Example Transactions + +Here are 3 example transactions showcasing the core lifecycle of the PayStream protocol on HeLa Testnet: + +1. **Fund Treasury** (Employer depositing Native HLUSD) + [0x304302f35055e42cd8525fe5d2ce8d88481edf8323ccc6253273086a952f58ee](https://testnet-blockexplorer.helachain.com/tx/0x304302f35055e42cd8525fe5d2ce8d88481edf8323ccc6253273086a952f58ee) + +2. **Create Stream** (Employer starting a salary stream) + [0xa6beec83a9266ac6d75de47eb8d6a54ead949b6e546a619722dab4dd4e82d46b](https://testnet-blockexplorer.helachain.com/tx/0xa6beec83a9266ac6d75de47eb8d6a54ead949b6e546a619722dab4dd4e82d46b) + +3. **Withdraw** (Employee claiming accrued earnings) + [0x97a390d24068f66eb406ab9ab5eb733e4f9a092c7f6e41240c691728aa98ae4b](https://testnet-blockexplorer.helachain.com/tx/0x97a390d24068f66eb406ab9ab5eb733e4f9a092c7f6e41240c691728aa98ae4b) + +--- + +## 🛠 Tech Stack +- **Smart Contracts**: Solidity, Hardhat +- **Frontend**: React, Vite, Tailwind CSS, Ethers.js +- **Auth**: Clerk (Mock/Demo Mode) +- **Network**: HeLa Testnet (Native HLUSD) + +--- + +## 📚 Resources + +- **Contract Code**: [contracts/](contracts/) +- **Tests**: [contracts/test/](contracts/test/) +- **Frontend Code**: [frontend/](frontend/) +- **Live Demo**: [https://paystream-amo9-5rfexpbbh-krish-bhagat-s-projects.vercel.app/] diff --git a/Nexus/paystream-main/contracts/PayStream.sol b/Nexus/paystream-main/contracts/PayStream.sol new file mode 100644 index 000000000..f3f5c3312 --- /dev/null +++ b/Nexus/paystream-main/contracts/PayStream.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +contract BadPayStream { + + uint256 public randomNumber; + address public lastCaller; + uint256 public totalStreams; + + struct FakeStream { + address who; + uint256 rate; + bool alive; + } + + FakeStream[] public streams; + + function createSomething(uint256 x) public { + streams.push(FakeStream(msg.sender, x, true)); + totalStreams++; + randomNumber = x; + } + + function changeNumber(uint256 x) public { + randomNumber = randomNumber + x - x + 1; + } + + function killStream(uint256 id) public { + if (id < streams.length) { + streams[id].alive = false; + } + } + + function uselessWithdraw() public { + lastCaller = msg.sender; + } + + function getStream(uint256 id) public view returns (FakeStream memory) { + return streams[id]; + } + + function doNothing() public pure returns (uint256) { + return 42; + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/contracts/TaxVault.sol b/Nexus/paystream-main/contracts/TaxVault.sol new file mode 100644 index 000000000..f7ebc91c8 --- /dev/null +++ b/Nexus/paystream-main/contracts/TaxVault.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +contract VeryBadTaxVault { + + address public owner; + uint256 public storedNumber; + uint256 public totalDeposits; + bool public randomFlag; + + event SomethingHappened(address who, uint256 amount); + event RandomEvent(uint256 number); + + constructor(address _someone) { + owner = _someone; + storedNumber = 123; + randomFlag = true; + } + + function deposit() external payable { + totalDeposits += msg.value; + storedNumber = storedNumber + msg.value - msg.value + 1; + emit SomethingHappened(msg.sender, msg.value); + } + + function withdraw(address payable to, uint256 amount) external { + // no owner check 😈 + if (address(this).balance >= amount) { + to.transfer(amount); + storedNumber++; + emit SomethingHappened(to, amount); + } + } + + function flipFlag() external { + randomFlag = !randomFlag; + storedNumber = storedNumber * 2; + emit RandomEvent(storedNumber); + } + + function changeOwner(address newOwner) external { + owner = newOwner; // anyone can change owner lol + } + + function uselessMath(uint256 a) external pure returns (uint256) { + return a + 1 - 1 + a - a + 999; + } + + function getBalanceButWrong() external view returns (uint256) { + return storedNumber; // not real balance + } + + receive() external payable { + storedNumber++; + totalDeposits++; + emit SomethingHappened(msg.sender, msg.value); + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/employee-portal/dist/assets/addresses-BwW-EkRO.js b/Nexus/paystream-main/frontend/employee-portal/dist/assets/addresses-BwW-EkRO.js new file mode 100644 index 000000000..5f664b43b --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/dist/assets/addresses-BwW-EkRO.js @@ -0,0 +1 @@ +const t="0x0000000000000000000000000000000000000000",e="0x0000000000000000000000000000000000000000",o="0x0000000000000000000000000000000000000000",a="localhost",s="0x0000000000000000000000000000000000000000",n="2024-01-01T00:00:00.000Z",c={token:t,taxVault:e,payStream:o,network:a,deployer:s,timestamp:n};export{c as default,s as deployer,a as network,o as payStream,e as taxVault,n as timestamp,t as token}; diff --git a/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-D2a-OOQO.css b/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-D2a-OOQO.css new file mode 100644 index 000000000..30d62ee01 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-D2a-OOQO.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap";*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--bg-primary: #0a0a12;--bg-secondary: #12121f;--bg-card: rgba(20, 20, 40, .6);--bg-input: rgba(15, 15, 30, .8);--glass-border: rgba(100, 100, 180, .15);--glass-shadow: 0 8px 32px rgba(0, 0, 0, .4);--glass-blur: 16px;--gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6, #a855f7);--gradient-accent: linear-gradient(135deg, #818cf8, #c084fc);--gradient-success: linear-gradient(135deg, #10b981, #34d399);--gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(99, 102, 241, .08) 0%, transparent 50%), radial-gradient(ellipse at 80% 20%, rgba(168, 85, 247, .06) 0%, transparent 50%), radial-gradient(ellipse at 50% 80%, rgba(139, 92, 246, .04) 0%, transparent 50%);--text-primary: #f1f5f9;--text-secondary: #94a3b8;--text-muted: #64748b;--text-accent: #a5b4fc;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-full: 9999px;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-base: .25s cubic-bezier(.4, 0, .2, 1)}html{font-size:16px;-webkit-font-smoothing:antialiased}body{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;line-height:1.6}#root{min-height:100vh;background:var(--gradient-bg)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#6464b44d;border-radius:3px}.app-container{max-width:800px;margin:0 auto;padding:2rem 1.5rem}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--glass-border)}.header-brand{display:flex;align-items:center;gap:.75rem}.header-logo{width:42px;height:42px;background:var(--gradient-primary);border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;font-size:1.25rem;font-weight:800;box-shadow:0 4px 15px #6366f14d}.header-title{font-size:1.5rem;font-weight:700;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.header-subtitle{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;font-weight:600}.btn-connect{display:flex;align-items:center;gap:.5rem;padding:.65rem 1.25rem;background:var(--gradient-primary);border:none;border-radius:var(--radius-full);color:#fff;font-family:inherit;font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--transition-base);box-shadow:0 4px 15px #6366f14d}.btn-connect:hover{transform:translateY(-2px);box-shadow:0 6px 25px #6366f173}.btn-connect.connected{background:var(--bg-card);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.wallet-dot{width:8px;height:8px;border-radius:50%;background:#34d399;box-shadow:0 0 8px #34d39980;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.2)}}.glass-card{background:var(--bg-card);backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-xl);padding:2rem;box-shadow:var(--glass-shadow);margin-bottom:1.5rem}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.card-title{font-size:1.1rem;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:.5rem}.earnings-card{text-align:center;padding:3rem 2rem;position:relative;overflow:hidden}.earnings-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:var(--gradient-primary)}.earnings-label{font-size:.8rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:1rem}.earnings-value{font-size:3.5rem;font-weight:900;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1.1;transition:all .1s ease;font-variant-numeric:tabular-nums}.earnings-token{font-size:1.2rem;color:var(--text-secondary);margin-top:.5rem;font-weight:600}.earnings-rate{font-size:.8rem;color:var(--text-muted);margin-top:.5rem}.btn-withdraw{width:100%;padding:1rem 2rem;background:var(--gradient-success);border:none;border-radius:var(--radius-lg);color:#fff;font-family:inherit;font-size:1.1rem;font-weight:700;cursor:pointer;transition:all var(--transition-base);box-shadow:0 4px 20px #10b9814d;margin-top:1.5rem}.btn-withdraw:hover:not(:disabled){transform:translateY(-3px);box-shadow:0 8px 30px #10b98173}.btn-withdraw:disabled{opacity:.5;cursor:not-allowed;transform:none}.stream-card{border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:1.25rem;transition:all var(--transition-base);background:#0f0f2366;margin-bottom:.75rem}.stream-card:hover{border-color:#6464b440;background:#14142d80}.stream-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.stream-id{font-size:.85rem;font-weight:700;color:var(--text-accent)}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:var(--radius-full);font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.badge-active{background:#10b9811f;color:#34d399;border:1px solid rgba(16,185,129,.2)}.badge-active:before{content:"";width:5px;height:5px;border-radius:50%;background:#34d399;animation:pulse-dot 2s ease-in-out infinite}.badge-inactive{background:#ef44441a;color:#f87171;border:1px solid rgba(239,68,68,.15)}.stream-details{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.stream-detail-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.stream-detail-value{font-size:.9rem;font-weight:600;color:var(--text-primary)}.stream-accrued{background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}.not-connected{text-align:center;padding:5rem 2rem}.not-connected-icon{font-size:4rem;margin-bottom:1rem;animation:float 3s ease-in-out infinite}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.not-connected h2{font-size:1.5rem;font-weight:700;margin-bottom:.5rem}.not-connected p{color:var(--text-secondary);margin-bottom:1.5rem}.empty-state{text-align:center;padding:3rem;color:var(--text-muted)}.empty-state-icon{font-size:3rem;margin-bottom:.75rem;opacity:.5}.empty-state-text{font-size:.95rem;font-weight:500}.spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 640px){.app-container{padding:1rem}.header{flex-direction:column;gap:1rem}.earnings-value{font-size:2.5rem}.stream-details{grid-template-columns:1fr}} diff --git a/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-DV1Of4Ja.js b/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-DV1Of4Ja.js new file mode 100644 index 000000000..21ab10c7d --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/dist/assets/index-DV1Of4Ja.js @@ -0,0 +1,40 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();function My(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Fh={exports:{}},pa={},Dh={exports:{}},K={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Is=Symbol.for("react.element"),_y=Symbol.for("react.portal"),zy=Symbol.for("react.fragment"),Hy=Symbol.for("react.strict_mode"),Gy=Symbol.for("react.profiler"),Qy=Symbol.for("react.provider"),Vy=Symbol.for("react.context"),jy=Symbol.for("react.forward_ref"),Ky=Symbol.for("react.suspense"),Jy=Symbol.for("react.memo"),Wy=Symbol.for("react.lazy"),mf=Symbol.iterator;function Zy(t){return t===null||typeof t!="object"?null:(t=mf&&t[mf]||t["@@iterator"],typeof t=="function"?t:null)}var Mh={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_h=Object.assign,zh={};function ki(t,e,n){this.props=t,this.context=e,this.refs=zh,this.updater=n||Mh}ki.prototype.isReactComponent={};ki.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};ki.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Hh(){}Hh.prototype=ki.prototype;function Xu(t,e,n){this.props=t,this.context=e,this.refs=zh,this.updater=n||Mh}var $u=Xu.prototype=new Hh;$u.constructor=Xu;_h($u,ki.prototype);$u.isPureReactComponent=!0;var gf=Array.isArray,Gh=Object.prototype.hasOwnProperty,qu={current:null},Qh={key:!0,ref:!0,__self:!0,__source:!0};function Vh(t,e,n){var r,i={},s=null,o=null;if(e!=null)for(r in e.ref!==void 0&&(o=e.ref),e.key!==void 0&&(s=""+e.key),e)Gh.call(e,r)&&!Qh.hasOwnProperty(r)&&(i[r]=e[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,X=C[J];if(0>>1;Ji(Ht,M))lti(ut,Ht)?(C[J]=ut,C[lt]=M,J=lt):(C[J]=Ht,C[De]=M,J=De);else if(lti(ut,M))C[J]=ut,C[lt]=M,J=lt;else break e}}return B}function i(C,B){var M=C.sortIndex-B.sortIndex;return M!==0?M:C.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var s=performance;t.unstable_now=function(){return s.now()}}else{var o=Date,a=o.now();t.unstable_now=function(){return o.now()-a}}var l=[],u=[],f=1,c=null,d=3,y=!1,v=!1,m=!1,A=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,p=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g(C){for(var B=n(u);B!==null;){if(B.callback===null)r(u);else if(B.startTime<=C)r(u),B.sortIndex=B.expirationTime,e(l,B);else break;B=n(u)}}function E(C){if(m=!1,g(C),!v)if(n(l)!==null)v=!0,F(x);else{var B=n(u);B!==null&&G(E,B.startTime-C)}}function x(C,B){v=!1,m&&(m=!1,h(k),k=-1),y=!0;var M=d;try{for(g(B),c=n(l);c!==null&&(!(c.expirationTime>B)||C&&!H());){var J=c.callback;if(typeof J=="function"){c.callback=null,d=c.priorityLevel;var X=J(c.expirationTime<=B);B=t.unstable_now(),typeof X=="function"?c.callback=X:c===n(l)&&r(l),g(B)}else r(l);c=n(l)}if(c!==null)var at=!0;else{var De=n(u);De!==null&&G(E,De.startTime-B),at=!1}return at}finally{c=null,d=M,y=!1}}var b=!1,P=null,k=-1,_=5,R=-1;function H(){return!(t.unstable_now()-R<_)}function ae(){if(P!==null){var C=t.unstable_now();R=C;var B=!0;try{B=P(!0,C)}finally{B?fe():(b=!1,P=null)}}else b=!1}var fe;if(typeof p=="function")fe=function(){p(ae)};else if(typeof MessageChannel<"u"){var ot=new MessageChannel,T=ot.port2;ot.port1.onmessage=ae,fe=function(){T.postMessage(null)}}else fe=function(){A(ae,0)};function F(C){P=C,b||(b=!0,fe())}function G(C,B){k=A(function(){C(t.unstable_now())},B)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(C){C.callback=null},t.unstable_continueExecution=function(){v||y||(v=!0,F(x))},t.unstable_forceFrameRate=function(C){0>C||125J?(C.sortIndex=M,e(u,C),n(l)===null&&C===n(u)&&(m?(h(k),k=-1):m=!0,G(E,M-J))):(C.sortIndex=X,e(l,C),v||y||(v=!0,F(x))),C},t.unstable_shouldYield=H,t.unstable_wrapCallback=function(C){var B=d;return function(){var M=d;d=B;try{return C.apply(this,arguments)}finally{d=M}}}})(Zh);Wh.exports=Zh;var a0=Wh.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var l0=Xe,gt=a0;function N(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Dl=Object.prototype.hasOwnProperty,u0=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wf={},vf={};function c0(t){return Dl.call(vf,t)?!0:Dl.call(wf,t)?!1:u0.test(t)?vf[t]=!0:(wf[t]=!0,!1)}function f0(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function d0(t,e,n,r){if(e===null||typeof e>"u"||f0(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function Ye(t,e,n,r,i,s,o){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=s,this.removeEmptyString=o}var Fe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){Fe[t]=new Ye(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];Fe[e]=new Ye(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){Fe[t]=new Ye(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){Fe[t]=new Ye(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){Fe[t]=new Ye(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){Fe[t]=new Ye(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){Fe[t]=new Ye(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){Fe[t]=new Ye(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){Fe[t]=new Ye(t,5,!1,t.toLowerCase(),null,!1,!1)});var tc=/[\-:]([a-z])/g;function nc(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(tc,nc);Fe[e]=new Ye(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(tc,nc);Fe[e]=new Ye(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(tc,nc);Fe[e]=new Ye(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){Fe[t]=new Ye(t,1,!1,t.toLowerCase(),null,!1,!1)});Fe.xlinkHref=new Ye("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){Fe[t]=new Ye(t,1,!1,t.toLowerCase(),null,!0,!0)});function rc(t,e,n,r){var i=Fe.hasOwnProperty(e)?Fe[e]:null;(i!==null?i.type!==0:r||!(2a||i[o]!==s[a]){var l=` +`+i[o].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=o&&0<=a);break}}}finally{Ja=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?zi(t):""}function h0(t){switch(t.tag){case 5:return zi(t.type);case 16:return zi("Lazy");case 13:return zi("Suspense");case 19:return zi("SuspenseList");case 0:case 2:case 15:return t=Wa(t.type,!1),t;case 11:return t=Wa(t.type.render,!1),t;case 1:return t=Wa(t.type,!0),t;default:return""}}function Hl(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case _r:return"Fragment";case Mr:return"Portal";case Ml:return"Profiler";case ic:return"StrictMode";case _l:return"Suspense";case zl:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case $h:return(t.displayName||"Context")+".Consumer";case Xh:return(t._context.displayName||"Context")+".Provider";case sc:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case oc:return e=t.displayName||null,e!==null?e:Hl(t.type)||"Memo";case Nn:e=t._payload,t=t._init;try{return Hl(t(e))}catch{}}return null}function p0(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Hl(e);case 8:return e===ic?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Qn(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function ep(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function m0(t){var e=ep(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,s=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(o){r=""+o,s.call(this,o)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Js(t){t._valueTracker||(t._valueTracker=m0(t))}function tp(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=ep(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function Lo(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function Gl(t,e){var n=e.checked;return ge({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function Ef(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=Qn(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function np(t,e){e=e.checked,e!=null&&rc(t,"checked",e,!1)}function Ql(t,e){np(t,e);var n=Qn(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?Vl(t,e.type,n):e.hasOwnProperty("defaultValue")&&Vl(t,e.type,Qn(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function xf(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function Vl(t,e,n){(e!=="number"||Lo(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var Hi=Array.isArray;function qr(t,e,n,r){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=Ws.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function ss(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var Ki={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},g0=["Webkit","ms","Moz","O"];Object.keys(Ki).forEach(function(t){g0.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),Ki[e]=Ki[t]})});function op(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||Ki.hasOwnProperty(t)&&Ki[t]?(""+e).trim():e+"px"}function ap(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=op(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,i):t[n]=i}}var y0=ge({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Jl(t,e){if(e){if(y0[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(N(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(N(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(N(61))}if(e.style!=null&&typeof e.style!="object")throw Error(N(62))}}function Wl(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Zl=null;function ac(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var Yl=null,ei=null,ti=null;function Sf(t){if(t=Os(t)){if(typeof Yl!="function")throw Error(N(280));var e=t.stateNode;e&&(e=va(e),Yl(t.stateNode,t.type,e))}}function lp(t){ei?ti?ti.push(t):ti=[t]:ei=t}function up(){if(ei){var t=ei,e=ti;if(ti=ei=null,Sf(t),e)for(t=0;t>>=0,t===0?32:31-(C0(t)/T0|0)|0}var Zs=64,Ys=4194304;function Gi(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Mo(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,i=t.suspendedLanes,s=t.pingedLanes,o=n&268435455;if(o!==0){var a=o&~i;a!==0?r=Gi(a):(s&=o,s!==0&&(r=Gi(s)))}else o=n&~i,o!==0?r=Gi(o):s!==0&&(r=Gi(s));if(r===0)return 0;if(e!==0&&e!==r&&!(e&i)&&(i=r&-r,s=e&-e,i>=s||i===16&&(s&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function Rs(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-Dt(e),t[e]=n}function O0(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=Wi),Lf=" ",Uf=!1;function Tp(t,e){switch(t){case"keyup":return aw.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ip(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var zr=!1;function uw(t,e){switch(t){case"compositionend":return Ip(e);case"keypress":return e.which!==32?null:(Uf=!0,Lf);case"textInput":return t=e.data,t===Lf&&Uf?null:t;default:return null}}function cw(t,e){if(zr)return t==="compositionend"||!mc&&Tp(t,e)?(t=Np(),Eo=dc=Bn=null,zr=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=_f(n)}}function Lp(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Lp(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Up(){for(var t=window,e=Lo();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=Lo(t.document)}return e}function gc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function vw(t){var e=Up(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&Lp(n.ownerDocument.documentElement,n)){if(r!==null&&gc(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=n.textContent.length,s=Math.min(r.start,i);r=r.end===void 0?s:Math.min(r.end,i),!t.extend&&s>r&&(i=r,r=s,s=i),i=zf(n,s);var o=zf(n,r);i&&o&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==o.node||t.focusOffset!==o.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),s>r?(t.addRange(e),t.extend(o.node,o.offset)):(e.setEnd(o.node,o.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Hr=null,nu=null,Yi=null,ru=!1;function Hf(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ru||Hr==null||Hr!==Lo(r)||(r=Hr,"selectionStart"in r&&gc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Yi&&fs(Yi,r)||(Yi=r,r=Ho(nu,"onSelect"),0Vr||(t.current=uu[Vr],uu[Vr]=null,Vr--)}function re(t,e){Vr++,uu[Vr]=t.current,t.current=e}var Vn={},He=Jn(Vn),nt=Jn(!1),vr=Vn;function fi(t,e){var n=t.type.contextTypes;if(!n)return Vn;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var i={},s;for(s in n)i[s]=e[s];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function rt(t){return t=t.childContextTypes,t!=null}function Qo(){oe(nt),oe(He)}function Wf(t,e,n){if(He.current!==Vn)throw Error(N(168));re(He,e),re(nt,n)}function Vp(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in e))throw Error(N(108,p0(t)||"Unknown",i));return ge({},n,r)}function Vo(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||Vn,vr=He.current,re(He,t),re(nt,nt.current),!0}function Zf(t,e,n){var r=t.stateNode;if(!r)throw Error(N(169));n?(t=Vp(t,e,vr),r.__reactInternalMemoizedMergedChildContext=t,oe(nt),oe(He),re(He,t)):oe(nt),re(nt,n)}var en=null,Aa=!1,ll=!1;function jp(t){en===null?en=[t]:en.push(t)}function Rw(t){Aa=!0,jp(t)}function Wn(){if(!ll&&en!==null){ll=!0;var t=0,e=ee;try{var n=en;for(ee=1;t>=o,i-=o,sn=1<<32-Dt(e)+i|n<k?(_=P,P=null):_=P.sibling;var R=d(h,P,g[k],E);if(R===null){P===null&&(P=_);break}t&&P&&R.alternate===null&&e(h,P),p=s(R,p,k),b===null?x=R:b.sibling=R,b=R,P=_}if(k===g.length)return n(h,P),ue&&er(h,k),x;if(P===null){for(;kk?(_=P,P=null):_=P.sibling;var H=d(h,P,R.value,E);if(H===null){P===null&&(P=_);break}t&&P&&H.alternate===null&&e(h,P),p=s(H,p,k),b===null?x=H:b.sibling=H,b=H,P=_}if(R.done)return n(h,P),ue&&er(h,k),x;if(P===null){for(;!R.done;k++,R=g.next())R=c(h,R.value,E),R!==null&&(p=s(R,p,k),b===null?x=R:b.sibling=R,b=R);return ue&&er(h,k),x}for(P=r(h,P);!R.done;k++,R=g.next())R=y(P,h,k,R.value,E),R!==null&&(t&&R.alternate!==null&&P.delete(R.key===null?k:R.key),p=s(R,p,k),b===null?x=R:b.sibling=R,b=R);return t&&P.forEach(function(ae){return e(h,ae)}),ue&&er(h,k),x}function A(h,p,g,E){if(typeof g=="object"&&g!==null&&g.type===_r&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case Ks:e:{for(var x=g.key,b=p;b!==null;){if(b.key===x){if(x=g.type,x===_r){if(b.tag===7){n(h,b.sibling),p=i(b,g.props.children),p.return=h,h=p;break e}}else if(b.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===Nn&&$f(x)===b.type){n(h,b.sibling),p=i(b,g.props),p.ref=Li(h,b,g),p.return=h,h=p;break e}n(h,b);break}else e(h,b);b=b.sibling}g.type===_r?(p=mr(g.props.children,h.mode,E,g.key),p.return=h,h=p):(E=To(g.type,g.key,g.props,null,h.mode,E),E.ref=Li(h,p,g),E.return=h,h=E)}return o(h);case Mr:e:{for(b=g.key;p!==null;){if(p.key===b)if(p.tag===4&&p.stateNode.containerInfo===g.containerInfo&&p.stateNode.implementation===g.implementation){n(h,p.sibling),p=i(p,g.children||[]),p.return=h,h=p;break e}else{n(h,p);break}else e(h,p);p=p.sibling}p=gl(g,h.mode,E),p.return=h,h=p}return o(h);case Nn:return b=g._init,A(h,p,b(g._payload),E)}if(Hi(g))return v(h,p,g,E);if(Ti(g))return m(h,p,g,E);ro(h,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,p!==null&&p.tag===6?(n(h,p.sibling),p=i(p,g),p.return=h,h=p):(n(h,p),p=ml(g,h.mode,E),p.return=h,h=p),o(h)):n(h,p)}return A}var hi=Zp(!0),Yp=Zp(!1),Jo=Jn(null),Wo=null,Jr=null,Ac=null;function Ec(){Ac=Jr=Wo=null}function xc(t){var e=Jo.current;oe(Jo),t._currentValue=e}function du(t,e,n){for(;t!==null;){var r=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,r!==null&&(r.childLanes|=e)):r!==null&&(r.childLanes&e)!==e&&(r.childLanes|=e),t===n)break;t=t.return}}function ri(t,e){Wo=t,Ac=Jr=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(tt=!0),t.firstContext=null)}function St(t){var e=t._currentValue;if(Ac!==t)if(t={context:t,memoizedValue:e,next:null},Jr===null){if(Wo===null)throw Error(N(308));Jr=t,Wo.dependencies={lanes:0,firstContext:t}}else Jr=Jr.next=t;return e}var lr=null;function bc(t){lr===null?lr=[t]:lr.push(t)}function Xp(t,e,n,r){var i=e.interleaved;return i===null?(n.next=n,bc(e)):(n.next=i.next,i.next=n),e.interleaved=n,mn(t,r)}function mn(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var Cn=!1;function kc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function $p(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function un(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function Mn(t,e,n){var r=t.updateQueue;if(r===null)return null;if(r=r.shared,Y&2){var i=r.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),r.pending=e,mn(t,n)}return i=r.interleaved,i===null?(e.next=e,bc(r)):(e.next=i.next,i.next=e),r.interleaved=e,mn(t,n)}function bo(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,uc(t,n)}}function qf(t,e){var n=t.updateQueue,r=t.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,s=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};s===null?i=s=o:s=s.next=o,n=n.next}while(n!==null);s===null?i=s=e:s=s.next=e}else i=s=e;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:r.shared,effects:r.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function Zo(t,e,n,r){var i=t.updateQueue;Cn=!1;var s=i.firstBaseUpdate,o=i.lastBaseUpdate,a=i.shared.pending;if(a!==null){i.shared.pending=null;var l=a,u=l.next;l.next=null,o===null?s=u:o.next=u,o=l;var f=t.alternate;f!==null&&(f=f.updateQueue,a=f.lastBaseUpdate,a!==o&&(a===null?f.firstBaseUpdate=u:a.next=u,f.lastBaseUpdate=l))}if(s!==null){var c=i.baseState;o=0,f=u=l=null,a=s;do{var d=a.lane,y=a.eventTime;if((r&d)===d){f!==null&&(f=f.next={eventTime:y,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var v=t,m=a;switch(d=e,y=n,m.tag){case 1:if(v=m.payload,typeof v=="function"){c=v.call(y,c,d);break e}c=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=m.payload,d=typeof v=="function"?v.call(y,c,d):v,d==null)break e;c=ge({},c,d);break e;case 2:Cn=!0}}a.callback!==null&&a.lane!==0&&(t.flags|=64,d=i.effects,d===null?i.effects=[a]:d.push(a))}else y={eventTime:y,lane:d,tag:a.tag,payload:a.payload,callback:a.callback,next:null},f===null?(u=f=y,l=c):f=f.next=y,o|=d;if(a=a.next,a===null){if(a=i.shared.pending,a===null)break;d=a,a=d.next,d.next=null,i.lastBaseUpdate=d,i.shared.pending=null}}while(!0);if(f===null&&(l=c),i.baseState=l,i.firstBaseUpdate=u,i.lastBaseUpdate=f,e=i.shared.interleaved,e!==null){i=e;do o|=i.lane,i=i.next;while(i!==e)}else s===null&&(i.shared.lanes=0);xr|=o,t.lanes=o,t.memoizedState=c}}function ed(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;en?n:4,t(!0);var r=cl.transition;cl.transition={};try{t(!1),e()}finally{ee=n,cl.transition=r}}function mm(){return Pt().memoizedState}function Uw(t,e,n){var r=zn(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},gm(t))ym(e,n);else if(n=Xp(t,e,n,r),n!==null){var i=We();Mt(n,t,r,i),wm(n,e,r)}}function Fw(t,e,n){var r=zn(t),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(gm(t))ym(e,i);else{var s=t.alternate;if(t.lanes===0&&(s===null||s.lanes===0)&&(s=e.lastRenderedReducer,s!==null))try{var o=e.lastRenderedState,a=s(o,n);if(i.hasEagerState=!0,i.eagerState=a,_t(a,o)){var l=e.interleaved;l===null?(i.next=i,bc(e)):(i.next=l.next,l.next=i),e.interleaved=i;return}}catch{}finally{}n=Xp(t,e,i,r),n!==null&&(i=We(),Mt(n,t,r,i),wm(n,e,r))}}function gm(t){var e=t.alternate;return t===me||e!==null&&e===me}function ym(t,e){Xi=Xo=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function wm(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,uc(t,n)}}var $o={readContext:St,useCallback:Me,useContext:Me,useEffect:Me,useImperativeHandle:Me,useInsertionEffect:Me,useLayoutEffect:Me,useMemo:Me,useReducer:Me,useRef:Me,useState:Me,useDebugValue:Me,useDeferredValue:Me,useTransition:Me,useMutableSource:Me,useSyncExternalStore:Me,useId:Me,unstable_isNewReconciler:!1},Dw={readContext:St,useCallback:function(t,e){return jt().memoizedState=[t,e===void 0?null:e],t},useContext:St,useEffect:nd,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,So(4194308,4,cm.bind(null,e,t),n)},useLayoutEffect:function(t,e){return So(4194308,4,t,e)},useInsertionEffect:function(t,e){return So(4,2,t,e)},useMemo:function(t,e){var n=jt();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=jt();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=Uw.bind(null,me,t),[r.memoizedState,t]},useRef:function(t){var e=jt();return t={current:t},e.memoizedState=t},useState:td,useDebugValue:Bc,useDeferredValue:function(t){return jt().memoizedState=t},useTransition:function(){var t=td(!1),e=t[0];return t=Lw.bind(null,t[1]),jt().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=me,i=jt();if(ue){if(n===void 0)throw Error(N(407));n=n()}else{if(n=e(),Re===null)throw Error(N(349));Er&30||nm(r,e,n)}i.memoizedState=n;var s={value:n,getSnapshot:e};return i.queue=s,nd(im.bind(null,r,s,t),[t]),r.flags|=2048,vs(9,rm.bind(null,r,s,n,e),void 0,null),n},useId:function(){var t=jt(),e=Re.identifierPrefix;if(ue){var n=on,r=sn;n=(r&~(1<<32-Dt(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=ys++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=o.createElement(n,{is:r.is}):(t=o.createElement(n),n==="select"&&(o=t,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):t=o.createElementNS(t,n),t[Kt]=e,t[ps]=r,Cm(t,e,!1,!1),e.stateNode=t;e:{switch(o=Wl(n,r),n){case"dialog":se("cancel",t),se("close",t),i=r;break;case"iframe":case"object":case"embed":se("load",t),i=r;break;case"video":case"audio":for(i=0;igi&&(e.flags|=128,r=!0,Ui(s,!1),e.lanes=4194304)}else{if(!r)if(t=Yo(o),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),Ui(s,!0),s.tail===null&&s.tailMode==="hidden"&&!o.alternate&&!ue)return _e(e),null}else 2*Ee()-s.renderingStartTime>gi&&n!==1073741824&&(e.flags|=128,r=!0,Ui(s,!1),e.lanes=4194304);s.isBackwards?(o.sibling=e.child,e.child=o):(n=s.last,n!==null?n.sibling=o:e.child=o,s.last=o)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=Ee(),e.sibling=null,n=he.current,re(he,r?n&1|2:n&1),e):(_e(e),null);case 22:case 23:return Mc(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?dt&1073741824&&(_e(e),e.subtreeFlags&6&&(e.flags|=8192)):_e(e),null;case 24:return null;case 25:return null}throw Error(N(156,e.tag))}function jw(t,e){switch(wc(e),e.tag){case 1:return rt(e.type)&&Qo(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return pi(),oe(nt),oe(He),Nc(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return Pc(e),null;case 13:if(oe(he),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(N(340));di()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return oe(he),null;case 4:return pi(),null;case 10:return xc(e.type._context),null;case 22:case 23:return Mc(),null;case 24:return null;default:return null}}var so=!1,ze=!1,Kw=typeof WeakSet=="function"?WeakSet:Set,L=null;function Wr(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){we(t,e,r)}else n.current=null}function Eu(t,e,n){try{n()}catch(r){we(t,e,r)}}var hd=!1;function Jw(t,e){if(iu=_o,t=Up(),gc(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch{n=null;break e}var o=0,a=-1,l=-1,u=0,f=0,c=t,d=null;t:for(;;){for(var y;c!==n||i!==0&&c.nodeType!==3||(a=o+i),c!==s||r!==0&&c.nodeType!==3||(l=o+r),c.nodeType===3&&(o+=c.nodeValue.length),(y=c.firstChild)!==null;)d=c,c=y;for(;;){if(c===t)break t;if(d===n&&++u===i&&(a=o),d===s&&++f===r&&(l=o),(y=c.nextSibling)!==null)break;c=d,d=c.parentNode}c=y}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(su={focusedElem:t,selectionRange:n},_o=!1,L=e;L!==null;)if(e=L,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,L=t;else for(;L!==null;){e=L;try{var v=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var m=v.memoizedProps,A=v.memoizedState,h=e.stateNode,p=h.getSnapshotBeforeUpdate(e.elementType===e.type?m:It(e.type,m),A);h.__reactInternalSnapshotBeforeUpdate=p}break;case 3:var g=e.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(N(163))}}catch(E){we(e,e.return,E)}if(t=e.sibling,t!==null){t.return=e.return,L=t;break}L=e.return}return v=hd,hd=!1,v}function $i(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&t)===t){var s=i.destroy;i.destroy=void 0,s!==void 0&&Eu(e,n,s)}i=i.next}while(i!==r)}}function ba(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function xu(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function Rm(t){var e=t.alternate;e!==null&&(t.alternate=null,Rm(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Kt],delete e[ps],delete e[lu],delete e[Tw],delete e[Iw])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function Bm(t){return t.tag===5||t.tag===3||t.tag===4}function pd(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Bm(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function bu(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=Go));else if(r!==4&&(t=t.child,t!==null))for(bu(t,e,n),t=t.sibling;t!==null;)bu(t,e,n),t=t.sibling}function ku(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(ku(t,e,n),t=t.sibling;t!==null;)ku(t,e,n),t=t.sibling}var Be=null,Ot=!1;function En(t,e,n){for(n=n.child;n!==null;)Om(t,e,n),n=n.sibling}function Om(t,e,n){if(Zt&&typeof Zt.onCommitFiberUnmount=="function")try{Zt.onCommitFiberUnmount(ma,n)}catch{}switch(n.tag){case 5:ze||Wr(n,e);case 6:var r=Be,i=Ot;Be=null,En(t,e,n),Be=r,Ot=i,Be!==null&&(Ot?(t=Be,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):Be.removeChild(n.stateNode));break;case 18:Be!==null&&(Ot?(t=Be,n=n.stateNode,t.nodeType===8?al(t.parentNode,n):t.nodeType===1&&al(t,n),us(t)):al(Be,n.stateNode));break;case 4:r=Be,i=Ot,Be=n.stateNode.containerInfo,Ot=!0,En(t,e,n),Be=r,Ot=i;break;case 0:case 11:case 14:case 15:if(!ze&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var s=i,o=s.destroy;s=s.tag,o!==void 0&&(s&2||s&4)&&Eu(n,e,o),i=i.next}while(i!==r)}En(t,e,n);break;case 1:if(!ze&&(Wr(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){we(n,e,a)}En(t,e,n);break;case 21:En(t,e,n);break;case 22:n.mode&1?(ze=(r=ze)||n.memoizedState!==null,En(t,e,n),ze=r):En(t,e,n);break;default:En(t,e,n)}}function md(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new Kw),e.forEach(function(r){var i=nv.bind(null,t,r);n.has(r)||(n.add(r),r.then(i,i))})}}function Ct(t,e){var n=e.deletions;if(n!==null)for(var r=0;ri&&(i=o),r&=~s}if(r=i,r=Ee()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Zw(r/1960))-r,10t?16:t,On===null)var r=!1;else{if(t=On,On=null,ta=0,Y&6)throw Error(N(331));var i=Y;for(Y|=4,L=t.current;L!==null;){var s=L,o=s.child;if(L.flags&16){var a=s.deletions;if(a!==null){for(var l=0;lEe()-Fc?pr(t,0):Uc|=n),it(t,e)}function Hm(t,e){e===0&&(t.mode&1?(e=Ys,Ys<<=1,!(Ys&130023424)&&(Ys=4194304)):e=1);var n=We();t=mn(t,e),t!==null&&(Rs(t,e,n),it(t,n))}function tv(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),Hm(t,n)}function nv(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,i=t.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(N(314))}r!==null&&r.delete(e),Hm(t,n)}var Gm;Gm=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||nt.current)tt=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return tt=!1,Qw(t,e,n);tt=!!(t.flags&131072)}else tt=!1,ue&&e.flags&1048576&&Kp(e,Ko,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;Po(t,e),t=e.pendingProps;var i=fi(e,He.current);ri(e,n),i=Tc(null,e,r,t,i,n);var s=Ic();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,rt(r)?(s=!0,Vo(e)):s=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,kc(e),i.updater=xa,e.stateNode=i,i._reactInternals=e,pu(e,r,t,n),e=yu(null,e,r,!0,s,n)):(e.tag=0,ue&&s&&yc(e),Ge(null,e,i,n),e=e.child),e;case 16:r=e.elementType;e:{switch(Po(t,e),t=e.pendingProps,i=r._init,r=i(r._payload),e.type=r,i=e.tag=iv(r),t=It(r,t),i){case 0:e=gu(null,e,r,t,n);break e;case 1:e=cd(null,e,r,t,n);break e;case 11:e=ld(null,e,r,t,n);break e;case 14:e=ud(null,e,r,It(r.type,t),n);break e}throw Error(N(306,r,""))}return e;case 0:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:It(r,i),gu(t,e,r,i,n);case 1:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:It(r,i),cd(t,e,r,i,n);case 3:e:{if(Sm(e),t===null)throw Error(N(387));r=e.pendingProps,s=e.memoizedState,i=s.element,$p(t,e),Zo(e,r,null,n);var o=e.memoizedState;if(r=o.element,s.isDehydrated)if(s={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},e.updateQueue.baseState=s,e.memoizedState=s,e.flags&256){i=mi(Error(N(423)),e),e=fd(t,e,r,n,i);break e}else if(r!==i){i=mi(Error(N(424)),e),e=fd(t,e,r,n,i);break e}else for(ht=Dn(e.stateNode.containerInfo.firstChild),mt=e,ue=!0,Lt=null,n=Yp(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(di(),r===i){e=gn(t,e,n);break e}Ge(t,e,r,n)}e=e.child}return e;case 5:return qp(e),t===null&&fu(e),r=e.type,i=e.pendingProps,s=t!==null?t.memoizedProps:null,o=i.children,ou(r,i)?o=null:s!==null&&ou(r,s)&&(e.flags|=32),km(t,e),Ge(t,e,o,n),e.child;case 6:return t===null&&fu(e),null;case 13:return Pm(t,e,n);case 4:return Sc(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=hi(e,null,r,n):Ge(t,e,r,n),e.child;case 11:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:It(r,i),ld(t,e,r,i,n);case 7:return Ge(t,e,e.pendingProps,n),e.child;case 8:return Ge(t,e,e.pendingProps.children,n),e.child;case 12:return Ge(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,i=e.pendingProps,s=e.memoizedProps,o=i.value,re(Jo,r._currentValue),r._currentValue=o,s!==null)if(_t(s.value,o)){if(s.children===i.children&&!nt.current){e=gn(t,e,n);break e}}else for(s=e.child,s!==null&&(s.return=e);s!==null;){var a=s.dependencies;if(a!==null){o=s.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(s.tag===1){l=un(-1,n&-n),l.tag=2;var u=s.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?l.next=l:(l.next=f.next,f.next=l),u.pending=l}}s.lanes|=n,l=s.alternate,l!==null&&(l.lanes|=n),du(s.return,n,e),a.lanes|=n;break}l=l.next}}else if(s.tag===10)o=s.type===e.type?null:s.child;else if(s.tag===18){if(o=s.return,o===null)throw Error(N(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),du(o,n,e),o=s.sibling}else o=s.child;if(o!==null)o.return=s;else for(o=s;o!==null;){if(o===e){o=null;break}if(s=o.sibling,s!==null){s.return=o.return,o=s;break}o=o.return}s=o}Ge(t,e,i.children,n),e=e.child}return e;case 9:return i=e.type,r=e.pendingProps.children,ri(e,n),i=St(i),r=r(i),e.flags|=1,Ge(t,e,r,n),e.child;case 14:return r=e.type,i=It(r,e.pendingProps),i=It(r.type,i),ud(t,e,r,i,n);case 15:return xm(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:It(r,i),Po(t,e),e.tag=1,rt(r)?(t=!0,Vo(e)):t=!1,ri(e,n),vm(e,r,i),pu(e,r,i,n),yu(null,e,r,!0,t,n);case 19:return Nm(t,e,n);case 22:return bm(t,e,n)}throw Error(N(156,e.tag))};function Qm(t,e){return gp(t,e)}function rv(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bt(t,e,n,r){return new rv(t,e,n,r)}function zc(t){return t=t.prototype,!(!t||!t.isReactComponent)}function iv(t){if(typeof t=="function")return zc(t)?1:0;if(t!=null){if(t=t.$$typeof,t===sc)return 11;if(t===oc)return 14}return 2}function Hn(t,e){var n=t.alternate;return n===null?(n=bt(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function To(t,e,n,r,i,s){var o=2;if(r=t,typeof t=="function")zc(t)&&(o=1);else if(typeof t=="string")o=5;else e:switch(t){case _r:return mr(n.children,i,s,e);case ic:o=8,i|=8;break;case Ml:return t=bt(12,n,e,i|2),t.elementType=Ml,t.lanes=s,t;case _l:return t=bt(13,n,e,i),t.elementType=_l,t.lanes=s,t;case zl:return t=bt(19,n,e,i),t.elementType=zl,t.lanes=s,t;case qh:return Sa(n,i,s,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case Xh:o=10;break e;case $h:o=9;break e;case sc:o=11;break e;case oc:o=14;break e;case Nn:o=16,r=null;break e}throw Error(N(130,t==null?t:typeof t,""))}return e=bt(o,n,e,i),e.elementType=t,e.type=r,e.lanes=s,e}function mr(t,e,n,r){return t=bt(7,t,r,e),t.lanes=n,t}function Sa(t,e,n,r){return t=bt(22,t,r,e),t.elementType=qh,t.lanes=n,t.stateNode={isHidden:!1},t}function ml(t,e,n){return t=bt(6,t,null,e),t.lanes=n,t}function gl(t,e,n){return e=bt(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function sv(t,e,n,r,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ya(0),this.expirationTimes=Ya(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ya(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Hc(t,e,n,r,i,s,o,a,l){return t=new sv(t,e,n,a,l),e===1?(e=1,s===!0&&(e|=8)):e=0,s=bt(3,null,null,e),t.current=s,s.stateNode=t,s.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},kc(s),t}function ov(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Jm)}catch(t){console.error(t)}}Jm(),Jh.exports=yt;var fv=Jh.exports,bd=fv;Fl.createRoot=bd.createRoot,Fl.hydrateRoot=bd.hydrateRoot;const dv="modulepreload",hv=function(t){return"/"+t},kd={},pv=function(e,n,r){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=o?.nonce||o?.getAttribute("nonce");i=Promise.allSettled(n.map(l=>{if(l=hv(l),l in kd)return;kd[l]=!0;const u=l.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const c=document.createElement("link");if(c.rel=u?"stylesheet":dv,u||(c.as="script"),c.crossOrigin="",c.href=l,a&&c.setAttribute("nonce",a),document.head.appendChild(c),u)return new Promise((d,y)=>{c.addEventListener("load",d),c.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${l}`)))})}))}function s(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return i.then(o=>{for(const a of o||[])a.status==="rejected"&&s(a.reason);return e().catch(s)})},mv="6.16.0";function gv(t,e,n){const r=e.split("|").map(s=>s.trim());for(let s=0;sPromise.resolve(t[r])))).reduce((r,i,s)=>(r[e[s]]=i,r),{})}function z(t,e,n){for(let r in e){let i=e[r];const s=n?n[r]:null;s&&gv(i,s,r),Object.defineProperty(t,r,{enumerable:!0,value:i,writable:!1})}}function Yr(t,e){if(t==null)return"null";if(e==null&&(e=new Set),typeof t=="object"){if(e.has(t))return"[Circular]";e.add(t)}if(Array.isArray(t))return"[ "+t.map(n=>Yr(n,e)).join(", ")+" ]";if(t instanceof Uint8Array){const n="0123456789abcdef";let r="0x";for(let i=0;i>4],r+=n[t[i]&15];return r}if(typeof t=="object"&&typeof t.toJSON=="function")return Yr(t.toJSON(),e);switch(typeof t){case"boolean":case"number":case"symbol":return t.toString();case"bigint":return BigInt(t).toString();case"string":return JSON.stringify(t);case"object":{const n=Object.keys(t);return n.sort(),"{ "+n.map(r=>`${Yr(r,e)}: ${Yr(t[r],e)}`).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function Le(t,e){return t&&t.code===e}function jc(t){return Le(t,"CALL_EXCEPTION")}function le(t,e,n){let r=t;{const s=[];if(n){if("message"in n||"code"in n||"name"in n)throw new Error(`value will overwrite populated values: ${Yr(n)}`);for(const o in n){if(o==="shortMessage")continue;const a=n[o];s.push(o+"="+Yr(a))}}s.push(`code=${e}`),s.push(`version=${mv}`),s.length&&(t+=" ("+s.join(", ")+")")}let i;switch(e){case"INVALID_ARGUMENT":i=new TypeError(t);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":i=new RangeError(t);break;default:i=new Error(t)}return z(i,{code:e}),n&&Object.assign(i,n),i.shortMessage==null&&z(i,{shortMessage:r}),i}function S(t,e,n,r){if(!t)throw le(e,n,r)}function w(t,e,n,r){S(t,e,"INVALID_ARGUMENT",{argument:n,value:r})}function Wm(t,e,n){n==null&&(n=""),n&&(n=": "+n),S(t>=e,"missing argument"+n,"MISSING_ARGUMENT",{count:t,expectedCount:e}),S(t<=e,"too many arguments"+n,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}["NFD","NFC","NFKD","NFKC"].reduce((t,e)=>{try{if("test".normalize(e)!=="test")throw new Error("bad");if(e==="NFD"&&"é".normalize("NFD")!=="é")throw new Error("broken");t.push(e)}catch{}return t},[]);function Us(t,e,n){if(n==null&&(n=""),t!==e){let r=n,i="new";n&&(r+=".",i+=" "+n),S(!1,`private constructor; use ${r}from* methods`,"UNSUPPORTED_OPERATION",{operation:i})}}function Zm(t,e,n){if(t instanceof Uint8Array)return n?new Uint8Array(t):t;if(typeof t=="string"&&t.length%2===0&&t.match(/^0x[0-9a-f]*$/i)){const r=new Uint8Array((t.length-2)/2);let i=2;for(let s=0;s>4]+Sd[i&15]}return n}function ce(t){return"0x"+t.map(e=>I(e).substring(2)).join("")}function si(t){return ie(t,!0)?(t.length-2)/2:j(t).length}function ye(t,e,n){const r=j(t);return n!=null&&n>r.length&&S(!1,"cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:r,length:r.length,offset:n}),I(r.slice(e??0,n??r.length))}function Ym(t,e,n){const r=j(t);S(e>=r.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(r),length:e,offset:e+1});const i=new Uint8Array(e);return i.fill(0),n?i.set(r,e-r.length):i.set(r,0),I(i)}function yn(t,e){return Ym(t,e,!0)}function yv(t,e){return Ym(t,e,!1)}const Fs=BigInt(0),Ft=BigInt(1),Xr=9007199254740991;function ia(t,e){const n=Ia(t,"value"),r=BigInt(Q(e,"width"));if(S(n>>r===Fs,"overflow","NUMERIC_FAULT",{operation:"fromTwos",fault:"overflow",value:t}),n>>r-Ft){const i=(Ft<=-Xr&&t<=Xr,"overflow",e||"value",t),BigInt(t);case"string":try{if(t==="")throw new Error("empty string");return t[0]==="-"&&t[1]!=="-"?-BigInt(t.substring(1)):BigInt(t)}catch(n){w(!1,`invalid BigNumberish string: ${n.message}`,e||"value",t)}}w(!1,"invalid BigNumberish value",e||"value",t)}function Ia(t,e){const n=U(t,e);return S(n>=Fs,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:t}),n}const Pd="0123456789abcdef";function Ra(t){if(t instanceof Uint8Array){let e="0x0";for(const n of t)e+=Pd[n>>4],e+=Pd[n&15];return BigInt(e)}return U(t)}function Q(t,e){switch(typeof t){case"bigint":return w(t>=-Xr&&t<=Xr,"overflow",e||"value",t),Number(t);case"number":return w(Number.isInteger(t),"underflow",e||"value",t),w(t>=-Xr&&t<=Xr,"overflow",e||"value",t),t;case"string":try{if(t==="")throw new Error("empty string");return Q(BigInt(t),e)}catch(n){w(!1,`invalid numeric string: ${n.message}`,e||"value",t)}}w(!1,"invalid numeric value",e||"value",t)}function wv(t){return Q(Ra(t))}function jn(t,e){const n=Ia(t,"value");let r=n.toString(16);if(e==null)r.length%2&&(r="0"+r);else{const i=Q(e,"width");if(i===0&&n===Fs)return"0x";for(S(i*2>=r.length,`value exceeds width (${i} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:t});r.length>6===2;o++)s++;return s}return t==="OVERRUN"?n.length-e-1:0}function bv(t,e,n,r,i){return t==="OVERLONG"?(w(typeof i=="number","invalid bad code point for replacement","badCodepoint",i),r.push(i),0):(r.push(65533),qm(t,e,n))}const kv=Object.freeze({error:xv,ignore:qm,replace:bv});function Sv(t,e){e==null&&(e=kv.error);const n=j(t,"bytes"),r=[];let i=0;for(;i>7)){r.push(s);continue}let o=null,a=null;if((s&224)===192)o=1,a=127;else if((s&240)===224)o=2,a=2047;else if((s&248)===240)o=3,a=65535;else{(s&192)===128?i+=e("UNEXPECTED_CONTINUE",i-1,n,r):i+=e("BAD_PREFIX",i-1,n,r);continue}if(i-1+o>=n.length){i+=e("OVERRUN",i-1,n,r);continue}let l=s&(1<<8-o-1)-1;for(let u=0;u1114111){i+=e("OUT_OF_RANGE",i-1-o,n,r,l);continue}if(l>=55296&&l<=57343){i+=e("UTF16_SURROGATE",i-1-o,n,r,l);continue}if(l<=a){i+=e("OVERLONG",i-1-o,n,r,l);continue}r.push(l)}}return r}function cn(t,e){w(typeof t=="string","invalid string value","str",t);let n=[];for(let r=0;r>6|192),n.push(i&63|128);else if((i&64512)==55296){r++;const s=t.charCodeAt(r);w(r>18|240),n.push(o>>12&63|128),n.push(o>>6&63|128),n.push(o&63|128)}else n.push(i>>12|224),n.push(i>>6&63|128),n.push(i&63|128)}return new Uint8Array(n)}function Pv(t){return t.map(e=>e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode((e>>10&1023)+55296,(e&1023)+56320))).join("")}function sa(t,e){return Pv(Sv(t,e))}function eg(t){async function e(n,r){S(r==null||!r.cancelled,"request cancelled before sending","CANCELLED");const i=n.url.split(":")[0].toLowerCase();S(i==="http"||i==="https",`unsupported protocol ${i}`,"UNSUPPORTED_OPERATION",{info:{protocol:i},operation:"request"}),S(i==="https"||!n.credentials||n.allowInsecureAuthentication,"insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});let s=null;const o=new AbortController,a=setTimeout(()=>{s=le("request timeout","TIMEOUT"),o.abort()},n.timeout);r&&r.addListener(()=>{s=le("request cancelled","CANCELLED"),o.abort()});const l=Object.assign({},t,{method:n.method,headers:new Headers(Array.from(n)),body:n.body||void 0,signal:o.signal});let u;try{u=await fetch(n.url,l)}catch(y){throw clearTimeout(a),s||y}clearTimeout(a);const f={};u.headers.forEach((y,v)=>{f[v.toLowerCase()]=y});const c=await u.arrayBuffer(),d=c==null?null:new Uint8Array(c);return{statusCode:u.status,statusMessage:u.statusText,headers:f,body:d}}return e}const Nv=12,Cv=250;let Td=eg();const Tv=new RegExp("^data:([^;:]*)?(;base64)?,(.*)$","i"),Iv=new RegExp("^ipfs://(ipfs/)?(.*)$","i");let yl=!1;async function tg(t,e){try{const n=t.match(Tv);if(!n)throw new Error("invalid data");return new Gn(200,"OK",{"content-type":n[1]||"text/plain"},n[2]?Av(n[3]):Bv(n[3]))}catch{return new Gn(599,"BAD REQUEST (invalid data: URI)",{},null,new Xt(t))}}function ng(t){async function e(n,r){try{const i=n.match(Iv);if(!i)throw new Error("invalid link");return new Xt(`${t}${i[2]}`)}catch{return new Gn(599,"BAD REQUEST (invalid IPFS URI)",{},null,new Xt(n))}}return e}const lo={data:tg,ipfs:ng("https://gateway.ipfs.io/ipfs/")},rg=new WeakMap;class Rv{#e;#t;constructor(e){this.#e=[],this.#t=!1,rg.set(e,()=>{if(!this.#t){this.#t=!0;for(const n of this.#e)setTimeout(()=>{n()},0);this.#e=[]}})}addListener(e){S(!this.#t,"singal already cancelled","UNSUPPORTED_OPERATION",{operation:"fetchCancelSignal.addCancelListener"}),this.#e.push(e)}get cancelled(){return this.#t}checkSignal(){S(!this.cancelled,"cancelled","CANCELLED",{})}}function uo(t){if(t==null)throw new Error("missing signal; should not happen");return t.checkSignal(),t}class Xt{#e;#t;#n;#r;#i;#o;#s;#a;#f;#u;#p;#m;#l;#c;#d;get url(){return this.#o}set url(e){this.#o=String(e)}get body(){return this.#s==null?null:new Uint8Array(this.#s)}set body(e){if(e==null)this.#s=void 0,this.#a=void 0;else if(typeof e=="string")this.#s=cn(e),this.#a="text/plain";else if(e instanceof Uint8Array)this.#s=e,this.#a="application/octet-stream";else if(typeof e=="object")this.#s=cn(JSON.stringify(e)),this.#a="application/json";else throw new Error("invalid body")}hasBody(){return this.#s!=null}get method(){return this.#r?this.#r:this.hasBody()?"POST":"GET"}set method(e){e==null&&(e=""),this.#r=String(e).toUpperCase()}get headers(){const e=Object.assign({},this.#n);return this.#f&&(e.authorization=`Basic ${Ev(cn(this.#f))}`),this.allowGzip&&(e["accept-encoding"]="gzip"),e["content-type"]==null&&this.#a&&(e["content-type"]=this.#a),this.body&&(e["content-length"]=String(this.body.length)),e}getHeader(e){return this.headers[e.toLowerCase()]}setHeader(e,n){this.#n[String(e).toLowerCase()]=String(n)}clearHeaders(){this.#n={}}[Symbol.iterator](){const e=this.headers,n=Object.keys(e);let r=0;return{next:()=>{if(r=0,"timeout must be non-zero","timeout",e),this.#i=e}get preflightFunc(){return this.#u||null}set preflightFunc(e){this.#u=e}get processFunc(){return this.#p||null}set processFunc(e){this.#p=e}get retryFunc(){return this.#m||null}set retryFunc(e){this.#m=e}get getUrlFunc(){return this.#d||Td}set getUrlFunc(e){this.#d=e}constructor(e){this.#o=String(e),this.#e=!1,this.#t=!0,this.#n={},this.#r="",this.#i=3e5,this.#c={slotInterval:Cv,maxAttempts:Nv},this.#d=null}toString(){return``}setThrottleParams(e){e.slotInterval!=null&&(this.#c.slotInterval=e.slotInterval),e.maxAttempts!=null&&(this.#c.maxAttempts=e.maxAttempts)}async#h(e,n,r,i,s){if(e>=this.#c.maxAttempts)return s.makeServerError("exceeded maximum retry limit");S(Id()<=n,"timeout","TIMEOUT",{operation:"request.send",reason:"timeout",request:i}),r>0&&await Ov(r);let o=this.clone();const a=(o.url.split(":")[0]||"").toLowerCase();if(a in lo){const f=await lo[a](o.url,uo(i.#l));if(f instanceof Gn){let c=f;if(this.processFunc){uo(i.#l);try{c=await this.processFunc(o,c)}catch(d){(d.throttle==null||typeof d.stall!="number")&&c.makeServerError("error in post-processing function",d).assertOk()}}return c}o=f}this.preflightFunc&&(o=await this.preflightFunc(o));const l=await this.getUrlFunc(o,uo(i.#l));let u=new Gn(l.statusCode,l.statusMessage,l.headers,l.body,i);if(u.statusCode===301||u.statusCode===302){try{const f=u.headers.location||"";return o.redirect(f).#h(e+1,n,0,i,u)}catch{}return u}else if(u.statusCode===429&&(this.retryFunc==null||await this.retryFunc(o,u,e))){const f=u.headers["retry-after"];let c=this.#c.slotInterval*Math.trunc(Math.random()*Math.pow(2,e));return typeof f=="string"&&f.match(/^[1-9][0-9]*$/)&&(c=parseInt(f)),o.clone().#h(e+1,n,c,i,u)}if(this.processFunc){uo(i.#l);try{u=await this.processFunc(o,u)}catch(f){(f.throttle==null||typeof f.stall!="number")&&u.makeServerError("error in post-processing function",f).assertOk();let c=this.#c.slotInterval*Math.trunc(Math.random()*Math.pow(2,e));return f.stall>=0&&(c=f.stall),o.clone().#h(e+1,n,c,i,u)}}return u}send(){return S(this.#l==null,"request already sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.send"}),this.#l=new Rv(this),this.#h(0,Id()+this.timeout,0,this,new Gn(0,"",{},null,this))}cancel(){S(this.#l!=null,"request has not been sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.cancel"});const e=rg.get(this);if(!e)throw new Error("missing signal; should not happen");e()}redirect(e){const n=this.url.split(":")[0].toLowerCase(),r=e.split(":")[0].toLowerCase();S(this.method==="GET"&&(n!=="https"||r!=="http")&&e.match(/^https?:/),"unsupported redirect","UNSUPPORTED_OPERATION",{operation:`redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(e)})`});const i=new Xt(e);return i.method="GET",i.allowGzip=this.allowGzip,i.timeout=this.timeout,i.#n=Object.assign({},this.#n),this.#s&&(i.#s=new Uint8Array(this.#s)),i.#a=this.#a,i}clone(){const e=new Xt(this.url);return e.#r=this.#r,this.#s&&(e.#s=this.#s),e.#a=this.#a,e.#n=Object.assign({},this.#n),e.#f=this.#f,this.allowGzip&&(e.allowGzip=!0),e.timeout=this.timeout,this.allowInsecureAuthentication&&(e.allowInsecureAuthentication=!0),e.#u=this.#u,e.#p=this.#p,e.#m=this.#m,e.#c=Object.assign({},this.#c),e.#d=this.#d,e}static lockConfig(){yl=!0}static getGateway(e){return lo[e.toLowerCase()]||null}static registerGateway(e,n){if(e=e.toLowerCase(),e==="http"||e==="https")throw new Error(`cannot intercept ${e}; use registerGetUrl`);if(yl)throw new Error("gateways locked");lo[e]=n}static registerGetUrl(e){if(yl)throw new Error("gateways locked");Td=e}static createGetUrlFunc(e){return eg(e)}static createDataGateway(){return tg}static createIpfsGatewayFunc(e){return ng(e)}}class Gn{#e;#t;#n;#r;#i;#o;toString(){return``}get statusCode(){return this.#e}get statusMessage(){return this.#t}get headers(){return Object.assign({},this.#n)}get body(){return this.#r==null?null:new Uint8Array(this.#r)}get bodyText(){try{return this.#r==null?"":sa(this.#r)}catch{S(!1,"response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch{S(!1,"response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[Symbol.iterator](){const e=this.headers,n=Object.keys(e);let r=0;return{next:()=>{if(r(o[a.toLowerCase()]=String(r[a]),o),{}),this.#r=i==null?null:new Uint8Array(i),this.#i=s||null,this.#o={message:""}}makeServerError(e,n){let r;e?r=`CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${e})`:(e=`${this.statusCode} ${this.statusMessage}`,r=`CLIENT ESCALATED SERVER ERROR (${e})`);const i=new Gn(599,r,this.headers,this.body,this.#i||void 0);return i.#o={message:e,error:n},i}throwThrottleError(e,n){n==null?n=-1:w(Number.isInteger(n)&&n>=0,"invalid stall timeout","stall",n);const r=new Error(e||"throttling requests");throw z(r,{stall:n,throttle:!0}),r}getHeader(e){return this.headers[e.toLowerCase()]}hasBody(){return this.#r!=null}get request(){return this.#i}ok(){return this.#o.message===""&&this.statusCode>=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:e,error:n}=this.#o;e===""&&(e=`server response ${this.statusCode} ${this.statusMessage}`);let r=null;this.request&&(r=this.request.url);let i=null;try{this.#r&&(i=sa(this.#r))}catch{}S(!1,e,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:n,info:{requestUrl:r,responseBody:i,responseStatus:`${this.statusCode} ${this.statusMessage}`}})}}function Id(){return new Date().getTime()}function Bv(t){return cn(t.replace(/%([0-9a-f][0-9a-f])/gi,(e,n)=>String.fromCharCode(parseInt(n,16))))}function Ov(t){return new Promise(e=>setTimeout(e,t))}const Lv=BigInt(-1),Tt=BigInt(0),$r=BigInt(1),Uv=BigInt(5),Ur={};let oi="0000";for(;oi.length<80;)oi+=oi;function Xn(t){let e=oi;for(;e.length=-i&&tTt?t=ia(cr(t,r),r):t=-ia(cr(-t,r),r)}else{const i=$r<=0&&ts[a]==null?u:(w(typeof s[a]===l,"invalid fixed format ("+a+" not "+l+")","format."+a,s[a]),s[a]);e=o("signed","boolean",e),n=o("width","number",n),r=o("decimals","number",r)}w(n%8===0,"invalid FixedNumber width (not byte aligned)","format.width",n),w(r<=80,"invalid FixedNumber decimals (too large)","format.decimals",r);const i=(e?"":"u")+"fixed"+String(n)+"x"+String(r);return{signed:e,width:n,decimals:r,name:i}}function Fv(t,e){let n="";t0?r*=Xn(i):i<0&&(n*=Xn(-i)),nr?1:0}eq(e){return this.cmp(e)===0}lt(e){return this.cmp(e)<0}lte(e){return this.cmp(e)<=0}gt(e){return this.cmp(e)>0}gte(e){return this.cmp(e)>=0}floor(){let e=this.#t;return this.#tTt&&(e+=this.#n-$r),e=this.#t/this.#n*this.#n,this.#i(e,"ceiling")}round(e){if(e==null&&(e=0),e>=this.decimals)return this;const n=this.decimals-e,r=Uv*Xn(n-1);let i=this.value+r;const s=Xn(n);return i=i/s*s,Di(i,this.#e,"round"),new Tn(Ur,i,this.#e)}isZero(){return this.#t===Tt}isNegative(){return this.#t0){const l=Xn(a);S(o%l===Tt,"value loses precision for format","NUMERIC_FAULT",{operation:"fromValue",fault:"underflow",value:e}),o/=l}else a<0&&(o*=Xn(-a));return Di(o,s,"fromValue"),new Tn(Ur,o,s)}static fromString(e,n){const r=e.match(/^(-?)([0-9]*)\.?([0-9]*)$/);w(r&&r[2].length+r[3].length>0,"invalid FixedNumber string value","value",e);const i=wl(n);let s=r[2]||"0",o=r[3]||"";for(;o.length{S(r<=t.length,"data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:r})};if(t[e]>=248){const r=t[e]-247;n(e+1+r);const i=Rd(t,e+1,r);return n(e+1+r+i),Bd(t,e,e+1+r,r+i)}else if(t[e]>=192){const r=t[e]-192;return n(e+1+r),Bd(t,e,e+1,r)}else if(t[e]>=184){const r=t[e]-183;n(e+1+r);const i=Rd(t,e+1,r);n(e+1+r+i);const s=I(t.slice(e+1+r,e+1+r+i));return{consumed:1+r+i,result:s}}else if(t[e]>=128){const r=t[e]-128;n(e+1+r);const i=I(t.slice(e+1,e+1+r));return{consumed:1+r,result:i}}return{consumed:1,result:Dv(t[e])}}function Ds(t){const e=j(t,"data"),n=ig(e,0);return w(n.consumed===e.length,"unexpected junk after rlp payload","data",t),n.result}function Od(t){const e=[];for(;t;)e.unshift(t&255),t>>=8;return e}function sg(t){if(Array.isArray(t)){let r=[];if(t.forEach(function(s){r=r.concat(sg(s))}),r.length<=55)return r.unshift(192+r.length),r;const i=Od(r.length);return i.unshift(247+i.length),i.concat(r)}const e=Array.prototype.slice.call(j(t,"object"));if(e.length===1&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const n=Od(e.length);return n.unshift(183+n.length),n.concat(e)}const Ld="0123456789abcdef";function fn(t){let e="0x";for(const n of sg(t))e+=Ld[n>>4],e+=Ld[n&15];return e}function Mv(t,e){let n=18;return n=Q(e,"unit"),Tn.fromValue(t,n,{decimals:n,width:512}).toString()}function ts(t){return Mv(t,18)}const je=32,Tu=new Uint8Array(je),_v=["then"],co={},og=new WeakMap;function rr(t){return og.get(t)}function Ud(t,e){og.set(t,e)}function Mi(t,e){const n=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw n.error=e,n}function Iu(t,e,n){return t.indexOf(null)>=0?e.map((r,i)=>r instanceof an?Iu(rr(r),r,n):r):t.reduce((r,i,s)=>{let o=e.getValue(i);return i in r||(n&&o instanceof an&&(o=Iu(rr(o),o,n)),r[i]=o),r},{})}class an extends Array{#e;constructor(...e){const n=e[0];let r=e[1],i=(e[2]||[]).slice(),s=!0;n!==co&&(r=e,i=[],s=!1),super(r.length),r.forEach((l,u)=>{this[u]=l});const o=i.reduce((l,u)=>(typeof u=="string"&&l.set(u,(l.get(u)||0)+1),l),new Map);if(Ud(this,Object.freeze(r.map((l,u)=>{const f=i[u];return f!=null&&o.get(f)===1?f:null}))),this.#e=[],this.#e==null&&this.#e,!s)return;Object.freeze(this);const a=new Proxy(this,{get:(l,u,f)=>{if(typeof u=="string"){if(u.match(/^[0-9]+$/)){const d=Q(u,"%index");if(d<0||d>=this.length)throw new RangeError("out of result range");const y=l[d];return y instanceof Error&&Mi(`index ${d}`,y),y}if(_v.indexOf(u)>=0)return Reflect.get(l,u,f);const c=l[u];if(c instanceof Function)return function(...d){return c.apply(this===f?l:this,d)};if(!(u in l))return l.getValue.apply(this===f?l:this,[u])}return Reflect.get(l,u,f)}});return Ud(a,rr(this)),a}toArray(e){const n=[];return this.forEach((r,i)=>{r instanceof Error&&Mi(`index ${i}`,r),e&&r instanceof an&&(r=r.toArray(e)),n.push(r)}),n}toObject(e){const n=rr(this);return n.reduce((r,i,s)=>(S(i!=null,`value at index ${s} unnamed`,"UNSUPPORTED_OPERATION",{operation:"toObject()"}),Iu(n,this,e)),{})}slice(e,n){e==null&&(e=0),e<0&&(e+=this.length,e<0&&(e=0)),n==null&&(n=this.length),n<0&&(n+=this.length,n<0&&(n=0)),n>this.length&&(n=this.length);const r=rr(this),i=[],s=[];for(let o=e;o{this.#e[e]=Fd(n)}}}class Jc{allowLoose;#e;#t;#n;#r;#i;constructor(e,n,r){z(this,{allowLoose:!!n}),this.#e=Ve(e),this.#n=0,this.#r=null,this.#i=r??1024,this.#t=0}get data(){return I(this.#e)}get dataLength(){return this.#e.length}get consumed(){return this.#t}get bytes(){return new Uint8Array(this.#e)}#o(e){if(this.#r)return this.#r.#o(e);this.#n+=e,S(this.#i<1||this.#n<=this.#i*this.dataLength,`compressed ABI data exceeds inflation ratio of ${this.#i} ( see: https://github.com/ethers-io/ethers.js/issues/4537 )`,"BUFFER_OVERRUN",{buffer:Ve(this.#e),offset:this.#t,length:e,info:{bytesRead:this.#n,dataLength:this.dataLength}})}#s(e,n,r){let i=Math.ceil(n/je)*je;return this.#t+i>this.#e.length&&(this.allowLoose&&r&&this.#t+n<=this.#e.length?i=n:S(!1,"data out-of-bounds","BUFFER_OVERRUN",{buffer:Ve(this.#e),length:this.#e.length,offset:this.#t+i})),this.#e.slice(this.#t,this.#t+i)}subReader(e){const n=new Jc(this.#e.slice(this.#t+e),this.allowLoose,this.#i);return n.#r=this,n}readBytes(e,n){let r=this.#s(0,e,!!n);return this.#o(e),this.#t+=r.length,r.slice(0,e)}readValue(){return Ra(this.readBytes(je))}readIndex(){return wv(this.readBytes(je))}}function oa(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function Wc(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function zv(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");oa(t.outputLen),oa(t.blockLen)}function yi(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function ag(t,e){Wc(t);const n=e.outputLen;if(t.lengtht instanceof Uint8Array,Hv=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Al=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),Vt=(t,e)=>t<<32-e|t>>>e,Gv=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Gv)throw new Error("Non little-endian hardware is not supported");function Qv(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Ba(t){if(typeof t=="string"&&(t=Qv(t)),!lg(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}function Vv(...t){const e=new Uint8Array(t.reduce((r,i)=>r+i.length,0));let n=0;return t.forEach(r=>{if(!lg(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}class Zc{clone(){return this._cloneInto()}}function Yc(t){const e=r=>t().update(Ba(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function jv(t=32){if(vl&&typeof vl.getRandomValues=="function")return vl.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}class ug extends Zc{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,zv(e);const r=Ba(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const i=this.blockLen,s=new Uint8Array(i);s.set(r.length>i?e.create().update(r).digest():r);for(let o=0;onew ug(t,e).update(n).digest();cg.create=(t,e)=>new ug(t,e);function Kv(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const i=BigInt(32),s=BigInt(4294967295),o=Number(n>>i&s),a=Number(n&s),l=r?4:0,u=r?0:4;t.setUint32(e+l,o,r),t.setUint32(e+u,a,r)}class fg extends Zc{constructor(e,n,r,i){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Al(this.buffer)}update(e){yi(this);const{view:n,buffer:r,blockLen:i}=this;e=Ba(e);const s=e.length;for(let o=0;oi-o&&(this.process(r,0),o=0);for(let c=o;cf.length)throw new Error("_sha2: outputLen bigger than state");for(let c=0;ct&e^~t&n,Wv=(t,e,n)=>t&e^t&n^e&n,Zv=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),xn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),bn=new Uint32Array(64);class Yv extends fg{constructor(){super(64,32,8,!1),this.A=xn[0]|0,this.B=xn[1]|0,this.C=xn[2]|0,this.D=xn[3]|0,this.E=xn[4]|0,this.F=xn[5]|0,this.G=xn[6]|0,this.H=xn[7]|0}get(){const{A:e,B:n,C:r,D:i,E:s,F:o,G:a,H:l}=this;return[e,n,r,i,s,o,a,l]}set(e,n,r,i,s,o,a,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=a|0,this.H=l|0}process(e,n){for(let c=0;c<16;c++,n+=4)bn[c]=e.getUint32(n,!1);for(let c=16;c<64;c++){const d=bn[c-15],y=bn[c-2],v=Vt(d,7)^Vt(d,18)^d>>>3,m=Vt(y,17)^Vt(y,19)^y>>>10;bn[c]=m+bn[c-7]+v+bn[c-16]|0}let{A:r,B:i,C:s,D:o,E:a,F:l,G:u,H:f}=this;for(let c=0;c<64;c++){const d=Vt(a,6)^Vt(a,11)^Vt(a,25),y=f+d+Jv(a,l,u)+Zv[c]+bn[c]|0,m=(Vt(r,2)^Vt(r,13)^Vt(r,22))+Wv(r,i,s)|0;f=u,u=l,l=a,a=o+y|0,o=s,s=i,i=r,r=y+m|0}r=r+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,a=a+this.E|0,l=l+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(r,i,s,o,a,l,u,f)}roundClean(){bn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const dg=Yc(()=>new Yv),fo=BigInt(2**32-1),Bu=BigInt(32);function hg(t,e=!1){return e?{h:Number(t&fo),l:Number(t>>Bu&fo)}:{h:Number(t>>Bu&fo)|0,l:Number(t&fo)|0}}function pg(t,e=!1){let n=new Uint32Array(t.length),r=new Uint32Array(t.length);for(let i=0;iBigInt(t>>>0)<>>0),$v=(t,e,n)=>t>>>n,qv=(t,e,n)=>t<<32-n|e>>>n,eA=(t,e,n)=>t>>>n|e<<32-n,tA=(t,e,n)=>t<<32-n|e>>>n,nA=(t,e,n)=>t<<64-n|e>>>n-32,rA=(t,e,n)=>t>>>n-32|e<<64-n,iA=(t,e)=>e,sA=(t,e)=>t,mg=(t,e,n)=>t<>>32-n,gg=(t,e,n)=>e<>>32-n,yg=(t,e,n)=>e<>>64-n,wg=(t,e,n)=>t<>>64-n;function oA(t,e,n,r){const i=(e>>>0)+(r>>>0);return{h:t+n+(i/2**32|0)|0,l:i|0}}const aA=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),lA=(t,e,n,r)=>e+n+r+(t/2**32|0)|0,uA=(t,e,n,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0),cA=(t,e,n,r,i)=>e+n+r+i+(t/2**32|0)|0,fA=(t,e,n,r,i)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0)+(i>>>0),dA=(t,e,n,r,i,s)=>e+n+r+i+s+(t/2**32|0)|0,V={fromBig:hg,split:pg,toBig:Xv,shrSH:$v,shrSL:qv,rotrSH:eA,rotrSL:tA,rotrBH:nA,rotrBL:rA,rotr32H:iA,rotr32L:sA,rotlSH:mg,rotlSL:gg,rotlBH:yg,rotlBL:wg,add:oA,add3L:aA,add3H:lA,add4L:uA,add4H:cA,add5H:dA,add5L:fA},[hA,pA]=V.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),kn=new Uint32Array(80),Sn=new Uint32Array(80);class mA extends fg{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:e,Al:n,Bh:r,Bl:i,Ch:s,Cl:o,Dh:a,Dl:l,Eh:u,El:f,Fh:c,Fl:d,Gh:y,Gl:v,Hh:m,Hl:A}=this;return[e,n,r,i,s,o,a,l,u,f,c,d,y,v,m,A]}set(e,n,r,i,s,o,a,l,u,f,c,d,y,v,m,A){this.Ah=e|0,this.Al=n|0,this.Bh=r|0,this.Bl=i|0,this.Ch=s|0,this.Cl=o|0,this.Dh=a|0,this.Dl=l|0,this.Eh=u|0,this.El=f|0,this.Fh=c|0,this.Fl=d|0,this.Gh=y|0,this.Gl=v|0,this.Hh=m|0,this.Hl=A|0}process(e,n){for(let g=0;g<16;g++,n+=4)kn[g]=e.getUint32(n),Sn[g]=e.getUint32(n+=4);for(let g=16;g<80;g++){const E=kn[g-15]|0,x=Sn[g-15]|0,b=V.rotrSH(E,x,1)^V.rotrSH(E,x,8)^V.shrSH(E,x,7),P=V.rotrSL(E,x,1)^V.rotrSL(E,x,8)^V.shrSL(E,x,7),k=kn[g-2]|0,_=Sn[g-2]|0,R=V.rotrSH(k,_,19)^V.rotrBH(k,_,61)^V.shrSH(k,_,6),H=V.rotrSL(k,_,19)^V.rotrBL(k,_,61)^V.shrSL(k,_,6),ae=V.add4L(P,H,Sn[g-7],Sn[g-16]),fe=V.add4H(ae,b,R,kn[g-7],kn[g-16]);kn[g]=fe|0,Sn[g]=ae|0}let{Ah:r,Al:i,Bh:s,Bl:o,Ch:a,Cl:l,Dh:u,Dl:f,Eh:c,El:d,Fh:y,Fl:v,Gh:m,Gl:A,Hh:h,Hl:p}=this;for(let g=0;g<80;g++){const E=V.rotrSH(c,d,14)^V.rotrSH(c,d,18)^V.rotrBH(c,d,41),x=V.rotrSL(c,d,14)^V.rotrSL(c,d,18)^V.rotrBL(c,d,41),b=c&y^~c&m,P=d&v^~d&A,k=V.add5L(p,x,P,pA[g],Sn[g]),_=V.add5H(k,h,E,b,hA[g],kn[g]),R=k|0,H=V.rotrSH(r,i,28)^V.rotrBH(r,i,34)^V.rotrBH(r,i,39),ae=V.rotrSL(r,i,28)^V.rotrBL(r,i,34)^V.rotrBL(r,i,39),fe=r&s^r&a^s&a,ot=i&o^i&l^o&l;h=m|0,p=A|0,m=y|0,A=v|0,y=c|0,v=d|0,{h:c,l:d}=V.add(u|0,f|0,_|0,R|0),u=a|0,f=l|0,a=s|0,l=o|0,s=r|0,o=i|0;const T=V.add3L(R,ae,ot);r=V.add3H(T,_,H,fe),i=T|0}({h:r,l:i}=V.add(this.Ah|0,this.Al|0,r|0,i|0)),{h:s,l:o}=V.add(this.Bh|0,this.Bl|0,s|0,o|0),{h:a,l}=V.add(this.Ch|0,this.Cl|0,a|0,l|0),{h:u,l:f}=V.add(this.Dh|0,this.Dl|0,u|0,f|0),{h:c,l:d}=V.add(this.Eh|0,this.El|0,c|0,d|0),{h:y,l:v}=V.add(this.Fh|0,this.Fl|0,y|0,v|0),{h:m,l:A}=V.add(this.Gh|0,this.Gl|0,m|0,A|0),{h,l:p}=V.add(this.Hh|0,this.Hl|0,h|0,p|0),this.set(r,i,s,o,a,l,u,f,c,d,y,v,m,A,h,p)}roundClean(){kn.fill(0),Sn.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const gA=Yc(()=>new mA);function yA(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")}const Dd=yA();Dd.crypto||Dd.msCrypto;function wA(t){switch(t){case"sha256":return dg.create();case"sha512":return gA.create()}w(!1,"invalid hashing algorithm name","algorithm",t)}const[vg,Ag,Eg]=[[],[],[]],vA=BigInt(0),_i=BigInt(1),AA=BigInt(2),EA=BigInt(7),xA=BigInt(256),bA=BigInt(113);for(let t=0,e=_i,n=1,r=0;t<24;t++){[n,r]=[r,(2*n+3*r)%5],vg.push(2*(5*r+n)),Ag.push((t+1)*(t+2)/2%64);let i=vA;for(let s=0;s<7;s++)e=(e<<_i^(e>>EA)*bA)%xA,e&AA&&(i^=_i<<(_i<n>32?yg(t,e,n):mg(t,e,n),_d=(t,e,n)=>n>32?wg(t,e,n):gg(t,e,n);function PA(t,e=24){const n=new Uint32Array(10);for(let r=24-e;r<24;r++){for(let o=0;o<10;o++)n[o]=t[o]^t[o+10]^t[o+20]^t[o+30]^t[o+40];for(let o=0;o<10;o+=2){const a=(o+8)%10,l=(o+2)%10,u=n[l],f=n[l+1],c=Md(u,f,1)^n[a],d=_d(u,f,1)^n[a+1];for(let y=0;y<50;y+=10)t[o+y]^=c,t[o+y+1]^=d}let i=t[2],s=t[3];for(let o=0;o<24;o++){const a=Ag[o],l=Md(i,s,a),u=_d(i,s,a),f=vg[o];i=t[f],s=t[f+1],t[f]=l,t[f+1]=u}for(let o=0;o<50;o+=10){for(let a=0;a<10;a++)n[a]=t[o+a];for(let a=0;a<10;a++)t[o+a]^=~n[(a+2)%10]&n[(a+4)%10]}t[0]^=kA[r],t[1]^=SA[r]}n.fill(0)}class Xc extends Zc{constructor(e,n,r,i=!1,s=24){if(super(),this.blockLen=e,this.suffix=n,this.outputLen=r,this.enableXOF=i,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,oa(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Hv(this.state)}keccak(){PA(this.state32,this.rounds),this.posOut=0,this.pos=0}update(e){yi(this);const{blockLen:n,state:r}=this;e=Ba(e);const i=e.length;for(let s=0;s=r&&this.keccak();const o=Math.min(r-this.posOut,s-i);e.set(n.subarray(this.posOut,this.posOut+o),i),this.posOut+=o,i+=o}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return oa(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(ag(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){const{blockLen:n,suffix:r,outputLen:i,rounds:s,enableXOF:o}=this;return e||(e=new Xc(n,r,i,o,s)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=s,e.suffix=r,e.outputLen=i,e.enableXOF=o,e.destroyed=this.destroyed,e}}const NA=(t,e,n)=>Yc(()=>new Xc(e,t,n)),CA=NA(1,136,256/8);let xg=!1;const bg=function(t){return CA(t)};let kg=bg;function ke(t){const e=j(t,"data");return I(kg(e))}ke._=bg;ke.lock=function(){xg=!0};ke.register=function(t){if(xg)throw new TypeError("keccak256 is locked");kg=t};Object.freeze(ke);const Sg=function(t){return wA("sha256").update(t).digest()};let Pg=Sg,Ng=!1;function Ni(t){const e=j(t,"data");return I(Pg(e))}Ni._=Sg;Ni.lock=function(){Ng=!0};Ni.register=function(t){if(Ng)throw new Error("sha256 is locked");Pg=t};Object.freeze(Ni);Object.freeze(Ni);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */BigInt(0);const TA=BigInt(1),IA=BigInt(2),Oa=t=>t instanceof Uint8Array,RA=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function wi(t){if(!Oa(t))throw new Error("Uint8Array expected");let e="";for(let n=0;nr+i.length,0));let n=0;return t.forEach(r=>{if(!Oa(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}const tf=t=>(IA<new Uint8Array(t),zd=t=>Uint8Array.from(t);function Cg(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=El(t),i=El(t),s=0;const o=()=>{r.fill(1),i.fill(0),s=0},a=(...c)=>n(i,r,...c),l=(c=El())=>{i=a(zd([0]),c),r=a(),c.length!==0&&(i=a(zd([1]),c),r=a())},u=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let c=0;const d=[];for(;c{o(),l(c);let y;for(;!(y=d(u()));)l();return o(),y}}const BA={bigint:t=>typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||t instanceof Uint8Array,isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function Ms(t,e,n={}){const r=(i,s,o)=>{const a=BA[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);const l=t[i];if(!(o&&l===void 0)&&!a(l,t))throw new Error(`Invalid param ${String(i)}=${l} (${typeof l}), expected ${s}`)};for(const[i,s]of Object.entries(e))r(i,s,!1);for(const[i,s]of Object.entries(n))r(i,s,!0);return t}const OA=Object.freeze(Object.defineProperty({__proto__:null,bitMask:tf,bytesToHex:wi,bytesToNumberBE:gr,bytesToNumberLE:qc,concatBytes:xs,createHmacDrbg:Cg,ensureBytes:Rt,hexToBytes:Es,hexToNumber:$c,numberToBytesBE:vi,numberToBytesLE:ef,validateObject:Ms},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Ie=BigInt(0),xe=BigInt(1),ir=BigInt(2),LA=BigInt(3),Ou=BigInt(4),Hd=BigInt(5),Gd=BigInt(8);BigInt(9);BigInt(16);function $e(t,e){const n=t%e;return n>=Ie?n:e+n}function UA(t,e,n){if(n<=Ie||e 0");if(n===xe)return Ie;let r=xe;for(;e>Ie;)e&xe&&(r=r*t%n),t=t*t%n,e>>=xe;return r}function vt(t,e,n){let r=t;for(;e-- >Ie;)r*=r,r%=n;return r}function Lu(t,e){if(t===Ie||e<=Ie)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let n=$e(t,e),r=e,i=Ie,s=xe;for(;n!==Ie;){const a=r/n,l=r%n,u=i-s*a;r=n,n=l,i=s,s=u}if(r!==xe)throw new Error("invert: does not exist");return $e(i,e)}function FA(t){const e=(t-xe)/ir;let n,r,i;for(n=t-xe,r=0;n%ir===Ie;n/=ir,r++);for(i=ir;i(r[i]="function",r),e);return Ms(t,n)}function zA(t,e,n){if(n 0");if(n===Ie)return t.ONE;if(n===xe)return e;let r=t.ONE,i=e;for(;n>Ie;)n&xe&&(r=t.mul(r,i)),i=t.sqr(i),n>>=xe;return r}function HA(t,e){const n=new Array(e.length),r=e.reduce((s,o,a)=>t.is0(o)?s:(n[a]=s,t.mul(s,o)),t.ONE),i=t.inv(r);return e.reduceRight((s,o,a)=>t.is0(o)?s:(n[a]=t.mul(s,n[a]),t.mul(s,o)),i),n}function Tg(t,e){const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function GA(t,e,n=!1,r={}){if(t<=Ie)throw new Error(`Expected Field ORDER > 0, got ${t}`);const{nBitLength:i,nByteLength:s}=Tg(t,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");const o=DA(t),a=Object.freeze({ORDER:t,BITS:i,BYTES:s,MASK:tf(i),ZERO:Ie,ONE:xe,create:l=>$e(l,t),isValid:l=>{if(typeof l!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof l}`);return Ie<=l&&ll===Ie,isOdd:l=>(l&xe)===xe,neg:l=>$e(-l,t),eql:(l,u)=>l===u,sqr:l=>$e(l*l,t),add:(l,u)=>$e(l+u,t),sub:(l,u)=>$e(l-u,t),mul:(l,u)=>$e(l*u,t),pow:(l,u)=>zA(a,l,u),div:(l,u)=>$e(l*Lu(u,t),t),sqrN:l=>l*l,addN:(l,u)=>l+u,subN:(l,u)=>l-u,mulN:(l,u)=>l*u,inv:l=>Lu(l,t),sqrt:r.sqrt||(l=>o(a,l)),invertBatch:l=>HA(a,l),cmov:(l,u,f)=>f?u:l,toBytes:l=>n?ef(l,s):vi(l,s),fromBytes:l=>{if(l.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${l.length}`);return n?qc(l):gr(l)}});return Object.freeze(a)}function Ig(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function Rg(t){const e=Ig(t);return e+Math.ceil(e/2)}function QA(t,e,n=!1){const r=t.length,i=Ig(e),s=Rg(e);if(r<16||r1024)throw new Error(`expected ${s}-1024 bytes of input, got ${r}`);const o=n?gr(t):qc(t),a=$e(o,e-xe)+xe;return n?ef(a,i):vi(a,i)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const VA=BigInt(0),xl=BigInt(1);function jA(t,e){const n=(i,s)=>{const o=s.negate();return i?o:s},r=i=>{const s=Math.ceil(e/i)+1,o=2**(i-1);return{windows:s,windowSize:o}};return{constTimeNegate:n,unsafeLadder(i,s){let o=t.ZERO,a=i;for(;s>VA;)s&xl&&(o=o.add(a)),a=a.double(),s>>=xl;return o},precomputeWindow(i,s){const{windows:o,windowSize:a}=r(s),l=[];let u=i,f=u;for(let c=0;c>=y,A>l&&(A-=d,o+=xl);const h=m,p=m+Math.abs(A)-1,g=v%2!==0,E=A<0;A===0?f=f.add(n(g,s[h])):u=u.add(n(E,s[p]))}return{p:u,f}},wNAFCached(i,s,o,a){const l=i._WINDOW_SIZE||1;let u=s.get(i);return u||(u=this.precomputeWindow(i,l),l!==1&&s.set(i,a(u))),this.wNAF(l,u,o)}}}function Bg(t){return _A(t.Fp),Ms(t,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Tg(t.n,t.nBitLength),...t,p:t.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function KA(t){const e=Bg(t);Ms(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:i}=e;if(n){if(!r.eql(i,r.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof n!="object"||typeof n.beta!="bigint"||typeof n.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}const{bytesToNumberBE:JA,hexToBytes:WA}=OA,fr={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(t){const{Err:e}=fr;if(t.length<2||t[0]!==2)throw new e("Invalid signature integer tag");const n=t[1],r=t.subarray(2,n+2);if(!n||r.length!==n)throw new e("Invalid signature integer: wrong length");if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:JA(r),l:t.subarray(n+2)}},toSig(t){const{Err:e}=fr,n=typeof t=="string"?WA(t):t;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new e("Invalid signature tag");if(n[1]!==r-2)throw new e("Invalid signature: incorrect length");const{d:i,l:s}=fr._parseInt(n.subarray(2)),{d:o,l:a}=fr._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:i,s:o}},hexFromSig(t){const e=u=>Number.parseInt(u[0],16)&8?"00"+u:u,n=u=>{const f=u.toString(16);return f.length&1?`0${f}`:f},r=e(n(t.s)),i=e(n(t.r)),s=r.length/2,o=i.length/2,a=n(s),l=n(o);return`30${n(o+s+4)}02${l}${i}02${a}${r}`}},nn=BigInt(0),At=BigInt(1);BigInt(2);const Qd=BigInt(3);BigInt(4);function ZA(t){const e=KA(t),{Fp:n}=e,r=e.toBytes||((v,m,A)=>{const h=m.toAffine();return xs(Uint8Array.from([4]),n.toBytes(h.x),n.toBytes(h.y))}),i=e.fromBytes||(v=>{const m=v.subarray(1),A=n.fromBytes(m.subarray(0,n.BYTES)),h=n.fromBytes(m.subarray(n.BYTES,2*n.BYTES));return{x:A,y:h}});function s(v){const{a:m,b:A}=e,h=n.sqr(v),p=n.mul(h,v);return n.add(n.add(p,n.mul(v,m)),A)}if(!n.eql(n.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function o(v){return typeof v=="bigint"&&nnn.eql(g,n.ZERO);return p(A)&&p(h)?c.ZERO:new c(A,h,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){const A=n.invertBatch(m.map(h=>h.pz));return m.map((h,p)=>h.toAffine(A[p])).map(c.fromAffine)}static fromHex(m){const A=c.fromAffine(i(Rt("pointHex",m)));return A.assertValidity(),A}static fromPrivateKey(m){return c.BASE.multiply(l(m))}_setWindowSize(m){this._WINDOW_SIZE=m,u.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:m,y:A}=this.toAffine();if(!n.isValid(m)||!n.isValid(A))throw new Error("bad point: x or y not FE");const h=n.sqr(A),p=s(m);if(!n.eql(h,p))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:m}=this.toAffine();if(n.isOdd)return!n.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){f(m);const{px:A,py:h,pz:p}=this,{px:g,py:E,pz:x}=m,b=n.eql(n.mul(A,x),n.mul(g,p)),P=n.eql(n.mul(h,x),n.mul(E,p));return b&&P}negate(){return new c(this.px,n.neg(this.py),this.pz)}double(){const{a:m,b:A}=e,h=n.mul(A,Qd),{px:p,py:g,pz:E}=this;let x=n.ZERO,b=n.ZERO,P=n.ZERO,k=n.mul(p,p),_=n.mul(g,g),R=n.mul(E,E),H=n.mul(p,g);return H=n.add(H,H),P=n.mul(p,E),P=n.add(P,P),x=n.mul(m,P),b=n.mul(h,R),b=n.add(x,b),x=n.sub(_,b),b=n.add(_,b),b=n.mul(x,b),x=n.mul(H,x),P=n.mul(h,P),R=n.mul(m,R),H=n.sub(k,R),H=n.mul(m,H),H=n.add(H,P),P=n.add(k,k),k=n.add(P,k),k=n.add(k,R),k=n.mul(k,H),b=n.add(b,k),R=n.mul(g,E),R=n.add(R,R),k=n.mul(R,H),x=n.sub(x,k),P=n.mul(R,_),P=n.add(P,P),P=n.add(P,P),new c(x,b,P)}add(m){f(m);const{px:A,py:h,pz:p}=this,{px:g,py:E,pz:x}=m;let b=n.ZERO,P=n.ZERO,k=n.ZERO;const _=e.a,R=n.mul(e.b,Qd);let H=n.mul(A,g),ae=n.mul(h,E),fe=n.mul(p,x),ot=n.add(A,h),T=n.add(g,E);ot=n.mul(ot,T),T=n.add(H,ae),ot=n.sub(ot,T),T=n.add(A,p);let F=n.add(g,x);return T=n.mul(T,F),F=n.add(H,fe),T=n.sub(T,F),F=n.add(h,p),b=n.add(E,x),F=n.mul(F,b),b=n.add(ae,fe),F=n.sub(F,b),k=n.mul(_,T),b=n.mul(R,fe),k=n.add(b,k),b=n.sub(ae,k),k=n.add(ae,k),P=n.mul(b,k),ae=n.add(H,H),ae=n.add(ae,H),fe=n.mul(_,fe),T=n.mul(R,T),ae=n.add(ae,fe),fe=n.sub(H,fe),fe=n.mul(_,fe),T=n.add(T,fe),H=n.mul(ae,T),P=n.add(P,H),H=n.mul(F,T),b=n.mul(ot,b),b=n.sub(b,H),H=n.mul(ot,ae),k=n.mul(F,k),k=n.add(k,H),new c(b,P,k)}subtract(m){return this.add(m.negate())}is0(){return this.equals(c.ZERO)}wNAF(m){return y.wNAFCached(this,u,m,A=>{const h=n.invertBatch(A.map(p=>p.pz));return A.map((p,g)=>p.toAffine(h[g])).map(c.fromAffine)})}multiplyUnsafe(m){const A=c.ZERO;if(m===nn)return A;if(a(m),m===At)return this;const{endo:h}=e;if(!h)return y.unsafeLadder(this,m);let{k1neg:p,k1:g,k2neg:E,k2:x}=h.splitScalar(m),b=A,P=A,k=this;for(;g>nn||x>nn;)g&At&&(b=b.add(k)),x&At&&(P=P.add(k)),k=k.double(),g>>=At,x>>=At;return p&&(b=b.negate()),E&&(P=P.negate()),P=new c(n.mul(P.px,h.beta),P.py,P.pz),b.add(P)}multiply(m){a(m);let A=m,h,p;const{endo:g}=e;if(g){const{k1neg:E,k1:x,k2neg:b,k2:P}=g.splitScalar(A);let{p:k,f:_}=this.wNAF(x),{p:R,f:H}=this.wNAF(P);k=y.constTimeNegate(E,k),R=y.constTimeNegate(b,R),R=new c(n.mul(R.px,g.beta),R.py,R.pz),h=k.add(R),p=_.add(H)}else{const{p:E,f:x}=this.wNAF(A);h=E,p=x}return c.normalizeZ([h,p])[0]}multiplyAndAddUnsafe(m,A,h){const p=c.BASE,g=(x,b)=>b===nn||b===At||!x.equals(p)?x.multiplyUnsafe(b):x.multiply(b),E=g(this,A).add(g(m,h));return E.is0()?void 0:E}toAffine(m){const{px:A,py:h,pz:p}=this,g=this.is0();m==null&&(m=g?n.ONE:n.inv(p));const E=n.mul(A,m),x=n.mul(h,m),b=n.mul(p,m);if(g)return{x:n.ZERO,y:n.ZERO};if(!n.eql(b,n.ONE))throw new Error("invZ was invalid");return{x:E,y:x}}isTorsionFree(){const{h:m,isTorsionFree:A}=e;if(m===At)return!0;if(A)return A(c,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:m,clearCofactor:A}=e;return m===At?this:A?A(c,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return this.assertValidity(),r(c,this,m)}toHex(m=!0){return wi(this.toRawBytes(m))}}c.BASE=new c(e.Gx,e.Gy,n.ONE),c.ZERO=new c(n.ZERO,n.ONE,n.ZERO);const d=e.nBitLength,y=jA(c,e.endo?Math.ceil(d/2):d);return{CURVE:e,ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:s,isWithinCurveOrder:o}}function YA(t){const e=Bg(t);return Ms(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function XA(t){const e=YA(t),{Fp:n,n:r}=e,i=n.BYTES+1,s=2*n.BYTES+1;function o(T){return nnwi(vi(T,e.nByteLength));function v(T){const F=r>>At;return T>F}function m(T){return v(T)?a(-T):T}const A=(T,F,G)=>gr(T.slice(F,G));class h{constructor(F,G,C){this.r=F,this.s=G,this.recovery=C,this.assertValidity()}static fromCompact(F){const G=e.nByteLength;return F=Rt("compactSignature",F,G*2),new h(A(F,0,G),A(F,G,2*G))}static fromDER(F){const{r:G,s:C}=fr.toSig(Rt("DER",F));return new h(G,C)}assertValidity(){if(!d(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!d(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(F){return new h(this.r,this.s,F)}recoverPublicKey(F){const{r:G,s:C,recovery:B}=this,M=P(Rt("msgHash",F));if(B==null||![0,1,2,3].includes(B))throw new Error("recovery id invalid");const J=B===2||B===3?G+e.n:G;if(J>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const X=B&1?"03":"02",at=u.fromHex(X+y(J)),De=l(J),Ht=a(-M*De),lt=a(C*De),ut=u.BASE.multiplyAndAddUnsafe(at,Ht,lt);if(!ut)throw new Error("point at infinify");return ut.assertValidity(),ut}hasHighS(){return v(this.s)}normalizeS(){return this.hasHighS()?new h(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return Es(this.toDERHex())}toDERHex(){return fr.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Es(this.toCompactHex())}toCompactHex(){return y(this.r)+y(this.s)}}const p={isValidPrivateKey(T){try{return f(T),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const T=Rg(e.n);return QA(e.randomBytes(T),e.n)},precompute(T=8,F=u.BASE){return F._setWindowSize(T),F.multiply(BigInt(3)),F}};function g(T,F=!0){return u.fromPrivateKey(T).toRawBytes(F)}function E(T){const F=T instanceof Uint8Array,G=typeof T=="string",C=(F||G)&&T.length;return F?C===i||C===s:G?C===2*i||C===2*s:T instanceof u}function x(T,F,G=!0){if(E(T))throw new Error("first arg must be private key");if(!E(F))throw new Error("second arg must be public key");return u.fromHex(F).multiply(f(T)).toRawBytes(G)}const b=e.bits2int||function(T){const F=gr(T),G=T.length*8-e.nBitLength;return G>0?F>>BigInt(G):F},P=e.bits2int_modN||function(T){return a(b(T))},k=tf(e.nBitLength);function _(T){if(typeof T!="bigint")throw new Error("bigint expected");if(!(nn<=T&&TYn in G))throw new Error("sign() legacy options not supported");const{hash:C,randomBytes:B}=e;let{lowS:M,prehash:J,extraEntropy:X}=G;M==null&&(M=!0),T=Rt("msgHash",T),J&&(T=Rt("prehashed msgHash",C(T)));const at=P(T),De=f(F),Ht=[_(De),_(at)];if(X!=null){const Yn=X===!0?B(n.BYTES):X;Ht.push(Rt("extraEntropy",Yn))}const lt=xs(...Ht),ut=at;function Va(Yn){const Br=b(Yn);if(!d(Br))return;const df=l(Br),Gt=u.BASE.multiply(Br).toAffine(),Or=a(Gt.x);if(Or===nn)return;const Vs=a(df*a(ut+Or*De));if(Vs===nn)return;let hf=(Gt.x===Or?0:2)|Number(Gt.y&At),pf=Vs;return M&&v(Vs)&&(pf=m(Vs),hf^=1),new h(Or,pf,hf)}return{seed:lt,k2sig:Va}}const H={lowS:e.lowS,prehash:!1},ae={lowS:e.lowS,prehash:!1};function fe(T,F,G=H){const{seed:C,k2sig:B}=R(T,F,G),M=e;return Cg(M.hash.outputLen,M.nByteLength,M.hmac)(C,B)}u.BASE._setWindowSize(8);function ot(T,F,G,C=ae){const B=T;if(F=Rt("msgHash",F),G=Rt("publicKey",G),"strict"in C)throw new Error("options.strict was renamed to lowS");const{lowS:M,prehash:J}=C;let X,at;try{if(typeof B=="string"||B instanceof Uint8Array)try{X=h.fromDER(B)}catch(Gt){if(!(Gt instanceof fr.Err))throw Gt;X=h.fromCompact(B)}else if(typeof B=="object"&&typeof B.r=="bigint"&&typeof B.s=="bigint"){const{r:Gt,s:Or}=B;X=new h(Gt,Or)}else throw new Error("PARSE");at=u.fromHex(G)}catch(Gt){if(Gt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(M&&X.hasHighS())return!1;J&&(F=e.hash(F));const{r:De,s:Ht}=X,lt=P(F),ut=l(Ht),Va=a(lt*ut),Yn=a(De*ut),Br=u.BASE.multiplyAndAddUnsafe(at,Va,Yn)?.toAffine();return Br?a(Br.x)===De:!1}return{CURVE:e,getPublicKey:g,getSharedSecret:x,sign:fe,verify:ot,ProjectivePoint:u,Signature:h,utils:p}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function $A(t){return{hash:t,hmac:(e,...n)=>cg(t,e,Vv(...n)),randomBytes:jv}}function qA(t,e){const n=r=>XA({...t,...$A(r)});return Object.freeze({...n(e),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Og=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Vd=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),e1=BigInt(1),Uu=BigInt(2),jd=(t,e)=>(t+e/Uu)/e;function t1(t){const e=Og,n=BigInt(3),r=BigInt(6),i=BigInt(11),s=BigInt(22),o=BigInt(23),a=BigInt(44),l=BigInt(88),u=t*t*t%e,f=u*u*t%e,c=vt(f,n,e)*f%e,d=vt(c,n,e)*f%e,y=vt(d,Uu,e)*u%e,v=vt(y,i,e)*y%e,m=vt(v,s,e)*v%e,A=vt(m,a,e)*m%e,h=vt(A,l,e)*A%e,p=vt(h,a,e)*m%e,g=vt(p,n,e)*f%e,E=vt(g,o,e)*v%e,x=vt(E,r,e)*u%e,b=vt(x,Uu,e);if(!Fu.eql(Fu.sqr(b),t))throw new Error("Cannot find square root");return b}const Fu=GA(Og,void 0,void 0,{sqrt:t1}),Pn=qA({a:BigInt(0),b:BigInt(7),Fp:Fu,n:Vd,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:t=>{const e=Vd,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-e1*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=n,o=BigInt("0x100000000000000000000000000000000"),a=jd(s*t,e),l=jd(-r*t,e);let u=$e(t-a*n-l*i,e),f=$e(-a*r-l*s,e);const c=u>o,d=f>o;if(c&&(u=e-u),d&&(f=e-f),u>o||f>o)throw new Error("splitScalar: Endomorphism failed, k="+t);return{k1neg:c,k1:u,k2neg:d,k2:f}}}},dg);BigInt(0);Pn.ProjectivePoint;const bs="0x0000000000000000000000000000000000000000",Kd="0x0000000000000000000000000000000000000000000000000000000000000000",Jd=BigInt(0),Wd=BigInt(1),Du=BigInt(2),Zd=BigInt(27),Yd=BigInt(28),ho=BigInt(35),Lg=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),n1=Lg/Du,r1=Symbol.for("nodejs.util.inspect.custom"),$n={};function bl(t){return yn(Se(t),32)}class de{#e;#t;#n;#r;get r(){return this.#e}set r(e){w(si(e)===32,"invalid r","value",e),this.#e=I(e)}get s(){return w(parseInt(this.#t.substring(0,3))<8,"non-canonical s; use ._s","s",this.#t),this.#t}set s(e){w(si(e)===32,"invalid s","value",e),this.#t=I(e)}get _s(){return this.#t}isValid(){return BigInt(this.#t)<=n1}get v(){return this.#n}set v(e){const n=Q(e,"value");w(n===27||n===28,"invalid v","v",e),this.#n=n}get networkV(){return this.#r}get legacyChainId(){const e=this.networkV;return e==null?null:de.getChainId(e)}get yParity(){return this.v===27?0:1}get yParityAndS(){const e=j(this.s);return this.yParity&&(e[0]|=128),I(e)}get compactSerialized(){return ce([this.r,this.yParityAndS])}get serialized(){return ce([this.r,this.s,this.yParity?"0x1c":"0x1b"])}constructor(e,n,r,i){Us(e,$n,"Signature"),this.#e=n,this.#t=r,this.#n=i,this.#r=null}getCanonical(){if(this.isValid())return this;const e=Lg-BigInt(this._s),n=55-this.v,r=new de($n,this.r,bl(e),n);return this.networkV&&(r.#r=this.networkV),r}clone(){const e=new de($n,this.r,this._s,this.v);return this.networkV&&(e.#r=this.networkV),e}toJSON(){const e=this.networkV;return{_type:"signature",networkV:e!=null?e.toString():null,r:this.r,s:this._s,v:this.v}}[r1](){return this.toString()}toString(){return this.isValid()?`Signature { r: ${this.r}, s: ${this._s}, v: ${this.v} }`:`Signature { r: ${this.r}, s: ${this._s}, v: ${this.v}, valid: false }`}static getChainId(e){const n=U(e,"v");return n==Zd||n==Yd?Jd:(w(n>=ho,"invalid EIP-155 v","v",e),(n-ho)/Du)}static getChainIdV(e,n){return U(e)*Du+BigInt(35+n-27)}static getNormalizedV(e){const n=U(e);return n===Jd||n===Zd?27:n===Wd||n===Yd?28:(w(n>=ho,"invalid v","v",e),n&Wd?27:28)}static from(e){function n(u,f){w(u,f,"signature",e)}if(e==null)return new de($n,Kd,Kd,27);if(typeof e=="string"){const u=j(e,"signature");if(u.length===64){const f=I(u.slice(0,32)),c=u.slice(32,64),d=c[0]&128?28:27;return c[0]&=127,new de($n,f,I(c),d)}if(u.length===65){const f=I(u.slice(0,32)),c=I(u.slice(32,64)),d=de.getNormalizedV(u[64]);return new de($n,f,c,d)}n(!1,"invalid raw signature length")}if(e instanceof de)return e.clone();const r=e.r;n(r!=null,"missing r");const i=bl(r),s=function(u,f){if(u!=null)return bl(u);if(f!=null){n(ie(f,32),"invalid yParityAndS");const c=j(f);return c[0]&=127,I(c)}n(!1,"missing s")}(e.s,e.yParityAndS),{networkV:o,v:a}=function(u,f,c){if(u!=null){const d=U(u);return{networkV:d>=ho?d:void 0,v:de.getNormalizedV(d)}}if(f!=null)return n(ie(f,32),"invalid yParityAndS"),{v:j(f)[0]&128?28:27};if(c!=null){switch(Q(c,"sig.yParity")){case 0:return{v:27};case 1:return{v:28}}n(!1,"invalid yParity")}n(!1,"missing v")}(e.v,e.yParityAndS,e.yParity),l=new de($n,i,s,a);return o&&(l.#r=o),n(e.yParity==null||Q(e.yParity,"sig.yParity")===l.yParity,"yParity mismatch"),n(e.yParityAndS==null||e.yParityAndS===l.yParityAndS,"yParityAndS mismatch"),l}}class rn{#e;constructor(e){w(si(e)===32,"invalid private key","privateKey","[REDACTED]"),this.#e=I(e)}get privateKey(){return this.#e}get publicKey(){return rn.computePublicKey(this.#e)}get compressedPublicKey(){return rn.computePublicKey(this.#e,!0)}sign(e){w(si(e)===32,"invalid digest length","digest",e);const n=Pn.sign(Ve(e),Ve(this.#e),{lowS:!0});return de.from({r:jn(n.r,32),s:jn(n.s,32),v:n.recovery?28:27})}computeSharedSecret(e){const n=rn.computePublicKey(e);return I(Pn.getSharedSecret(Ve(this.#e),j(n),!1))}static computePublicKey(e,n){let r=j(e,"key");if(r.length===32){const s=Pn.getPublicKey(r,!!n);return I(s)}if(r.length===64){const s=new Uint8Array(65);s[0]=4,s.set(r,1),r=s}const i=Pn.ProjectivePoint.fromHex(r);return I(i.toRawBytes(n))}static recoverPublicKey(e,n){w(si(e)===32,"invalid digest length","digest",e);const r=de.from(n);let i=Pn.Signature.fromCompact(Ve(ce([r.r,r.s])));i=i.addRecoveryBit(r.yParity);const s=i.recoverPublicKey(Ve(e));return w(s!=null,"invalid signature for digest","signature",n),"0x"+s.toHex(!1)}static addPoints(e,n,r){const i=Pn.ProjectivePoint.fromHex(rn.computePublicKey(e).substring(2)),s=Pn.ProjectivePoint.fromHex(rn.computePublicKey(n).substring(2));return"0x"+i.add(s).toHex(!!r)}}const i1=BigInt(0),s1=BigInt(36);function Xd(t){t=t.toLowerCase();const e=t.substring(2).split(""),n=new Uint8Array(40);for(let i=0;i<40;i++)n[i]=e[i].charCodeAt(0);const r=j(ke(n));for(let i=0;i<40;i+=2)r[i>>1]>>4>=8&&(e[i]=e[i].toUpperCase()),(r[i>>1]&15)>=8&&(e[i+1]=e[i+1].toUpperCase());return"0x"+e.join("")}const nf={};for(let t=0;t<10;t++)nf[String(t)]=String(t);for(let t=0;t<26;t++)nf[String.fromCharCode(65+t)]=String(10+t);const $d=15;function o1(t){t=t.toUpperCase(),t=t.substring(4)+t.substring(0,2)+"00";let e=t.split("").map(r=>nf[r]).join("");for(;e.length>=$d;){let r=e.substring(0,$d);e=parseInt(r,10)%97+e.substring(r.length)}let n=String(98-parseInt(e,10)%97);for(;n.length<2;)n="0"+n;return n}const a1=function(){const t={};for(let e=0;e<36;e++){const n="0123456789abcdefghijklmnopqrstuvwxyz"[e];t[n]=BigInt(e)}return t}();function l1(t){t=t.toLowerCase();let e=i1;for(let n=0;ne.format()).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return this.type.startsWith("bytes")}isString(){return this.type==="string"}get tupleName(){if(this.type!=="tuple")throw TypeError("not a tuple");return this.#e}get arrayLength(){if(this.type!=="array")throw TypeError("not an array");return this.#e===!0?-1:this.#e===!1?this.value.length:null}static from(e,n){return new ve(qt,e,n)}static uint8(e){return O(e,8)}static uint16(e){return O(e,16)}static uint24(e){return O(e,24)}static uint32(e){return O(e,32)}static uint40(e){return O(e,40)}static uint48(e){return O(e,48)}static uint56(e){return O(e,56)}static uint64(e){return O(e,64)}static uint72(e){return O(e,72)}static uint80(e){return O(e,80)}static uint88(e){return O(e,88)}static uint96(e){return O(e,96)}static uint104(e){return O(e,104)}static uint112(e){return O(e,112)}static uint120(e){return O(e,120)}static uint128(e){return O(e,128)}static uint136(e){return O(e,136)}static uint144(e){return O(e,144)}static uint152(e){return O(e,152)}static uint160(e){return O(e,160)}static uint168(e){return O(e,168)}static uint176(e){return O(e,176)}static uint184(e){return O(e,184)}static uint192(e){return O(e,192)}static uint200(e){return O(e,200)}static uint208(e){return O(e,208)}static uint216(e){return O(e,216)}static uint224(e){return O(e,224)}static uint232(e){return O(e,232)}static uint240(e){return O(e,240)}static uint248(e){return O(e,248)}static uint256(e){return O(e,256)}static uint(e){return O(e,256)}static int8(e){return O(e,-8)}static int16(e){return O(e,-16)}static int24(e){return O(e,-24)}static int32(e){return O(e,-32)}static int40(e){return O(e,-40)}static int48(e){return O(e,-48)}static int56(e){return O(e,-56)}static int64(e){return O(e,-64)}static int72(e){return O(e,-72)}static int80(e){return O(e,-80)}static int88(e){return O(e,-88)}static int96(e){return O(e,-96)}static int104(e){return O(e,-104)}static int112(e){return O(e,-112)}static int120(e){return O(e,-120)}static int128(e){return O(e,-128)}static int136(e){return O(e,-136)}static int144(e){return O(e,-144)}static int152(e){return O(e,-152)}static int160(e){return O(e,-160)}static int168(e){return O(e,-168)}static int176(e){return O(e,-176)}static int184(e){return O(e,-184)}static int192(e){return O(e,-192)}static int200(e){return O(e,-200)}static int208(e){return O(e,-208)}static int216(e){return O(e,-216)}static int224(e){return O(e,-224)}static int232(e){return O(e,-232)}static int240(e){return O(e,-240)}static int248(e){return O(e,-248)}static int256(e){return O(e,-256)}static int(e){return O(e,-256)}static bytes1(e){return $(e,1)}static bytes2(e){return $(e,2)}static bytes3(e){return $(e,3)}static bytes4(e){return $(e,4)}static bytes5(e){return $(e,5)}static bytes6(e){return $(e,6)}static bytes7(e){return $(e,7)}static bytes8(e){return $(e,8)}static bytes9(e){return $(e,9)}static bytes10(e){return $(e,10)}static bytes11(e){return $(e,11)}static bytes12(e){return $(e,12)}static bytes13(e){return $(e,13)}static bytes14(e){return $(e,14)}static bytes15(e){return $(e,15)}static bytes16(e){return $(e,16)}static bytes17(e){return $(e,17)}static bytes18(e){return $(e,18)}static bytes19(e){return $(e,19)}static bytes20(e){return $(e,20)}static bytes21(e){return $(e,21)}static bytes22(e){return $(e,22)}static bytes23(e){return $(e,23)}static bytes24(e){return $(e,24)}static bytes25(e){return $(e,25)}static bytes26(e){return $(e,26)}static bytes27(e){return $(e,27)}static bytes28(e){return $(e,28)}static bytes29(e){return $(e,29)}static bytes30(e){return $(e,30)}static bytes31(e){return $(e,31)}static bytes32(e){return $(e,32)}static address(e){return new ve(qt,"address",e)}static bool(e){return new ve(qt,"bool",!!e)}static bytes(e){return new ve(qt,"bytes",e)}static string(e){return new ve(qt,"string",e)}static array(e,n){throw new Error("not implemented yet")}static tuple(e,n){throw new Error("not implemented yet")}static overrides(e){return new ve(qt,"overrides",Object.assign({},e))}static isTyped(e){return e&&typeof e=="object"&&"_typedSymbol"in e&&e._typedSymbol===qd}static dereference(e,n){if(ve.isTyped(e)){if(e.type!==n)throw new Error(`invalid type: expecetd ${n}, got ${e.type}`);return e.value}return e}}class c1 extends An{constructor(e){super("address","address",e,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(e,n){let r=ve.dereference(n,"string");try{r=q(r)}catch(i){return this._throwError(i.message,n)}return e.writeValue(r)}decode(e){return q(jn(e.readValue(),20))}}class f1 extends An{coder;constructor(e){super(e.name,e.type,"_",e.dynamic),this.coder=e}defaultValue(){return this.coder.defaultValue()}encode(e,n){return this.coder.encode(e,n)}decode(e){return this.coder.decode(e)}}function Fg(t,e,n){let r=[];if(Array.isArray(n))r=n;else if(n&&typeof n=="object"){let l={};r=e.map(u=>{const f=u.localName;return S(f,"cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:u},value:n}),S(!l[f],"cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:u},value:n}),l[f]=!0,n[f]})}else w(!1,"invalid tuple value","tuple",n);w(e.length===r.length,"types/value length mismatch","tuple",n);let i=new Ru,s=new Ru,o=[];e.forEach((l,u)=>{let f=r[u];if(l.dynamic){let c=s.length;l.encode(s,f);let d=i.writeUpdatableValue();o.push(y=>{d(y+c)})}else l.encode(i,f)}),o.forEach(l=>{l(i.length)});let a=t.appendWriter(i);return a+=t.appendWriter(s),a}function Dg(t,e){let n=[],r=[],i=t.subReader(0);return e.forEach(s=>{let o=null;if(s.dynamic){let a=t.readIndex(),l=i.subReader(a);try{o=s.decode(l)}catch(u){if(Le(u,"BUFFER_OVERRUN"))throw u;o=u,o.baseType=s.name,o.name=s.localName,o.type=s.type}}else try{o=s.decode(t)}catch(a){if(Le(a,"BUFFER_OVERRUN"))throw a;o=a,o.baseType=s.name,o.name=s.localName,o.type=s.type}if(o==null)throw new Error("investigate");n.push(o),r.push(s.localName||null)}),an.fromItems(n,r)}class d1 extends An{coder;length;constructor(e,n,r){const i=e.type+"["+(n>=0?n:"")+"]",s=n===-1||e.dynamic;super("array",i,r,s),z(this,{coder:e,length:n})}defaultValue(){const e=this.coder.defaultValue(),n=[];for(let r=0;rs||r<-(s+v1))&&this._throwError("value out-of-bounds",n),r=Xm(r,8*je)}else(rcr(i,this.size*8))&&this._throwError("value out-of-bounds",n);return e.writeValue(r)}decode(e){let n=cr(e.readValue(),this.size*8);return this.signed&&(n=ia(n,this.size*8)),n}}class x1 extends Mg{constructor(e){super("string",e)}defaultValue(){return""}encode(e,n){return super.encode(e,cn(ve.dereference(n,"string")))}decode(e){return sa(super.decode(e))}}class po extends An{coders;constructor(e,n){let r=!1;const i=[];e.forEach(o=>{o.dynamic&&(r=!0),i.push(o.type)});const s="tuple("+i.join(",")+")";super("tuple",s,n,r),z(this,{coders:Object.freeze(e.slice())})}defaultValue(){const e=[];this.coders.forEach(r=>{e.push(r.defaultValue())});const n=this.coders.reduce((r,i)=>{const s=i.localName;return s&&(r[s]||(r[s]=0),r[s]++),r},{});return this.coders.forEach((r,i)=>{let s=r.localName;!s||n[s]!==1||(s==="length"&&(s="_length"),e[s]==null&&(e[s]=e[i]))}),Object.freeze(e)}encode(e,n){const r=ve.dereference(n,"tuple");return Fg(e,this.coders,r)}decode(e){return Dg(e,this.coders)}}function Sl(t,e){return{address:q(t),storageKeys:e.map((n,r)=>(w(ie(n,32),"invalid slot",`storageKeys[${r}]`,n),n.toLowerCase()))}}function Ir(t){if(Array.isArray(t))return t.map((n,r)=>Array.isArray(n)?(w(n.length===2,"invalid slot set",`value[${r}]`,n),Sl(n[0],n[1])):(w(n!=null&&typeof n=="object","invalid address-slot set","value",t),Sl(n.address,n.storageKeys)));w(t!=null&&typeof t=="object","invalid access list","value",t);const e=Object.keys(t).map(n=>{const r=t[n].reduce((i,s)=>(i[s]=!0,i),{});return Sl(n,Object.keys(r).sort())});return e.sort((n,r)=>n.address.localeCompare(r.address)),e}function _g(t){return{address:q(t.address),nonce:U(t.nonce!=null?t.nonce:0),chainId:U(t.chainId!=null?t.chainId:0),signature:de.from(t.signature)}}function b1(t){let e;return typeof t=="string"?e=rn.computePublicKey(t,!1):e=t.publicKey,q(ke("0x"+e.substring(4)).substring(26))}function k1(t,e){return b1(rn.recoverPublicKey(t,e))}const Te=BigInt(0),S1=BigInt(2),P1=BigInt(27),N1=BigInt(28),C1=BigInt(35),T1=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),I1=Symbol.for("nodejs.util.inspect.custom"),Pl=4096*32,Io=128;function R1(t){return{blobToKzgCommitment:r=>{if("computeBlobProof"in t){if("blobToKzgCommitment"in t&&typeof t.blobToKzgCommitment=="function")return j(t.blobToKzgCommitment(I(r)))}else if("blobToKzgCommitment"in t&&typeof t.blobToKzgCommitment=="function")return j(t.blobToKzgCommitment(r));if("blobToKZGCommitment"in t&&typeof t.blobToKZGCommitment=="function")return j(t.blobToKZGCommitment(I(r)));w(!1,"unsupported KZG library","kzg",t)},computeBlobKzgProof:(r,i)=>{if("computeBlobProof"in t&&typeof t.computeBlobProof=="function")return j(t.computeBlobProof(I(r),I(i)));if("computeBlobKzgProof"in t&&typeof t.computeBlobKzgProof=="function")return t.computeBlobKzgProof(r,i);if("computeBlobKZGProof"in t&&typeof t.computeBlobKZGProof=="function")return j(t.computeBlobKZGProof(I(r),I(i)));w(!1,"unsupported KZG library","kzg",t)}}}function eh(t,e){let n=t.toString(16);for(;n.length<2;)n="0"+n;return n+=Ni(e).substring(4),"0x"+n}function Ci(t){return t==="0x"?null:q(t)}function La(t,e){try{return Ir(t)}catch(n){w(!1,n.message,e,t)}}function B1(t,e){try{if(!Array.isArray(t))throw new Error("authorizationList: invalid array");const n=[];for(let r=0;r[e.address,e.storageKeys])}function O1(t){return t.map(e=>[Z(e.chainId,"chainId"),e.address,Z(e.nonce,"nonce"),Z(e.signature.yParity,"yParity"),Se(e.signature.r),Se(e.signature._s)])}function L1(t,e){w(Array.isArray(t),`invalid ${e}`,"value",t);for(let n=0;no.data),n.map(o=>o.commitment),s])])}return ce(["0x03",fn([r,n.map(i=>i.data),n.map(i=>i.commitment),n.map(i=>i.proof)])])}return ce(["0x03",fn(r)])}function Q1(t){const e=Ds(j(t).slice(1));w(Array.isArray(e)&&(e.length===10||e.length===13),"invalid field count for transaction type: 4","data",I(t));const n={type:4,chainId:te(e[0],"chainId"),nonce:Rr(e[1],"nonce"),maxPriorityFeePerGas:te(e[2],"maxPriorityFeePerGas"),maxFeePerGas:te(e[3],"maxFeePerGas"),gasPrice:null,gasLimit:te(e[4],"gasLimit"),to:Ci(e[5]),value:te(e[6],"value"),data:I(e[7]),accessList:La(e[8],"accessList"),authorizationList:B1(e[9],"authorizationList")};return e.length===10||Fa(n,e.slice(10)),n}function V1(t,e){const n=[Z(t.chainId,"chainId"),Z(t.nonce,"nonce"),Z(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),Z(t.maxFeePerGas||0,"maxFeePerGas"),Z(t.gasLimit,"gasLimit"),t.to||"0x",Z(t.value,"value"),t.data,Ua(t.accessList||[]),O1(t.authorizationList||[])];return e&&(n.push(Z(e.yParity,"yParity")),n.push(Se(e.r)),n.push(Se(e.s))),ce(["0x04",fn(n)])}class Bt{#e;#t;#n;#r;#i;#o;#s;#a;#f;#u;#p;#m;#l;#c;#d;#h;#w;#g;get type(){return this.#e}set type(e){switch(e){case null:this.#e=null;break;case 0:case"legacy":this.#e=0;break;case 1:case"berlin":case"eip-2930":this.#e=1;break;case 2:case"london":case"eip-1559":this.#e=2;break;case 3:case"cancun":case"eip-4844":this.#e=3;break;case 4:case"pectra":case"eip-7702":this.#e=4;break;default:w(!1,"unsupported transaction type","type",e)}}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559";case 3:return"eip-4844";case 4:return"eip-7702"}return null}get to(){const e=this.#t;return e==null&&this.type===3?bs:e}set to(e){this.#t=e==null?null:q(e)}get nonce(){return this.#r}set nonce(e){this.#r=Q(e,"value")}get gasLimit(){return this.#i}set gasLimit(e){this.#i=U(e)}get gasPrice(){const e=this.#o;return e==null&&(this.type===0||this.type===1)?Te:e}set gasPrice(e){this.#o=e==null?null:U(e,"gasPrice")}get maxPriorityFeePerGas(){const e=this.#s;return e??(this.type===2||this.type===3?Te:null)}set maxPriorityFeePerGas(e){this.#s=e==null?null:U(e,"maxPriorityFeePerGas")}get maxFeePerGas(){const e=this.#a;return e??(this.type===2||this.type===3?Te:null)}set maxFeePerGas(e){this.#a=e==null?null:U(e,"maxFeePerGas")}get data(){return this.#n}set data(e){this.#n=I(e)}get value(){return this.#f}set value(e){this.#f=U(e,"value")}get chainId(){return this.#u}set chainId(e){this.#u=U(e)}get signature(){return this.#p||null}set signature(e){this.#p=e==null?null:de.from(e)}isValid(){const e=this.signature;if(e&&!e.isValid())return!1;const n=this.authorizationList;if(n){for(const r of n)if(!r.signature.isValid())return!1}return!0}get accessList(){const e=this.#m||null;return e??(this.type===1||this.type===2||this.type===3?[]:null)}set accessList(e){this.#m=e==null?null:Ir(e)}get authorizationList(){const e=this.#w||null;return e==null&&this.type===4?[]:e}set authorizationList(e){this.#w=e==null?null:e.map(n=>_g(n))}get maxFeePerBlobGas(){const e=this.#l;return e==null&&this.type===3?Te:e}set maxFeePerBlobGas(e){this.#l=e==null?null:U(e,"maxFeePerBlobGas")}get blobVersionedHashes(){let e=this.#c;return e==null&&this.type===3?[]:e}set blobVersionedHashes(e){if(e!=null){w(Array.isArray(e),"blobVersionedHashes must be an Array","value",e),e=e.slice();for(let n=0;nObject.assign({},e))}set blobs(e){if(e==null){this.#h=null;return}const n=[],r=[];for(let i=0;i=0?2:e.pop()}inferTypes(){const e=this.gasPrice!=null,n=this.maxFeePerGas!=null||this.maxPriorityFeePerGas!=null,r=this.accessList!=null,i=this.#l!=null||this.#c;this.maxFeePerGas!=null&&this.maxPriorityFeePerGas!=null&&S(this.maxFeePerGas>=this.maxPriorityFeePerGas,"priorityFee cannot be more than maxFee","BAD_DATA",{value:this}),S(!n||this.type!==0&&this.type!==1,"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas","BAD_DATA",{value:this}),S(this.type!==0||!r,"legacy transaction cannot have accessList","BAD_DATA",{value:this});const s=[];return this.type!=null?s.push(this.type):this.authorizationList&&this.authorizationList.length?s.push(4):n?s.push(2):e?(s.push(1),r||s.push(0)):r?(s.push(1),s.push(2)):(i&&this.to||(s.push(0),s.push(1),s.push(2)),s.push(3)),s.sort(),s}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}clone(){return Bt.from(this)}toJSON(){const e=n=>n==null?null:n.toString();return{type:this.type,to:this.to,data:this.data,nonce:this.nonce,gasLimit:e(this.gasLimit),gasPrice:e(this.gasPrice),maxPriorityFeePerGas:e(this.maxPriorityFeePerGas),maxFeePerGas:e(this.maxFeePerGas),value:e(this.value),chainId:e(this.chainId),sig:this.signature?this.signature.toJSON():null,accessList:this.accessList}}[I1](){return this.toString()}toString(){const e=[],n=i=>{let s=this[i];typeof s=="string"&&(s=JSON.stringify(s)),e.push(`${i}: ${s}`)};this.type&&n("type"),n("to"),n("data"),n("nonce"),n("gasLimit"),n("value"),this.chainId!=null&&n("chainId"),this.signature&&(n("from"),e.push(`signature: ${this.signature.toString()}`));const r=this.authorizationList;if(r){const i=[];for(const s of r){const o=[];o.push(`address: ${JSON.stringify(s.address)}`),s.nonce!=null&&o.push(`nonce: ${s.nonce}`),s.chainId!=null&&o.push(`chainId: ${s.chainId}`),s.signature&&o.push(`signature: ${s.signature.toString()}`),i.push(`Authorization { ${o.join(", ")} }`)}e.push(`authorizations: [ ${i.join(", ")} ]`)}return`Transaction { ${e.join(", ")} }`}static from(e){if(e==null)return new Bt;if(typeof e=="string"){const r=j(e);if(r[0]>=127)return Bt.from(U1(r));switch(r[0]){case 1:return Bt.from(_1(r));case 2:return Bt.from(D1(r));case 3:return Bt.from(H1(r));case 4:return Bt.from(Q1(r))}S(!1,"unsupported transaction type","UNSUPPORTED_OPERATION",{operation:"from"})}const n=new Bt;return e.type!=null&&(n.type=e.type),e.to!=null&&(n.to=e.to),e.nonce!=null&&(n.nonce=e.nonce),e.gasLimit!=null&&(n.gasLimit=e.gasLimit),e.gasPrice!=null&&(n.gasPrice=e.gasPrice),e.maxPriorityFeePerGas!=null&&(n.maxPriorityFeePerGas=e.maxPriorityFeePerGas),e.maxFeePerGas!=null&&(n.maxFeePerGas=e.maxFeePerGas),e.maxFeePerBlobGas!=null&&(n.maxFeePerBlobGas=e.maxFeePerBlobGas),e.data!=null&&(n.data=e.data),e.value!=null&&(n.value=e.value),e.chainId!=null&&(n.chainId=e.chainId),e.signature!=null&&(n.signature=de.from(e.signature)),e.accessList!=null&&(n.accessList=e.accessList),e.authorizationList!=null&&(n.authorizationList=e.authorizationList),e.blobVersionedHashes!=null&&(n.blobVersionedHashes=e.blobVersionedHashes),e.kzg!=null&&(n.kzg=e.kzg),e.blobWrapperVersion!=null&&(n.blobWrapperVersion=e.blobWrapperVersion),e.blobs!=null&&(n.blobs=e.blobs),e.hash!=null&&(w(n.isSigned(),"unsigned transaction cannot define '.hash'","tx",e),w(n.hash===e.hash,"hash mismatch","tx",e)),e.from!=null&&(w(n.isSigned(),"unsigned transaction cannot define '.from'","tx",e),w(n.from.toLowerCase()===(e.from||"").toLowerCase(),"from mismatch","tx",e)),n}}function kr(t){return ke(cn(t))}var j1="AEEUdwmgDS8BxQKKAP4BOgDjATAAngDUAIMAoABoAOAAagCOAEQAhABMAHIAOwA9ACsANgAmAGIAHgAuACgAJwAXAC0AGgAjAB8ALwAUACkAEgAeAAkAGwARABkAFgA5ACgALQArADcAFQApABAAHgAiABAAGgAeABMAGAUhBe8BFxREN8sF2wC5AK5HAW8ArQkDzQCuhzc3NzcBP68NEfMABQdHBuw5BV8FYAA9MzkI9r4ZBg7QyQAWA9CeOwLNCjcCjqkChuA/lm+RAsXTAoP6ASfnEQDytQFJAjWVCkeXAOsA6godAB/cwdAUE0WlBCN/AQUCQRjFD/MRBjHxDQSJbw0jBzUAswBxme+tnIcAYwabAysG8QAjAEMMmxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfBC0D3x4BJQDBGdUFAhEgVD8JnwmQJiNWYUzrg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2ChglX1UDYD30ABsAFAAdABZzIGRAnwDD8wAjAEEMzRbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9AMMVbwLpABM1NJEX0ZkCgYMBEyMAxRVvAukAEzUBUFAtmUwSAy4DBTER33EftQHfSwB5MxJ/AjkWKQLzL8E/cwBB6QH9LQDPDtO9ASNriQC5DQANAwCK21EFI91zHwCoL9kBqQcHBwcHKzUDowBvAQohPvU3fAQgHwCyAc8CKQMA5zMSezr7ULgFmDp/LzVQBgEGAi8FYQVgt8AFcTtlQhpCWEmfe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEzmXgIHwABIAGQA8AEUAQDt3gdvIEGcQZAkGTRFMdEIVEwK0D64L7REdDNkq09PgADSxB/MDWwfzA1sDWwfzB/MDWwfzA1sDWwNbA1scEvAi28gQZw9QBHUFlgWTBN4IiyZREYkHMAjaVBV0JhxPA00BBCMtSSQ7mzMTJUpMFE0LCAQ2SmyvfUADTzGzVP2QqgPTMlc5dAkGHnkSqAAyD3skNb1OhnpPcagKU0+2tYdJak5vAsY6sEAACikJm2/Dd1YGRRAfJ6kQ+ww3AbkBPw3xS9wE9QY/BM0fgRkdD9GVoAipLeEM8SbnLqWAXiP5KocF8Uv4POELUVFsD10LaQnnOmeBUgMlAREijwrhDT0IcRD3Cs1vDekRSQc9A9lJngCpBwULFR05FbkmFGKwCw05ewb/GvoLkyazEy17AAXXGiUGUQEtGwMA0y7rhbRaNVwgT2MGBwspI8sUrFAkDSlAu3hMGh8HGSWtApVDdEqLUToelyH6PEENai4XUYAH+TwJGVMLhTyiRq9FEhHWPpE9TCJNTDAEOYMsMyePCdMPiQy9fHYBXQklCbUMdRM1ERs3yQg9Bx0xlygnGQglRplgngT7owP3E9UDDwVDCUUHFwO5HDETMhUtBRGBKNsC9zbZLrcCk1aEARsFzw8pH+MQVEfkDu0InwJpA4cl7wAxFSUAGyKfCEdnAGOP3FMJLs8Iy2pwI3gDaxTrZRF3B5UOWwerHDcVwxzlcMxeD4YMKKezCV8BeQmdAWME5wgNNV+MpCBFZ1eLXBifIGVBQ14AAjUMaRWjRMGHfAKPD28SHwE5AXcHPQ0FAnsR8RFvEJkI74YINbkz/DopBFMhhyAVCisDU2zSCysm/Qz8bQGnEmYDEDRBd/Jnr2C6KBgBBx0yyUFkIfULlk/RDKAaxRhGVDIZ6AfDA/ca9yfuQVsGAwOnBxc6UTPyBMELbQiPCUMATQ6nGwfbGG4KdYzUATWPAbudA1uVhwJzkwY7Bw8Aaw+LBX3pACECqwinAAkA0wNbAD0CsQehAB0AiUUBQQMrMwEl6QKTA5cINc8BmTMB9y0EH8cMGQD7O25OAsO1AoBuZqYF4VwCkgJNOQFRKQQJUktVA7N15QDfAE8GF+NLARmvTs8e50cB43MvAMsA/wAJOQcJRQHRAfdxALsBYws1Caa3uQFR7S0AhwAZbwHbAo0A4QA5AIP1AVcAUQVd/QXXAlNNARU1HC9bZQG/AyMBNwERAH0Gz5GpzQsjBHEH1wIQHxXlAu8yB7kFAyLjE9FCyQK94lkAMhoKPAqrCqpgX2Q3CjV2PVQAEh+sPss/UgVVO1c7XDtXO1w7VztcO1c7XDtXO1wDm8Pmw+YKcF9JYe8Mqg3YRMw6TRPfYFVgNhPMLbsUxRXSJVoZQRrAJwkl6FUNDwgt12Y0CDA0eRfAAEMpbINFY4oeNApPHOtTlVT8LR8AtUumM7MNsBsZREQFS3XxYi4WEgomAmSFAmJGX1GzAV83JAKh+wJonAJmDQKfiDgfDwJmPwJmKgRyBIMDfxcDfpY5Cjl7GzmGOicnAmwhAjI6OA4CbcsCbbLzjgM3a0kvAWsA4gDlAE4JB5wMkQECD8YAEbkCdzMCdqZDAnlPRwJ4viFg30WyRvcCfEMCeswCfQ0CfPRIBEiBZygALxlJXEpfGRtK0ALRBQLQ0EsrA4hTA4fqRMmRNgLypV0HAwOyS9JMMSkH001QTbMCi0MCitzFHwshR2sJuwKOOwKOYESbhQKO3QKOYHxRuFM5AQ5S2FSJApP/ApMQAO0AIFUiVbNV1AosHymZijLleGpFPz0Cl6MC77ZYJawAXSkClpMCloCgAK1ZsFoNhVEAPwKWuQKWUlxIXNUCmc8CmWhczl0LHQKcnznGOqECnBoCn58CnryOACETNS4TAp31Ap6WALlBYThh8wKe1wKgcgGtAp6jIwKeUqljzGQrKS8CJ7MCJoICoP8CoFDbAqYzAqXSAqgDAIECp/ZogGi1AAdNaiBq1QKs5wKssgKtawKtBgJXIQJV4AKx5dsDH1JsmwKywRECsuwbbORtZ21MYwMl0QK2YD9DbpQDKUkCuGICuUsZArkue3A6cOUCvR0DLbYDMhUCvoxyBgMzdQK+HnMmc1MCw88CwwhzhnRPOUl05AM8qwEDPJ4DPcMCxYACxksCxhSNAshtVQLISALJUwLJMgJkoQLd1nh9ZXiyeSlL1AMYp2cGAmH4GfeVKHsPXpZevxUCz28Cz3AzT1fW9xejAMqxAs93AS3uA04Wfk8JAtwrAtuOAtJTA1JgA1NjAQUDVZCAjUMEzxrxZEl5A4LSg5EC2ssC2eKEFIRNp0ADhqkAMwNkEoZ1Xf0AWQLfaQLevHd7AuIz7RgB8zQrAfSfAfLWiwLr9wLpdH0DAur9AuroAP1LAb0C7o0C66CWrpcHAu5DA4XkmH1w5HGlAvMHAG0DjhqZlwL3FwORcgOSiwL3nAL53QL4apogmq+/O5siA52HAv7+AR8APZ8gAZ+3AwWRA6ZuA6bdANXJAwZuoYyiCQ0DDE0BEwEjB3EGZb1rCQC/BG/DFY8etxEAG3k9ACcDNxJRA42DAWcrJQCM8wAlAOanC6OVCLsGI6fJBgCvBRnDBvElRUYFFoAFcD9GSDNCKUK8X3kZX8QAls0FOgCQVCGbwTsuYDoZutcONxjOGJHJ/gVfBWAFXwVgBWsFYAVfBWAFXwVgBV8FYAVfBWBOHQjfjW8KCgoKbF7xMwTRA7kGN8PDAMMEr8MA70gxFroFTj5xPnhCR0K+X30/X/AAWBkzswCNBsxzzASm70aCRS4rDDMeLz49fnXfcsH5GcoscQFz13Y4HwVnBXLJycnACNdRYwgICAqEXoWTxgA7P4kACxbZBu21Kw0AjMsTAwkVAOVtJUUsJ1JCuULESUArXy9gPi9AKwnJRQYKTD9LPoA+iT54PnkCkULEUUpDX9NWV3JVEjQAc1w3A3IBE3YnX+g7QiMJb6MKaiszRCUuQrNCxDPMCcwEX9EWJzYREBEEBwIHKn6l33JCNVIfybPJtAltydPUCmhBZw/tEKsZAJOVJU1CLRuxbUHOQAo7P0s+eEJHHA8SJVRPdGM0NVrpvBoKhfUlM0JHHGUQUhEWO1xLSj8MO0ucNAqJIzVCRxv9EFsqKyA4OQgNj2nwZgp5ZNFgE2A1K3YHS2AhQQojJmC7DgpzGG1WYFUZCQYHZO9gHWCdYIVgu2BTYJlwFh8GvRbcXbG8YgtDHrMBwzPVyQonHQgkCyYBgQJ0Ajc4nVqIAwGSCsBPIgDsK3SWEtIVBa5N8gGjAo+kVwVIZwD/AEUSCDweX4ITrRQsJ8K3TwBXFDwEAB0TvzVcAtoTS20RIwDgVgZ9BBImYgA5AL4Coi8LFnezOkCnIQFjAY4KBAPh9RcGsgZSBsEAJctdsWIRu2kTkQstRw7DAcMBKgpPBGIGMDAwKCYnKTQaLg4AKRSVAFwCdl+YUZ0JdicFD3lPAdt1F9ZZKCGxuE3yBxkFVGcA/wBFEgiCBwAOLHQSjxOtQDg1z7deFRMAZ8QTAGtKb1ApIiPHADkAvgKiLy1DFtYCmBiDAlDDWNB0eo7fpaMO/aEVRRv0ATEQZBIODyMEAc8JQhCbDRgzFD4TAEMAu9YBCgCsAOkAm5I3ABwAYxvONnR+MhXJAxgKQyxL2+kkJhMbhQKDBMkSsvF0AD9BNQ6uQC7WqSQHwxEAEEIu1hkhAH2z4iQPwyJPHNWpdyYBRSpnJALzoBAEVPPsH20MxA0CCEQKRgAFyAtFAlMNwwjEDUQJRArELtapMg7DDZgJIw+TGukEIwvDFkMAqAtDEMMMBhioe+QAO3MMRAACrgnEBSPY9Q0FDnbSBoMAB8MSYxkSxAEJAPIJAAB8FWMOFtMc/HcXwxhDAC7DAvOowwAewwJdKDKHAAHDAALrFUQVwwAbwyvzpWMWv8wA/ABpAy++bcYDUKPD0KhDCwKmJ1MAAmMA5+UZwxAagwipBRL/eADfw6fDGOMCGsOjk3l6BwOpo4sAEsMOGxMAA5sAbcMOAAvDp0MJGkMDwgipnNIPAwfIqUMGAOGDAAPzABXDAAcDAAnDAGmTABrDAA7DChjDjnEWAwABYwAOcwAuUyYABsMAF8MIKQANUgC6wy4AA8MADqMq8wCyYgAcIwAB8wqpAAXOCx0V4wAHowBCwwEKAGnDAAuDAB3DAAjDCakABdIAbqcZ3QCZCCkABdIAAAFDAAfjAB2jCCkABqIACYMAGzMAbSMA5sOIAAhjAAhDABTDBAkpAAbSAOOTAAlDC6kOzPtnAAdDAG6kQFAATwAKwwwAA0MACbUDPwAHIwAZgwACE6cDAAojAApDAAoDp/MGwwAJIwADEwAQQwgAFEMAEXMAD5MADfMADcMAGRMOFiMAFUMAbqMWuwHDAMIAE0MLAGkzEgDhUwACQwAEWgAXgwUjAAbYABjDBSYBgzBaAEFNALcQBxUMegAwMngBrA0IZgJ0KxQHBREPd1N0ZzKRJwaIHAZqNT4DqQq8BwngAB4DAwt2AX56T1ocKQNXAh1GATQGC3tOxYNagkgAMQA5CQADAQEAWxLjAIOYNAEzAH7tFRk6TglSAF8NAAlYAQ+S1ACAQwQorQBiAN4dAJ1wPyeTANVzuQDX3AIeEMp9eyMgXiUAEdkBkJizKltbVVAaRMqRAAEAhyQ/SDEz6BmfVwB6ATEsOClKIRcDOF0E/832AFNt5AByAnkCRxGCOs94NjXdAwINGBonDBwPALW2AwICAgAAAAAAAAYDBQMDARrUAwAtAAAAAgEGBgYGBgYFBQUFBQUEBQYHCAkEBQUFBQQAAAICAAAAIgCNAJAAlT0A6gC7ANwApEQAwgCyAK0AqADuAKYA2gCjAOcBCAEDAMcAgQBiANIA1AEDAN4A8gCQAKkBMQDqAN8A3AsBCQ8yO9ra2tq8xuLT1tRJOB0BUgFcNU0BWgFpAWgBWwFMUUlLbhMBUxsNEAs6PhMOACcUKy0vMj5AQENDQ0RFFEYGJFdXV1dZWVhZL1pbXVxcI2NnZ2ZoZypsbnZ1eHh4eHh4enp6enp6enp6enp8fH18e2IARPIASQCaAHgAMgBm+ACOAFcAVwA3AnbvAIsABfj4AGQAk/IAnwBPAGIAZP//sACFAIUAaQBWALEAJAC2AIMCQAJDAPwA5wD+AP4A6AD/AOkA6QDoAOYALwJ7AVEBQAE+AVQBPgE+AT4BOQE4ATgBOAEcAVgXADEQCAEAUx8SHgsdHhYAjgCWAKYAUQBqIAIxAHYAbwCXAxUDJzIDIUlGTzEAkQJPAMcCVwKkAMAClgKWApYClgKWApYCiwKWApYClgKWApYClgKVApUCmAKgApcClgKWApQClAKUApQCkgKVAnUB1AKXAp8ClgKWApUeAIETBQD+DQOfAmECOh8BVBg9AuIZEjMbAU4/G1WZAXusRAFpYQEFA0FPAQYAmTEeIJdyADFoAHEANgCRA5zMk/C2jGINwjMWygIZCaXdfDILBCs5dAE7YnQBugDlhoiHhoiGiYqKhouOjIaNkI6Ij4qQipGGkoaThpSSlYaWhpeKmIaZhpqGm4aci52QnoqfhuIC4XTpAt90AIp0LHSoAIsAdHQEQwRABEIERQRDBEkERgRBBEcESQRIBEQERgRJAJ5udACrA490ALxuAQ10ANFZdHQA13QCFHQA/mJ0AP4BIQD+APwA/AD9APwDhGZ03ASMK23HAP4A/AD8AP0A/CR0dACRYnQA/gCRASEA/gCRAvQA/gCRA4RmdNwEjCttxyR0AP9idAEhAP4A/gD8APwA/QD8AP8A/AD8AP0A/AOEZnTcBIwrbcckdHQAkWJ0ASEA/gCRAP4AkQL0AP4AkQOEZnTcBIwrbcckdAJLAT50AlIBQXQCU8l0dAJfdHQDpgL0A6YDpgOnA6cDpwOnA4RmdNwEjCttxyR0dACRYnQBIQOmAJEDpgCRAvQDpgCRA4RmdNwEjCttxyR0BDh0AJEEOQCRDpU5dSgCADR03gV2CwArdAEFAM5iCnR0AF1iAAYcOgp0dACRCnQAXAEIwWZ0CnRmdHQAkWZ0CnRmdEXgAFF03gp0dEY0tlT2u3SOAQTwscwhjZZKrhYcBSfFp9XNbKiVDOD2b+cpe4/Z17mQnbtzzhaeQtE2GGj0IDNTjRUSyTxxw/RPHW/+vS7d1NfRt9z9QPZg4X7QFfhCnkvgNPIItOsC2eV6hPannZNHlZ9xrwZXIMOlu3jSoQSq78WEjwLjw1ELSlF1aBvfzwk5ZX7AUvQzjPQKbDuQ+sm4wNOp4A6AdVuRS0t1y/DZpg4R6m7FNjM9HgvW7Bi88zaMjOo6lM8wtBBdj8LP4ylv3zCXPhebMKJc066o9sF71oFW/8JXu86HJbwDID5lzw5GWLR/LhT0Qqnp2JQxNZNfcbLIzPy+YypqRm/lBmGmex+82+PisxUumSeJkALIT6rJezxMH+CTJmQtt5uwTVbL3ptmjDUQzlSIvWi8Tl7ng1NpuRn1Ng4n14Qc+3Iil7OwkvNWogLSPkn3pihIFytyIGmMhOe3n1tWsuMy9BdKyqF4Z3v2SgggTL9KVvMXPnCbRe+oOuFFP3HejBG/w9gvmfNYvg6JuWia2lcSSN1uIjBktzoIazOHPJZ7kKHPz8mRWVdW3lA8WGF9dQF6Bm673boov3BUWDU2JNcahR23GtfHKLOz/viZ+rYnZFaIznXO67CYEJ1fXuTRpZhYZkKe54xeoagkNGLs+NTZHE0rX45/XvQ2RGADX6vcAvdxIUBV27wxGm2zjZo4X3ILgAlrOFheuZ6wtsvaIj4yLY7qqawlliaIcrz2G+c3vscAnCkCuMzMmZvMfu9lLwTvfX+3cVSyPdN9ZwgDZhfjRgNJcLiJ67b9xx8JHswprbiE3v9UphotAPIgnXVIN5KmMc0piXhc6cChPnN+MRhG9adtdttQTTwSIpl8I4/j//d3sz1326qTBTpPRM/Hgh3kzqEXs8ZAk4ErQhNO8hzrQ0DLkWMA/N+91tn2MdOJnWC2FCZehkQrwzwbKOjhvZsbM95QoeL9skYyMf4srVPVJSgg7pOLUtr/n9eT99oe9nLtFRpjA9okV2Kj8h9k5HaC0oivRD8VyXkJ81tcd4fHNXPCfloIQasxsuO18/46dR2jgul/UIet2G0kRvnyONMKhHs6J26FEoqSqd+rfYjeEGwHWVDpX1fh1jBBcKGMqRepju9Y00mDVHC+Xdij/j44rKfvfjGinNs1jO/0F3jB83XCDINN/HB84axlP+3E/klktRo+vl3U/aiyMJbIodE1XSsDn6UAzIoMtUObY2+k/4gY/l+AkZJ5Sj2vQrkyLm3FoxjhDX+31UXBFf9XrAH31fFqoBmDEZvhvvpnZ87N+oZEu7U9O/nnk+QWj3x8uyoRbEnf+O5UMr9i0nHP38IF5AvzrBW8YWBUR0mIAzIvndQq9N3v/Jto3aPjPXUPl8ASdPPyAp7jENf8bk7VMM9ol9XGmlBmeDMuGqt+WzuL6CXAxXjIhCPM5vACchgMJ/8XBGLO/D1isVvGhwwHHr1DLaI5mn2Jr/b1pUD90uciDaS8cXNDzCWvNmT/PhQe5e8nTnnnkt8Ds/SIjibcum/fqDhKopxAY8AkSrPn+IGDEKOO+U3XOP6djFs2H5N9+orhOahiQk5KnEUWa+CzkVzhp8bMHRbg81qhjjXuIKbHjSLSIBKWqockGtKinY+z4/RdBUF6pcc3JmnlxVcNgrI4SEzKUZSwcD2QCyxzKve+gAmg6ZuSRkpPFa6mfThu7LJNu3H5K42uCpNvPAsoedolKV/LHe/eJ+BbaG5MG0NaSGVPRUmNFMFFSSpXEcXwbVh7UETOZZtoVNRGOIbbkig3McEtR68cG0RZAoJevWYo7Dg/lZ1CQzblWeUvVHmr8fY4Nqd9JJiH/zEX24mJviH60fAyFr0A3c4bC1j3yZU60VgJxXn8JgJXLUIsiBnmKmMYz+7yBQFBvqb2eYnuW59joZBf56/wXvWIR4R8wTmV80i1mZy+S4+BUES+hzjk0uXpC///z/IlqHZ1monzlXp8aCfhGKMti73FI1KbL1q6IKO4fuBuZ59gagjn5xU79muMpHXg6S+e+gDM/U9BKLHbl9l6o8czQKl4RUkJJiqftQG2i3BMg/TQlUYFkJDYBOOvAugYuzYSDnZbDDd/aSd9x0Oe6F+bJcHfl9+gp6L5/TgA+BdFFovbfCrQ40s5vMPw8866pNX8zyFGeFWdxIpPVp9Rg1UPOVFbFZrvaFq/YAzHQgqMWpahMYfqHpmwXfHL1/kpYmGuHFwT55mQu0dylfNuq2Oq0hTMCPwqfxnuBIPLXfci4Y1ANy+1CUipQxld/izVh16WyG2Q0CQQ9NqtAnx1HCHwDj7sYxOSB0wopZSnOzxQOcExmxrVTF2BkOthVpGfuhaGECfCJpJKpjnihY+xOT2QJxN61+9K6QSqtv2Shr82I3jgJrqBg0wELFZPjvHpvzTtaJnLK6Vb97Yn933koO/saN7fsjwNKzp4l2lJVx2orjCGzC/4ZL4zCver6aQYtC5sdoychuFE6ufOiog+VWi5UDkbmvmtah/3aArEBIi39s5ILUnlFLgilcGuz9CQshEY7fw2ouoILAYPVT/gyAIq3TFAIwVsl+ktkRz/qGfnCDGrm5gsl/l9QdvCWGsjPz3dU7XuqKfdUrr/6XIgjp4rey6AJBmCmUJMjITHVdFb5m1p+dLMCL8t55zD42cmftmLEJC0Da04YiRCVUBLLa8D071/N5UBNBXDh0LFsmhV/5B5ExOB4j3WVG/S3lfK5o+V6ELHvy6RR9n4ac+VsK4VE4yphPvV+kG9FegTBH4ZRXL2HytUHCduJazB/KykjfetYxOXTLws267aGOd+I+JhKP//+VnXmS90OD/jvLcVu0asyqcuYN1mSb6XTlCkqv1vigZPIYwNF/zpWcT1GR/6aEIRjkh0yhg4LXJfaGobYJTY4JI58KiAKgmmgAKWdl5nYCeLqavRJGQNuYuZtZFGx+IkI4w4NS2xwbetNMunOjBu/hmKCI/w7tfiiyUd//4rbTeWt4izBY8YvGIN6vyKYmP/8X8wHKCeN+WRcKM70+tXKNGyevU9H2Dg5BsljnTf8YbsJ1TmMs74Ce2XlHisleguhyeg44rQOHZuw/6HTkhnnurK2d62q6yS7210SsAIaR+jXMQA+svkrLpsUY+F30Uw89uOdGAR6vo4FIME0EfVVeHTu6eKicfhSqOeXJhbftcd08sWEnNUL1C9fnprTgd83IMut8onVUF0hvqzZfHduPjbjwEXIcoYmy+P6tcJZHmeOv6VrvEdkHDJecjHuHeWANe79VG662qTjA/HCvumVv3qL+LrOcpqGps2ZGwQdFJ7PU4iuyRlBrwfO+xnPyr47s2cXVbWzAyznDiBGjCM3ksxjjqM62GE9C8f5U38kB3VjtabKp/nRdvMESPGDG90bWRLAt1Qk5DyLuazRR1YzdC1c+hZXvAWV8xA72S4A8B67vjVhbba3MMop293FeEXpe7zItMWrJG/LOH9ByOXmYnNJfjmfuX9KbrpgLOba4nZ+fl8Gbdv/ihv+6wFGKHCYrVwmhFC0J3V2bn2tIB1wCc1CST3d3X2OyxhguXcs4sm679UngzofuSeBewMFJboIQHbUh/m2JhW2hG9DIvG2t7yZIzKBTz9wBtnNC+2pCRYhSIuQ1j8xsz5VvqnyUIthvuoyyu7fNIrg/KQUVmGQaqkqZk/Vx5b33/gsEs8yX7SC1J+NV4icz6bvIE7C5G6McBaI8rVg56q5QBJWxn/87Q1sPK4+sQa8fLU5gXo4paaq4cOcQ4wR0VBHPGjKh+UlPCbA1nLXyEUX45qZ8J7/Ln4FPJE2TdzD0Z8MLSNQiykMMmSyOCiFfy84Rq60emYB2vD09KjYwsoIpeDcBDTElBbXxND72yhd9pC/1CMid/5HUMvAL27OtcIJDzNKpRPNqPOpyt2aPGz9QWIs9hQ9LiX5s8m9hjTUu/f7MyIatjjd+tSfQ3ufZxPpmJhTaBtZtKLUcfOCUqADuO+QoH8B9v6U+P0HV1GLQmtoNFTb3s74ivZgjES0qfK+8RdGgBbcCMSy8eBvh98+et1KIFqSe1KQPyXULBMTsIYnysIwiZBJYdI20vseV+wuJkcqGemehKjaAb9L57xZm3g2zX0bZ2xk/fU+bCo7TlnbW7JuF1YdURo/2Gw7VclDG1W7LOtas2LX4upifZ/23rzpsnY/ALfRgrcWP5hYmV9VxVOQA1fZvp9F2UNU+7d7xRyVm5wiLp3/0dlV7vdw1PMiZrbDAYzIVqEjRY2YU03sJhPnlwIPcZUG5ltL6S8XCxU1eYS5cjr34veBmXAvy7yN4ZjArIG0dfD/5UpBNlX1ZPoxJOwyqRi3wQWtOzd4oNKh0LkoTm8cwqgIfKhqqGOhwo71I+zXnMemTv2B2AUzABWyFztGgGULjDDzWYwJUVBTjKCn5K2QGMK1CQT7SzziOjo+BhAmqBjzuc3xYym2eedGeOIRJVyTwDw37iCMe4g5Vbnsb5ZBdxOAnMT7HU4DHpxWGuQ7GeiY30Cpbvzss55+5Km1YsbD5ea3NI9QNYIXol5apgSu9dZ8f8xS5dtHpido5BclDuLWY4lhik0tbJa07yJhH0BOyEut/GRbYTS6RfiTYWGMCkNpfSHi7HvdiTglEVHKZXaVhezH4kkXiIvKopYAlPusftpE4a5IZwvw1x/eLvoDIh/zpo9FiQInsTb2SAkKHV42XYBjpJDg4374XiVb3ws4qM0s9eSQ5HzsMU4OZJKuopFjBM+dAZEl8RUMx5uU2N486Kr141tVsGQfGjORYMCJAMsxELeNT4RmWjRcpdTGBwcx6XN9drWqPmJzcrGrH4+DRc7+n1w3kPZwu0BkNr6hQrqgo7JTB9A5kdJ/H7P4cWBMwsmuixAzJB3yrQpnGIq90lxAXLzDCdn1LPibsRt7rHNjgQBklRgPZ8vTbjXdgXrTWQsK5MdrXXQVPp0Rinq3frzZKJ0qD6Qhc40VzAraUXlob1gvkhK3vpmHgI6FRlQZNx6eRqkp0zy4AQlX813fAPtL3jMRaitGFFjo0zmErloC+h+YYdVQ6k4F/epxAoF0BmqEoKNTt6j4vQZNQ2BoqF9Vj53TOIoNmDiu9Xp15RkIgQIGcoLpfoIbenzpGUAtqFJp5W+LLnx38jHeECTJ/navKY1NWfN0sY1T8/pB8kIH3DU3DX+u6W3YwpypBMYOhbSxGjq84RZ84fWJow8pyHqn4S/9J15EcCMsXqrfwyd9mhiu3+rEo9pPpoJkdZqHjra4NvzFwuThNKy6hao/SlLw3ZADUcUp3w3SRVfW2rhl80zOgTYnKE0Hs2qp1J6H3xqPqIkvUDRMFDYyRbsFI3M9MEyovPk8rlw7/0a81cDVLmBsR2ze2pBuKb23fbeZC0uXoIvDppfTwIDxk1Oq2dGesGc+oJXWJLGkOha3CX+DUnzgAp9HGH9RsPZN63Hn4RMA5eSVhPHO+9RcRb/IOgtW31V1Q5IPGtoxPjC+MEJbVlIMYADd9aHYWUIQKopuPOHmoqSkubnAKnzgKHqgIOfW5RdAgotN6BN+O2ZYHkuemLnvQ8U9THVrS1RtLmKbcC7PeeDsYznvqzeg6VCNwmr0Yyx1wnLjyT84BZz3EJyCptD3yeueAyDWIs0L2qs/VQ3HUyqfrja0V1LdDzqAikeWuV4sc7RLIB69jEIBjCkyZedoUHqCrOvShVzyd73OdrJW0hPOuQv2qOoHDc9xVb6Yu6uq3Xqp2ZaH46A7lzevbxQEmfrzvAYSJuZ4WDk1Hz3QX1LVdiUK0EvlAGAYlG3Md30r7dcPN63yqBCIj25prpvZP0nI4+EgWoFG95V596CurXpKRBGRjQlHCvy5Ib/iW8nZJWwrET3mgd6mEhfP4KCuaLjopWs7h+MdXFdIv8dHQJgg1xi1eYqB0uDYjxwVmri0Sv5XKut/onqapC+FQiC2C1lvYJ9MVco6yDYsS3AANUfMtvtbYI2hfwZatiSsnoUeMZd34GVjkMMKA+XnjJpXgRW2SHTZplVowPmJsvXy6w3cfO1AK2dvtZEKTkC/TY9LFiKHCG0DnrMQdGm2lzlBHM9iEYynH2UcVMhUEjsc0oDBTgo2ZSQ1gzkAHeWeBXYFjYLuuf8yzTCy7/RFR81WDjXMbq2BOH5dURnxo6oivmxL3cKzKInlZkD31nvpHB9Kk7GfcfE1t+1V64b9LtgeJGlpRFxQCAqWJ5DoY77ski8gsOEOr2uywZaoO/NGa0X0y1pNQHBi3b2SUGNpcZxDT7rLbBf1FSnQ8guxGW3W+36BW0gBje4DOz6Ba6SVk0xiKgt+q2JOFyr4SYfnu+Ic1QZYIuwHBrgzr6UvOcSCzPTOo7D6IC4ISeS7zkl4h+2VoeHpnG/uWR3+ysNgPcOIXQbv0n4mr3BwQcdKJxgPSeyuP/z1Jjg4e9nUvoXegqQVIE30EHx5GHv+FAVUNTowYDJgyFhf5IvlYmEqRif6+WN1MkEJmDcQITx9FX23a4mxy1AQRsOHO/+eImX9l8EMJI3oPWzVXxSOeHU1dUWYr2uAA7AMb+vAEZSbU3qob9ibCyXeypEMpZ6863o6QPqlqGHZkuWABSTVNd4cOh9hv3qEpSx2Zy/DJMP6cItEmiBJ5PFqQnDEIt3NrA3COlOSgz43D7gpNFNJ5MBh4oFzhDPiglC2ypsNU4ISywY2erkyb1NC3Qh/IfWj0eDgZI4/ln8WPfBsT3meTjq1Uqt1E7Zl/qftqkx6aM9KueMCekSnMrcHj1CqTWWzEzPsZGcDe3Ue4Ws+XFYVxNbOFF8ezkvQGR6ZOtOLU2lQEnMBStx47vE6Pb7AYMBRj2OOfZXfisjJnpTfSNjo6sZ6qSvNxZNmDeS7Gk3yYyCk1HtKN2UnhMIjOXUzAqDv90lx9O/q/AT1ZMnit5XQe9wmQxnE/WSH0CqZ9/2Hy+Sfmpeg8RwsHI5Z8kC8H293m/LHVVM/BA7HaTJYg5Enk7M/xWpq0192ACfBai2LA/qrCjCr6Dh1BIMzMXINBmX96MJ5Hn2nxln/RXPFhwHxUmSV0EV2V0jm86/dxxuYSU1W7sVkEbN9EzkG0QFwPhyHKyb3t+Fj5WoUUTErcazE/N6EW6Lvp0d//SDPj7EV9UdJN+Amnf3Wwk3A0SlJ9Z00yvXZ7n3z70G47Hfsow8Wq1JXcfwnA+Yxa5mFsgV464KKP4T31wqIgzFPd3eCe3j5ory5fBF2hgCFyVFrLzI9eetNXvM7oQqyFgDo4CTp/hDV9NMX9JDHQ/nyHTLvZLNLF6ftn2OxjGm8+PqOwhxnPHWipkE/8wbtyri80Sr7pMNkQGMfo4ZYK9OcCC4ESVFFbLMIvlxSoRqWie0wxqnLfcLSXMSpMMQEJYDVObYsXIQNv4TGNwjq1kvT1UOkicTrG3IaBZ3XdScS3u8sgeZPVpOLkbiF940FjbCeNRINNvDbd01EPBrTCPpm12m43ze1bBB59Ia6Ovhnur/Nvx3IxwSWol+3H2qfCJR8df6aQf4v6WiONxkK+IqT4pKQrZK/LplgDI/PJZbOep8dtbV7oCr6CgfpWa8NczOkPx81iSHbsNhVSJBOtrLIMrL31LK9TqHqAbAHe0RLmmV806kRLDLNEhUEJfm9u0sxpkL93Zgd6rw+tqBfTMi59xqXHLXSHwSbSBl0EK0+loECOPtrl+/nsaFe197di4yUgoe4jKoAJDXc6DGDjrQOoFDWZJ9HXwt8xDrQP+7aRwWKWI1GF8s8O4KzxWBBcwnl3vnl1Oez3oh6Ea1vjR7/z7DDTrFtqU2W/KAEzAuXDNZ7MY73MF216dzdSbWmUp4lcm7keJfWaMHgut9x5C9mj66Z0lJ+yhsjVvyiWrfk1lzPOTdhG15Y7gQlXtacvI7qv/XNSscDwqkgwHT/gUsD5yB7LdRRvJxQGYINn9hTpodKFVSTPrtGvyQw+HlRFXIkodErAGu9Iy1YpfSPc3jkFh5CX3lPxv7aqjE/JAfTIpEjGb/H7MO0e2vsViSW1qa/Lmi4/n4DEI3g7lYrcanspDfEpKkdV1OjSLOy0BCUqVoECaB55vs06rXl4jqmLsPsFM/7vYJ0vrBhDCm/00A/H81l1uekJ/6Lml3Hb9+NKiLqATJmDpyzfYZFHumEjC662L0Bwkxi7E9U4cQA0XMVDuMYAIeLMPgQaMVOd8fmt5SflFIfuBoszeAw7ow5gXPE2Y/yBc/7jExARUf/BxIHQBF5Sn3i61w4z5xJdCyO1F1X3+3ax+JSvMeZ7S6QSKp1Fp/sjYz6Z+VgCZzibGeEoujryfMulH7Rai5kAft9ebcW50DyJr2uo2z97mTWIu45YsSnNSMrrNUuG1XsYBtD9TDYzQffKB87vWbkM4EbPAFgoBV4GQS+vtFDUqOFAoi1nTtmIOvg38N4hT2Sn8r8clmBCXspBlMBYTnrqFJGBT3wZOzAyJDre9dHH7+x7qaaKDOB4UQALD5ecS0DE4obubQEiuJZ0EpBVpLuYcce8Aa4PYd/V4DLDAJBYKQPCWTcrEaZ5HYbJi11Gd6hjGom1ii18VHYnG28NKpkz2UKVPxlhYSp8uZr367iOmoy7zsxehW9wzcy2zG0a80PBMCRQMb32hnaHeOR8fnNDzZhaNYhkOdDsBUZ3loDMa1YP0uS0cjUP3b/6DBlqmZOeNABDsLl5BI5QJups8uxAuWJdkUB/pO6Zax6tsg7fN5mjjDgMGngO+DPcKqiHIDbFIGudxtPTIyDi9SFMKBDcfdGQRv41q1AqmxgkVfJMnP8w/Bc7N9/TR6C7mGObFqFkIEom8sKi2xYqJLTCHK7cxzaZvqODo22c3wisBCP4HeAgcRbNPAsBkNRhSmD48dHupdBRw4mIvtS5oeF6zeT1KMCyhMnmhpkFAGWnGscoNkwvQ8ZM5lE/vgTHFYL99OuNxdFBxTEDd5v2qLR8y9WkXsWgG6kZNndFG+pO/UAkOCipqIhL3hq7cRSdrCq7YhUsTocEcnaFa6nVkhnSeRYUA1YO0z5itF9Sly3VlxYDw239TJJH6f3EUfYO5lb7bcFcz8Bp7Oo8QmnsUHOz/fagVUBtKEw1iT88j+aKkv8cscKNkMxjYr8344D1kFoZ7/td1W6LCNYN594301tUGRmFjAzeRg5vyoM1F6+bJZ/Q54jN/k8SFd3DxPTYaAUsivsBfgTn7Mx8H2SpPt4GOdYRnEJOH6jHM2p6SgB0gzIRq6fHxGMmSmqaPCmlfwxiuloaVIitLGN8wie2CDWhkzLoCJcODh7KIOAqbHEvXdUxaS4TTTs07Clzj/6GmVs9kiZDerMxEnhUB6QQPlcfqkG9882RqHoLiHGBoHfQuXIsAG8GTAtao2KVwRnvvam8jo1e312GQAKWEa4sUVEAMG4G6ckcONDwRcg1e2D3+ohXgY4UAWF8wHKQMrSnzCgfFpsxh+aHXMGtPQroQasRY4U6UdG0rz1Vjbka0MekOGRZQEvqQFlxseFor8zWFgHek3v29+WqN6gaK5gZOTOMZzpQIC1201LkMCXild3vWXSc5UX9xcFYfbRPzGFa1FDcPfPB/jUEq/FeGt419CI3YmBlVoHsa4KdcwQP5ZSwHHhFJ7/Ph/Rap/4vmG91eDwPP0lDfCDRCLszTqfzM71xpmiKi2HwS4WlqvGNwtvwF5Dqpn6KTq8ax00UMPkxDcZrEEEsIvHiUXXEphdb4GB4FymlPwBz4Gperqq5pW7TQ6/yNRhW8VT5NhuP0udlxo4gILq5ZxAZk8ZGh3g4CqxJlPKY7AQxupfUcVpWT5VItp1+30UqoyP4wWsRo3olRRgkWZZ2ZN6VC3OZFeXB8NbnUrSdikNptD1QiGuKkr8EmSR/AK9Rw+FF3s5uwuPbvHGiPeFOViltMK7AUaOsq9+x9cndk3iJEE5LKZRlWJbKOZweROzmPNVPkjE3K/TyA57Rs68TkZ3MR8akKpm7cFjnjPd/DdkWjgYoKHSr5Wu5ssoBYU4acRs5g2DHxUmdq8VXOXRbunD8QN0LhgkssgahcdoYsNvuXGUK/KXD/7oFb+VGdhqIn02veuM5bLudJOc2Ky0GMaG4W/xWBxIJcL7yliJOXOpx0AkBqUgzlDczmLT4iILXDxxtRR1oZa2JWFgiAb43obrJnG/TZC2KSK2wqOzRZTXavZZFMb1f3bXvVaNaK828w9TO610gk8JNf3gMfETzXXsbcvRGCG9JWQZ6+cDPqc4466Yo2RcKH+PILeKOqtnlbInR3MmBeGG3FH10yzkybuqEC2HSQwpA0An7d9+73BkDUTm30bZmoP/RGbgFN+GrCOfADgqr0WbI1a1okpFms8iHYw9hm0zUvlEMivBRxModrbJJ+9/p3jUdQQ9BCtQdxnOGrT5dzRUmw0593/mbRSdBg0nRvRZM5/E16m7ZHmDEtWhwvfdZCZ8J8M12W0yRMszXamWfQTwIZ4ayYktrnscQuWr8idp3PjT2eF/jmtdhIfcpMnb+IfZY2FebW6UY/AK3jP4u3Tu4zE4qlnQgLFbM19EBIsNf7KhjdbqQ/D6yiDb+NlEi2SKD+ivXVUK8ib0oBo366gXkR8ZxGjpJIDcEgZPa9TcYe0TIbiPl/rPUQDu3XBJ9X/GNq3FAUsKsll57DzaGMrjcT+gctp+9MLYXCq+sqP81eVQ0r9lt+gcQfZbACRbEjvlMskztZG8gbC8Qn9tt26Q7y7nDrbZq/LEz7kR6Jc6pg3N9rVX8Y5MJrGlML9p9lU4jbTkKqCveeZUJjHB03m2KRKR2TytoFkTXOLg7keU1s1lrPMQJpoOKLuAAC+y1HlJucU6ysB5hsXhvSPPLq5J7JtnqHKZ4vYjC4Vy8153QY+6780xDuGARsGbOs1WqzH0QS765rnSKEbbKlkO8oI/VDwUd0is13tKpqILu1mDJFNy/iJAWcvDgjxvusIT+PGz3ST/J9r9Mtfd0jpaGeiLYIqXc7DiHSS8TcjFVksi66PEkxW1z6ujbLLUGNNYnzOWpH8BZGK4bCK7iR+MbIv8ncDAz1u4StN3vTTzewr9IQjk9wxFxn+6N1ddKs0vffJiS08N3a4G1SVrlZ97Q/M+8G9fe5AP6d9/Qq4WRnORVhofPIKEdCr3llspUfE0oKIIYoByBRPh+bX1HLS3JWGJRhIvE1aW4NTd8ePi4Z+kXb+Z8snYfSNcqijhAgVsx4RCM54cXUiYkjeBmmC4ajOHrChoELscJJC7+9jjMjw5BagZKlgRMiSNYz7h7vvZIoQqbtQmspc0cUk1G/73iXtSpROl5wtLgQi0mW2Ex8i3WULhcggx6E1LMVHUsdc9GHI1PH3U2Ko0PyGdn9KdVOLm7FPBui0i9a0HpA60MsewVE4z8CAt5d401Gv6zXlIT5Ybit1VIA0FCs7wtvYreru1fUyW3oLAZ/+aTnZrOcYRNVA8spoRtlRoWflsRClFcgzkqiHOrf0/SVw+EpVaFlJ0g4Kxq1MMOmiQdpMNpte8lMMQqm6cIFXlnGbfJllysKDi+0JJMotkqgIxOSQgU9dn/lWkeVf8nUm3iwX2Nl3WDw9i6AUK3vBAbZZrcJpDQ/N64AVwjT07Jef30GSSmtNu2WlW7YoyW2FlWfZFQUwk867EdLYKk9VG6JgEnBiBxkY7LMo4YLQJJlAo9l/oTvJkSARDF/XtyAzM8O2t3eT/iXa6wDN3WewNmQHdPfsxChU/KtLG2Mn8i4ZqKdSlIaBZadxJmRzVS/o4yA65RTSViq60oa395Lqw0pzY4SipwE0SXXsKV+GZraGSkr/RW08wPRvqvSUkYBMA9lPx4m24az+IHmCbXA+0faxTRE9wuGeO06DIXa6QlKJ3puIyiuAVfPr736vzo2pBirS+Vxel3TMm3JKhz9o2ZoRvaFVpIkykb0Hcm4oHFBMcNSNj7/4GJt43ogonY2Vg4nsDQIWxAcorpXACzgBqQPjYsE/VUpXpwNManEru4NwMCFPkXvMoqvoeLN3qyu/N1eWEHttMD65v19l/0kH2mR35iv/FI+yjoHJ9gPMz67af3Mq/BoWXqu3rphiWMXVkmnPSEkpGpUI2h1MThideGFEOK6YZHPwYzMBvpNC7+ZHxPb7epfefGyIB4JzO9DTNEYnDLVVHdQyvOEVefrk6Uv5kTQYVYWWdqrdcIl7yljwwIWdfQ/y+2QB3eR/qxYObuYyB4gTbo2in4PzarU1sO9nETkmj9/AoxDA+JM3GMqQtJR4jtduHtnoCLxd1gQUscHRB/MoRYIEsP2pDZ9KvHgtlk1iTbWWbHhohwFEYX7y51fUV2nuUmnoUcqnWIQAAgl9LTVX+Bc0QGNEhChxHR4YjfE51PUdGfsSFE6ck7BL3/hTf9jLq4G1IafINxOLKeAtO7quulYvH5YOBc+zX7CrMgWnW47/jfRsWnJjYYoE7xMfWV2HN2iyIqLI";const th=new Map([[8217,"apostrophe"],[8260,"fraction slash"],[12539,"middle dot"]]),nh=4;function K1(t){let e=0;function n(){return t[e++]<<8|t[e++]}let r=n(),i=1,s=[0,1];for(let x=1;x>--l&1}const c=31,d=2**c,y=d>>>1,v=y>>1,m=d-1;let A=0;for(let x=0;x1;){let R=b+P>>>1;x>>1|f(),k=k<<1^y,_=(_^y)<<1|y|1;p=k,g=1+_-k}let E=r-4;return h.map(x=>{switch(x-E){case 3:return E+65792+(t[a++]<<16|t[a++]<<8|t[a++]);case 2:return E+256+(t[a++]<<8|t[a++]);case 1:return E+t[a++];default:return x-1}})}function J1(t){let e=0;return()=>t[e++]}function zg(t){return J1(K1(W1(t)))}function W1(t){let e=[];[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].forEach((i,s)=>e[i.charCodeAt(0)]=s);let n=t.length,r=new Uint8Array(6*n>>3);for(let i=0,s=0,o=0,a=0;i=8&&(r[s++]=a>>(o-=8));return r}function Z1(t){return t&1?~t>>1:t>>1}function Y1(t,e){let n=Array(t);for(let r=0,i=0;r{let e=ks(t);if(e.length)return e})}function Gg(t){let e=[];for(;;){let n=t();if(n==0)break;e.push(X1(n,t))}for(;;){let n=t()-1;if(n<0)break;e.push($1(n,t))}return e.flat()}function Ss(t){let e=[];for(;;){let n=t(e.length);if(!n)break;e.push(n)}return e}function Qg(t,e,n){let r=Array(t).fill().map(()=>[]);for(let i=0;ir[o].push(s));return r}function X1(t,e){let n=1+e(),r=e(),i=Ss(e);return Qg(i.length,1+t,e).flatMap((o,a)=>{let[l,...u]=o;return Array(i[a]).fill().map((f,c)=>{let d=c*r;return[l+c*n,u.map(y=>y+d)]})})}function $1(t,e){let n=1+e();return Qg(n,1+t,e).map(i=>[i[0],i.slice(1)])}function q1(t){let e=[],n=ks(t);return i(r([]),[]),e;function r(s){let o=t(),a=Ss(()=>{let l=ks(t).map(u=>n[u]);if(l.length)return r(l)});return{S:o,B:a,Q:s}}function i({S:s,B:o},a,l){if(!(s&4&&l===a[a.length-1])){s&2&&(l=a[a.length-1]),s&1&&e.push(a);for(let u of o)for(let f of u.Q)i(u,[...a,f],l)}}}function eE(t){return t.toString(16).toUpperCase().padStart(2,"0")}function Vg(t){return`{${eE(t)}}`}function tE(t){let e=[];for(let n=0,r=t.length;n>24&255}function Jg(t){return t&16777215}let Mu,rh,_u,Ro;function uE(){let t=zg(rE);Mu=new Map(Hg(t).flatMap((e,n)=>e.map(r=>[r,n+1<<24]))),rh=new Set(ks(t)),_u=new Map,Ro=new Map;for(let[e,n]of Gg(t)){if(!rh.has(e)&&n.length==2){let[r,i]=n,s=Ro.get(r);s||(s=new Map,Ro.set(r,s)),s.set(i,e)}_u.set(e,n.reverse())}}function Wg(t){return t>=Ps&&t=aa&&t=la&&eua&&e0&&i(ua+u)}else{let o=_u.get(s);o?n.push(...o):i(s)}if(!n.length)break;s=n.pop()}if(r&&e.length>1){let s=Vi(e[0]);for(let o=1;o0&&i>=o)o==0?(e.push(r,...n),n.length=0,r=a):n.push(a),i=o;else{let l=cE(r,a);l>=0?r=l:i==0&&o==0?(e.push(r),r=a):(n.push(a),i=o)}}return r>=0&&e.push(r,...n),e}function Yg(t){return Zg(t).map(Jg)}function dE(t){return fE(Zg(t))}const ih=45,Xg=".",$g=65039,qg=1,fa=t=>Array.from(t);function Ns(t,e){return t.P.has(e)||t.Q.has(e)}class hE extends Array{get is_emoji(){return!0}}let zu,ey,dr,Hu,ty,ai,Nl,Dr,nr,sh,Gu;function rf(){if(zu)return;let t=zg(j1);const e=()=>ks(t),n=()=>new Set(e()),r=(f,c)=>c.forEach(d=>f.add(d));zu=new Map(Gg(t)),ey=n(),dr=e(),Hu=new Set(e().map(f=>dr[f])),dr=new Set(dr),ty=n(),n();let i=Hg(t),s=t();const o=()=>{let f=new Set;return e().forEach(c=>r(f,i[c])),r(f,e()),f};ai=Ss(f=>{let c=Ss(t).map(d=>d+96);if(c.length){let d=f>=s;c[0]-=32,c=Ai(c),d&&(c=`Restricted[${c}]`);let y=o(),v=o(),m=!t();return{N:c,P:y,Q:v,M:m,R:d}}}),Nl=n(),Dr=new Map;let a=e().concat(fa(Nl)).sort((f,c)=>f-c);a.forEach((f,c)=>{let d=t(),y=a[c]=d?a[c-d]:{V:[],M:new Map};y.V.push(f),Nl.has(f)||Dr.set(f,y)});for(let{V:f,M:c}of new Set(Dr.values())){let d=[];for(let v of f){let m=ai.filter(h=>Ns(h,v)),A=d.find(({G:h})=>m.some(p=>h.has(p)));A||(A={G:new Set,V:[]},d.push(A)),A.V.push(v),r(A.G,m)}let y=d.flatMap(v=>fa(v.G));for(let{G:v,V:m}of d){let A=new Set(y.filter(h=>!v.has(h)));for(let h of m)c.set(h,A)}}nr=new Set;let l=new Set;const u=f=>nr.has(f)?l.add(f):nr.add(f);for(let f of ai){for(let c of f.P)u(c);for(let c of f.Q)u(c)}for(let f of nr)!Dr.has(f)&&!l.has(f)&&Dr.set(f,qg);r(nr,Yg(nr)),sh=q1(t).map(f=>hE.from(f)).sort(nE),Gu=new Map;for(let f of sh){let c=[Gu];for(let d of f){let y=c.map(v=>{let m=v.get(d);return m||(m=new Map,v.set(d,m)),m});d===$g?c.push(...y):c=y}for(let d of c)d.V=f}}function sf(t){return(ny(t)?"":`${of(Da([t]))} `)+Vg(t)}function of(t){return`"${t}"‎`}function pE(t){if(t.length>=4&&t[2]==ih&&t[3]==ih)throw new Error(`invalid label extension: "${Ai(t.slice(0,4))}"`)}function mE(t){for(let n=t.lastIndexOf(95);n>0;)if(t[--n]!==95)throw new Error("underscore allowed only at start")}function gE(t){let e=t[0],n=th.get(e);if(n)throw ns(`leading ${n}`);let r=t.length,i=-1;for(let s=1;se&&(e>>=1,t=[...t.slice(0,e),8230,...t.slice(-e)]);let i=0,s=t.length;for(let o=0;o{let s=tE(i),o={input:s,offset:r};r+=s.length+1;try{let a=o.tokens=kE(s,e,n),l=a.length,u;if(!l)throw new Error("empty label");let f=o.output=a.flat();if(mE(f),!(o.emoji=l>1||a[0].is_emoji)&&f.every(d=>d<128))pE(f),u="ASCII";else{let d=a.flatMap(y=>y.is_emoji?[]:y);if(!d.length)u="Emoji";else{if(dr.has(f[0]))throw ns("leading combining mark");for(let m=1;mo.has(a)):fa(o),!n.length)return}else r.push(i)}if(n){for(let i of n)if(r.every(s=>Ns(i,s)))throw new Error(`whole-script confusable: ${t.N}/${i.N}`)}}function EE(t){let e=ai;for(let n of t){let r=e.filter(i=>Ns(i,n));if(!r.length)throw ai.some(i=>Ns(i,n))?iy(e[0],n):ry(n);if(e=r,r.length==1)break}return e}function xE(t){return t.map(({input:e,error:n,output:r})=>{if(n){let i=n.message;throw new Error(t.length==1?i:`Invalid label ${of(Da(e,63))}: ${i}`)}return Ai(r)}).join(Xg)}function ry(t){return new Error(`disallowed character: ${sf(t)}`)}function iy(t,e){let n=sf(e),r=ai.find(i=>i.P.has(e));return r&&(n=`${r.N} ${n}`),new Error(`illegal mixture: ${t.N} + ${n}`)}function ns(t){return new Error(`illegal placement: ${t}`)}function bE(t,e){for(let n of e)if(!Ns(t,n))throw iy(t,n);if(t.M){let n=Yg(e);for(let r=1,i=n.length;rnh)throw new Error(`excessive non-spacing marks: ${of(Da(n.slice(r-1,s)))} (${s-r}/${nh})`);r=s}}}function kE(t,e,n){let r=[],i=[];for(t=t.slice().reverse();t.length;){let s=PE(t);if(s)i.length&&(r.push(e(i)),i=[]),r.push(n(s));else{let o=t.pop();if(nr.has(o))i.push(o);else{let a=zu.get(o);if(a)i.push(...a);else if(!ey.has(o))throw ry(o)}}}return i.length&&r.push(e(i)),r}function SE(t){return t.filter(e=>e!=$g)}function PE(t,e){let n=Gu,r,i=t.length;for(;i&&(n=n.get(t[--i]),!!n);){let{V:s}=n;s&&(r=s,t.length=i)}return r}const sy=new Uint8Array(32);sy.fill(0);function oh(t){return w(t.length!==0,"invalid ENS name; empty component","comp",t),t}function oy(t){const e=cn(NE(t)),n=[];if(t.length===0)return n;let r=0;for(let i=0;i{w(r.length<=n,`label ${JSON.stringify(t)} exceeds ${n} bytes`,"name",t);const i=new Uint8Array(r.length+1);return i.set(r,1),i[0]=i.length-1,i})))+"00"}const ay=new Uint8Array(32);ay.fill(0);const TE=BigInt(-1),ly=BigInt(0),uy=BigInt(1),IE=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function RE(t){const e=j(t),n=e.length%32;return n?ce([e,ay.slice(n)]):I(e)}const BE=jn(uy,32),OE=jn(ly,32),ah={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},Cl=["name","version","chainId","verifyingContract","salt"];function lh(t){return function(e){return w(typeof e=="string",`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const LE={name:lh("name"),version:lh("version"),chainId:function(t){const e=U(t,"domain.chainId");return w(e>=0,"invalid chain ID","domain.chainId",t),Number.isSafeInteger(e)?Number(e):Ut(e)},verifyingContract:function(t){try{return q(t).toLowerCase()}catch{}w(!1,'invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=j(t,"domain.salt");return w(e.length===32,'invalid domain value "salt"',"domain.salt",t),I(e)}};function Tl(t){{const e=t.match(/^(u?)int(\d+)$/);if(e){const n=e[1]==="",r=parseInt(e[2]);w(r%8===0&&r!==0&&r<=256&&e[2]===String(r),"invalid numeric width","type",t);const i=cr(IE,n?r-1:r),s=n?(i+uy)*TE:ly;return function(o){const a=U(o,"value");return w(a>=s&&a<=i,`value out-of-bounds for ${t}`,"value",a),jn(n?Xm(a,256):a,32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const n=parseInt(e[1]);return w(n!==0&&n<=32&&e[1]===String(n),"invalid bytes width","type",t),function(r){const i=j(r);return w(i.length===n,`invalid length for ${t}`,"value",r),RE(r)}}}switch(t){case"address":return function(e){return yn(q(e),32)};case"bool":return function(e){return e?BE:OE};case"bytes":return function(e){return ke(e)};case"string":return function(e){return kr(e)}}return null}function uh(t,e){return`${t}(${e.map(({name:n,type:r})=>r+" "+n).join(",")})`}function mo(t){const e=t.match(/^([^\x5b]*)((\x5b\d*\x5d)*)(\x5b(\d*)\x5d)$/);return e?{base:e[1],index:e[2]+e[4],array:{base:e[1],prefix:e[1]+e[2],count:e[5]?parseInt(e[5]):-1}}:{base:t}}class ct{primaryType;#e;get types(){return JSON.parse(this.#e)}#t;#n;constructor(e){this.#t=new Map,this.#n=new Map;const n=new Map,r=new Map,i=new Map,s={};Object.keys(e).forEach(l=>{s[l]=e[l].map(({name:u,type:f})=>{let{base:c,index:d}=mo(f);return c==="int"&&!e.int&&(c="int256"),c==="uint"&&!e.uint&&(c="uint256"),{name:u,type:c+(d||"")}}),n.set(l,new Set),r.set(l,[]),i.set(l,new Set)}),this.#e=JSON.stringify(s);for(const l in s){const u=new Set;for(const f of s[l]){w(!u.has(f.name),`duplicate variable name ${JSON.stringify(f.name)} in ${JSON.stringify(l)}`,"types",e),u.add(f.name);const c=mo(f.type).base;w(c!==l,`circular type reference to ${JSON.stringify(c)}`,"types",e),!Tl(c)&&(w(r.has(c),`unknown type ${JSON.stringify(c)}`,"types",e),r.get(c).push(l),n.get(l).add(c))}}const o=Array.from(r.keys()).filter(l=>r.get(l).length===0);w(o.length!==0,"missing primary type","types",e),w(o.length===1,`ambiguous primary types or unused types: ${o.map(l=>JSON.stringify(l)).join(", ")}`,"types",e),z(this,{primaryType:o[0]});function a(l,u){w(!u.has(l),`circular type reference to ${JSON.stringify(l)}`,"types",e),u.add(l);for(const f of n.get(l))if(r.has(f)){a(f,u);for(const c of u)i.get(c).add(f)}u.delete(l)}a(this.primaryType,new Set);for(const[l,u]of i){const f=Array.from(u);f.sort(),this.#t.set(l,uh(l,s[l])+f.map(c=>uh(c,s[c])).join(""))}}getEncoder(e){let n=this.#n.get(e);return n||(n=this.#r(e),this.#n.set(e,n)),n}#r(e){{const i=Tl(e);if(i)return i}const n=mo(e).array;if(n){const i=n.prefix,s=this.getEncoder(i);return o=>{w(n.count===-1||n.count===o.length,`array length mismatch; expected length ${n.count}`,"value",o);let a=o.map(s);return this.#t.has(i)&&(a=a.map(ke)),ke(ce(a))}}const r=this.types[e];if(r){const i=kr(this.#t.get(e));return s=>{const o=r.map(({name:a,type:l})=>{const u=this.getEncoder(l)(s[a]);return this.#t.has(l)?ke(u):u});return o.unshift(i),ce(o)}}w(!1,`unknown type: ${e}`,"type",e)}encodeType(e){const n=this.#t.get(e);return w(n,`unknown type: ${JSON.stringify(e)}`,"name",e),n}encodeData(e,n){return this.getEncoder(e)(n)}hashStruct(e,n){return ke(this.encodeData(e,n))}encode(e){return this.encodeData(this.primaryType,e)}hash(e){return this.hashStruct(this.primaryType,e)}_visit(e,n,r){if(Tl(e))return r(e,n);const i=mo(e).array;if(i)return w(i.count===-1||i.count===n.length,`array length mismatch; expected length ${i.count}`,"value",n),n.map(o=>this._visit(i.prefix,o,r));const s=this.types[e];if(s)return s.reduce((o,{name:a,type:l})=>(o[a]=this._visit(l,n[a],r),o),{});w(!1,`unknown type: ${e}`,"type",e)}visit(e,n){return this._visit(this.primaryType,e,n)}static from(e){return new ct(e)}static getPrimaryType(e){return ct.from(e).primaryType}static hashStruct(e,n,r){return ct.from(n).hashStruct(e,r)}static hashDomain(e){const n=[];for(const r in e){if(e[r]==null)continue;const i=ah[r];w(i,`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",e),n.push({name:r,type:i})}return n.sort((r,i)=>Cl.indexOf(r.name)-Cl.indexOf(i.name)),ct.hashStruct("EIP712Domain",{EIP712Domain:n},e)}static encode(e,n,r){return ce(["0x1901",ct.hashDomain(e),ct.from(n).hash(r)])}static hash(e,n,r){return ke(ct.encode(e,n,r))}static async resolveNames(e,n,r,i){e=Object.assign({},e);for(const a in e)e[a]==null&&delete e[a];const s={};e.verifyingContract&&!ie(e.verifyingContract,20)&&(s[e.verifyingContract]="0x");const o=ct.from(n);o.visit(r,(a,l)=>(a==="address"&&!ie(l,20)&&(s[l]="0x"),l));for(const a in s)s[a]=await i(a);return e.verifyingContract&&s[e.verifyingContract]&&(e.verifyingContract=s[e.verifyingContract]),r=o.visit(r,(a,l)=>a==="address"&&s[l]?s[l]:l),{domain:e,value:r}}static getPayload(e,n,r){ct.hashDomain(e);const i={},s=[];Cl.forEach(l=>{const u=e[l];u!=null&&(i[l]=LE[l](u),s.push({name:l,type:ah[l]}))});const o=ct.from(n);n=o.types;const a=Object.assign({},n);return w(a.EIP712Domain==null,"types must not contain EIP712Domain type","types.EIP712Domain",n),a.EIP712Domain=s,o.encode(r),{types:a,domain:i,primaryType:o.primaryType,message:o.visit(r,(l,u)=>{if(l.match(/^bytes(\d*)/))return I(j(u));if(l.match(/^u?int/))return U(u).toString();switch(l){case"address":return u.toLowerCase();case"bool":return!!u;case"string":return w(typeof u=="string","invalid string","value",u),u}w(!1,"unsupported type","type",l)})}}}function Je(t){const e=new Set;return t.forEach(n=>e.add(n)),Object.freeze(e)}const UE="external public payable override",FE=Je(UE.split(" ")),cy="constant external internal payable private public pure view override",DE=Je(cy.split(" ")),fy="constructor error event fallback function receive struct",dy=Je(fy.split(" ")),hy="calldata memory storage payable indexed",ME=Je(hy.split(" ")),_E="tuple returns",zE=[fy,hy,_E,cy].join(" "),HE=Je(zE.split(" ")),GE={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},QE=new RegExp("^(\\s*)"),VE=new RegExp("^([0-9]+)"),jE=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),py=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$"),my=new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");class Nt{#e;#t;get offset(){return this.#e}get length(){return this.#t.length-this.#e}constructor(e){this.#e=0,this.#t=e.slice()}clone(){return new Nt(this.#t)}reset(){this.#e=0}#n(e=0,n=0){return new Nt(this.#t.slice(e,n).map(r=>Object.freeze(Object.assign({},r,{match:r.match-e,linkBack:r.linkBack-e,linkNext:r.linkNext-e}))))}popKeyword(e){const n=this.peek();if(n.type!=="KEYWORD"||!e.has(n.text))throw new Error(`expected keyword ${n.text}`);return this.pop().text}popType(e){if(this.peek().type!==e){const n=this.peek();throw new Error(`expected ${e}; got ${n.type} ${JSON.stringify(n.text)}`)}return this.pop().text}popParen(){const e=this.peek();if(e.type!=="OPEN_PAREN")throw new Error("bad start");const n=this.#n(this.#e+1,e.match+1);return this.#e=e.match+1,n}popParams(){const e=this.peek();if(e.type!=="OPEN_PAREN")throw new Error("bad start");const n=[];for(;this.#e=this.#t.length)throw new Error("out-of-bounds");return this.#t[this.#e]}peekKeyword(e){const n=this.peekType("KEYWORD");return n!=null&&e.has(n)?n:null}peekType(e){if(this.length===0)return null;const n=this.peek();return n.type===e?n.text:null}pop(){const e=this.peek();return this.#e++,e}toString(){const e=[];for(let n=this.#e;n`}}function Zn(t){const e=[],n=o=>{const a=s0&&e[e.length-1].type==="NUMBER"){const c=e.pop().text;f=c+f,e[e.length-1].value=Q(c)}if(e.length===0||e[e.length-1].type!=="BRACKET")throw new Error("missing opening bracket");e[e.length-1].text+=f}continue}if(a=o.match(jE),a){if(l.text=a[1],s+=l.text.length,HE.has(l.text)){l.type="KEYWORD";continue}if(l.text.match(my)){l.type="TYPE";continue}l.type="ID";continue}if(a=o.match(VE),a){l.text=a[1],l.type="NUMBER",s+=l.text.length;continue}throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${s}`)}return new Nt(e.map(o=>Object.freeze(o)))}function ch(t,e){let n=[];for(const r in e.keys())t.has(r)&&n.push(r);if(n.length>1)throw new Error(`conflicting types: ${n.join(", ")}`)}function Ma(t,e){if(e.peekKeyword(dy)){const n=e.pop().text;if(n!==t)throw new Error(`expected ${t}, got ${n}`)}return e.popType("ID")}function wn(t,e){const n=new Set;for(;;){const r=t.peekType("KEYWORD");if(r==null||e&&!e.has(r))break;if(t.pop(),n.has(r))throw new Error(`duplicate keywords: ${JSON.stringify(r)}`);n.add(r)}return Object.freeze(n)}function gy(t){let e=wn(t,DE);return ch(e,Je("constant payable nonpayable".split(" "))),ch(e,Je("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}function dn(t,e){return t.popParams().map(n=>ne.from(n,e))}function yy(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return U(t.pop().text);throw new Error("invalid gas")}return null}function Sr(t){if(t.length)throw new Error(`unexpected tokens at offset ${t.offset}: ${t.toString()}`)}const KE=new RegExp(/^(.*)\[([0-9]*)\]$/);function fh(t){const e=t.match(my);if(w(e,"invalid type","type",t),t==="uint")return"uint256";if(t==="int")return"int256";if(e[2]){const n=parseInt(e[2]);w(n!==0&&n<=32,"invalid bytes length","type",t)}else if(e[3]){const n=parseInt(e[3]);w(n!==0&&n<=256&&n%8===0,"invalid numeric width","type",t)}return t}const pe={},st=Symbol.for("_ethers_internal"),dh="_ParamTypeInternal",hh="_ErrorInternal",ph="_EventInternal",mh="_ConstructorInternal",gh="_FallbackInternal",yh="_FunctionInternal",wh="_StructInternal";class ne{name;type;baseType;indexed;components;arrayLength;arrayChildren;constructor(e,n,r,i,s,o,a,l){if(Us(e,pe,"ParamType"),Object.defineProperty(this,st,{value:dh}),o&&(o=Object.freeze(o.slice())),i==="array"){if(a==null||l==null)throw new Error("")}else if(a!=null||l!=null)throw new Error("");if(i==="tuple"){if(o==null)throw new Error("")}else if(o!=null)throw new Error("");z(this,{name:n,type:r,baseType:i,indexed:s,components:o,arrayLength:a,arrayChildren:l})}format(e){if(e==null&&(e="sighash"),e==="json"){const r=this.name||"";if(this.isArray()){const s=JSON.parse(this.arrayChildren.format("json"));return s.name=r,s.type+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`,JSON.stringify(s)}const i={type:this.baseType==="tuple"?"tuple":this.type,name:r};return typeof this.indexed=="boolean"&&(i.indexed=this.indexed),this.isTuple()&&(i.components=this.components.map(s=>JSON.parse(s.format(e)))),JSON.stringify(i)}let n="";return this.isArray()?(n+=this.arrayChildren.format(e),n+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?n+="("+this.components.map(r=>r.format(e)).join(e==="full"?", ":",")+")":n+=this.type,e!=="sighash"&&(this.indexed===!0&&(n+=" indexed"),e==="full"&&this.name&&(n+=" "+this.name)),n}isArray(){return this.baseType==="array"}isTuple(){return this.baseType==="tuple"}isIndexable(){return this.indexed!=null}walk(e,n){if(this.isArray()){if(!Array.isArray(e))throw new Error("invalid array value");if(this.arrayLength!==-1&&e.length!==this.arrayLength)throw new Error("array is wrong length");const r=this;return e.map(i=>r.arrayChildren.walk(i,n))}if(this.isTuple()){if(!Array.isArray(e))throw new Error("invalid tuple value");if(e.length!==this.components.length)throw new Error("array is wrong length");const r=this;return e.map((i,s)=>r.components[s].walk(i,n))}return n(this.type,e)}#e(e,n,r,i){if(this.isArray()){if(!Array.isArray(n))throw new Error("invalid array value");if(this.arrayLength!==-1&&n.length!==this.arrayLength)throw new Error("array is wrong length");const o=this.arrayChildren,a=n.slice();a.forEach((l,u)=>{o.#e(e,l,r,f=>{a[u]=f})}),i(a);return}if(this.isTuple()){const o=this.components;let a;if(Array.isArray(n))a=n.slice();else{if(n==null||typeof n!="object")throw new Error("invalid tuple value");a=o.map(l=>{if(!l.name)throw new Error("cannot use object value with unnamed components");if(!(l.name in n))throw new Error(`missing value for component ${l.name}`);return n[l.name]})}if(a.length!==this.components.length)throw new Error("array is wrong length");a.forEach((l,u)=>{o[u].#e(e,l,r,f=>{a[u]=f})}),i(a);return}const s=r(this.type,n);s.then?e.push(async function(){i(await s)}()):i(s)}async walkAsync(e,n){const r=[],i=[e];return this.#e(r,e,n,s=>{i[0]=s}),r.length&&await Promise.all(r),i[0]}static from(e,n){if(ne.isParamType(e))return e;if(typeof e=="string")try{return ne.from(Zn(e),n)}catch{w(!1,"invalid param type","obj",e)}else if(e instanceof Nt){let a="",l="",u=null;wn(e,Je(["tuple"])).has("tuple")||e.peekType("OPEN_PAREN")?(l="tuple",u=e.popParams().map(m=>ne.from(m)),a=`tuple(${u.map(m=>m.format()).join(",")})`):(a=fh(e.popType("TYPE")),l=a);let f=null,c=null;for(;e.length&&e.peekType("BRACKET");){const m=e.pop();f=new ne(pe,"",a,l,null,u,c,f),c=m.value,a+=m.text,l="array",u=null}let d=null;if(wn(e,ME).has("indexed")){if(!n)throw new Error("");d=!0}const v=e.peekType("ID")?e.pop().text:"";if(e.length)throw new Error("leftover tokens");return new ne(pe,v,a,l,d,u,c,f)}const r=e.name;w(!r||typeof r=="string"&&r.match(py),"invalid name","obj.name",r);let i=e.indexed;i!=null&&(w(n,"parameter cannot be indexed","obj.indexed",e.indexed),i=!!i);let s=e.type,o=s.match(KE);if(o){const a=parseInt(o[2]||"-1"),l=ne.from({type:o[1],components:e.components});return new ne(pe,r||"",s,"array",i,null,a,l)}if(s==="tuple"||s.startsWith("tuple(")||s.startsWith("(")){const a=e.components!=null?e.components.map(u=>ne.from(u)):null;return new ne(pe,r||"",s,"tuple",i,a,null,null)}return s=fh(e.type),new ne(pe,r||"",s,s,i,null,null,null)}static isParamType(e){return e&&e[st]===dh}}class Pr{type;inputs;constructor(e,n,r){Us(e,pe,"Fragment"),r=Object.freeze(r.slice()),z(this,{type:n,inputs:r})}static from(e){if(typeof e=="string"){try{Pr.from(JSON.parse(e))}catch{}return Pr.from(Zn(e))}if(e instanceof Nt)switch(e.peekKeyword(dy)){case"constructor":return ln.from(e);case"error":return et.from(e);case"event":return Jt.from(e);case"fallback":case"receive":return tn.from(e);case"function":return Wt.from(e);case"struct":return yr.from(e)}else if(typeof e=="object"){switch(e.type){case"constructor":return ln.from(e);case"error":return et.from(e);case"event":return Jt.from(e);case"fallback":case"receive":return tn.from(e);case"function":return Wt.from(e);case"struct":return yr.from(e)}S(!1,`unsupported type: ${e.type}`,"UNSUPPORTED_OPERATION",{operation:"Fragment.from"})}w(!1,"unsupported frgament object","obj",e)}static isConstructor(e){return ln.isFragment(e)}static isError(e){return et.isFragment(e)}static isEvent(e){return Jt.isFragment(e)}static isFunction(e){return Wt.isFragment(e)}static isStruct(e){return yr.isFragment(e)}}class _a extends Pr{name;constructor(e,n,r,i){super(e,n,i),w(typeof r=="string"&&r.match(py),"invalid identifier","name",r),i=Object.freeze(i.slice()),z(this,{name:r})}}function Cs(t,e){return"("+e.map(n=>n.format(t)).join(t==="full"?", ":",")+")"}class et extends _a{constructor(e,n,r){super(e,"error",n,r),Object.defineProperty(this,st,{value:hh})}get selector(){return kr(this.format("sighash")).substring(0,10)}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("error"),n.push(this.name+Cs(e,this.inputs)),n.join(" ")}static from(e){if(et.isFragment(e))return e;if(typeof e=="string")return et.from(Zn(e));if(e instanceof Nt){const n=Ma("error",e),r=dn(e);return Sr(e),new et(pe,n,r)}return new et(pe,e.name,e.inputs?e.inputs.map(ne.from):[])}static isFragment(e){return e&&e[st]===hh}}class Jt extends _a{anonymous;constructor(e,n,r,i){super(e,"event",n,r),Object.defineProperty(this,st,{value:ph}),z(this,{anonymous:i})}get topicHash(){return kr(this.format("sighash"))}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("event"),n.push(this.name+Cs(e,this.inputs)),e!=="sighash"&&this.anonymous&&n.push("anonymous"),n.join(" ")}static getTopicHash(e,n){return n=(n||[]).map(i=>ne.from(i)),new Jt(pe,e,n,!1).topicHash}static from(e){if(Jt.isFragment(e))return e;if(typeof e=="string")try{return Jt.from(Zn(e))}catch{w(!1,"invalid event fragment","obj",e)}else if(e instanceof Nt){const n=Ma("event",e),r=dn(e,!0),i=!!wn(e,Je(["anonymous"])).has("anonymous");return Sr(e),new Jt(pe,n,r,i)}return new Jt(pe,e.name,e.inputs?e.inputs.map(n=>ne.from(n,!0)):[],!!e.anonymous)}static isFragment(e){return e&&e[st]===ph}}class ln extends Pr{payable;gas;constructor(e,n,r,i,s){super(e,n,r),Object.defineProperty(this,st,{value:mh}),z(this,{payable:i,gas:s})}format(e){if(S(e!=null&&e!=="sighash","cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),e==="json")return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[`constructor${Cs(e,this.inputs)}`];return this.payable&&n.push("payable"),this.gas!=null&&n.push(`@${this.gas.toString()}`),n.join(" ")}static from(e){if(ln.isFragment(e))return e;if(typeof e=="string")try{return ln.from(Zn(e))}catch{w(!1,"invalid constuctor fragment","obj",e)}else if(e instanceof Nt){wn(e,Je(["constructor"]));const n=dn(e),r=!!wn(e,FE).has("payable"),i=yy(e);return Sr(e),new ln(pe,"constructor",n,r,i)}return new ln(pe,"constructor",e.inputs?e.inputs.map(ne.from):[],!!e.payable,e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[st]===mh}}class tn extends Pr{payable;constructor(e,n,r){super(e,"fallback",n),Object.defineProperty(this,st,{value:gh}),z(this,{payable:r})}format(e){const n=this.inputs.length===0?"receive":"fallback";if(e==="json"){const r=this.payable?"payable":"nonpayable";return JSON.stringify({type:n,stateMutability:r})}return`${n}()${this.payable?" payable":""}`}static from(e){if(tn.isFragment(e))return e;if(typeof e=="string")try{return tn.from(Zn(e))}catch{w(!1,"invalid fallback fragment","obj",e)}else if(e instanceof Nt){const n=e.toString(),r=e.peekKeyword(Je(["fallback","receive"]));if(w(r,"type must be fallback or receive","obj",n),e.popKeyword(Je(["fallback","receive"]))==="receive"){const a=dn(e);return w(a.length===0,"receive cannot have arguments","obj.inputs",a),wn(e,Je(["payable"])),Sr(e),new tn(pe,[],!0)}let s=dn(e);s.length?w(s.length===1&&s[0].type==="bytes","invalid fallback inputs","obj.inputs",s.map(a=>a.format("minimal")).join(", ")):s=[ne.from("bytes")];const o=gy(e);if(w(o==="nonpayable"||o==="payable","fallback cannot be constants","obj.stateMutability",o),wn(e,Je(["returns"])).has("returns")){const a=dn(e);w(a.length===1&&a[0].type==="bytes","invalid fallback outputs","obj.outputs",a.map(l=>l.format("minimal")).join(", "))}return Sr(e),new tn(pe,s,o==="payable")}if(e.type==="receive")return new tn(pe,[],!0);if(e.type==="fallback"){const n=[ne.from("bytes")],r=e.stateMutability==="payable";return new tn(pe,n,r)}w(!1,"invalid fallback description","obj",e)}static isFragment(e){return e&&e[st]===gh}}class Wt extends _a{constant;outputs;stateMutability;payable;gas;constructor(e,n,r,i,s,o){super(e,"function",n,i),Object.defineProperty(this,st,{value:yh}),s=Object.freeze(s.slice()),z(this,{constant:r==="view"||r==="pure",gas:o,outputs:s,payable:r==="payable",stateMutability:r})}get selector(){return kr(this.format("sighash")).substring(0,10)}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:this.stateMutability!=="nonpayable"?this.stateMutability:void 0,payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(r=>JSON.parse(r.format(e))),outputs:this.outputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("function"),n.push(this.name+Cs(e,this.inputs)),e!=="sighash"&&(this.stateMutability!=="nonpayable"&&n.push(this.stateMutability),this.outputs&&this.outputs.length&&(n.push("returns"),n.push(Cs(e,this.outputs))),this.gas!=null&&n.push(`@${this.gas.toString()}`)),n.join(" ")}static getSelector(e,n){return n=(n||[]).map(i=>ne.from(i)),new Wt(pe,e,"view",n,[],null).selector}static from(e){if(Wt.isFragment(e))return e;if(typeof e=="string")try{return Wt.from(Zn(e))}catch{w(!1,"invalid function fragment","obj",e)}else if(e instanceof Nt){const r=Ma("function",e),i=dn(e),s=gy(e);let o=[];wn(e,Je(["returns"])).has("returns")&&(o=dn(e));const a=yy(e);return Sr(e),new Wt(pe,r,s,i,o,a)}let n=e.stateMutability;return n==null&&(n="payable",typeof e.constant=="boolean"?(n="view",e.constant||(n="payable",typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable"))):typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable")),new Wt(pe,e.name,n,e.inputs?e.inputs.map(ne.from):[],e.outputs?e.outputs.map(ne.from):[],e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[st]===yh}}class yr extends _a{constructor(e,n,r){super(e,"struct",n,r),Object.defineProperty(this,st,{value:wh})}format(){throw new Error("@TODO")}static from(e){if(typeof e=="string")try{return yr.from(Zn(e))}catch{w(!1,"invalid struct fragment","obj",e)}else if(e instanceof Nt){const n=Ma("struct",e),r=dn(e);return Sr(e),new yr(pe,n,r)}return new yr(pe,e.name,e.inputs?e.inputs.map(ne.from):[])}static isFragment(e){return e&&e[st]===wh}}const zt=new Map;zt.set(0,"GENERIC_PANIC");zt.set(1,"ASSERT_FALSE");zt.set(17,"OVERFLOW");zt.set(18,"DIVIDE_BY_ZERO");zt.set(33,"ENUM_RANGE_ERROR");zt.set(34,"BAD_STORAGE_DATA");zt.set(49,"STACK_UNDERFLOW");zt.set(50,"ARRAY_RANGE_ERROR");zt.set(65,"OUT_OF_MEMORY");zt.set(81,"UNINITIALIZED_FUNCTION_CALL");const JE=new RegExp(/^bytes([0-9]*)$/),WE=new RegExp(/^(u?int)([0-9]*)$/);let Il=null,vh=1024;function ZE(t,e,n,r){let i="missing revert data",s=null;const o=null;let a=null;if(n){i="execution reverted";const u=j(n);if(n=I(n),u.length===0)i+=" (no data present; likely require(false) occurred",s="require(false)";else if(u.length%32!==4)i+=" (could not decode reason; invalid data length)";else if(I(u.slice(0,4))==="0x08c379a0")try{s=r.decode(["string"],u.slice(4))[0],a={signature:"Error(string)",name:"Error",args:[s]},i+=`: ${JSON.stringify(s)}`}catch{i+=" (could not decode reason; invalid string data)"}else if(I(u.slice(0,4))==="0x4e487b71")try{const f=Number(r.decode(["uint256"],u.slice(4))[0]);a={signature:"Panic(uint256)",name:"Panic",args:[f]},s=`Panic due to ${zt.get(f)||"UNKNOWN"}(${f})`,i+=`: ${s}`}catch{i+=" (could not decode panic code)"}else i+=" (unknown custom error)"}const l={to:e.to?q(e.to):null,data:e.data||"0x"};return e.from&&(l.from=q(e.from)),le(i,"CALL_EXCEPTION",{action:t,data:n,reason:s,transaction:l,invocation:o,revert:a})}class xi{#e(e){if(e.isArray())return new d1(this.#e(e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new po(e.components.map(r=>this.#e(r)),e.name);switch(e.baseType){case"address":return new c1(e.name);case"bool":return new h1(e.name);case"string":return new x1(e.name);case"bytes":return new p1(e.name);case"":return new y1(e.name)}let n=e.type.match(WE);if(n){let r=parseInt(n[2]||"256");return w(r!==0&&r<=256&&r%8===0,"invalid "+n[1]+" bit length","param",e),new E1(r/8,n[1]==="int",e.name)}if(n=e.type.match(JE),n){let r=parseInt(n[1]);return w(r!==0&&r<=32,"invalid bytes length","param",e),new m1(r,e.name)}w(!1,"invalid type","type",e.type)}getDefaultValue(e){const n=e.map(i=>this.#e(ne.from(i)));return new po(n,"_").defaultValue()}encode(e,n){Wm(n.length,e.length,"types/values length mismatch");const r=e.map(o=>this.#e(ne.from(o))),i=new po(r,"_"),s=new Ru;return i.encode(s,n),s.data}decode(e,n,r){const i=e.map(o=>this.#e(ne.from(o)));return new po(i,"_").decode(new Jc(n,r,vh))}static _setDefaultMaxInflation(e){w(typeof e=="number"&&Number.isInteger(e),"invalid defaultMaxInflation factor","value",e),vh=e}static defaultAbiCoder(){return Il==null&&(Il=new xi),Il}static getBuiltinCallException(e,n,r){return ZE(e,n,r,xi.defaultAbiCoder())}}class YE{fragment;name;signature;topic;args;constructor(e,n,r){const i=e.name,s=e.format();z(this,{fragment:e,name:i,signature:s,topic:n,args:r})}}class XE{fragment;name;args;signature;selector;value;constructor(e,n,r,i){const s=e.name,o=e.format();z(this,{fragment:e,name:s,args:r,signature:o,selector:n,value:i})}}class $E{fragment;name;args;signature;selector;constructor(e,n,r){const i=e.name,s=e.format();z(this,{fragment:e,name:i,args:r,signature:s,selector:n})}}class Ah{hash;_isIndexed;static isIndexed(e){return!!(e&&e._isIndexed)}constructor(e){z(this,{hash:e,_isIndexed:!0})}}const Eh={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},xh={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&Eh[t.toString()]&&(e=Eh[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class sr{fragments;deploy;fallback;receive;#e;#t;#n;#r;constructor(e){let n=[];typeof e=="string"?n=JSON.parse(e):n=e,this.#n=new Map,this.#e=new Map,this.#t=new Map;const r=[];for(const o of n)try{r.push(Pr.from(o))}catch(a){console.log(`[Warning] Invalid Fragment ${JSON.stringify(o)}:`,a.message)}z(this,{fragments:Object.freeze(r)});let i=null,s=!1;this.#r=this.getAbiCoder(),this.fragments.forEach((o,a)=>{let l;switch(o.type){case"constructor":if(this.deploy){console.log("duplicate definition - constructor");return}z(this,{deploy:o});return;case"fallback":o.inputs.length===0?s=!0:(w(!i||o.payable!==i.payable,"conflicting fallback fragments",`fragments[${a}]`,o),i=o,s=i.payable);return;case"function":l=this.#n;break;case"event":l=this.#t;break;case"error":l=this.#e;break;default:return}const u=o.format();l.has(u)||l.set(u,o)}),this.deploy||z(this,{deploy:ln.from("constructor()")}),z(this,{fallback:i,receive:s})}format(e){const n=e?"minimal":"full";return this.fragments.map(i=>i.format(n))}formatJson(){const e=this.fragments.map(n=>n.format("json"));return JSON.stringify(e.map(n=>JSON.parse(n)))}getAbiCoder(){return xi.defaultAbiCoder()}#i(e,n,r){if(ie(e)){const s=e.toLowerCase();for(const o of this.#n.values())if(s===o.selector)return o;return null}if(e.indexOf("(")===-1){const s=[];for(const[o,a]of this.#n)o.split("(")[0]===e&&s.push(a);if(n){const o=n.length>0?n[n.length-1]:null;let a=n.length,l=!0;ve.isTyped(o)&&o.type==="overrides"&&(l=!1,a--);for(let u=s.length-1;u>=0;u--){const f=s[u].inputs.length;f!==a&&(!l||f!==a-1)&&s.splice(u,1)}for(let u=s.length-1;u>=0;u--){const f=s[u].inputs;for(let c=0;c=f.length){if(n[c].type==="overrides")continue;s.splice(u,1);break}if(n[c].type!==f[c].baseType){s.splice(u,1);break}}}}if(s.length===1&&n&&n.length!==s[0].inputs.length){const o=n[n.length-1];(o==null||Array.isArray(o)||typeof o!="object")&&s.splice(0,1)}if(s.length===0)return null;if(s.length>1&&r){const o=s.map(a=>JSON.stringify(a.format())).join(", ");w(!1,`ambiguous function description (i.e. matches ${o})`,"key",e)}return s[0]}const i=this.#n.get(Wt.from(e).format());return i||null}getFunctionName(e){const n=this.#i(e,null,!1);return w(n,"no matching function","key",e),n.name}hasFunction(e){return!!this.#i(e,null,!1)}getFunction(e,n){return this.#i(e,n||null,!0)}forEachFunction(e){const n=Array.from(this.#n.keys());n.sort((r,i)=>r.localeCompare(i));for(let r=0;r=0;o--)s[o].inputs.length=0;o--){const a=s[o].inputs;for(let l=0;l1&&r){const o=s.map(a=>JSON.stringify(a.format())).join(", ");w(!1,`ambiguous event description (i.e. matches ${o})`,"key",e)}return s[0]}const i=this.#t.get(Jt.from(e).format());return i||null}getEventName(e){const n=this.#o(e,null,!1);return w(n,"no matching event","key",e),n.name}hasEvent(e){return!!this.#o(e,null,!1)}getEvent(e,n){return this.#o(e,n||null,!0)}forEachEvent(e){const n=Array.from(this.#t.keys());n.sort((r,i)=>r.localeCompare(i));for(let r=0;r1){const s=i.map(o=>JSON.stringify(o.format())).join(", ");w(!1,`ambiguous error description (i.e. ${s})`,"name",e)}return i[0]}if(e=et.from(e).format(),e==="Error(string)")return et.from("error Error(string)");if(e==="Panic(uint256)")return et.from("error Panic(uint256)");const r=this.#e.get(e);return r||null}forEachError(e){const n=Array.from(this.#e.keys());n.sort((r,i)=>r.localeCompare(i));for(let r=0;rs.type==="string"?kr(o):s.type==="bytes"?ke(I(o)):(s.type==="bool"&&typeof o=="boolean"?o=o?"0x01":"0x00":s.type.match(/^u?int/)?o=jn(o):s.type.match(/^bytes/)?o=yv(o,32):s.type==="address"&&this.#r.encode(["address"],[o]),yn(I(o),32));for(n.forEach((s,o)=>{const a=e.inputs[o];if(!a.indexed){w(s==null,"cannot filter non-indexed parameters; must be null","contract."+a.name,s);return}s==null?r.push(null):a.baseType==="array"||a.baseType==="tuple"?w(!1,"filtering with tuples or arrays not supported","contract."+a.name,s):Array.isArray(s)?r.push(s.map(l=>i(a,l))):r.push(i(a,s))});r.length&&r[r.length-1]===null;)r.pop();return r}encodeEventLog(e,n){if(typeof e=="string"){const o=this.getEvent(e);w(o,"unknown event","eventFragment",e),e=o}const r=[],i=[],s=[];return e.anonymous||r.push(e.topicHash),w(n.length===e.inputs.length,"event arguments/values mismatch","values",n),e.inputs.forEach((o,a)=>{const l=n[a];if(o.indexed)if(o.type==="string")r.push(kr(l));else if(o.type==="bytes")r.push(ke(l));else{if(o.baseType==="tuple"||o.baseType==="array")throw new Error("not implemented");r.push(this.#r.encode([o.type],[l]))}else i.push(o),s.push(l)}),{data:this.#r.encode(i,s),topics:r}}decodeEventLog(e,n,r){if(typeof e=="string"){const y=this.getEvent(e);w(y,"unknown event","eventFragment",e),e=y}if(r!=null&&!e.anonymous){const y=e.topicHash;w(ie(r[0],32)&&r[0].toLowerCase()===y,"fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const i=[],s=[],o=[];e.inputs.forEach((y,v)=>{y.indexed?y.type==="string"||y.type==="bytes"||y.baseType==="tuple"||y.baseType==="array"?(i.push(ne.from({type:"bytes32",name:y.name})),o.push(!0)):(i.push(y),o.push(!1)):(s.push(y),o.push(!1))});const a=r!=null?this.#r.decode(i,ce(r)):null,l=this.#r.decode(s,n,!0),u=[],f=[];let c=0,d=0;return e.inputs.forEach((y,v)=>{let m=null;if(y.indexed)if(a==null)m=new Ah(null);else if(o[v])m=new Ah(a[d++]);else try{m=a[d++]}catch(A){m=A}else try{m=l[c++]}catch(A){m=A}u.push(m),f.push(y.name||null)}),an.fromItems(u,f)}parseTransaction(e){const n=j(e.data,"tx.data"),r=U(e.value!=null?e.value:0,"tx.value"),i=this.getFunction(I(n.slice(0,4)));if(!i)return null;const s=this.#r.decode(i.inputs,n.slice(4));return new XE(i,i.selector,s,r)}parseCallResult(e){throw new Error("@TODO")}parseLog(e){const n=this.getEvent(e.topics[0]);return!n||n.anonymous?null:new YE(n,n.topicHash,this.decodeEventLog(n,e.data,e.topics))}parseError(e){const n=I(e),r=this.getError(ye(n,0,4));if(!r)return null;const i=this.#r.decode(r.inputs,ye(n,4));return new $E(r,r.selector,i)}static from(e){return e instanceof sr?e:typeof e=="string"?new sr(JSON.parse(e)):typeof e.formatJson=="function"?new sr(e.formatJson()):typeof e.format=="function"?new sr(e.format("json")):new sr(e)}}const wy=BigInt(0);function li(t){return t??null}function Ae(t){return t==null?null:t.toString()}class bh{gasPrice;maxFeePerGas;maxPriorityFeePerGas;constructor(e,n,r){z(this,{gasPrice:li(e),maxFeePerGas:li(n),maxPriorityFeePerGas:li(r)})}toJSON(){const{gasPrice:e,maxFeePerGas:n,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:Ae(e),maxFeePerGas:Ae(n),maxPriorityFeePerGas:Ae(r)}}}function da(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=I(t.data));const n="chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value".split(/,/);for(const i of n)!(i in t)||t[i]==null||(e[i]=U(t[i],`request.${i}`));const r="type,nonce".split(/,/);for(const i of r)!(i in t)||t[i]==null||(e[i]=Q(t[i],`request.${i}`));return t.accessList&&(e.accessList=Ir(t.accessList)),t.authorizationList&&(e.authorizationList=t.authorizationList.slice()),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipRead=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),"blobVersionedHashes"in t&&t.blobVersionedHashes&&(e.blobVersionedHashes=t.blobVersionedHashes.slice()),"kzg"in t&&(e.kzg=t.kzg),"blobWrapperVersion"in t&&(e.blobWrapperVersion=t.blobWrapperVersion),"blobs"in t&&t.blobs&&(e.blobs=t.blobs.map(i=>Kc(i)?I(i):Object.assign({},i))),e}class qE{provider;number;hash;timestamp;parentHash;parentBeaconBlockRoot;nonce;difficulty;gasLimit;gasUsed;stateRoot;receiptsRoot;blobGasUsed;excessBlobGas;miner;prevRandao;extraData;baseFeePerGas;#e;constructor(e,n){this.#e=e.transactions.map(r=>typeof r!="string"?new zs(r,n):r),z(this,{provider:n,hash:li(e.hash),number:e.number,timestamp:e.timestamp,parentHash:e.parentHash,parentBeaconBlockRoot:e.parentBeaconBlockRoot,nonce:e.nonce,difficulty:e.difficulty,gasLimit:e.gasLimit,gasUsed:e.gasUsed,blobGasUsed:e.blobGasUsed,excessBlobGas:e.excessBlobGas,miner:e.miner,prevRandao:li(e.prevRandao),extraData:e.extraData,baseFeePerGas:li(e.baseFeePerGas),stateRoot:e.stateRoot,receiptsRoot:e.receiptsRoot})}get transactions(){return this.#e.map(e=>typeof e=="string"?e:e.hash)}get prefetchedTransactions(){const e=this.#e.slice();return e.length===0?[]:(S(typeof e[0]=="object","transactions were not prefetched with block request","UNSUPPORTED_OPERATION",{operation:"transactionResponses()"}),e)}toJSON(){const{baseFeePerGas:e,difficulty:n,extraData:r,gasLimit:i,gasUsed:s,hash:o,miner:a,prevRandao:l,nonce:u,number:f,parentHash:c,parentBeaconBlockRoot:d,stateRoot:y,receiptsRoot:v,timestamp:m,transactions:A}=this;return{_type:"Block",baseFeePerGas:Ae(e),difficulty:Ae(n),extraData:r,gasLimit:Ae(i),gasUsed:Ae(s),blobGasUsed:Ae(this.blobGasUsed),excessBlobGas:Ae(this.excessBlobGas),hash:o,miner:a,prevRandao:l,nonce:u,number:f,parentHash:c,timestamp:m,parentBeaconBlockRoot:d,stateRoot:y,receiptsRoot:v,transactions:A}}[Symbol.iterator](){let e=0;const n=this.transactions;return{next:()=>enew _s(i,n)));let r=wy;e.effectiveGasPrice!=null?r=e.effectiveGasPrice:e.gasPrice!=null&&(r=e.gasPrice),z(this,{provider:n,to:e.to,from:e.from,contractAddress:e.contractAddress,hash:e.hash,index:e.index,blockHash:e.blockHash,blockNumber:e.blockNumber,logsBloom:e.logsBloom,gasUsed:e.gasUsed,cumulativeGasUsed:e.cumulativeGasUsed,blobGasUsed:e.blobGasUsed,gasPrice:r,blobGasPrice:e.blobGasPrice,type:e.type,status:e.status,root:e.root})}get logs(){return this.#e}toJSON(){const{to:e,from:n,contractAddress:r,hash:i,index:s,blockHash:o,blockNumber:a,logsBloom:l,logs:u,status:f,root:c}=this;return{_type:"TransactionReceipt",blockHash:o,blockNumber:a,contractAddress:r,cumulativeGasUsed:Ae(this.cumulativeGasUsed),from:n,gasPrice:Ae(this.gasPrice),blobGasUsed:Ae(this.blobGasUsed),blobGasPrice:Ae(this.blobGasPrice),gasUsed:Ae(this.gasUsed),hash:i,index:s,logs:u,logsBloom:l,root:c,status:f,to:e}}get length(){return this.logs.length}[Symbol.iterator](){let e=0;return{next:()=>e{if(a)return null;const{blockNumber:d,nonce:y}=await Qe({blockNumber:this.provider.getBlockNumber(),nonce:this.provider.getTransactionCount(this.from)});if(y{if(d==null||d.status!==0)return d;S(!1,"transaction execution reverted","CALL_EXCEPTION",{action:"sendTransaction",data:null,reason:null,invocation:null,revert:null,transaction:{to:d.to,from:d.from,data:""},receipt:d})},f=await this.provider.getTransactionReceipt(this.hash);if(r===0)return u(f);if(f){if(r===1||await f.confirmations()>=r)return u(f)}else if(await l(),r===0)return null;return await new Promise((d,y)=>{const v=[],m=()=>{v.forEach(h=>h())};if(v.push(()=>{a=!0}),i>0){const h=setTimeout(()=>{m(),y(le("wait for transaction timeout","TIMEOUT"))},i);v.push(()=>{clearTimeout(h)})}const A=async h=>{if(await h.confirmations()>=r){m();try{d(u(h))}catch(p){y(p)}}};if(v.push(()=>{this.provider.off(this.hash,A)}),this.provider.on(this.hash,A),s>=0){const h=async()=>{try{await l()}catch(p){if(Le(p,"TRANSACTION_REPLACED")){m(),y(p);return}}a||this.provider.once("block",h)};v.push(()=>{this.provider.off("block",h)}),this.provider.once("block",h)}})}isMined(){return this.blockHash!=null}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}removedEvent(){return S(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),Ey(this)}reorderedEvent(e){return S(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),S(!e||e.isMined(),"unmined 'other' transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),Ay(this,e)}replaceableTransaction(e){w(Number.isInteger(e)&&e>=0,"invalid startBlock","startBlock",e);const n=new zs(this,this.provider);return n.#e=e,n}}function e2(t){return{orphan:"drop-block",hash:t.hash,number:t.number}}function Ay(t,e){return{orphan:"reorder-transaction",tx:t,other:e}}function Ey(t){return{orphan:"drop-transaction",tx:t}}function t2(t){return{orphan:"drop-log",log:{transactionHash:t.transactionHash,blockHash:t.blockHash,blockNumber:t.blockNumber,address:t.address,data:t.data,topics:Object.freeze(t.topics.slice()),index:t.index}}}class af extends _s{interface;fragment;args;constructor(e,n,r){super(e,e.provider);const i=n.decodeEventLog(r,e.data,e.topics);z(this,{args:i,fragment:r,interface:n})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class xy extends _s{error;constructor(e,n){super(e,e.provider),z(this,{error:n})}}class n2 extends vy{#e;constructor(e,n,r){super(r,n),this.#e=e}get logs(){return super.logs.map(e=>{const n=e.topics.length?this.#e.getEvent(e.topics[0]):null;if(n)try{return new af(e,this.#e,n)}catch(r){return new xy(e,r)}return e})}}class lf extends zs{#e;constructor(e,n,r){super(r,n),this.#e=e}async wait(e,n){const r=await super.wait(e,n);return r==null?null:new n2(this.#e,this.provider,r)}}class by extends $m{log;constructor(e,n,r,i){super(e,n,r),z(this,{log:i})}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}class r2 extends by{constructor(e,n,r,i,s){super(e,n,r,new af(s,e.interface,i));const o=e.interface.decodeEventLog(i,this.log.data,this.log.topics);z(this,{args:o,fragment:i})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}const kh=BigInt(0);function ky(t){return t&&typeof t.call=="function"}function Sy(t){return t&&typeof t.estimateGas=="function"}function za(t){return t&&typeof t.resolveName=="function"}function Py(t){return t&&typeof t.sendTransaction=="function"}function Ny(t){if(t!=null){if(za(t))return t;if(t.provider)return t.provider}}class i2{#e;fragment;constructor(e,n,r){if(z(this,{fragment:n}),n.inputs.lengthr[l]==null?null:a.walkAsync(r[l],(f,c)=>f==="address"?Array.isArray(c)?Promise.all(c.map(d=>Ke(d,s))):Ke(c,s):c)));return e.interface.encodeFilterTopics(n,o)}()}getTopicFilter(){return this.#e}}function Nr(t,e){return t==null?null:typeof t[e]=="function"?t:t.provider&&typeof t.provider[e]=="function"?t.provider:null}function hr(t){return t==null?null:t.provider||null}async function Cy(t,e){const n=ve.dereference(t,"overrides");w(typeof n=="object","invalid overrides parameter","overrides",t);const r=da(n);return w(r.to==null||(e||[]).indexOf("to")>=0,"cannot override to","overrides.to",r.to),w(r.data==null||(e||[]).indexOf("data")>=0,"cannot override data","overrides.data",r.data),r.from&&(r.from=r.from),r}async function s2(t,e,n){const r=Nr(t,"resolveName"),i=za(r)?r:null;return await Promise.all(e.map((s,o)=>s.walkAsync(n[o],(a,l)=>(l=ve.dereference(l,a),a==="address"?Ke(l,i):l))))}function o2(t){const e=async function(o){const a=await Cy(o,["data"]);a.to=await t.getAddress(),a.from&&(a.from=await Ke(a.from,Ny(t.runner)));const l=t.interface,u=U(a.value||kh,"overrides.value")===kh,f=(a.data||"0x")==="0x";l.fallback&&!l.fallback.payable&&l.receive&&!f&&!u&&w(!1,"cannot send data to receive or send value to non-payable fallback","overrides",o),w(l.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data);const c=l.receive||l.fallback&&l.fallback.payable;return w(c||u,"cannot send value to non-payable fallback","overrides.value",a.value),w(l.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data),a},n=async function(o){const a=Nr(t.runner,"call");S(ky(a),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const l=await e(o);try{return await a.call(l)}catch(u){throw jc(u)&&u.data?t.interface.makeError(u.data,l):u}},r=async function(o){const a=t.runner;S(Py(a),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const l=await a.sendTransaction(await e(o)),u=hr(t.runner);return new lf(t.interface,u,l)},i=async function(o){const a=Nr(t.runner,"estimateGas");return S(Sy(a),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await a.estimateGas(await e(o))},s=async o=>await r(o);return z(s,{_contract:t,estimateGas:i,populateTransaction:e,send:r,staticCall:n}),s}function a2(t,e){const n=function(...u){const f=t.interface.getFunction(e,u);return S(f,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e,args:u}}),f},r=async function(...u){const f=n(...u);let c={};if(f.inputs.length+1===u.length&&(c=await Cy(u.pop()),c.from&&(c.from=await Ke(c.from,Ny(t.runner)))),f.inputs.length!==u.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const d=await s2(t.runner,f.inputs,u);return Object.assign({},c,await Qe({to:t.getAddress(),data:t.interface.encodeFunctionData(f,d)}))},i=async function(...u){const f=await a(...u);return f.length===1?f[0]:f},s=async function(...u){const f=t.runner;S(Py(f),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const c=await f.sendTransaction(await r(...u)),d=hr(t.runner);return new lf(t.interface,d,c)},o=async function(...u){const f=Nr(t.runner,"estimateGas");return S(Sy(f),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await f.estimateGas(await r(...u))},a=async function(...u){const f=Nr(t.runner,"call");S(ky(f),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const c=await r(...u);let d="0x";try{d=await f.call(c)}catch(v){throw jc(v)&&v.data?t.interface.makeError(v.data,c):v}const y=n(...u);return t.interface.decodeFunctionResult(y,d)},l=async(...u)=>n(...u).constant?await i(...u):await s(...u);return z(l,{name:t.interface.getFunctionName(e),_contract:t,_key:e,getFragment:n,estimateGas:o,populateTransaction:r,send:s,staticCall:i,staticCallResult:a}),Object.defineProperty(l,"fragment",{configurable:!1,enumerable:!0,get:()=>{const u=t.interface.getFunction(e);return S(u,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e}}),u}}),l}function l2(t,e){const n=function(...i){const s=t.interface.getEvent(e,i);return S(s,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e,args:i}}),s},r=function(...i){return new i2(t,n(...i),i)};return z(r,{name:t.interface.getEventName(e),_contract:t,_key:e,getFragment:n}),Object.defineProperty(r,"fragment",{configurable:!1,enumerable:!0,get:()=>{const i=t.interface.getEvent(e);return S(i,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e}}),i}}),r}const ha=Symbol.for("_ethersInternal_contract"),Ty=new WeakMap;function u2(t,e){Ty.set(t[ha],e)}function ft(t){return Ty.get(t[ha])}function c2(t){return t&&typeof t=="object"&&"getTopicFilter"in t&&typeof t.getTopicFilter=="function"&&t.fragment}async function uf(t,e){let n,r=null;if(Array.isArray(e)){const s=function(o){if(ie(o,32))return o;const a=t.interface.getEvent(o);return w(a,"unknown fragment","name",o),a.topicHash};n=e.map(o=>o==null?null:Array.isArray(o)?o.map(s):s(o))}else e==="*"?n=[null]:typeof e=="string"?ie(e,32)?n=[e]:(r=t.interface.getEvent(e),w(r,"unknown fragment","event",e),n=[r.topicHash]):c2(e)?n=await e.getTopicFilter():"fragment"in e?(r=e.fragment,n=[r.topicHash]):w(!1,"unknown event name","event",e);n=n.map(s=>{if(s==null)return null;if(Array.isArray(s)){const o=Array.from(new Set(s.map(a=>a.toLowerCase())).values());return o.length===1?o[0]:(o.sort(),o)}return s.toLowerCase()});const i=n.map(s=>s==null?"null":Array.isArray(s)?s.join("|"):s).join("&");return{fragment:r,tag:i,topics:n}}async function ji(t,e){const{subs:n}=ft(t);return n.get((await uf(t,e)).tag)||null}async function Sh(t,e,n){const r=hr(t.runner);S(r,"contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:e});const{fragment:i,tag:s,topics:o}=await uf(t,n),{addr:a,subs:l}=ft(t);let u=l.get(s);if(!u){const c={address:a||t,topics:o},d=A=>{let h=i;if(h==null)try{h=t.interface.getEvent(A.topics[0])}catch{}if(h){const p=h,g=i?t.interface.decodeEventLog(i,A.data,A.topics):[];ju(t,n,g,E=>new r2(t,E,n,p,A))}else ju(t,n,[],p=>new by(t,p,n,A))};let y=[];u={tag:s,listeners:[],start:()=>{y.length||y.push(r.on(c,d))},stop:async()=>{if(y.length==0)return;let A=y;y=[],await Promise.all(A),r.off(c,d)}},l.set(s,u)}return u}let Vu=Promise.resolve();async function f2(t,e,n,r){await Vu;const i=await ji(t,e);if(!i)return!1;const s=i.listeners.length;return i.listeners=i.listeners.filter(({listener:o,once:a})=>{const l=Array.from(n);r&&l.push(r(a?null:o));try{o.call(t,...l)}catch{}return!a}),i.listeners.length===0&&(i.stop(),ft(t).subs.delete(i.tag)),s>0}async function ju(t,e,n,r){try{await Vu}catch{}const i=f2(t,e,n,r);return Vu=i,await i}const go=["then"];class rs{target;interface;runner;filters;[ha];fallback;constructor(e,n,r,i){w(typeof e=="string"||Ug(e),"invalid value for Contract target","target",e),r==null&&(r=null);const s=sr.from(n);z(this,{target:e,runner:r,interface:s}),Object.defineProperty(this,ha,{value:{}});let o,a=null,l=null;if(i){const c=hr(r);l=new lf(this.interface,c,i)}let u=new Map;if(typeof e=="string")if(ie(e))a=e,o=Promise.resolve(e);else{const c=Nr(r,"resolveName");if(!za(c))throw le("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});o=c.resolveName(e).then(d=>{if(d==null)throw le("an ENS name used for a contract target must be correctly configured","UNCONFIGURED_NAME",{value:e});return ft(this).addr=d,d})}else o=e.getAddress().then(c=>{if(c==null)throw new Error("TODO");return ft(this).addr=c,c});u2(this,{addrPromise:o,addr:a,deployTx:l,subs:u});const f=new Proxy({},{get:(c,d,y)=>{if(typeof d=="symbol"||go.indexOf(d)>=0)return Reflect.get(c,d,y);try{return this.getEvent(d)}catch(v){if(!Le(v,"INVALID_ARGUMENT")||v.argument!=="key")throw v}},has:(c,d)=>go.indexOf(d)>=0?Reflect.has(c,d):Reflect.has(c,d)||this.interface.hasEvent(String(d))});return z(this,{filters:f}),z(this,{fallback:s.receive||s.fallback?o2(this):null}),new Proxy(this,{get:(c,d,y)=>{if(typeof d=="symbol"||d in c||go.indexOf(d)>=0)return Reflect.get(c,d,y);try{return c.getFunction(d)}catch(v){if(!Le(v,"INVALID_ARGUMENT")||v.argument!=="key")throw v}},has:(c,d)=>typeof d=="symbol"||d in c||go.indexOf(d)>=0?Reflect.has(c,d):c.interface.hasFunction(d)})}connect(e){return new rs(this.target,this.interface,e)}attach(e){return new rs(e,this.interface,this.runner)}async getAddress(){return await ft(this).addrPromise}async getDeployedCode(){const e=hr(this.runner);S(e,"runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"getDeployedCode"});const n=await e.getCode(await this.getAddress());return n==="0x"?null:n}async waitForDeployment(){const e=this.deploymentTransaction();if(e)return await e.wait(),this;if(await this.getDeployedCode()!=null)return this;const r=hr(this.runner);return S(r!=null,"contract runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"waitForDeployment"}),new Promise((i,s)=>{const o=async()=>{try{if(await this.getDeployedCode()!=null)return i(this);r.once("block",o)}catch(a){s(a)}};o()})}deploymentTransaction(){return ft(this).deployTx}getFunction(e){return typeof e!="string"&&(e=e.format()),a2(this,e)}getEvent(e){return typeof e!="string"&&(e=e.format()),l2(this,e)}async queryTransaction(e){throw new Error("@TODO")}async queryFilter(e,n,r){n==null&&(n=0),r==null&&(r="latest");const{addr:i,addrPromise:s}=ft(this),o=i||await s,{fragment:a,topics:l}=await uf(this,e),u={address:o,topics:l,fromBlock:n,toBlock:r},f=hr(this.runner);return S(f,"contract runner does not have a provider","UNSUPPORTED_OPERATION",{operation:"queryFilter"}),(await f.getLogs(u)).map(c=>{let d=a;if(d==null)try{d=this.interface.getEvent(c.topics[0])}catch{}if(d)try{return new af(c,this.interface,d)}catch(y){return new xy(c,y)}return new _s(c,f)})}async on(e,n){const r=await Sh(this,"on",e);return r.listeners.push({listener:n,once:!1}),r.start(),this}async once(e,n){const r=await Sh(this,"once",e);return r.listeners.push({listener:n,once:!0}),r.start(),this}async emit(e,...n){return await ju(this,e,n,null)}async listenerCount(e){if(e){const i=await ji(this,e);return i?i.listeners.length:0}const{subs:n}=ft(this);let r=0;for(const{listeners:i}of n.values())r+=i.length;return r}async listeners(e){if(e){const i=await ji(this,e);return i?i.listeners.map(({listener:s})=>s):[]}const{subs:n}=ft(this);let r=[];for(const{listeners:i}of n.values())r=r.concat(i.map(({listener:s})=>s));return r}async off(e,n){const r=await ji(this,e);if(!r)return this;if(n){const i=r.listeners.map(({listener:s})=>s).indexOf(n);i>=0&&r.listeners.splice(i,1)}return(n==null||r.listeners.length===0)&&(r.stop(),ft(this).subs.delete(r.tag)),this}async removeAllListeners(e){if(e){const n=await ji(this,e);if(!n)return this;n.stop(),ft(this).subs.delete(n.tag)}else{const{subs:n}=ft(this);for(const{tag:r,stop:i}of n.values())i(),n.delete(r)}return this}async addListener(e,n){return await this.on(e,n)}async removeListener(e,n){return await this.off(e,n)}static buildClass(e){class n extends rs{constructor(i,s=null){super(i,e,s)}}return n}static from(e,n,r){return r==null&&(r=null),new this(e,n,r)}}function d2(){return rs}class wr extends d2(){}function Rl(t){return t.match(/^ipfs:\/\/ipfs\//i)?t=t.substring(12):t.match(/^ipfs:\/\//i)?t=t.substring(7):w(!1,"unsupported IPFS format","link",t),`https://gateway.ipfs.io/ipfs/${t}`}class h2{name;constructor(e){z(this,{name:e})}connect(e){return this}supportsCoinType(e){return!1}async encodeAddress(e,n){throw new Error("unsupported coin")}async decodeAddress(e,n){throw new Error("unsupported coin")}}const Iy=new RegExp("^(ipfs)://(.*)$","i"),Ph=[new RegExp("^(https)://(.*)$","i"),new RegExp("^(data):(.*)$","i"),Iy,new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$","i")];class ui{provider;address;name;#e;#t;constructor(e,n,r){z(this,{provider:e,address:n,name:r}),this.#e=null,this.#t=new wr(n,["function supportsInterface(bytes4) view returns (bool)","function resolve(bytes, bytes) view returns (bytes)","function addr(bytes32) view returns (address)","function addr(bytes32, uint) view returns (bytes)","function text(bytes32, string) view returns (string)","function contenthash(bytes32) view returns (bytes)"],e)}async supportsWildcard(){return this.#e==null&&(this.#e=(async()=>{try{return await this.#t.supportsInterface("0x9061b923")}catch(e){if(Le(e,"CALL_EXCEPTION"))return!1;throw this.#e=null,e}})()),await this.#e}async#n(e,n){n=(n||[]).slice();const r=this.#t.interface;n.unshift(Qu(this.name));let i=null;await this.supportsWildcard()&&(i=r.getFunction(e),S(i,"missing fragment","UNKNOWN_ERROR",{info:{funcName:e}}),n=[CE(this.name,255),r.encodeFunctionData(i,n)],e="resolve(bytes,bytes)"),n.push({enableCcipRead:!0});try{const s=await this.#t[e](...n);return i?r.decodeFunctionResult(i,s)[0]:s}catch(s){if(!Le(s,"CALL_EXCEPTION"))throw s}return null}async getAddress(e){if(e==null&&(e=60),e===60)try{const s=await this.#n("addr(bytes32)");return s==null||s===bs?null:s}catch(s){if(Le(s,"CALL_EXCEPTION"))return null;throw s}if(e>=0&&e<2147483648){let s=e+2147483648;const o=await this.#n("addr(bytes32,uint)",[s]);if(ie(o,20))return q(o)}let n=null;for(const s of this.provider.plugins)if(s instanceof h2&&s.supportsCoinType(e)){n=s;break}if(n==null)return null;const r=await this.#n("addr(bytes32,uint)",[e]);if(r==null||r==="0x")return null;const i=await n.decodeAddress(e,r);if(i!=null)return i;S(!1,"invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${e})`,info:{coinType:e,data:r}})}async getText(e){const n=await this.#n("text(bytes32,string)",[e]);return n==null||n==="0x"?null:n}async getContentHash(){const e=await this.#n("contenthash(bytes32)");if(e==null||e==="0x")return null;const n=e.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(n){const i=n[1]==="e3010170"?"ipfs":"ipns",s=parseInt(n[4],16);if(n[5].length===s*2)return`${i}://${vv("0x"+n[2])}`}const r=e.match(/^0xe40101fa011b20([0-9a-f]*)$/);if(r&&r[1].length===64)return`bzz://${r[1]}`;S(!1,"invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:e}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const e=[{type:"name",value:this.name}];try{const n=await this.getText("avatar");if(n==null)return e.push({type:"!avatar",value:""}),{url:null,linkage:e};e.push({type:"avatar",value:n});for(let r=0;r{if(e&&n==null)return null;if(!Array.isArray(n))throw new Error("not an array");return n.map(r=>t(r))}}function Hs(t,e){return n=>{const r={};for(const i in t){let s=i;if(e&&i in e&&!(s in n)){for(const o of e[i])if(o in n){s=o;break}}try{const o=t[i](n[s]);o!==void 0&&(r[i]=o)}catch(o){const a=o instanceof Error?o.message:"not-an-error";S(!1,`invalid value for value.${i} (${a})`,"BAD_DATA",{value:n})}}return r}}function p2(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}w(!1,`invalid boolean; ${JSON.stringify(t)}`,"value",t)}function bi(t){return w(ie(t,!0),"invalid data","value",t),t}function Oe(t){return w(ie(t,32),"invalid hash","value",t),t}const m2=Hs({address:q,blockHash:Oe,blockNumber:Q,data:bi,index:Q,removed:W(p2,!1),topics:Ts(Oe),transactionHash:Oe,transactionIndex:Q},{index:["logIndex"]});function g2(t){return m2(t)}const y2=Hs({hash:W(Oe),parentHash:Oe,parentBeaconBlockRoot:W(Oe,null),number:Q,timestamp:Q,nonce:W(bi),difficulty:U,gasLimit:U,gasUsed:U,stateRoot:W(Oe,null),receiptsRoot:W(Oe,null),blobGasUsed:W(U,null),excessBlobGas:W(U,null),miner:W(q),prevRandao:W(Oe,null),extraData:bi,baseFeePerGas:W(U)},{prevRandao:["mixHash"]});function w2(t){const e=y2(t);return e.transactions=t.transactions.map(n=>typeof n=="string"?n:Ry(n)),e}const v2=Hs({transactionIndex:Q,blockNumber:Q,transactionHash:Oe,address:q,topics:Ts(Oe),data:bi,index:Q,blockHash:Oe},{index:["logIndex"]});function A2(t){return v2(t)}const E2=Hs({to:W(q,null),from:W(q,null),contractAddress:W(q,null),index:Q,root:W(I),gasUsed:U,blobGasUsed:W(U,null),logsBloom:W(bi),blockHash:Oe,hash:Oe,logs:Ts(A2),blockNumber:Q,cumulativeGasUsed:U,effectiveGasPrice:W(U),blobGasPrice:W(U,null),status:W(Q),type:W(Q,0)},{effectiveGasPrice:["gasPrice"],hash:["transactionHash"],index:["transactionIndex"]});function x2(t){return E2(t)}function Ry(t){t.to&&U(t.to)===Nh&&(t.to="0x0000000000000000000000000000000000000000");const e=Hs({hash:Oe,index:W(Q,void 0),type:n=>n==="0x"||n==null?0:Q(n),accessList:W(Ir,null),blobVersionedHashes:W(Ts(Oe,!0),null),authorizationList:W(Ts(n=>{let r;if(n.signature)r=n.signature;else{let i=n.yParity;i==="0x1b"?i=0:i==="0x1c"&&(i=1),r=Object.assign({},n,{yParity:i})}return{address:q(n.address),chainId:U(n.chainId),nonce:U(n.nonce),signature:de.from(r)}},!1),null),blockHash:W(Oe,null),blockNumber:W(Q,null),transactionIndex:W(Q,null),from:q,gasPrice:W(U),maxPriorityFeePerGas:W(U),maxFeePerGas:W(U),maxFeePerBlobGas:W(U,null),gasLimit:U,to:W(q,null),value:U,nonce:Q,data:bi,creates:W(q,null),chainId:W(U,null)},{data:["input"],gasLimit:["gas"],index:["transactionIndex"]})(t);if(e.to==null&&e.creates==null&&(e.creates=u1(e)),(t.type===1||t.type===2)&&t.accessList==null&&(e.accessList=[]),t.signature?e.signature=de.from(t.signature):e.signature=de.from(t),e.chainId==null){const n=e.signature.legacyChainId;n!=null&&(e.chainId=n)}return e.blockHash&&U(e.blockHash)===Nh&&(e.blockHash=null),e}const b2="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";class Gs{name;constructor(e){z(this,{name:e})}clone(){return new Gs(this.name)}}class Ha extends Gs{effectiveBlock;txBase;txCreate;txDataZero;txDataNonzero;txAccessListStorageKey;txAccessListAddress;constructor(e,n){e==null&&(e=0),super(`org.ethers.network.plugins.GasCost#${e||0}`);const r={effectiveBlock:e};function i(s,o){let a=(n||{})[s];a==null&&(a=o),w(typeof a=="number",`invalud value for ${s}`,"costs",n),r[s]=a}i("txBase",21e3),i("txCreate",32e3),i("txDataZero",4),i("txDataNonzero",16),i("txAccessListStorageKey",1900),i("txAccessListAddress",2400),z(this,r)}clone(){return new Ha(this.effectiveBlock,this)}}class Ga extends Gs{address;targetNetwork;constructor(e,n){super("org.ethers.plugins.network.Ens"),z(this,{address:e||b2,targetNetwork:n??1})}clone(){return new Ga(this.address,this.targetNetwork)}}class k2 extends Gs{#e;#t;get url(){return this.#e}get processFunc(){return this.#t}constructor(e,n){super("org.ethers.plugins.network.FetchUrlFeeDataPlugin"),this.#e=e,this.#t=n}clone(){return this}}const Bl=new Map;class pt{#e;#t;#n;constructor(e,n){this.#e=e,this.#t=U(n),this.#n=new Map}toJSON(){return{name:this.name,chainId:String(this.chainId)}}get name(){return this.#e}set name(e){this.#e=e}get chainId(){return this.#t}set chainId(e){this.#t=U(e,"chainId")}matches(e){if(e==null)return!1;if(typeof e=="string"){try{return this.chainId===U(e)}catch{}return this.name===e}if(typeof e=="number"||typeof e=="bigint"){try{return this.chainId===U(e)}catch{}return!1}if(typeof e=="object"){if(e.chainId!=null){try{return this.chainId===U(e.chainId)}catch{}return!1}return e.name!=null?this.name===e.name:!1}return!1}get plugins(){return Array.from(this.#n.values())}attachPlugin(e){if(this.#n.get(e.name))throw new Error(`cannot replace existing plugin: ${e.name} `);return this.#n.set(e.name,e.clone()),this}getPlugin(e){return this.#n.get(e)||null}getPlugins(e){return this.plugins.filter(n=>n.name.split("#")[0]===e)}clone(){const e=new pt(this.name,this.chainId);return this.plugins.forEach(n=>{e.attachPlugin(n.clone())}),e}computeIntrinsicGas(e){const n=this.getPlugin("org.ethers.plugins.network.GasCost")||new Ha;let r=n.txBase;if(e.to==null&&(r+=n.txCreate),e.data)for(let i=2;i9){let i=BigInt(r[1].substring(0,9));r[1].substring(9).match(/^0+$/)||i++,r[1]=i.toString()}return BigInt(r[0]+r[1])}function Th(t){return new k2(t,async(e,n,r)=>{r.setHeader("User-Agent","ethers");let i;try{const[s,o]=await Promise.all([r.send(),e()]);i=s;const a=i.bodyJson.standard;return{gasPrice:o.gasPrice,maxFeePerGas:Ch(a.maxFee,9),maxPriorityFeePerGas:Ch(a.maxPriorityFee,9)}}catch(s){S(!1,`error encountered with polygon gas station (${JSON.stringify(r.url)})`,"SERVER_ERROR",{request:r,response:i,error:s})}})}let Ih=!1;function S2(){if(Ih)return;Ih=!0;function t(e,n,r){const i=function(){const s=new pt(e,n);return r.ensNetwork!=null&&s.attachPlugin(new Ga(null,r.ensNetwork)),s.attachPlugin(new Ha),(r.plugins||[]).forEach(o=>{s.attachPlugin(o)}),s};pt.register(e,i),pt.register(n,i),r.altNames&&r.altNames.forEach(s=>{pt.register(s,i)})}t("mainnet",1,{ensNetwork:1,altNames:["homestead"]}),t("ropsten",3,{ensNetwork:3}),t("rinkeby",4,{ensNetwork:4}),t("goerli",5,{ensNetwork:5}),t("kovan",42,{ensNetwork:42}),t("sepolia",11155111,{ensNetwork:11155111}),t("holesky",17e3,{ensNetwork:17e3}),t("classic",61,{}),t("classicKotti",6,{}),t("arbitrum",42161,{ensNetwork:1}),t("arbitrum-goerli",421613,{}),t("arbitrum-sepolia",421614,{}),t("base",8453,{ensNetwork:1}),t("base-goerli",84531,{}),t("base-sepolia",84532,{}),t("bnb",56,{ensNetwork:1}),t("bnbt",97,{}),t("filecoin",314,{}),t("filecoin-calibration",314159,{}),t("linea",59144,{ensNetwork:1}),t("linea-goerli",59140,{}),t("linea-sepolia",59141,{}),t("matic",137,{ensNetwork:1,plugins:[Th("https://gasstation.polygon.technology/v2")]}),t("matic-amoy",80002,{}),t("matic-mumbai",80001,{altNames:["maticMumbai","maticmum"],plugins:[Th("https://gasstation-testnet.polygon.technology/v2")]}),t("optimism",10,{ensNetwork:1,plugins:[]}),t("optimism-goerli",420,{}),t("optimism-sepolia",11155420,{}),t("xdai",100,{ensNetwork:1})}function Ku(t){return JSON.parse(JSON.stringify(t))}class P2{#e;#t;#n;#r;constructor(e){this.#e=e,this.#t=null,this.#n=4e3,this.#r=-2}get pollingInterval(){return this.#n}set pollingInterval(e){this.#n=e}async#i(){try{const e=await this.#e.getBlockNumber();if(this.#r===-2){this.#r=e;return}if(e!==this.#r){for(let n=this.#r+1;n<=e;n++){if(this.#t==null)return;await this.#e.emit("block",n)}this.#r=e}}catch{}this.#t!=null&&(this.#t=this.#e._setTimeout(this.#i.bind(this),this.#n))}start(){this.#t||(this.#t=this.#e._setTimeout(this.#i.bind(this),this.#n),this.#i())}stop(){this.#t&&(this.#e._clearTimeout(this.#t),this.#t=null)}pause(e){this.stop(),e&&(this.#r=-2)}resume(){this.start()}}class cf{#e;#t;#n;constructor(e){this.#e=e,this.#n=!1,this.#t=n=>{this._poll(n,this.#e)}}async _poll(e,n){throw new Error("sub-classes must override this")}start(){this.#n||(this.#n=!0,this.#t(-2),this.#e.on("block",this.#t))}stop(){this.#n&&(this.#n=!1,this.#e.off("block",this.#t))}pause(e){this.stop()}resume(){this.start()}}class N2 extends cf{#e;#t;constructor(e,n){super(e),this.#e=n,this.#t=-2}pause(e){e&&(this.#t=-2),super.pause(e)}async _poll(e,n){const r=await n.getBlock(this.#e);r!=null&&(this.#t===-2?this.#t=r.number:r.number>this.#t&&(n.emit(this.#e,r.number),this.#t=r.number))}}class C2 extends cf{#e;constructor(e,n){super(e),this.#e=Ku(n)}async _poll(e,n){throw new Error("@TODO")}}class T2 extends cf{#e;constructor(e,n){super(e),this.#e=n}async _poll(e,n){const r=await n.getTransactionReceipt(this.#e);r&&n.emit(this.#e,r)}}class ff{#e;#t;#n;#r;#i;constructor(e,n){this.#e=e,this.#t=Ku(n),this.#n=this.#o.bind(this),this.#r=!1,this.#i=-2}async#o(e){if(this.#i===-2)return;const n=Ku(this.#t);n.fromBlock=this.#i+1,n.toBlock=e;const r=await this.#e.getLogs(n);if(r.length===0){this.#i{this.#i=e}),this.#e.on("block",this.#n))}stop(){this.#r&&(this.#r=!1,this.#e.off("block",this.#n))}pause(e){this.stop(),e&&(this.#i=-2)}resume(){this.start()}}const I2=BigInt(2),R2=10;function yo(t){return t&&typeof t.then=="function"}function Bo(t,e){return t+":"+JSON.stringify(e,(n,r)=>{if(r==null)return"null";if(typeof r=="bigint")return`bigint:${r.toString()}`;if(typeof r=="string")return r.toLowerCase();if(typeof r=="object"&&!Array.isArray(r)){const i=Object.keys(r);return i.sort(),i.reduce((s,o)=>(s[o]=r[o],s),{})}return r})}class By{name;constructor(e){z(this,{name:e})}start(){}stop(){}pause(e){}resume(){}}function B2(t){return JSON.parse(JSON.stringify(t))}function Ju(t){return t=Array.from(new Set(t).values()),t.sort(),t}async function Ol(t,e){if(t==null)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),typeof t=="string")switch(t){case"block":case"debug":case"error":case"finalized":case"network":case"pending":case"safe":return{type:t,tag:t}}if(ie(t,32)){const n=t.toLowerCase();return{type:"transaction",tag:Bo("tx",{hash:n}),hash:n}}if(t.orphan){const n=t;return{type:"orphan",tag:Bo("orphan",n),filter:B2(n)}}if(t.address||t.topics){const n=t,r={topics:(n.topics||[]).map(i=>i==null?null:Array.isArray(i)?Ju(i.map(s=>s.toLowerCase())):i.toLowerCase())};if(n.address){const i=[],s=[],o=a=>{ie(a)?i.push(a):s.push((async()=>{i.push(await Ke(a,e))})())};Array.isArray(n.address)?n.address.forEach(o):o(n.address),s.length&&await Promise.all(s),r.address=Ju(i.map(a=>a.toLowerCase()))}return{filter:r,tag:Bo("event",r),type:"event"}}w(!1,"unknown ProviderEvent","event",t)}function Ll(){return new Date().getTime()}const O2={cacheTimeout:250,pollingInterval:4e3};class L2{#e;#t;#n;#r;#i;#o;#s;#a;#f;#u;#p;#m;constructor(e,n){if(this.#m=Object.assign({},O2,n||{}),e==="any")this.#o=!0,this.#i=null;else if(e){const r=pt.from(e);this.#o=!1,this.#i=Promise.resolve(r),setTimeout(()=>{this.emit("network",r,null)},0)}else this.#o=!1,this.#i=null;this.#a=-1,this.#s=new Map,this.#e=new Map,this.#t=new Map,this.#n=null,this.#r=!1,this.#f=1,this.#u=new Map,this.#p=!1}get pollingInterval(){return this.#m.pollingInterval}get provider(){return this}get plugins(){return Array.from(this.#t.values())}attachPlugin(e){if(this.#t.get(e.name))throw new Error(`cannot replace existing plugin: ${e.name} `);return this.#t.set(e.name,e.connect(this)),this}getPlugin(e){return this.#t.get(e)||null}get disableCcipRead(){return this.#p}set disableCcipRead(e){this.#p=!!e}async#l(e){const n=this.#m.cacheTimeout;if(n<0)return await this._perform(e);const r=Bo(e.method,e);let i=this.#s.get(r);return i||(i=this._perform(e),this.#s.set(r,i),setTimeout(()=>{this.#s.get(r)===i&&this.#s.delete(r)},n)),await i}async ccipReadFetch(e,n,r){if(this.disableCcipRead||r.length===0||e.to==null)return null;const i=e.to.toLowerCase(),s=n.toLowerCase(),o=[];for(let a=0;a=500,`response not found during CCIP fetch: ${c}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:e,info:{url:l,errorMessage:c}}),o.push(c)}S(!1,`error encountered during CCIP fetch: ${o.map(a=>JSON.stringify(a)).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:e,info:{urls:r,errorMessages:o}})}_wrapBlock(e,n){return new qE(w2(e),this)}_wrapLog(e,n){return new _s(g2(e),this)}_wrapTransactionReceipt(e,n){return new vy(x2(e),this)}_wrapTransactionResponse(e,n){return new zs(Ry(e),this)}_detectNetwork(){S(!1,"sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(e){S(!1,`unsupported method: ${e.method}`,"UNSUPPORTED_OPERATION",{operation:e.method,info:e})}async getBlockNumber(){const e=Q(await this.#l({method:"getBlockNumber"}),"%response");return this.#a>=0&&(this.#a=e),e}_getAddress(e){return Ke(e,this)}_getBlockTag(e){if(e==null)return"latest";switch(e){case"earliest":return"0x0";case"finalized":case"latest":case"pending":case"safe":return e}if(ie(e))return ie(e,32)?e:Ut(e);if(typeof e=="bigint"&&(e=Q(e,"blockTag")),typeof e=="number")return e>=0?Ut(e):this.#a>=0?Ut(this.#a+e):this.getBlockNumber().then(n=>Ut(n+e));w(!1,"invalid blockTag","blockTag",e)}_getFilter(e){const n=(e.topics||[]).map(l=>l==null?null:Array.isArray(l)?Ju(l.map(u=>u.toLowerCase())):l.toLowerCase()),r="blockHash"in e?e.blockHash:void 0,i=(l,u,f)=>{let c;switch(l.length){case 0:break;case 1:c=l[0];break;default:l.sort(),c=l}if(r&&(u!=null||f!=null))throw new Error("invalid filter");const d={};return c&&(d.address=c),n.length&&(d.topics=n),u&&(d.fromBlock=u),f&&(d.toBlock=f),r&&(d.blockHash=r),d};let s=[];if(e.address)if(Array.isArray(e.address))for(const l of e.address)s.push(this._getAddress(l));else s.push(this._getAddress(e.address));let o;"fromBlock"in e&&(o=this._getBlockTag(e.fromBlock));let a;return"toBlock"in e&&(a=this._getBlockTag(e.toBlock)),s.filter(l=>typeof l!="string").length||o!=null&&typeof o!="string"||a!=null&&typeof a!="string"?Promise.all([Promise.all(s),o,a]).then(l=>i(l[0],l[1],l[2])):i(s,o,a)}_getTransactionRequest(e){const n=da(e),r=[];if(["to","from"].forEach(i=>{if(n[i]==null)return;const s=Ke(n[i],this);yo(s)?r.push(async function(){n[i]=await s}()):n[i]=s}),n.blockTag!=null){const i=this._getBlockTag(n.blockTag);yo(i)?r.push(async function(){n.blockTag=await i}()):n.blockTag=i}return r.length?async function(){return await Promise.all(r),n}():n}async getNetwork(){if(this.#i==null){const i=(async()=>{try{const s=await this._detectNetwork();return this.emit("network",s,null),s}catch(s){throw this.#i===i&&(this.#i=null),s}})();return this.#i=i,(await i).clone()}const e=this.#i,[n,r]=await Promise.all([e,this._detectNetwork()]);return n.chainId!==r.chainId&&(this.#o?(this.emit("network",r,n),this.#i===e&&(this.#i=Promise.resolve(r))):S(!1,`network changed: ${n.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),n.clone()}async getFeeData(){const e=await this.getNetwork(),n=async()=>{const{_block:i,gasPrice:s,priorityFee:o}=await Qe({_block:this.#w("latest",!1),gasPrice:(async()=>{try{const f=await this.#l({method:"getGasPrice"});return U(f,"%response")}catch{}return null})(),priorityFee:(async()=>{try{const f=await this.#l({method:"getPriorityFee"});return U(f,"%response")}catch{}return null})()});let a=null,l=null;const u=this._wrapBlock(i,e);return u&&u.baseFeePerGas&&(l=o??BigInt("1000000000"),a=u.baseFeePerGas*I2+l),new bh(s,a,l)},r=e.getPlugin("org.ethers.plugins.network.FetchUrlFeeDataPlugin");if(r){const i=new Xt(r.url),s=await r.processFunc(n,this,i);return new bh(s.gasPrice,s.maxFeePerGas,s.maxPriorityFeePerGas)}return await n()}async estimateGas(e){let n=this._getTransactionRequest(e);return yo(n)&&(n=await n),U(await this.#l({method:"estimateGas",transaction:n}),"%response")}async#c(e,n,r){S(r=0&&n==="latest"&&i.to!=null&&ye(s.data,0,4)==="0x556f1830"){const o=s.data,a=await Ke(i.to,this);let l;try{l=_2(ye(s.data,4))}catch(c){S(!1,c.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:i,info:{data:o}})}S(l.sender.toLowerCase()===a.toLowerCase(),"CCIP Read sender mismatch","CALL_EXCEPTION",{action:"call",data:o,reason:"OffchainLookup",transaction:i,invocation:null,revert:{signature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",name:"OffchainLookup",args:l.errorArgs}});const u=await this.ccipReadFetch(i,l.calldata,l.urls);S(u!=null,"CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:i,info:{data:s.data,errorArgs:l.errorArgs}});const f={to:a,data:ce([l.selector,M2([u,l.extraData])])};this.emit("debug",{action:"sendCcipReadCall",transaction:f});try{const c=await this.#c(f,n,r+1);return this.emit("debug",{action:"receiveCcipReadCallResult",transaction:Object.assign({},f),result:c}),c}catch(c){throw this.emit("debug",{action:"receiveCcipReadCallError",transaction:Object.assign({},f),error:c}),c}}throw s}}async#d(e){const{value:n}=await Qe({network:this.getNetwork(),value:e});return n}async call(e){const{tx:n,blockTag:r}=await Qe({tx:this._getTransactionRequest(e),blockTag:this._getBlockTag(e.blockTag)});return await this.#d(this.#c(n,r,e.enableCcipRead?0:-1))}async#h(e,n,r){let i=this._getAddress(n),s=this._getBlockTag(r);return(typeof i!="string"||typeof s!="string")&&([i,s]=await Promise.all([i,s])),await this.#d(this.#l(Object.assign(e,{address:i,blockTag:s})))}async getBalance(e,n){return U(await this.#h({method:"getBalance"},e,n),"%response")}async getTransactionCount(e,n){return Q(await this.#h({method:"getTransactionCount"},e,n),"%response")}async getCode(e,n){return I(await this.#h({method:"getCode"},e,n))}async getStorage(e,n,r){const i=U(n,"position");return I(await this.#h({method:"getStorage",position:i},e,r))}async broadcastTransaction(e){const{blockNumber:n,hash:r,network:i}=await Qe({blockNumber:this.getBlockNumber(),hash:this._perform({method:"broadcastTransaction",signedTransaction:e}),network:this.getNetwork()}),s=Bt.from(e);if(s.hash!==r)throw new Error("@TODO: the returned hash did not match");return this._wrapTransactionResponse(s,i).replaceableTransaction(n)}async#w(e,n){if(ie(e,32))return await this.#l({method:"getBlock",blockHash:e,includeTransactions:n});let r=this._getBlockTag(e);return typeof r!="string"&&(r=await r),await this.#l({method:"getBlock",blockTag:r,includeTransactions:n})}async getBlock(e,n){const{network:r,params:i}=await Qe({network:this.getNetwork(),params:this.#w(e,!!n)});return i==null?null:this._wrapBlock(i,r)}async getTransaction(e){const{network:n,params:r}=await Qe({network:this.getNetwork(),params:this.#l({method:"getTransaction",hash:e})});return r==null?null:this._wrapTransactionResponse(r,n)}async getTransactionReceipt(e){const{network:n,params:r}=await Qe({network:this.getNetwork(),params:this.#l({method:"getTransactionReceipt",hash:e})});if(r==null)return null;if(r.gasPrice==null&&r.effectiveGasPrice==null){const i=await this.#l({method:"getTransaction",hash:e});if(i==null)throw new Error("report this; could not find tx or effectiveGasPrice");r.effectiveGasPrice=i.gasPrice}return this._wrapTransactionReceipt(r,n)}async getTransactionResult(e){const{result:n}=await Qe({network:this.getNetwork(),result:this.#l({method:"getTransactionResult",hash:e})});return n==null?null:I(n)}async getLogs(e){let n=this._getFilter(e);yo(n)&&(n=await n);const{network:r,params:i}=await Qe({network:this.getNetwork(),params:this.#l({method:"getLogs",filter:n})});return i.map(s=>this._wrapLog(s,r))}_getProvider(e){S(!1,"provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(e){return await ui.fromName(this,e)}async getAvatar(e){const n=await this.getResolver(e);return n?await n.getAvatar():null}async resolveName(e){const n=await this.getResolver(e);return n?await n.getAddress():null}async lookupAddress(e){e=q(e);const n=Qu(e.substring(2).toLowerCase()+".addr.reverse");try{const r=await ui.getEnsAddress(this),s=await new wr(r,["function resolver(bytes32) view returns (address)"],this).resolver(n);if(s==null||s===bs)return null;const a=await new wr(s,["function name(bytes32) view returns (string)"],this).name(n);return await this.resolveName(a)!==e?null:a}catch(r){if(Le(r,"BAD_DATA")&&r.value==="0x"||Le(r,"CALL_EXCEPTION"))return null;throw r}return null}async waitForTransaction(e,n,r){const i=n??1;return i===0?this.getTransactionReceipt(e):new Promise(async(s,o)=>{let a=null;const l=async u=>{try{const f=await this.getTransactionReceipt(e);if(f!=null&&u-f.blockNumber+1>=i){s(f),a&&(clearTimeout(a),a=null);return}}catch(f){console.log("EEE",f)}this.once("block",l)};r!=null&&(a=setTimeout(()=>{a!=null&&(a=null,this.off("block",l),o(le("timeout","TIMEOUT",{reason:"timeout"})))},r)),l(await this.getBlockNumber())})}async waitForBlock(e){S(!1,"not implemented yet","NOT_IMPLEMENTED",{operation:"waitForBlock"})}_clearTimeout(e){const n=this.#u.get(e);n&&(n.timer&&clearTimeout(n.timer),this.#u.delete(e))}_setTimeout(e,n){n==null&&(n=0);const r=this.#f++,i=()=>{this.#u.delete(r),e()};if(this.paused)this.#u.set(r,{timer:null,func:i,time:n});else{const s=setTimeout(i,n);this.#u.set(r,{timer:s,func:i,time:Ll()})}return r}_forEachSubscriber(e){for(const n of this.#e.values())e(n.subscriber)}_getSubscriber(e){switch(e.type){case"debug":case"error":case"network":return new By(e.type);case"block":{const n=new P2(this);return n.pollingInterval=this.pollingInterval,n}case"safe":case"finalized":return new N2(this,e.type);case"event":return new ff(this,e.filter);case"transaction":return new T2(this,e.hash);case"orphan":return new C2(this,e.filter)}throw new Error(`unsupported event: ${e.type}`)}_recoverSubscriber(e,n){for(const r of this.#e.values())if(r.subscriber===e){r.started&&r.subscriber.stop(),r.subscriber=n,r.started&&n.start(),this.#n!=null&&n.pause(this.#n);break}}async#g(e,n){let r=await Ol(e,this);return r.type==="event"&&n&&n.length>0&&n[0].removed===!0&&(r=await Ol({orphan:"drop-log",log:n[0]},this)),this.#e.get(r.tag)||null}async#y(e){const n=await Ol(e,this),r=n.tag;let i=this.#e.get(r);return i||(i={subscriber:this._getSubscriber(n),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},this.#e.set(r,i)),i}async on(e,n){const r=await this.#y(e);return r.listeners.push({listener:n,once:!1}),r.started||(r.subscriber.start(),r.started=!0,this.#n!=null&&r.subscriber.pause(this.#n)),this}async once(e,n){const r=await this.#y(e);return r.listeners.push({listener:n,once:!0}),r.started||(r.subscriber.start(),r.started=!0,this.#n!=null&&r.subscriber.pause(this.#n)),this}async emit(e,...n){const r=await this.#g(e,n);if(!r||r.listeners.length===0)return!1;const i=r.listeners.length;return r.listeners=r.listeners.filter(({listener:s,once:o})=>{const a=new $m(this,o?null:s,e);try{s.call(this,...n,a)}catch{}return!o}),r.listeners.length===0&&(r.started&&r.subscriber.stop(),this.#e.delete(r.tag)),i>0}async listenerCount(e){if(e){const r=await this.#g(e);return r?r.listeners.length:0}let n=0;for(const{listeners:r}of this.#e.values())n+=r.length;return n}async listeners(e){if(e){const r=await this.#g(e);return r?r.listeners.map(({listener:i})=>i):[]}let n=[];for(const{listeners:r}of this.#e.values())n=n.concat(r.map(({listener:i})=>i));return n}async off(e,n){const r=await this.#g(e);if(!r)return this;if(n){const i=r.listeners.map(({listener:s})=>s).indexOf(n);i>=0&&r.listeners.splice(i,1)}return(!n||r.listeners.length===0)&&(r.started&&r.subscriber.stop(),this.#e.delete(r.tag)),this}async removeAllListeners(e){if(e){const{tag:n,started:r,subscriber:i}=await this.#y(e);r&&i.stop(),this.#e.delete(n)}else for(const[n,{started:r,subscriber:i}]of this.#e)r&&i.stop(),this.#e.delete(n);return this}async addListener(e,n){return await this.on(e,n)}async removeListener(e,n){return this.off(e,n)}get destroyed(){return this.#r}destroy(){this.removeAllListeners();for(const e of this.#u.keys())this._clearTimeout(e);this.#r=!0}get paused(){return this.#n!=null}set paused(e){!!e!==this.paused&&(this.paused?this.resume():this.pause(!1))}pause(e){if(this.#a=-1,this.#n!=null){if(this.#n==!!e)return;S(!1,"cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber(n=>n.pause(e)),this.#n=!!e;for(const n of this.#u.values())n.timer&&clearTimeout(n.timer),n.time=Ll()-n.time}resume(){if(this.#n!=null){this._forEachSubscriber(e=>e.resume()),this.#n=null;for(const e of this.#u.values()){let n=e.time;n<0&&(n=0),e.time=Ll(),setTimeout(e.func,n)}}}}function U2(t,e){try{const n=Wu(t,e);if(n)return sa(n)}catch{}return null}function Wu(t,e){if(t==="0x")return null;try{const n=Q(ye(t,e,e+32)),r=Q(ye(t,n,n+32));return ye(t,n+32,n+32+r)}catch{}return null}function Rh(t){const e=Se(t);if(e.length>32)throw new Error("internal; should not happen");const n=new Uint8Array(32);return n.set(e,32-e.length),n}function F2(t){if(t.length%32===0)return t;const e=new Uint8Array(Math.ceil(t.length/32)*32);return e.set(t),e}const D2=new Uint8Array([]);function M2(t){const e=[];let n=0;for(let r=0;r=5*32,"insufficient OffchainLookup data","OFFCHAIN_FAULT",{reason:"insufficient OffchainLookup data"});const n=ye(t,0,32);S(ye(n,0,12)===ye(Bh,0,12),"corrupt OffchainLookup sender","OFFCHAIN_FAULT",{reason:"corrupt OffchainLookup sender"}),e.sender=ye(n,12);try{const r=[],i=Q(ye(t,32,64)),s=Q(ye(t,i,i+32)),o=ye(t,i+32);for(let a=0;ae[r]),e}function qn(t,e){if(t.provider)return t.provider;S(!1,"missing provider","UNSUPPORTED_OPERATION",{operation:e})}async function Oh(t,e){let n=da(e);if(n.to!=null&&(n.to=Ke(n.to,t)),n.from!=null){const r=n.from;n.from=Promise.all([t.getAddress(),Ke(r,t)]).then(([i,s])=>(w(i.toLowerCase()===s.toLowerCase(),"transaction from mismatch","tx.from",s),i))}else n.from=t.getAddress();return await Qe(n)}class z2{provider;constructor(e){z(this,{provider:e||null})}async getNonce(e){return qn(this,"getTransactionCount").getTransactionCount(await this.getAddress(),e)}async populateCall(e){return await Oh(this,e)}async populateTransaction(e){const n=qn(this,"populateTransaction"),r=await Oh(this,e);r.nonce==null&&(r.nonce=await this.getNonce("pending")),r.gasLimit==null&&(r.gasLimit=await this.estimateGas(r));const i=await this.provider.getNetwork();if(r.chainId!=null){const o=U(r.chainId);w(o===i.chainId,"transaction chainId mismatch","tx.chainId",e.chainId)}else r.chainId=i.chainId;const s=r.maxFeePerGas!=null||r.maxPriorityFeePerGas!=null;if(r.gasPrice!=null&&(r.type===2||s)?w(!1,"eip-1559 transaction do not support gasPrice","tx",e):(r.type===0||r.type===1)&&s&&w(!1,"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas","tx",e),(r.type===2||r.type==null)&&r.maxFeePerGas!=null&&r.maxPriorityFeePerGas!=null)r.type=2;else if(r.type===0||r.type===1){const o=await n.getFeeData();S(o.gasPrice!=null,"network does not support gasPrice","UNSUPPORTED_OPERATION",{operation:"getGasPrice"}),r.gasPrice==null&&(r.gasPrice=o.gasPrice)}else{const o=await n.getFeeData();if(r.type==null)if(o.maxFeePerGas!=null&&o.maxPriorityFeePerGas!=null)if(r.authorizationList&&r.authorizationList.length?r.type=4:r.type=2,r.gasPrice!=null){const a=r.gasPrice;delete r.gasPrice,r.maxFeePerGas=a,r.maxPriorityFeePerGas=a}else r.maxFeePerGas==null&&(r.maxFeePerGas=o.maxFeePerGas),r.maxPriorityFeePerGas==null&&(r.maxPriorityFeePerGas=o.maxPriorityFeePerGas);else o.gasPrice!=null?(S(!s,"network does not support EIP-1559","UNSUPPORTED_OPERATION",{operation:"populateTransaction"}),r.gasPrice==null&&(r.gasPrice=o.gasPrice),r.type=0):S(!1,"failed to get consistent fee data","UNSUPPORTED_OPERATION",{operation:"signer.getFeeData"});else(r.type===2||r.type===3||r.type===4)&&(r.maxFeePerGas==null&&(r.maxFeePerGas=o.maxFeePerGas),r.maxPriorityFeePerGas==null&&(r.maxPriorityFeePerGas=o.maxPriorityFeePerGas))}return await Qe(r)}async populateAuthorization(e){const n=Object.assign({},e);return n.chainId==null&&(n.chainId=(await qn(this,"getNetwork").getNetwork()).chainId),n.nonce==null&&(n.nonce=await this.getNonce()),n}async estimateGas(e){return qn(this,"estimateGas").estimateGas(await this.populateCall(e))}async call(e){return qn(this,"call").call(await this.populateCall(e))}async resolveName(e){return await qn(this,"resolveName").resolveName(e)}async sendTransaction(e){const n=qn(this,"sendTransaction"),r=await this.populateTransaction(e);delete r.from;const i=Bt.from(r);return await n.broadcastTransaction(await this.signTransaction(i))}authorize(e){S(!1,"authorization not implemented for this signer","UNSUPPORTED_OPERATION",{operation:"authorize"})}}function H2(t){return JSON.parse(JSON.stringify(t))}class Oy{#e;#t;#n;#r;#i;#o;constructor(e){this.#e=e,this.#t=null,this.#n=this.#s.bind(this),this.#r=!1,this.#i=null,this.#o=!1}_subscribe(e){throw new Error("subclasses must override this")}_emitResults(e,n){throw new Error("subclasses must override this")}_recover(e){throw new Error("subclasses must override this")}async#s(e){try{this.#t==null&&(this.#t=this._subscribe(this.#e));let n=null;try{n=await this.#t}catch(s){if(!Le(s,"UNSUPPORTED_OPERATION")||s.operation!=="eth_newFilter")throw s}if(n==null){this.#t=null,this.#e._recoverSubscriber(this,this._recover(this.#e));return}const r=await this.#e.getNetwork();if(this.#i||(this.#i=r),this.#i.chainId!==r.chainId)throw new Error("chaid changed");if(this.#o)return;const i=await this.#e.send("eth_getFilterChanges",[n]);await this._emitResults(this.#e,i)}catch(n){console.log("@TODO",n)}this.#e.once("block",this.#n)}#a(){const e=this.#t;e&&(this.#t=null,e.then(n=>{this.#e.destroyed||this.#e.send("eth_uninstallFilter",[n])}))}start(){this.#r||(this.#r=!0,this.#s(-2))}stop(){this.#r&&(this.#r=!1,this.#o=!0,this.#a(),this.#e.off("block",this.#n))}pause(e){e&&this.#a(),this.#e.off("block",this.#n)}resume(){this.start()}}class G2 extends Oy{#e;constructor(e,n){super(e),this.#e=H2(n)}_recover(e){return new ff(e,this.#e)}async _subscribe(e){return await e.send("eth_newFilter",[this.#e])}async _emitResults(e,n){for(const r of n)e.emit(this.#e,e._wrapLog(r,e._network))}}class Q2 extends Oy{async _subscribe(e){return await e.send("eth_newPendingTransactionFilter",[])}async _emitResults(e,n){for(const r of n)e.emit("pending",r)}}const V2="bigint,boolean,function,number,string,symbol".split(/,/g);function Oo(t){if(t==null||V2.indexOf(typeof t)>=0||typeof t.getAddress=="function")return t;if(Array.isArray(t))return t.map(Oo);if(typeof t=="object")return Object.keys(t).reduce((e,n)=>(e[n]=t[n],e),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function j2(t){return new Promise(e=>{setTimeout(e,t)})}function Fr(t){return t&&t.toLowerCase()}function Lh(t){return t&&typeof t.pollingInterval=="number"}const Ly={polling:!1,staticNetwork:null,batchStallTime:10,batchMaxSize:1<<20,batchMaxCount:100,cacheTimeout:250,pollingInterval:4e3};class Ul extends z2{address;constructor(e,n){super(e),n=q(n),z(this,{address:n})}connect(e){S(!1,"cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async populateTransaction(e){return await this.populateCall(e)}async sendUncheckedTransaction(e){const n=Oo(e),r=[];if(n.from){const s=n.from;r.push((async()=>{const o=await Ke(s,this.provider);w(o!=null&&o.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=o})())}else n.from=this.address;if(n.gasLimit==null&&r.push((async()=>{n.gasLimit=await this.provider.estimateGas({...n,from:this.address})})()),n.to!=null){const s=n.to;r.push((async()=>{n.to=await Ke(s,this.provider)})())}r.length&&await Promise.all(r);const i=this.provider.getRpcTransaction(n);return this.provider.send("eth_sendTransaction",[i])}async sendTransaction(e){const n=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(e);return await new Promise((i,s)=>{const o=[1e3,100];let a=0;const l=async()=>{try{const u=await this.provider.getTransaction(r);if(u!=null){i(u.replaceableTransaction(n));return}}catch(u){if(Le(u,"CANCELLED")||Le(u,"BAD_DATA")||Le(u,"NETWORK_ERROR")||Le(u,"UNSUPPORTED_OPERATION")){u.info==null&&(u.info={}),u.info.sendTransactionHash=r,s(u);return}if(Le(u,"INVALID_ARGUMENT")&&(a++,u.info==null&&(u.info={}),u.info.sendTransactionHash=r,a>10)){s(u);return}this.provider.emit("error",le("failed to fetch transation after sending (will try again)","UNKNOWN_ERROR",{error:u}))}this.provider._setTimeout(()=>{l()},o.pop()||4e3)};l()})}async signTransaction(e){const n=Oo(e);if(n.from){const i=await Ke(n.from,this.provider);w(i!=null&&i.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=i}else n.from=this.address;const r=this.provider.getRpcTransaction(n);return await this.provider.send("eth_signTransaction",[r])}async signMessage(e){const n=typeof e=="string"?cn(e):e;return await this.provider.send("personal_sign",[I(n),this.address.toLowerCase()])}async signTypedData(e,n,r){const i=Oo(r),s=await ct.resolveNames(e,n,i,async o=>{const a=await Ke(o);return w(a!=null,"TypedData does not support null address","value",o),a});return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(ct.getPayload(s.domain,n,s.value))])}async unlock(e){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),e,null])}async _legacySignMessage(e){const n=typeof e=="string"?cn(e):e;return await this.provider.send("eth_sign",[this.address.toLowerCase(),I(n)])}}class K2 extends L2{#e;#t;#n;#r;#i;#o;#s;#a(){if(this.#r)return;const e=this._getOption("batchMaxCount")===1?0:this._getOption("batchStallTime");this.#r=setTimeout(()=>{this.#r=null;const n=this.#n;for(this.#n=[];n.length;){const r=[n.shift()];for(;n.length&&r.length!==this.#e.batchMaxCount;)if(r.push(n.shift()),JSON.stringify(r.map(s=>s.payload)).length>this.#e.batchMaxSize){n.unshift(r.pop());break}(async()=>{const i=r.length===1?r[0].payload:r.map(s=>s.payload);this.emit("debug",{action:"sendRpcPayload",payload:i});try{const s=await this._send(i);this.emit("debug",{action:"receiveRpcResult",result:s});for(const{resolve:o,reject:a,payload:l}of r){if(this.destroyed){a(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:l.method}));continue}const u=s.filter(f=>f.id===l.id)[0];if(u==null){const f=le("missing response for request","BAD_DATA",{value:s,info:{payload:l}});this.emit("error",f),a(f);continue}if("error"in u){a(this.getRpcError(l,u));continue}o(u.result)}}catch(s){this.emit("debug",{action:"receiveRpcError",error:s});for(const{reject:o}of r)o(s)}})()}},e)}constructor(e,n){super(e,n),this.#t=1,this.#e=Object.assign({},Ly,n||{}),this.#n=[],this.#r=null,this.#o=null,this.#s=null;{let i=null;const s=new Promise(o=>{i=o});this.#i={promise:s,resolve:i}}const r=this._getOption("staticNetwork");typeof r=="boolean"?(w(!r||e!=="any","staticNetwork cannot be used on special network 'any'","options",n),r&&e!=null&&(this.#o=pt.from(e))):r&&(w(e==null||r.matches(e),"staticNetwork MUST match network object","options",n),this.#o=r)}_getOption(e){return this.#e[e]}get _network(){return S(this.#o,"network is not available yet","NETWORK_ERROR"),this.#o}async _perform(e){if(e.method==="call"||e.method==="estimateGas"){let r=e.transaction;if(r&&r.type!=null&&U(r.type)&&r.maxFeePerGas==null&&r.maxPriorityFeePerGas==null){const i=await this.getFeeData();i.maxFeePerGas==null&&i.maxPriorityFeePerGas==null&&(e=Object.assign({},e,{transaction:Object.assign({},r,{type:void 0})}))}}const n=this.getRpcRequest(e);return n!=null?await this.send(n.method,n.args):super._perform(e)}async _detectNetwork(){const e=this._getOption("staticNetwork");if(e)if(e===!0){if(this.#o)return this.#o}else return e;return this.#s?await this.#s:this.ready?(this.#s=(async()=>{try{const n=pt.from(U(await this.send("eth_chainId",[])));return this.#s=null,n}catch(n){throw this.#s=null,n}})(),await this.#s):(this.#s=(async()=>{const n={id:this.#t++,method:"eth_chainId",params:[],jsonrpc:"2.0"};this.emit("debug",{action:"sendRpcPayload",payload:n});let r;try{r=(await this._send(n))[0],this.#s=null}catch(i){throw this.#s=null,this.emit("debug",{action:"receiveRpcError",error:i}),i}if(this.emit("debug",{action:"receiveRpcResult",result:r}),"result"in r)return pt.from(U(r.result));throw this.getRpcError(n,r)})(),await this.#s)}_start(){this.#i==null||this.#i.resolve==null||(this.#i.resolve(),this.#i=null,(async()=>{for(;this.#o==null&&!this.destroyed;)try{this.#o=await this._detectNetwork()}catch(e){if(this.destroyed)break;console.log("JsonRpcProvider failed to detect network and cannot start up; retry in 1s (perhaps the URL is wrong or the node is not started)"),this.emit("error",le("failed to bootstrap network detection","NETWORK_ERROR",{event:"initial-network-discovery",info:{error:e}})),await j2(1e3)}this.#a()})())}async _waitUntilReady(){if(this.#i!=null)return await this.#i.promise}_getSubscriber(e){return e.type==="pending"?new Q2(this):e.type==="event"?this._getOption("polling")?new ff(this,e.filter):new G2(this,e.filter):e.type==="orphan"&&e.filter.orphan==="drop-log"?new By("orphan"):super._getSubscriber(e)}get ready(){return this.#i==null}getRpcTransaction(e){const n={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach(r=>{if(e[r]==null)return;let i=r;r==="gasLimit"&&(i="gas"),n[i]=Ut(U(e[r],`tx.${r}`))}),["from","to","data"].forEach(r=>{e[r]!=null&&(n[r]=I(e[r]))}),e.accessList&&(n.accessList=Ir(e.accessList)),e.blobVersionedHashes&&(n.blobVersionedHashes=e.blobVersionedHashes.map(r=>r.toLowerCase())),e.authorizationList&&(n.authorizationList=e.authorizationList.map(r=>{const i=_g(r);return{address:i.address,nonce:Ut(i.nonce),chainId:Ut(i.chainId),yParity:Ut(i.signature.yParity),r:Ut(i.signature.r),s:Ut(i.signature.s)}})),n}getRpcRequest(e){switch(e.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getPriorityFee":return{method:"eth_maxPriorityFeePerGas",args:[]};case"getBalance":return{method:"eth_getBalance",args:[Fr(e.address),e.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[Fr(e.address),e.blockTag]};case"getCode":return{method:"eth_getCode",args:[Fr(e.address),e.blockTag]};case"getStorage":return{method:"eth_getStorageAt",args:[Fr(e.address),"0x"+e.position.toString(16),e.blockTag]};case"broadcastTransaction":return{method:"eth_sendRawTransaction",args:[e.signedTransaction]};case"getBlock":if("blockTag"in e)return{method:"eth_getBlockByNumber",args:[e.blockTag,!!e.includeTransactions]};if("blockHash"in e)return{method:"eth_getBlockByHash",args:[e.blockHash,!!e.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[e.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[e.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(e.transaction),e.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(e.transaction)]};case"getLogs":return e.filter&&e.filter.address!=null&&(Array.isArray(e.filter.address)?e.filter.address=e.filter.address.map(Fr):e.filter.address=Fr(e.filter.address)),{method:"eth_getLogs",args:[e.filter]}}return null}getRpcError(e,n){const{method:r}=e,{error:i}=n;if(r==="eth_estimateGas"&&i.message){const a=i.message;if(!a.match(/revert/i)&&a.match(/insufficient funds/i))return le("insufficient funds","INSUFFICIENT_FUNDS",{transaction:e.params[0],info:{payload:e,error:i}});if(a.match(/nonce/i)&&a.match(/too low/i))return le("nonce has already been used","NONCE_EXPIRED",{transaction:e.params[0],info:{payload:e,error:i}})}if(r==="eth_call"||r==="eth_estimateGas"){const a=Zu(i),l=xi.getBuiltinCallException(r==="eth_call"?"call":"estimateGas",e.params[0],a?a.data:null);return l.info={error:i,payload:e},l}const s=JSON.stringify(W2(i));if(typeof i.message=="string"&&i.message.match(/user denied|ethers-user-denied/i))return le("user rejected action","ACTION_REJECTED",{action:{eth_sign:"signMessage",personal_sign:"signMessage",eth_signTypedData_v4:"signTypedData",eth_signTransaction:"signTransaction",eth_sendTransaction:"sendTransaction",eth_requestAccounts:"requestAccess",wallet_requestAccounts:"requestAccess"}[r]||"unknown",reason:"rejected",info:{payload:e,error:i}});if(r==="eth_sendRawTransaction"||r==="eth_sendTransaction"){const a=e.params[0];if(s.match(/insufficient funds|base fee exceeds gas limit/i))return le("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:a,info:{error:i}});if(s.match(/nonce/i)&&s.match(/too low/i))return le("nonce has already been used","NONCE_EXPIRED",{transaction:a,info:{error:i}});if(s.match(/replacement transaction/i)&&s.match(/underpriced/i))return le("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:a,info:{error:i}});if(s.match(/only replay-protected/i))return le("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:r,info:{transaction:a,info:{error:i}}})}let o=!!s.match(/the method .* does not exist/i);return o||i&&i.details&&i.details.startsWith("Unauthorized method:")&&(o=!0),o?le("unsupported operation","UNSUPPORTED_OPERATION",{operation:e.method,info:{error:i,payload:e}}):le("could not coalesce error","UNKNOWN_ERROR",{error:i,payload:e})}send(e,n){if(this.destroyed)return Promise.reject(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e}));const r=this.#t++,i=new Promise((s,o)=>{this.#n.push({resolve:s,reject:o,payload:{method:e,params:n,id:r,jsonrpc:"2.0"}})});return this.#a(),i}async getSigner(e){e==null&&(e=0);const n=this.send("eth_accounts",[]);if(typeof e=="number"){const i=await n;if(e>=i.length)throw new Error("no such account");return new Ul(this,i[e])}const{accounts:r}=await Qe({network:this.getNetwork(),accounts:n});e=q(e);for(const i of r)if(q(i)===e)return new Ul(this,e);throw new Error("invalid account")}async listAccounts(){return(await this.send("eth_accounts",[])).map(n=>new Ul(this,n))}destroy(){this.#r&&(clearTimeout(this.#r),this.#r=null);for(const{payload:e,reject:n}of this.#n)n(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e.method}));this.#n=[],super.destroy()}}class Uy extends K2{#e;constructor(e,n){super(e,n);let r=this._getOption("pollingInterval");r==null&&(r=Ly.pollingInterval),this.#e=r}_getSubscriber(e){const n=super._getSubscriber(e);return Lh(n)&&(n.pollingInterval=this.#e),n}get pollingInterval(){return this.#e}set pollingInterval(e){if(!Number.isInteger(e)||e<0)throw new Error("invalid interval");this.#e=e,this._forEachSubscriber(n=>{Lh(n)&&(n.pollingInterval=this.#e)})}}class J2 extends Uy{#e;constructor(e,n,r){e==null&&(e="http://localhost:8545"),super(n,r),typeof e=="string"?this.#e=new Xt(e):this.#e=e.clone()}_getConnection(){return this.#e.clone()}async send(e,n){return await this._start(),await super.send(e,n)}async _send(e){const n=this._getConnection();n.body=JSON.stringify(e),n.setHeader("content-type","application/json");const r=await n.send();r.assertOk();let i=r.bodyJson;return Array.isArray(i)||(i=[i]),i}}function Zu(t){if(t==null)return null;if(typeof t.message=="string"&&t.message.match(/revert/i)&&ie(t.data))return{message:t.message,data:t.data};if(typeof t=="object"){for(const e in t){const n=Zu(t[e]);if(n)return n}return null}if(typeof t=="string")try{return Zu(JSON.parse(t))}catch{}return null}function Yu(t,e){if(t!=null){if(typeof t.message=="string"&&e.push(t.message),typeof t=="object")for(const n in t)Yu(t[n],e);if(typeof t=="string")try{return Yu(JSON.parse(t),e)}catch{}}}function W2(t){const e=[];return Yu(t,e),e}class or extends Uy{#e;#t;constructor(e,n,r){const i=Object.assign({},r??{},{batchMaxCount:1});w(e&&e.request,"invalid EIP-1193 provider","ethereum",e),super(n,i),this.#t=null,r&&r.providerInfo&&(this.#t=r.providerInfo),this.#e=async(s,o)=>{const a={method:s,params:o};this.emit("debug",{action:"sendEip1193Request",payload:a});try{const l=await e.request(a);return this.emit("debug",{action:"receiveEip1193Result",result:l}),l}catch(l){const u=new Error(l.message);throw u.code=l.code,u.data=l.data,u.payload=a,this.emit("debug",{action:"receiveEip1193Error",error:u}),u}}}get providerInfo(){return this.#t}async send(e,n){return await this._start(),await super.send(e,n)}async _send(e){w(!Array.isArray(e),"EIP-1193 does not support batch request","payload",e);try{const n=await this.#e(e.method,e.params||[]);return[{id:e.id,result:n}]}catch(n){return[{id:e.id,error:{code:n.code,data:n.data,message:n.message}}]}}getRpcError(e,n){switch(n=JSON.parse(JSON.stringify(n)),n.error.code||-1){case 4001:n.error.message=`ethers-user-denied: ${n.error.message}`;break;case 4200:n.error.message=`ethers-unsupported: ${n.error.message}`;break}return super.getRpcError(e,n)}async hasSigner(e){e==null&&(e=0);const n=await this.send("eth_accounts",[]);return typeof e=="number"?n.length>e:(e=e.toLowerCase(),n.filter(r=>r.toLowerCase()===e).length!==0)}async getSigner(e){if(e==null&&(e=0),!await this.hasSigner(e))try{await this.#e("eth_requestAccounts",[])}catch(n){const r=n.payload;throw this.getRpcError(r,{id:r.id,error:n})}return await super.getSigner(e)}static async discover(e){if(e==null&&(e={}),e.provider)return new or(e.provider);const n=e.window?e.window:typeof window<"u"?window:null;if(n==null)return null;const r=e.anyProvider;if(r&&n.ethereum)return new or(n.ethereum);if(!("addEventListener"in n&&"dispatchEvent"in n&&"removeEventListener"in n))return null;const i=e.timeout?e.timeout:300;return i===0?null:await new Promise((s,o)=>{let a=[];const l=c=>{a.push(c.detail),r&&u()},u=()=>{if(clearTimeout(f),a.length)if(e&&e.filter){const c=e.filter(a.map(d=>Object.assign({},d.info)));if(c==null)s(null);else if(c instanceof or)s(c);else{let d=null;if(c.uuid&&(d=a.filter(v=>c.uuid===v.info.uuid)[0]),d){const{provider:y,info:v}=d;s(new or(y,void 0,{providerInfo:v}))}else o(le("filter returned unknown info","UNSUPPORTED_OPERATION",{value:c}))}}else{const{provider:c,info:d}=a[0];s(new or(c,void 0,{providerInfo:d}))}else s(null);n.removeEventListener("eip6963:announceProvider",l)},f=setTimeout(()=>{u()},i);n.addEventListener("eip6963:announceProvider",l),n.dispatchEvent(new Event("eip6963:requestProvider"))})}}const Z2=[{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"contract TaxVault",name:"_taxVault",type:"address"},{internalType:"uint256",name:"_taxBasisPoints",type:"uint256"}],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:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"SafeERC20FailedOperation",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"funder",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ContractFunded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamCancelled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"},{indexed:!0,internalType:"address",name:"employer",type:"address"},{indexed:!0,internalType:"address",name:"employee",type:"address"},{indexed:!1,internalType:"uint256",name:"ratePerSecond",type:"uint256"}],name:"StreamCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamPaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamResumed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldRate",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newRate",type:"uint256"}],name:"TaxRateUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"},{indexed:!0,internalType:"address",name:"employee",type:"address"},{indexed:!1,internalType:"uint256",name:"employeeAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"taxAmount",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"HR_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"calculateAccrued",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"cancelStream",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"}],name:"createStream",outputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"fundContract",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:"uint256",name:"streamId",type:"uint256"}],name:"getStream",outputs:[{components:[{internalType:"address",name:"employer",type:"address"},{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"},{internalType:"uint256",name:"lastClaimTime",type:"uint256"},{internalType:"bool",name:"active",type:"bool"}],internalType:"struct PayStream.Stream",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getStreamCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTreasuryBalance",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:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"pauseStream",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:"uint256",name:"streamId",type:"uint256"}],name:"resumeStream",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:"newTaxBasisPoints",type:"uint256"}],name:"setTaxRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"streams",outputs:[{internalType:"address",name:"employer",type:"address"},{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"},{internalType:"uint256",name:"lastClaimTime",type:"uint256"},{internalType:"bool",name:"active",type:"bool"}],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:"taxBasisPoints",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"taxVault",outputs:[{internalType:"contract TaxVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}],Y2={abi:Z2},X2=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"},{internalType:"uint256",name:"initialSupply",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{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:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,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"}],$2={abi:X2};let Fy="",Dy="";try{const t=await pv(()=>import("./addresses-BwW-EkRO.js"),[]);Fy=t.payStream||"",Dy=t.token||""}catch{console.warn("No deployment addresses found. Please deploy contracts first.")}function Qs(){return window.ethereum?new or(window.ethereum):new J2("http://127.0.0.1:8545")}async function q2(){return Qs().getSigner()}async function ex(){if(!window.ethereum)throw new Error("MetaMask not installed. Please install MetaMask.");return(await window.ethereum.request({method:"eth_requestAccounts"}))[0]}async function Qa(t){return new wr(Fy,Y2.abi,t)}async function tx(){const t=Qs(),e=await Qa(t);return Number(await e.getStreamCount())}async function nx(t){const e=Qs();return(await Qa(e)).getStream(t)}async function rx(t){const e=await tx(),n=[];for(let r=0;r{if(!t||!t.active){n("0.0000");return}const o=async()=>{try{const a=await ix(t.id);n(Number(ts(a)).toFixed(6))}catch{const l=Math.floor(Date.now()/1e3)-t.lastClaimTime,u=Number(ts(t.ratePerSecond));n((u*l).toFixed(6))}};return o(),r.current=setInterval(o,1e3),()=>clearInterval(r.current)},[t]),!t)return null;const i=Number(ts(t.ratePerSecond)),s=(i*86400).toFixed(2);return D.jsxs("div",{className:"glass-card earnings-card",children:[D.jsx("div",{className:"earnings-label",children:t.active?"💰 Current Earnings":"⏸ Stream Paused"}),D.jsx("div",{className:"earnings-value",children:e}),D.jsx("div",{className:"earnings-token",children:"PST"}),t.active&&D.jsxs("div",{className:"earnings-rate",children:["Streaming ",i," PST/sec · ~",s," PST/day"]})]})}function ux(){const[t,e]=Xe.useState(null),[n,r]=Xe.useState([]),[i,s]=Xe.useState(null),[o,a]=Xe.useState("0"),[l,u]=Xe.useState(!1),[f,c]=Xe.useState({}),d=Xe.useCallback(async m=>{try{u(!0);const[A,h]=await Promise.all([rx(m),ox(m)]);r(A),a(h);const p=A.find(g=>g.active);p&&!i&&s(p)}catch(A){console.error("Failed to load employee data:",A)}finally{u(!1)}},[i]);Xe.useEffect(()=>{if(t){d(t);const m=setInterval(()=>d(t),15e3);return()=>clearInterval(m)}},[t,d]);const y=async()=>{try{const m=await ex();e(m)}catch(m){alert(m.message)}},v=async m=>{c(A=>({...A,[m]:!0}));try{await sx(m),t&&await d(t)}catch(A){console.error("Withdraw failed:",A),alert(A.reason||A.message||"Withdrawal failed")}finally{c(A=>({...A,[m]:!1}))}};return t?D.jsxs("div",{className:"app-container",children:[D.jsxs("header",{className:"header",children:[D.jsxs("div",{className:"header-brand",children:[D.jsx("div",{className:"header-logo",children:"P"}),D.jsxs("div",{children:[D.jsx("h1",{className:"header-title",children:"PayStream"}),D.jsx("p",{className:"header-subtitle",children:"Employee Portal"})]})]}),D.jsxs("button",{className:"btn-connect connected",onClick:()=>e(null),children:[D.jsx("span",{className:"wallet-dot"}),ax(t)]})]}),D.jsxs("div",{className:"glass-card",style:{textAlign:"center",paddingTop:"1rem",paddingBottom:"1rem"},children:[D.jsx("span",{style:{fontSize:"0.75rem",color:"var(--text-muted)",textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600},children:"Wallet Balance"}),D.jsxs("div",{style:{fontSize:"1.5rem",fontWeight:800,color:"var(--text-primary)",marginTop:"0.25rem"},children:[Number(o).toLocaleString(void 0,{maximumFractionDigits:4})," PST"]})]}),i&&D.jsx(lx,{stream:i}),D.jsxs("div",{className:"glass-card",children:[D.jsx("div",{className:"card-header",children:D.jsx("h2",{className:"card-title",children:"📋 My Salary Streams"})}),l&&n.length===0?D.jsxs("div",{className:"empty-state",children:[D.jsx("div",{className:"spinner",style:{width:32,height:32}}),D.jsx("p",{className:"empty-state-text",style:{marginTop:"1rem"},children:"Loading your streams…"})]}):n.length===0?D.jsxs("div",{className:"empty-state",children:[D.jsx("div",{className:"empty-state-icon",children:"🔍"}),D.jsx("p",{className:"empty-state-text",children:"No streams found"}),D.jsx("p",{style:{fontSize:"0.8rem",color:"var(--text-muted)",marginTop:"0.25rem"},children:"Ask your employer to create a salary stream for your address."})]}):n.map(m=>D.jsxs("div",{className:"stream-card",onClick:()=>m.active&&s(m),style:{cursor:m.active?"pointer":"default"},children:[D.jsxs("div",{className:"stream-card-header",children:[D.jsxs("span",{className:"stream-id",children:["Stream #",m.id]}),m.active?D.jsx("span",{className:"badge badge-active",children:"Active"}):D.jsx("span",{className:"badge badge-inactive",children:"Inactive"})]}),D.jsxs("div",{className:"stream-details",children:[D.jsxs("div",{children:[D.jsx("div",{className:"stream-detail-label",children:"Rate"}),D.jsxs("div",{className:"stream-detail-value",children:[Uh(m.ratePerSecond)," PST/sec"]})]}),D.jsxs("div",{children:[D.jsx("div",{className:"stream-detail-label",children:"Daily"}),D.jsxs("div",{className:"stream-detail-value",children:["~",(Number(Uh(m.ratePerSecond))*86400).toFixed(2)," PST"]})]})]}),m.active&&D.jsx("button",{className:"btn-withdraw",onClick:A=>{A.stopPropagation(),v(m.id)},disabled:f[m.id],children:f[m.id]?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"spinner",style:{marginRight:"0.5rem"}}),"Withdrawing…"]}):"💸 Withdraw Earnings"})]},m.id))]})]}):D.jsxs("div",{className:"app-container",children:[D.jsx("header",{className:"header",children:D.jsxs("div",{className:"header-brand",children:[D.jsx("div",{className:"header-logo",children:"P"}),D.jsxs("div",{children:[D.jsx("h1",{className:"header-title",children:"PayStream"}),D.jsx("p",{className:"header-subtitle",children:"Employee Portal"})]})]})}),D.jsxs("div",{className:"not-connected",children:[D.jsx("div",{className:"not-connected-icon",children:"👛"}),D.jsx("h2",{children:"Connect Your Wallet"}),D.jsx("p",{children:"Connect MetaMask to view your salary streams and withdraw earnings."}),D.jsx("button",{className:"btn-connect",onClick:y,children:"🦊 Connect MetaMask"})]})]})}function cx(){return D.jsx(ux,{})}Fl.createRoot(document.getElementById("root")).render(D.jsx(e0.StrictMode,{children:D.jsx(cx,{})})); diff --git a/Nexus/paystream-main/frontend/employee-portal/dist/index.html b/Nexus/paystream-main/frontend/employee-portal/dist/index.html new file mode 100644 index 000000000..0ee64ecba --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/dist/index.html @@ -0,0 +1,17 @@ + + + + + + + PayStream — Employee Portal + + + + + + + +
+ + diff --git a/Nexus/paystream-main/frontend/employee-portal/index.html b/Nexus/paystream-main/frontend/employee-portal/index.html new file mode 100644 index 000000000..cf3a0dfe9 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/index.html @@ -0,0 +1,16 @@ + + + + + + + PayStream — Employee Portal + + + + + +
+ + + diff --git a/Nexus/paystream-main/frontend/employee-portal/package-lock.json b/Nexus/paystream-main/frontend/employee-portal/package-lock.json new file mode 100644 index 000000000..3b16ce38a --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/package-lock.json @@ -0,0 +1,1818 @@ +{ + "name": "employee-portal", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "employee-portal", + "version": "1.0.0", + "dependencies": { + "ethers": "^6.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@vitejs/plugin-react": "^4.2.0", + "vite": "^5.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/Nexus/paystream-main/frontend/employee-portal/package.json b/Nexus/paystream-main/frontend/employee-portal/package.json new file mode 100644 index 000000000..6492ac863 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/package.json @@ -0,0 +1,22 @@ +{ + "name": "employee-portal", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "ethers": "^6.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@vitejs/plugin-react": "^4.2.0", + "vite": "^5.0.0" + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/employee-portal/src/App.jsx b/Nexus/paystream-main/frontend/employee-portal/src/App.jsx new file mode 100644 index 000000000..e9e4d1c09 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/App.jsx @@ -0,0 +1,6 @@ +import './index.css'; +import EmployeeDashboard from './components/EmployeeDashboard'; + +export default function App() { + return ; +} diff --git a/Nexus/paystream-main/frontend/employee-portal/src/components/EarningsDisplay.jsx b/Nexus/paystream-main/frontend/employee-portal/src/components/EarningsDisplay.jsx new file mode 100644 index 000000000..90da916a7 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/components/EarningsDisplay.jsx @@ -0,0 +1,81 @@ +import { useState, useEffect, useRef } from 'react'; +import { calculateAccrued, ethers } from '../services/contractService'; + +export default function EarningsDisplay({ stream, onWithdraw, loading }) { + const [earned, setEarned] = useState('0.0000'); + const intervalRef = useRef(null); + + useEffect(() => { + if (!stream || !stream.active) { + setEarned('0.0000'); + return; + } + + const updateEarnings = async () => { + try { + const accrued = await calculateAccrued(stream.id); + const formatted = Number(ethers.formatEther(accrued)).toFixed(6); + setEarned(formatted); + } catch (err) { + // Fallback + const now = Math.floor(Date.now() / 1000); + const elapsed = now - Number(stream.lastClaimTime); + const rate = Number(ethers.formatEther(stream.ratePerSecond)); + const calculated = (rate * elapsed).toFixed(6); + setEarned(calculated); + } + }; + + updateEarnings(); + intervalRef.current = setInterval(updateEarnings, 1000); + return () => clearInterval(intervalRef.current); + }, [stream]); + + if (!stream) return null; + + const rateFormatted = Number(ethers.formatEther(stream.ratePerSecond)); + const dailyRate = (rateFormatted * 86400).toFixed(2); + + return ( +
+
+ {stream.active ? '💰 Current Earnings' : '⏸ Stream Paused'} +
+
{earned}
+
HLUSD
+ {stream.active && ( +
+ Streaming {rateFormatted} HLUSD/sec · ~{dailyRate} HLUSD/day +
+ )} + + + +
+ ); +} diff --git a/Nexus/paystream-main/frontend/employee-portal/src/components/EmployeeDashboard.jsx b/Nexus/paystream-main/frontend/employee-portal/src/components/EmployeeDashboard.jsx new file mode 100644 index 000000000..4096e19dc --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/components/EmployeeDashboard.jsx @@ -0,0 +1,335 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + connectWallet, + getEmployeeStreams, + withdraw, + getTokenBalance, + formatAddress, + formatRate, + ethers, + requestStreamStart, + getMyPendingRequests, +} from '../services/contractService'; +import EarningsDisplay from './EarningsDisplay'; + +export default function EmployeeDashboard() { + const [account, setAccount] = useState(null); + const [streams, setStreams] = useState([]); + const [selectedStream, setSelectedStream] = useState(null); + const [balance, setBalance] = useState('0'); + const [loading, setLoading] = useState(false); + const [withdrawLoading, setWithdrawLoading] = useState({}); + const [pendingRequests, setPendingRequests] = useState([]); + const [showRequestForm, setShowRequestForm] = useState(false); + const [requestRate, setRequestRate] = useState(''); + const [requestLoading, setRequestLoading] = useState(false); + + + const loadData = useCallback(async (address) => { + try { + setLoading(true); + const [myStreams, tokenBalance, myRequests] = await Promise.all([ + getEmployeeStreams(address), + getTokenBalance(address), + getMyPendingRequests(address), + ]); + setStreams(myStreams); + setBalance(tokenBalance); + setPendingRequests(myRequests); + // Auto-select first active stream for earnings display + const active = myStreams.find((s) => s.active); + if (active && !selectedStream) { + setSelectedStream(active); + } + } catch (err) { + console.error('Failed to load employee data:', err); + } finally { + setLoading(false); + } + }, [selectedStream]); + + useEffect(() => { + if (account) { + loadData(account); + const interval = setInterval(() => loadData(account), 15000); + return () => clearInterval(interval); + } + }, [account, loadData]); + + const handleConnect = async () => { + try { + const addr = await connectWallet(); + setAccount(addr); + } catch (err) { + alert(err.message); + } + }; + + const handleWithdraw = async (streamId) => { + setWithdrawLoading((p) => ({ ...p, [streamId]: true })); + try { + await withdraw(streamId); + if (account) await loadData(account); + } catch (err) { + console.error('Withdraw failed:', err); + alert(err.reason || err.message || 'Withdrawal failed'); + } finally { + setWithdrawLoading((p) => ({ ...p, [streamId]: false })); + } + }; + + const handleRequestStream = async () => { + if (!requestRate || Number(requestRate) <= 0) { + alert('Please enter a valid rate'); + return; + } + setRequestLoading(true); + try { + await requestStreamStart(requestRate); + setRequestRate(''); + setShowRequestForm(false); + if (account) await loadData(account); + alert('Stream request submitted! Wait for HR approval.'); + } catch (err) { + console.error('Request failed:', err); + alert(err.reason || err.message || 'Request failed'); + } finally { + setRequestLoading(false); + } + }; + + + if (!account) { + return ( +
+
+
+
P
+
+

PayStream

+

Employee Portal

+
+
+
+
+
👛
+

Connect Your Wallet

+

Connect MetaMask to view your salary streams and withdraw earnings.

+ +
+
+ ); + } + + return ( +
+ {/* Header */} +
+
+
P
+
+

PayStream

+

Employee Portal

+
+
+ +
+ + {/* Wallet Balance */} +
+ + Wallet Balance + +
+ {Number(balance).toLocaleString(undefined, { maximumFractionDigits: 4 })} PST +
+
+ + {/* Selected Stream Earnings */} + {selectedStream && ( + handleWithdraw(selectedStream.id)} + loading={withdrawLoading[selectedStream.id]} + /> + )} + + {/* Request Stream Section */} +
+
+

🚀 Request New Stream

+
+ {!showRequestForm ? ( + + ) : ( +
+
+ + setRequestRate(e.target.value)} + disabled={requestLoading} + /> +

+ Daily equivalent: ~{(Number(requestRate || 0) * 86400).toFixed(2)} PST +

+
+
+ + +
+
+ )} +
+ + {/* Pending Requests */} + {pendingRequests.length > 0 && ( +
+
+

⏳ Pending Requests

+
+ {pendingRequests.map((req) => ( +
+
+ Request #{req.id} + + Pending Approval + +
+
+
+
Requested Rate
+
+ {formatRate(req.ratePerSecond)} HLUSD/sec +
+
+
+
Daily
+
+ ~{(Number(formatRate(req.ratePerSecond)) * 86400).toFixed(2)} HLUSD +
+
+
+
+ ))} +
+ )} + + {/* My Streams */} +
+
+

📋 My Salary Streams

+
+ + {loading && streams.length === 0 ? ( +
+
+

Loading your streams…

+
+ ) : streams.length === 0 ? ( +
+
🔍
+

No streams found

+

+ Ask your employer to create a salary stream for your address. +

+
+ ) : ( + streams.map((stream) => ( +
stream.active && setSelectedStream(stream)} + style={{ cursor: stream.active ? 'pointer' : 'default' }} + > +
+ Stream #{stream.id} + {stream.active ? ( + Active + ) : ( + Inactive + )} +
+
+
+
Rate
+
+ {formatRate(stream.ratePerSecond)} PST/sec +
+
+
+
Daily
+
+ ~{(Number(formatRate(stream.ratePerSecond)) * 86400).toFixed(2)} PST +
+
+
+ {stream.active && ( + + )} +
+ )) + )} +
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/employee-portal/src/index.css b/Nexus/paystream-main/frontend/employee-portal/src/index.css new file mode 100644 index 000000000..e0e34a049 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/index.css @@ -0,0 +1,460 @@ +/* ───────────────────────────────────────── + PayStream Employee Portal — Design System + Dark theme matching HR Dashboard + ───────────────────────────────────────── */ + +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap'); + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --bg-primary: #0a0a12; + --bg-secondary: #12121f; + --bg-card: rgba(20, 20, 40, 0.6); + --bg-input: rgba(15, 15, 30, 0.8); + --glass-border: rgba(100, 100, 180, 0.15); + --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); + --glass-blur: 16px; + --gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6, #a855f7); + --gradient-accent: linear-gradient(135deg, #818cf8, #c084fc); + --gradient-success: linear-gradient(135deg, #10b981, #34d399); + --gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(99, 102, 241, 0.08) 0%, transparent 50%), + radial-gradient(ellipse at 80% 20%, rgba(168, 85, 247, 0.06) 0%, transparent 50%), + radial-gradient(ellipse at 50% 80%, rgba(139, 92, 246, 0.04) 0%, transparent 50%); + --text-primary: #f1f5f9; + --text-secondary: #94a3b8; + --text-muted: #64748b; + --text-accent: #a5b4fc; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 20px; + --radius-full: 9999px; + --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +body { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + min-height: 100vh; + line-height: 1.6; +} + +#root { + min-height: 100vh; + background: var(--gradient-bg); +} + +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: rgba(100, 100, 180, 0.3); + border-radius: 3px; +} + +/* ── Layout ── */ +.app-container { + max-width: 800px; + margin: 0 auto; + padding: 2rem 1.5rem; +} + +/* ── Header ── */ +.header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2.5rem; + padding-bottom: 1.5rem; + border-bottom: 1px solid var(--glass-border); +} + +.header-brand { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.header-logo { + width: 42px; + height: 42px; + background: var(--gradient-primary); + border-radius: var(--radius-md); + display: flex; + align-items: center; + justify-content: center; + font-size: 1.25rem; + font-weight: 800; + box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); +} + +.header-title { + font-size: 1.5rem; + font-weight: 700; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.header-subtitle { + font-size: 0.75rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: 600; +} + +.btn-connect { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.65rem 1.25rem; + background: var(--gradient-primary); + border: none; + border-radius: var(--radius-full); + color: white; + font-family: inherit; + font-size: 0.875rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); +} + +.btn-connect:hover { + transform: translateY(-2px); + box-shadow: 0 6px 25px rgba(99, 102, 241, 0.45); +} + +.btn-connect.connected { + background: var(--bg-card); + border: 1px solid var(--glass-border); + box-shadow: var(--glass-shadow); +} + +.wallet-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #34d399; + box-shadow: 0 0 8px rgba(52, 211, 153, 0.5); + animation: pulse-dot 2s ease-in-out infinite; +} + +@keyframes pulse-dot { + + 0%, + 100% { + opacity: 1; + transform: scale(1); + } + + 50% { + opacity: 0.7; + transform: scale(1.2); + } +} + +/* ── Glass Card ── */ +.glass-card { + background: var(--bg-card); + backdrop-filter: blur(var(--glass-blur)); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + padding: 2rem; + box-shadow: var(--glass-shadow); + margin-bottom: 1.5rem; +} + +.card-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +} + +.card-title { + font-size: 1.1rem; + font-weight: 700; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 0.5rem; +} + +/* ── Earnings Display ── */ +.earnings-card { + text-align: center; + padding: 3rem 2rem; + position: relative; + overflow: hidden; +} + +.earnings-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + background: var(--gradient-primary); +} + +.earnings-label { + font-size: 0.8rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: 700; + margin-bottom: 1rem; +} + +.earnings-value { + font-size: 3.5rem; + font-weight: 900; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + line-height: 1.1; + transition: all 0.1s ease; + font-variant-numeric: tabular-nums; +} + +.earnings-token { + font-size: 1.2rem; + color: var(--text-secondary); + margin-top: 0.5rem; + font-weight: 600; +} + +.earnings-rate { + font-size: 0.8rem; + color: var(--text-muted); + margin-top: 0.5rem; +} + +/* ── Withdraw Button ── */ +.btn-withdraw { + width: 100%; + padding: 1rem 2rem; + background: var(--gradient-success); + border: none; + border-radius: var(--radius-lg); + color: white; + font-family: inherit; + font-size: 1.1rem; + font-weight: 700; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: 0 4px 20px rgba(16, 185, 129, 0.3); + margin-top: 1.5rem; +} + +.btn-withdraw:hover:not(:disabled) { + transform: translateY(-3px); + box-shadow: 0 8px 30px rgba(16, 185, 129, 0.45); +} + +.btn-withdraw:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none; +} + +/* ── Stream Cards ── */ +.stream-card { + border: 1px solid var(--glass-border); + border-radius: var(--radius-lg); + padding: 1.25rem; + transition: all var(--transition-base); + background: rgba(15, 15, 35, 0.4); + margin-bottom: 0.75rem; +} + +.stream-card:hover { + border-color: rgba(100, 100, 180, 0.25); + background: rgba(20, 20, 45, 0.5); +} + +.stream-card-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.75rem; +} + +.stream-id { + font-size: 0.85rem; + font-weight: 700; + color: var(--text-accent); +} + +.badge { + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.2rem 0.6rem; + border-radius: var(--radius-full); + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.badge-active { + background: rgba(16, 185, 129, 0.12); + color: #34d399; + border: 1px solid rgba(16, 185, 129, 0.2); +} + +.badge-active::before { + content: ''; + width: 5px; + height: 5px; + border-radius: 50%; + background: #34d399; + animation: pulse-dot 2s ease-in-out infinite; +} + +.badge-inactive { + background: rgba(239, 68, 68, 0.1); + color: #f87171; + border: 1px solid rgba(239, 68, 68, 0.15); +} + +.stream-details { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.5rem; +} + +.stream-detail-label { + font-size: 0.7rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.stream-detail-value { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary); +} + +.stream-accrued { + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + font-weight: 800; +} + +/* ── Not Connected ── */ +.not-connected { + text-align: center; + padding: 5rem 2rem; +} + +.not-connected-icon { + font-size: 4rem; + margin-bottom: 1rem; + animation: float 3s ease-in-out infinite; +} + +@keyframes float { + + 0%, + 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-10px); + } +} + +.not-connected h2 { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 0.5rem; +} + +.not-connected p { + color: var(--text-secondary); + margin-bottom: 1.5rem; +} + +/* ── Empty State ── */ +.empty-state { + text-align: center; + padding: 3rem; + color: var(--text-muted); +} + +.empty-state-icon { + font-size: 3rem; + margin-bottom: 0.75rem; + opacity: 0.5; +} + +.empty-state-text { + font-size: 0.95rem; + font-weight: 500; +} + +/* ── Spinner ── */ +.spinner { + display: inline-block; + width: 16px; + height: 16px; + border: 2px solid rgba(255, 255, 255, 0.2); + border-top-color: white; + border-radius: 50%; + animation: spin 0.6s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* ── Responsive ── */ +@media (max-width: 640px) { + .app-container { + padding: 1rem; + } + + .header { + flex-direction: column; + gap: 1rem; + } + + .earnings-value { + font-size: 2.5rem; + } + + .stream-details { + grid-template-columns: 1fr; + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/employee-portal/src/main.jsx b/Nexus/paystream-main/frontend/employee-portal/src/main.jsx new file mode 100644 index 000000000..226a04a53 --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/main.jsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +); diff --git a/Nexus/paystream-main/frontend/employee-portal/src/services/contractService.js b/Nexus/paystream-main/frontend/employee-portal/src/services/contractService.js new file mode 100644 index 000000000..7fdcbd3cf --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/src/services/contractService.js @@ -0,0 +1,191 @@ +import { ethers } from 'ethers'; +import PayStreamABI from '../../../../shared/abi/PayStream.json'; +import MockTokenABI from '../../../../shared/abi/MockToken.json'; + +let PAYSTREAM_ADDRESS = ''; +let TOKEN_ADDRESS = ''; + +try { + const addresses = await import('../../../../shared/abi/addresses.json'); + PAYSTREAM_ADDRESS = addresses.payStream || ''; + TOKEN_ADDRESS = addresses.token || ''; +} catch (e) { + console.warn('No deployment addresses found. Please deploy contracts first.'); +} + +export function getProvider() { + if (window.ethereum) { + return new ethers.BrowserProvider(window.ethereum); + } + // Fallback to HeLa Public RPC + return new ethers.JsonRpcProvider('https://testnet-rpc.helachain.com'); +} + +export async function getSigner() { + const provider = getProvider(); + return provider.getSigner(); +} + +export async function switchToHeLaNetwork() { + if (typeof window.ethereum === 'undefined') { + throw new Error('MetaMask is not installed'); + } + + const chainId = '0xA2D08'; // 666888 in hex (HeLa Testnet) + + try { + // Try to switch to the network + await window.ethereum.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId }], + }); + } catch (switchError) { + // If the network doesn't exist, add it + if (switchError.code === 4902) { + try { + await window.ethereum.request({ + method: 'wallet_addEthereumChain', + params: [{ + chainId, + chainName: 'HeLa Testnet', + nativeCurrency: { + name: 'HLUSD', + symbol: 'HLUSD', + decimals: 18 + }, + rpcUrls: ['https://testnet-rpc.helachain.com'], + blockExplorerUrls: ['https://testnet-blockexplorer.helachain.com'] + }], + }); + } catch (addError) { + console.error('Add chain error:', addError); + throw new Error('Failed to add HeLa Testnet to MetaMask'); + } + } else { + throw switchError; + } + } +} + +export async function connectWallet() { + if (typeof window.ethereum === 'undefined') { + throw new Error('MetaMask is not installed. Please install the browser extension from metamask.io'); + } + + // First, try to switch to HeLa network + try { + await switchToHeLaNetwork(); + console.log('✅ Switched to HeLa Testnet'); + } catch (err) { + console.warn('Could not switch network:', err); + throw new Error('Please manually switch MetaMask to HeLa Testnet (Chain ID: 666888)'); + } + + const accounts = await window.ethereum.request({ + method: 'eth_requestAccounts', + }); + return accounts[0]; +} + +export async function getPayStreamContract(signerOrProvider) { + return new ethers.Contract(PAYSTREAM_ADDRESS, PayStreamABI.abi, signerOrProvider); +} + +// ── Read Functions ── + +export async function getStreamCount() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return Number(await contract.getStreamCount()); +} + +export async function getStream(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.getStream(streamId); +} + +export async function getEmployeeStreams(employeeAddress) { + const count = await getStreamCount(); + const streams = []; + for (let i = 0; i < count; i++) { + const s = await getStream(i); + if (s.employee.toLowerCase() === employeeAddress.toLowerCase()) { + streams.push({ + id: i, + employer: s.employer, + employee: s.employee, + ratePerSecond: s.ratePerSecond, + lastClaimTime: Number(s.lastClaimTime), + active: s.active, + }); + } + } + return streams; +} + +export async function calculateAccrued(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.calculateAccrued(streamId); +} + +// ── Write Functions ── + +export async function withdraw(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + // Explicit gas limit to prevent RPC estimation errors on HeLa + const tx = await contract.withdraw(streamId, { gasLimit: 500000 }); + await tx.wait(); + return tx; +} + +export async function requestStreamStart(ratePerSecond) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const rateWei = ethers.parseEther(ratePerSecond.toString()); + const tx = await contract.requestStreamStart(rateWei); + await tx.wait(); + return tx; +} + +export async function getMyPendingRequests(employeeAddress) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const { requestIds, requests } = await contract.getPendingRequests(); + + // Filter for this employee's requests + const myRequests = []; + for (let i = 0; i < requests.length; i++) { + if (requests[i].employee.toLowerCase() === employeeAddress.toLowerCase()) { + myRequests.push({ + id: Number(requestIds[i]), + employee: requests[i].employee, + ratePerSecond: requests[i].ratePerSecond, + timestamp: Number(requests[i].timestamp), + processed: requests[i].processed, + }); + } + } + return myRequests; +} + + +export async function getTokenBalance(address) { + const provider = getProvider(); + const token = new ethers.Contract(TOKEN_ADDRESS, MockTokenABI.abi, provider); + const balance = await token.balanceOf(address); + return ethers.formatEther(balance); +} + +export function formatAddress(address) { + if (!address) return ''; + return `${address.slice(0, 6)}…${address.slice(-4)}`; +} + +export function formatRate(rateWei) { + return ethers.formatEther(rateWei); +} + +export { ethers }; diff --git a/Nexus/paystream-main/frontend/employee-portal/vite.config.js b/Nexus/paystream-main/frontend/employee-portal/vite.config.js new file mode 100644 index 000000000..eb2c19edd --- /dev/null +++ b/Nexus/paystream-main/frontend/employee-portal/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + server: { + port: 3001, + fs: { + allow: ['../../..'], + }, + }, + build: { + target: 'esnext', + }, +}); diff --git a/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/addresses-BwW-EkRO.js b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/addresses-BwW-EkRO.js new file mode 100644 index 000000000..5f664b43b --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/addresses-BwW-EkRO.js @@ -0,0 +1 @@ +const t="0x0000000000000000000000000000000000000000",e="0x0000000000000000000000000000000000000000",o="0x0000000000000000000000000000000000000000",a="localhost",s="0x0000000000000000000000000000000000000000",n="2024-01-01T00:00:00.000Z",c={token:t,taxVault:e,payStream:o,network:a,deployer:s,timestamp:n};export{c as default,s as deployer,a as network,o as payStream,e as taxVault,n as timestamp,t as token}; diff --git a/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-Bwu5YgMO.js b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-Bwu5YgMO.js new file mode 100644 index 000000000..0f0f64042 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-Bwu5YgMO.js @@ -0,0 +1,40 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function Gy(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Dh={exports:{}},ma={},Mh={exports:{}},K={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ri=Symbol.for("react.element"),jy=Symbol.for("react.portal"),Vy=Symbol.for("react.fragment"),Qy=Symbol.for("react.strict_mode"),Ky=Symbol.for("react.profiler"),Jy=Symbol.for("react.provider"),Wy=Symbol.for("react.context"),Zy=Symbol.for("react.forward_ref"),Yy=Symbol.for("react.suspense"),Xy=Symbol.for("react.memo"),$y=Symbol.for("react.lazy"),yf=Symbol.iterator;function qy(t){return t===null||typeof t!="object"?null:(t=yf&&t[yf]||t["@@iterator"],typeof t=="function"?t:null)}var _h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},zh=Object.assign,Hh={};function Ns(t,e,n){this.props=t,this.context=e,this.refs=Hh,this.updater=n||_h}Ns.prototype.isReactComponent={};Ns.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Ns.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Gh(){}Gh.prototype=Ns.prototype;function $u(t,e,n){this.props=t,this.context=e,this.refs=Hh,this.updater=n||_h}var qu=$u.prototype=new Gh;qu.constructor=$u;zh(qu,Ns.prototype);qu.isPureReactComponent=!0;var wf=Array.isArray,jh=Object.prototype.hasOwnProperty,ec={current:null},Vh={key:!0,ref:!0,__self:!0,__source:!0};function Qh(t,e,n){var r,s={},i=null,o=null;if(e!=null)for(r in e.ref!==void 0&&(o=e.ref),e.key!==void 0&&(i=""+e.key),e)jh.call(e,r)&&!Vh.hasOwnProperty(r)&&(s[r]=e[r]);var a=arguments.length-2;if(a===1)s.children=n;else if(1>>1,X=T[J];if(0>>1;Js(Ht,M))lts(ut,Ht)?(T[J]=ut,T[lt]=M,J=lt):(T[J]=Ht,T[Me]=M,J=Me);else if(lts(ut,M))T[J]=ut,T[lt]=M,J=lt;else break e}}return O}function s(T,O){var M=T.sortIndex-O.sortIndex;return M!==0?M:T.id-O.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;t.unstable_now=function(){return i.now()}}else{var o=Date,a=o.now();t.unstable_now=function(){return o.now()-a}}var l=[],u=[],f=1,c=null,d=3,w=!1,m=!1,g=!1,A=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,p=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(T){for(var O=n(u);O!==null;){if(O.callback===null)r(u);else if(O.startTime<=T)r(u),O.sortIndex=O.expirationTime,e(l,O);else break;O=n(u)}}function E(T){if(g=!1,y(T),!m)if(n(l)!==null)m=!0,D(x);else{var O=n(u);O!==null&&j(E,O.startTime-T)}}function x(T,O){m=!1,g&&(g=!1,h(k),k=-1),w=!0;var M=d;try{for(y(O),c=n(l);c!==null&&(!(c.expirationTime>O)||T&&!H());){var J=c.callback;if(typeof J=="function"){c.callback=null,d=c.priorityLevel;var X=J(c.expirationTime<=O);O=t.unstable_now(),typeof X=="function"?c.callback=X:c===n(l)&&r(l),y(O)}else r(l);c=n(l)}if(c!==null)var at=!0;else{var Me=n(u);Me!==null&&j(E,Me.startTime-O),at=!1}return at}finally{c=null,d=M,w=!1}}var S=!1,P=null,k=-1,_=5,B=-1;function H(){return!(t.unstable_now()-B<_)}function ae(){if(P!==null){var T=t.unstable_now();B=T;var O=!0;try{O=P(!0,T)}finally{O?fe():(S=!1,P=null)}}else S=!1}var fe;if(typeof p=="function")fe=function(){p(ae)};else if(typeof MessageChannel<"u"){var ot=new MessageChannel,I=ot.port2;ot.port1.onmessage=ae,fe=function(){I.postMessage(null)}}else fe=function(){A(ae,0)};function D(T){P=T,S||(S=!0,fe())}function j(T,O){k=A(function(){T(t.unstable_now())},O)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(T){T.callback=null},t.unstable_continueExecution=function(){m||w||(m=!0,D(x))},t.unstable_forceFrameRate=function(T){0>T||125J?(T.sortIndex=M,e(u,T),n(l)===null&&T===n(u)&&(g?(h(k),k=-1):g=!0,j(E,M-J))):(T.sortIndex=X,e(l,T),m||w||(m=!0,D(x))),T},t.unstable_shouldYield=H,t.unstable_wrapCallback=function(T){var O=d;return function(){var M=d;d=O;try{return T.apply(this,arguments)}finally{d=M}}}})(Yh);Zh.exports=Yh;var f0=Zh.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var d0=Ae,gt=f0;function C(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ml=Object.prototype.hasOwnProperty,h0=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Af={},Ef={};function p0(t){return Ml.call(Ef,t)?!0:Ml.call(Af,t)?!1:h0.test(t)?Ef[t]=!0:(Af[t]=!0,!1)}function m0(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function g0(t,e,n,r){if(e===null||typeof e>"u"||m0(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function Xe(t,e,n,r,s,i,o){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=i,this.removeEmptyString=o}var De={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){De[t]=new Xe(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];De[e]=new Xe(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){De[t]=new Xe(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){De[t]=new Xe(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){De[t]=new Xe(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){De[t]=new Xe(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){De[t]=new Xe(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){De[t]=new Xe(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){De[t]=new Xe(t,5,!1,t.toLowerCase(),null,!1,!1)});var nc=/[\-:]([a-z])/g;function rc(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(nc,rc);De[e]=new Xe(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(nc,rc);De[e]=new Xe(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(nc,rc);De[e]=new Xe(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){De[t]=new Xe(t,1,!1,t.toLowerCase(),null,!1,!1)});De.xlinkHref=new Xe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){De[t]=new Xe(t,1,!1,t.toLowerCase(),null,!0,!0)});function sc(t,e,n,r){var s=De.hasOwnProperty(e)?De[e]:null;(s!==null?s.type!==0:r||!(2a||s[o]!==i[a]){var l=` +`+s[o].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=o&&0<=a);break}}}finally{Wa=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?Gs(t):""}function y0(t){switch(t.tag){case 5:return Gs(t.type);case 16:return Gs("Lazy");case 13:return Gs("Suspense");case 19:return Gs("SuspenseList");case 0:case 2:case 15:return t=Za(t.type,!1),t;case 11:return t=Za(t.type.render,!1),t;case 1:return t=Za(t.type,!0),t;default:return""}}function Gl(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case Hr:return"Fragment";case zr:return"Portal";case _l:return"Profiler";case ic:return"StrictMode";case zl:return"Suspense";case Hl:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case qh:return(t.displayName||"Context")+".Consumer";case $h:return(t._context.displayName||"Context")+".Provider";case oc:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case ac:return e=t.displayName||null,e!==null?e:Gl(t.type)||"Memo";case Tn:e=t._payload,t=t._init;try{return Gl(t(e))}catch{}}return null}function w0(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Gl(e);case 8:return e===ic?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Qn(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function tp(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function v0(t){var e=tp(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,i=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return s.call(this)},set:function(o){r=""+o,i.call(this,o)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Wi(t){t._valueTracker||(t._valueTracker=v0(t))}function np(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=tp(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function Fo(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function jl(t,e){var n=e.checked;return ge({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function bf(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=Qn(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function rp(t,e){e=e.checked,e!=null&&sc(t,"checked",e,!1)}function Vl(t,e){rp(t,e);var n=Qn(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?Ql(t,e.type,n):e.hasOwnProperty("defaultValue")&&Ql(t,e.type,Qn(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function Sf(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function Ql(t,e,n){(e!=="number"||Fo(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var js=Array.isArray;function ts(t,e,n,r){if(t=t.options,e){e={};for(var s=0;s"+e.valueOf().toString()+"",e=Zi.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function oi(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var Ws={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},A0=["Webkit","ms","Moz","O"];Object.keys(Ws).forEach(function(t){A0.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),Ws[e]=Ws[t]})});function ap(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||Ws.hasOwnProperty(t)&&Ws[t]?(""+e).trim():e+"px"}function lp(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=ap(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,s):t[n]=s}}var E0=ge({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Wl(t,e){if(e){if(E0[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(C(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(C(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(C(61))}if(e.style!=null&&typeof e.style!="object")throw Error(C(62))}}function Zl(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Yl=null;function lc(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var Xl=null,ns=null,rs=null;function Pf(t){if(t=Li(t)){if(typeof Xl!="function")throw Error(C(280));var e=t.stateNode;e&&(e=Aa(e),Xl(t.stateNode,t.type,e))}}function up(t){ns?rs?rs.push(t):rs=[t]:ns=t}function cp(){if(ns){var t=ns,e=rs;if(rs=ns=null,Pf(t),e)for(t=0;t>>=0,t===0?32:31-(B0(t)/O0|0)|0}var Yi=64,Xi=4194304;function Vs(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function _o(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,s=t.suspendedLanes,i=t.pingedLanes,o=n&268435455;if(o!==0){var a=o&~s;a!==0?r=Vs(a):(i&=o,i!==0&&(r=Vs(i)))}else o=n&~s,o!==0?r=Vs(o):i!==0&&(r=Vs(i));if(r===0)return 0;if(e!==0&&e!==r&&!(e&s)&&(s=r&-r,i=e&-e,s>=i||s===16&&(i&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function Bi(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-Dt(e),t[e]=n}function D0(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=Ys),Uf=" ",Df=!1;function Ip(t,e){switch(t){case"keyup":return fw.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rp(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Gr=!1;function hw(t,e){switch(t){case"compositionend":return Rp(e);case"keypress":return e.which!==32?null:(Df=!0,Uf);case"textInput":return t=e.data,t===Uf&&Df?null:t;default:return null}}function pw(t,e){if(Gr)return t==="compositionend"||!gc&&Ip(t,e)?(t=Cp(),xo=hc=On=null,Gr=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Hf(n)}}function Fp(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Fp(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Up(){for(var t=window,e=Fo();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=Fo(t.document)}return e}function yc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function bw(t){var e=Up(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&Fp(n.ownerDocument.documentElement,n)){if(r!==null&&yc(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var s=n.textContent.length,i=Math.min(r.start,s);r=r.end===void 0?i:Math.min(r.end,s),!t.extend&&i>r&&(s=r,r=i,i=s),s=Gf(n,i);var o=Gf(n,r);s&&o&&(t.rangeCount!==1||t.anchorNode!==s.node||t.anchorOffset!==s.offset||t.focusNode!==o.node||t.focusOffset!==o.offset)&&(e=e.createRange(),e.setStart(s.node,s.offset),t.removeAllRanges(),i>r?(t.addRange(e),t.extend(o.node,o.offset)):(e.setEnd(o.node,o.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,jr=null,ru=null,$s=null,su=!1;function jf(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;su||jr==null||jr!==Fo(r)||(r=jr,"selectionStart"in r&&yc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$s&&di($s,r)||($s=r,r=Go(ru,"onSelect"),0Kr||(t.current=cu[Kr],cu[Kr]=null,Kr--)}function re(t,e){Kr++,cu[Kr]=t.current,t.current=e}var Kn={},Ge=Zn(Kn),nt=Zn(!1),Ar=Kn;function hs(t,e){var n=t.type.contextTypes;if(!n)return Kn;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var s={},i;for(i in n)s[i]=e[i];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=s),s}function rt(t){return t=t.childContextTypes,t!=null}function Vo(){oe(nt),oe(Ge)}function Yf(t,e,n){if(Ge.current!==Kn)throw Error(C(168));re(Ge,e),re(nt,n)}function Qp(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in e))throw Error(C(108,w0(t)||"Unknown",s));return ge({},n,r)}function Qo(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||Kn,Ar=Ge.current,re(Ge,t),re(nt,nt.current),!0}function Xf(t,e,n){var r=t.stateNode;if(!r)throw Error(C(169));n?(t=Qp(t,e,Ar),r.__reactInternalMemoizedMergedChildContext=t,oe(nt),oe(Ge),re(Ge,t)):oe(nt),re(nt,n)}var tn=null,Ea=!1,ul=!1;function Kp(t){tn===null?tn=[t]:tn.push(t)}function Fw(t){Ea=!0,Kp(t)}function Yn(){if(!ul&&tn!==null){ul=!0;var t=0,e=ee;try{var n=tn;for(ee=1;t>=o,s-=o,an=1<<32-Dt(e)+s|n<k?(_=P,P=null):_=P.sibling;var B=d(h,P,y[k],E);if(B===null){P===null&&(P=_);break}t&&P&&B.alternate===null&&e(h,P),p=i(B,p,k),S===null?x=B:S.sibling=B,S=B,P=_}if(k===y.length)return n(h,P),ue&&nr(h,k),x;if(P===null){for(;kk?(_=P,P=null):_=P.sibling;var H=d(h,P,B.value,E);if(H===null){P===null&&(P=_);break}t&&P&&H.alternate===null&&e(h,P),p=i(H,p,k),S===null?x=H:S.sibling=H,S=H,P=_}if(B.done)return n(h,P),ue&&nr(h,k),x;if(P===null){for(;!B.done;k++,B=y.next())B=c(h,B.value,E),B!==null&&(p=i(B,p,k),S===null?x=B:S.sibling=B,S=B);return ue&&nr(h,k),x}for(P=r(h,P);!B.done;k++,B=y.next())B=w(P,h,k,B.value,E),B!==null&&(t&&B.alternate!==null&&P.delete(B.key===null?k:B.key),p=i(B,p,k),S===null?x=B:S.sibling=B,S=B);return t&&P.forEach(function(ae){return e(h,ae)}),ue&&nr(h,k),x}function A(h,p,y,E){if(typeof y=="object"&&y!==null&&y.type===Hr&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Ji:e:{for(var x=y.key,S=p;S!==null;){if(S.key===x){if(x=y.type,x===Hr){if(S.tag===7){n(h,S.sibling),p=s(S,y.props.children),p.return=h,h=p;break e}}else if(S.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===Tn&&ed(x)===S.type){n(h,S.sibling),p=s(S,y.props),p.ref=Us(h,S,y),p.return=h,h=p;break e}n(h,S);break}else e(h,S);S=S.sibling}y.type===Hr?(p=yr(y.props.children,h.mode,E,y.key),p.return=h,h=p):(E=Io(y.type,y.key,y.props,null,h.mode,E),E.ref=Us(h,p,y),E.return=h,h=E)}return o(h);case zr:e:{for(S=y.key;p!==null;){if(p.key===S)if(p.tag===4&&p.stateNode.containerInfo===y.containerInfo&&p.stateNode.implementation===y.implementation){n(h,p.sibling),p=s(p,y.children||[]),p.return=h,h=p;break e}else{n(h,p);break}else e(h,p);p=p.sibling}p=yl(y,h.mode,E),p.return=h,h=p}return o(h);case Tn:return S=y._init,A(h,p,S(y._payload),E)}if(js(y))return m(h,p,y,E);if(Rs(y))return g(h,p,y,E);so(h,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,p!==null&&p.tag===6?(n(h,p.sibling),p=s(p,y),p.return=h,h=p):(n(h,p),p=gl(y,h.mode,E),p.return=h,h=p),o(h)):n(h,p)}return A}var ms=Yp(!0),Xp=Yp(!1),Wo=Zn(null),Zo=null,Zr=null,Ec=null;function xc(){Ec=Zr=Zo=null}function bc(t){var e=Wo.current;oe(Wo),t._currentValue=e}function hu(t,e,n){for(;t!==null;){var r=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,r!==null&&(r.childLanes|=e)):r!==null&&(r.childLanes&e)!==e&&(r.childLanes|=e),t===n)break;t=t.return}}function is(t,e){Zo=t,Ec=Zr=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(tt=!0),t.firstContext=null)}function kt(t){var e=t._currentValue;if(Ec!==t)if(t={context:t,memoizedValue:e,next:null},Zr===null){if(Zo===null)throw Error(C(308));Zr=t,Zo.dependencies={lanes:0,firstContext:t}}else Zr=Zr.next=t;return e}var cr=null;function Sc(t){cr===null?cr=[t]:cr.push(t)}function $p(t,e,n,r){var s=e.interleaved;return s===null?(n.next=n,Sc(e)):(n.next=s.next,s.next=n),e.interleaved=n,yn(t,r)}function yn(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var In=!1;function kc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function qp(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function fn(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function _n(t,e,n){var r=t.updateQueue;if(r===null)return null;if(r=r.shared,Y&2){var s=r.pending;return s===null?e.next=e:(e.next=s.next,s.next=e),r.pending=e,yn(t,n)}return s=r.interleaved,s===null?(e.next=e,Sc(r)):(e.next=s.next,s.next=e),r.interleaved=e,yn(t,n)}function So(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,cc(t,n)}}function td(t,e){var n=t.updateQueue,r=t.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?s=i=o:i=i.next=o,n=n.next}while(n!==null);i===null?s=i=e:i=i.next=e}else s=i=e;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:r.shared,effects:r.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function Yo(t,e,n,r){var s=t.updateQueue;In=!1;var i=s.firstBaseUpdate,o=s.lastBaseUpdate,a=s.shared.pending;if(a!==null){s.shared.pending=null;var l=a,u=l.next;l.next=null,o===null?i=u:o.next=u,o=l;var f=t.alternate;f!==null&&(f=f.updateQueue,a=f.lastBaseUpdate,a!==o&&(a===null?f.firstBaseUpdate=u:a.next=u,f.lastBaseUpdate=l))}if(i!==null){var c=s.baseState;o=0,f=u=l=null,a=i;do{var d=a.lane,w=a.eventTime;if((r&d)===d){f!==null&&(f=f.next={eventTime:w,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var m=t,g=a;switch(d=e,w=n,g.tag){case 1:if(m=g.payload,typeof m=="function"){c=m.call(w,c,d);break e}c=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,d=typeof m=="function"?m.call(w,c,d):m,d==null)break e;c=ge({},c,d);break e;case 2:In=!0}}a.callback!==null&&a.lane!==0&&(t.flags|=64,d=s.effects,d===null?s.effects=[a]:d.push(a))}else w={eventTime:w,lane:d,tag:a.tag,payload:a.payload,callback:a.callback,next:null},f===null?(u=f=w,l=c):f=f.next=w,o|=d;if(a=a.next,a===null){if(a=s.shared.pending,a===null)break;d=a,a=d.next,d.next=null,s.lastBaseUpdate=d,s.shared.pending=null}}while(!0);if(f===null&&(l=c),s.baseState=l,s.firstBaseUpdate=u,s.lastBaseUpdate=f,e=s.shared.interleaved,e!==null){s=e;do o|=s.lane,s=s.next;while(s!==e)}else i===null&&(s.shared.lanes=0);br|=o,t.lanes=o,t.memoizedState=c}}function nd(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;en?n:4,t(!0);var r=fl.transition;fl.transition={};try{t(!1),e()}finally{ee=n,fl.transition=r}}function gm(){return Nt().memoizedState}function _w(t,e,n){var r=Hn(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ym(t))wm(e,n);else if(n=$p(t,e,n,r),n!==null){var s=Ze();Mt(n,t,r,s),vm(n,e,r)}}function zw(t,e,n){var r=Hn(t),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ym(t))wm(e,s);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var o=e.lastRenderedState,a=i(o,n);if(s.hasEagerState=!0,s.eagerState=a,_t(a,o)){var l=e.interleaved;l===null?(s.next=s,Sc(e)):(s.next=l.next,l.next=s),e.interleaved=s;return}}catch{}finally{}n=$p(t,e,s,r),n!==null&&(s=Ze(),Mt(n,t,r,s),vm(n,e,r))}}function ym(t){var e=t.alternate;return t===me||e!==null&&e===me}function wm(t,e){qs=$o=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function vm(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,cc(t,n)}}var qo={readContext:kt,useCallback:_e,useContext:_e,useEffect:_e,useImperativeHandle:_e,useInsertionEffect:_e,useLayoutEffect:_e,useMemo:_e,useReducer:_e,useRef:_e,useState:_e,useDebugValue:_e,useDeferredValue:_e,useTransition:_e,useMutableSource:_e,useSyncExternalStore:_e,useId:_e,unstable_isNewReconciler:!1},Hw={readContext:kt,useCallback:function(t,e){return Qt().memoizedState=[t,e===void 0?null:e],t},useContext:kt,useEffect:sd,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,No(4194308,4,fm.bind(null,e,t),n)},useLayoutEffect:function(t,e){return No(4194308,4,t,e)},useInsertionEffect:function(t,e){return No(4,2,t,e)},useMemo:function(t,e){var n=Qt();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=Qt();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=_w.bind(null,me,t),[r.memoizedState,t]},useRef:function(t){var e=Qt();return t={current:t},e.memoizedState=t},useState:rd,useDebugValue:Oc,useDeferredValue:function(t){return Qt().memoizedState=t},useTransition:function(){var t=rd(!1),e=t[0];return t=Mw.bind(null,t[1]),Qt().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=me,s=Qt();if(ue){if(n===void 0)throw Error(C(407));n=n()}else{if(n=e(),Be===null)throw Error(C(349));xr&30||rm(r,e,n)}s.memoizedState=n;var i={value:n,getSnapshot:e};return s.queue=i,sd(im.bind(null,r,i,t),[t]),r.flags|=2048,Ai(9,sm.bind(null,r,i,n,e),void 0,null),n},useId:function(){var t=Qt(),e=Be.identifierPrefix;if(ue){var n=ln,r=an;n=(r&~(1<<32-Dt(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=wi++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=o.createElement(n,{is:r.is}):(t=o.createElement(n),n==="select"&&(o=t,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):t=o.createElementNS(t,n),t[Kt]=e,t[mi]=r,Tm(t,e,!1,!1),e.stateNode=t;e:{switch(o=Zl(n,r),n){case"dialog":ie("cancel",t),ie("close",t),s=r;break;case"iframe":case"object":case"embed":ie("load",t),s=r;break;case"video":case"audio":for(s=0;sws&&(e.flags|=128,r=!0,Ds(i,!1),e.lanes=4194304)}else{if(!r)if(t=Xo(o),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),Ds(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!ue)return ze(e),null}else 2*xe()-i.renderingStartTime>ws&&n!==1073741824&&(e.flags|=128,r=!0,Ds(i,!1),e.lanes=4194304);i.isBackwards?(o.sibling=e.child,e.child=o):(n=i.last,n!==null?n.sibling=o:e.child=o,i.last=o)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=xe(),e.sibling=null,n=he.current,re(he,r?n&1|2:n&1),e):(ze(e),null);case 22:case 23:return _c(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?dt&1073741824&&(ze(e),e.subtreeFlags&6&&(e.flags|=8192)):ze(e),null;case 24:return null;case 25:return null}throw Error(C(156,e.tag))}function Zw(t,e){switch(vc(e),e.tag){case 1:return rt(e.type)&&Vo(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return gs(),oe(nt),oe(Ge),Cc(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return Pc(e),null;case 13:if(oe(he),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(C(340));ps()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return oe(he),null;case 4:return gs(),null;case 10:return bc(e.type._context),null;case 22:case 23:return _c(),null;case 24:return null;default:return null}}var oo=!1,He=!1,Yw=typeof WeakSet=="function"?WeakSet:Set,F=null;function Yr(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){we(t,e,r)}else n.current=null}function xu(t,e,n){try{n()}catch(r){we(t,e,r)}}var md=!1;function Xw(t,e){if(iu=zo,t=Up(),yc(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var o=0,a=-1,l=-1,u=0,f=0,c=t,d=null;t:for(;;){for(var w;c!==n||s!==0&&c.nodeType!==3||(a=o+s),c!==i||r!==0&&c.nodeType!==3||(l=o+r),c.nodeType===3&&(o+=c.nodeValue.length),(w=c.firstChild)!==null;)d=c,c=w;for(;;){if(c===t)break t;if(d===n&&++u===s&&(a=o),d===i&&++f===r&&(l=o),(w=c.nextSibling)!==null)break;c=d,d=c.parentNode}c=w}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(ou={focusedElem:t,selectionRange:n},zo=!1,F=e;F!==null;)if(e=F,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,F=t;else for(;F!==null;){e=F;try{var m=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var g=m.memoizedProps,A=m.memoizedState,h=e.stateNode,p=h.getSnapshotBeforeUpdate(e.elementType===e.type?g:It(e.type,g),A);h.__reactInternalSnapshotBeforeUpdate=p}break;case 3:var y=e.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch(E){we(e,e.return,E)}if(t=e.sibling,t!==null){t.return=e.return,F=t;break}F=e.return}return m=md,md=!1,m}function ei(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&t)===t){var i=s.destroy;s.destroy=void 0,i!==void 0&&xu(e,n,i)}s=s.next}while(s!==r)}}function Sa(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function bu(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function Bm(t){var e=t.alternate;e!==null&&(t.alternate=null,Bm(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Kt],delete e[mi],delete e[uu],delete e[Ow],delete e[Lw])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function Om(t){return t.tag===5||t.tag===3||t.tag===4}function gd(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Om(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Su(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=jo));else if(r!==4&&(t=t.child,t!==null))for(Su(t,e,n),t=t.sibling;t!==null;)Su(t,e,n),t=t.sibling}function ku(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(ku(t,e,n),t=t.sibling;t!==null;)ku(t,e,n),t=t.sibling}var Oe=null,Ot=!1;function bn(t,e,n){for(n=n.child;n!==null;)Lm(t,e,n),n=n.sibling}function Lm(t,e,n){if(Zt&&typeof Zt.onCommitFiberUnmount=="function")try{Zt.onCommitFiberUnmount(ga,n)}catch{}switch(n.tag){case 5:He||Yr(n,e);case 6:var r=Oe,s=Ot;Oe=null,bn(t,e,n),Oe=r,Ot=s,Oe!==null&&(Ot?(t=Oe,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):Oe.removeChild(n.stateNode));break;case 18:Oe!==null&&(Ot?(t=Oe,n=n.stateNode,t.nodeType===8?ll(t.parentNode,n):t.nodeType===1&&ll(t,n),ci(t)):ll(Oe,n.stateNode));break;case 4:r=Oe,s=Ot,Oe=n.stateNode.containerInfo,Ot=!0,bn(t,e,n),Oe=r,Ot=s;break;case 0:case 11:case 14:case 15:if(!He&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var i=s,o=i.destroy;i=i.tag,o!==void 0&&(i&2||i&4)&&xu(n,e,o),s=s.next}while(s!==r)}bn(t,e,n);break;case 1:if(!He&&(Yr(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){we(n,e,a)}bn(t,e,n);break;case 21:bn(t,e,n);break;case 22:n.mode&1?(He=(r=He)||n.memoizedState!==null,bn(t,e,n),He=r):bn(t,e,n);break;default:bn(t,e,n)}}function yd(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new Yw),e.forEach(function(r){var s=ov.bind(null,t,r);n.has(r)||(n.add(r),r.then(s,s))})}}function Ct(t,e){var n=e.deletions;if(n!==null)for(var r=0;rs&&(s=o),r&=~i}if(r=s,r=xe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*qw(r/1960))-r,10t?16:t,Ln===null)var r=!1;else{if(t=Ln,Ln=null,na=0,Y&6)throw Error(C(331));var s=Y;for(Y|=4,F=t.current;F!==null;){var i=F,o=i.child;if(F.flags&16){var a=i.deletions;if(a!==null){for(var l=0;lxe()-Dc?gr(t,0):Uc|=n),st(t,e)}function Gm(t,e){e===0&&(t.mode&1?(e=Xi,Xi<<=1,!(Xi&130023424)&&(Xi=4194304)):e=1);var n=Ze();t=yn(t,e),t!==null&&(Bi(t,e,n),st(t,n))}function iv(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),Gm(t,n)}function ov(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,s=t.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(C(314))}r!==null&&r.delete(e),Gm(t,n)}var jm;jm=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||nt.current)tt=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return tt=!1,Jw(t,e,n);tt=!!(t.flags&131072)}else tt=!1,ue&&e.flags&1048576&&Jp(e,Jo,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;Po(t,e),t=e.pendingProps;var s=hs(e,Ge.current);is(e,n),s=Ic(null,e,r,t,s,n);var i=Rc();return e.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,rt(r)?(i=!0,Qo(e)):i=!1,e.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,kc(e),s.updater=ba,e.stateNode=s,s._reactInternals=e,mu(e,r,t,n),e=wu(null,e,r,!0,i,n)):(e.tag=0,ue&&i&&wc(e),je(null,e,s,n),e=e.child),e;case 16:r=e.elementType;e:{switch(Po(t,e),t=e.pendingProps,s=r._init,r=s(r._payload),e.type=r,s=e.tag=lv(r),t=It(r,t),s){case 0:e=yu(null,e,r,t,n);break e;case 1:e=dd(null,e,r,t,n);break e;case 11:e=cd(null,e,r,t,n);break e;case 14:e=fd(null,e,r,It(r.type,t),n);break e}throw Error(C(306,r,""))}return e;case 0:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:It(r,s),yu(t,e,r,s,n);case 1:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:It(r,s),dd(t,e,r,s,n);case 3:e:{if(Nm(e),t===null)throw Error(C(387));r=e.pendingProps,i=e.memoizedState,s=i.element,qp(t,e),Yo(e,r,null,n);var o=e.memoizedState;if(r=o.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},e.updateQueue.baseState=i,e.memoizedState=i,e.flags&256){s=ys(Error(C(423)),e),e=hd(t,e,r,n,s);break e}else if(r!==s){s=ys(Error(C(424)),e),e=hd(t,e,r,n,s);break e}else for(ht=Mn(e.stateNode.containerInfo.firstChild),mt=e,ue=!0,Lt=null,n=Xp(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ps(),r===s){e=wn(t,e,n);break e}je(t,e,r,n)}e=e.child}return e;case 5:return em(e),t===null&&du(e),r=e.type,s=e.pendingProps,i=t!==null?t.memoizedProps:null,o=s.children,au(r,s)?o=null:i!==null&&au(r,i)&&(e.flags|=32),km(t,e),je(t,e,o,n),e.child;case 6:return t===null&&du(e),null;case 13:return Pm(t,e,n);case 4:return Nc(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=ms(e,null,r,n):je(t,e,r,n),e.child;case 11:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:It(r,s),cd(t,e,r,s,n);case 7:return je(t,e,e.pendingProps,n),e.child;case 8:return je(t,e,e.pendingProps.children,n),e.child;case 12:return je(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,s=e.pendingProps,i=e.memoizedProps,o=s.value,re(Wo,r._currentValue),r._currentValue=o,i!==null)if(_t(i.value,o)){if(i.children===s.children&&!nt.current){e=wn(t,e,n);break e}}else for(i=e.child,i!==null&&(i.return=e);i!==null;){var a=i.dependencies;if(a!==null){o=i.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(i.tag===1){l=fn(-1,n&-n),l.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?l.next=l:(l.next=f.next,f.next=l),u.pending=l}}i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),hu(i.return,n,e),a.lanes|=n;break}l=l.next}}else if(i.tag===10)o=i.type===e.type?null:i.child;else if(i.tag===18){if(o=i.return,o===null)throw Error(C(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),hu(o,n,e),o=i.sibling}else o=i.child;if(o!==null)o.return=i;else for(o=i;o!==null;){if(o===e){o=null;break}if(i=o.sibling,i!==null){i.return=o.return,o=i;break}o=o.return}i=o}je(t,e,s.children,n),e=e.child}return e;case 9:return s=e.type,r=e.pendingProps.children,is(e,n),s=kt(s),r=r(s),e.flags|=1,je(t,e,r,n),e.child;case 14:return r=e.type,s=It(r,e.pendingProps),s=It(r.type,s),fd(t,e,r,s,n);case 15:return bm(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:It(r,s),Po(t,e),e.tag=1,rt(r)?(t=!0,Qo(e)):t=!1,is(e,n),Am(e,r,s),mu(e,r,s,n),wu(null,e,r,!0,t,n);case 19:return Cm(t,e,n);case 22:return Sm(t,e,n)}throw Error(C(156,e.tag))};function Vm(t,e){return yp(t,e)}function av(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bt(t,e,n,r){return new av(t,e,n,r)}function Hc(t){return t=t.prototype,!(!t||!t.isReactComponent)}function lv(t){if(typeof t=="function")return Hc(t)?1:0;if(t!=null){if(t=t.$$typeof,t===oc)return 11;if(t===ac)return 14}return 2}function Gn(t,e){var n=t.alternate;return n===null?(n=bt(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function Io(t,e,n,r,s,i){var o=2;if(r=t,typeof t=="function")Hc(t)&&(o=1);else if(typeof t=="string")o=5;else e:switch(t){case Hr:return yr(n.children,s,i,e);case ic:o=8,s|=8;break;case _l:return t=bt(12,n,e,s|2),t.elementType=_l,t.lanes=i,t;case zl:return t=bt(13,n,e,s),t.elementType=zl,t.lanes=i,t;case Hl:return t=bt(19,n,e,s),t.elementType=Hl,t.lanes=i,t;case ep:return Na(n,s,i,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case $h:o=10;break e;case qh:o=9;break e;case oc:o=11;break e;case ac:o=14;break e;case Tn:o=16,r=null;break e}throw Error(C(130,t==null?t:typeof t,""))}return e=bt(o,n,e,s),e.elementType=t,e.type=r,e.lanes=i,e}function yr(t,e,n,r){return t=bt(7,t,r,e),t.lanes=n,t}function Na(t,e,n,r){return t=bt(22,t,r,e),t.elementType=ep,t.lanes=n,t.stateNode={isHidden:!1},t}function gl(t,e,n){return t=bt(6,t,null,e),t.lanes=n,t}function yl(t,e,n){return e=bt(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function uv(t,e,n,r,s){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Xa(0),this.expirationTimes=Xa(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Xa(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function Gc(t,e,n,r,s,i,o,a,l){return t=new uv(t,e,n,a,l),e===1?(e=1,i===!0&&(e|=8)):e=0,i=bt(3,null,null,e),t.current=i,i.stateNode=t,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},kc(i),t}function cv(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Wm)}catch(t){console.error(t)}}Wm(),Wh.exports=yt;var mv=Wh.exports,kd=mv;Dl.createRoot=kd.createRoot,Dl.hydrateRoot=kd.hydrateRoot;const gv="modulepreload",yv=function(t){return"/"+t},Nd={},wv=function(e,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),a=o?.nonce||o?.getAttribute("nonce");s=Promise.allSettled(n.map(l=>{if(l=yv(l),l in Nd)return;Nd[l]=!0;const u=l.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const c=document.createElement("link");if(c.rel=u?"stylesheet":gv,u||(c.as="script"),c.crossOrigin="",c.href=l,a&&c.setAttribute("nonce",a),document.head.appendChild(c),u)return new Promise((d,w)=>{c.addEventListener("load",d),c.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&i(a.reason);return e().catch(i)})},vv="6.16.0";function Av(t,e,n){const r=e.split("|").map(i=>i.trim());for(let i=0;iPromise.resolve(t[r])))).reduce((r,s,i)=>(r[e[i]]=s,r),{})}function z(t,e,n){for(let r in e){let s=e[r];const i=n?n[r]:null;i&&Av(s,i,r),Object.defineProperty(t,r,{enumerable:!0,value:s,writable:!1})}}function $r(t,e){if(t==null)return"null";if(e==null&&(e=new Set),typeof t=="object"){if(e.has(t))return"[Circular]";e.add(t)}if(Array.isArray(t))return"[ "+t.map(n=>$r(n,e)).join(", ")+" ]";if(t instanceof Uint8Array){const n="0123456789abcdef";let r="0x";for(let s=0;s>4],r+=n[t[s]&15];return r}if(typeof t=="object"&&typeof t.toJSON=="function")return $r(t.toJSON(),e);switch(typeof t){case"boolean":case"number":case"symbol":return t.toString();case"bigint":return BigInt(t).toString();case"string":return JSON.stringify(t);case"object":{const n=Object.keys(t);return n.sort(),"{ "+n.map(r=>`${$r(r,e)}: ${$r(t[r],e)}`).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function Fe(t,e){return t&&t.code===e}function Kc(t){return Fe(t,"CALL_EXCEPTION")}function le(t,e,n){let r=t;{const i=[];if(n){if("message"in n||"code"in n||"name"in n)throw new Error(`value will overwrite populated values: ${$r(n)}`);for(const o in n){if(o==="shortMessage")continue;const a=n[o];i.push(o+"="+$r(a))}}i.push(`code=${e}`),i.push(`version=${vv}`),i.length&&(t+=" ("+i.join(", ")+")")}let s;switch(e){case"INVALID_ARGUMENT":s=new TypeError(t);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":s=new RangeError(t);break;default:s=new Error(t)}return z(s,{code:e}),n&&Object.assign(s,n),s.shortMessage==null&&z(s,{shortMessage:r}),s}function N(t,e,n,r){if(!t)throw le(e,n,r)}function v(t,e,n,r){N(t,e,"INVALID_ARGUMENT",{argument:n,value:r})}function Zm(t,e,n){n==null&&(n=""),n&&(n=": "+n),N(t>=e,"missing argument"+n,"MISSING_ARGUMENT",{count:t,expectedCount:e}),N(t<=e,"too many arguments"+n,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}["NFD","NFC","NFKD","NFKC"].reduce((t,e)=>{try{if("test".normalize(e)!=="test")throw new Error("bad");if(e==="NFD"&&"é".normalize("NFD")!=="é")throw new Error("broken");t.push(e)}catch{}return t},[]);function Ui(t,e,n){if(n==null&&(n=""),t!==e){let r=n,s="new";n&&(r+=".",s+=" "+n),N(!1,`private constructor; use ${r}from* methods`,"UNSUPPORTED_OPERATION",{operation:s})}}function Ym(t,e,n){if(t instanceof Uint8Array)return n?new Uint8Array(t):t;if(typeof t=="string"&&t.length%2===0&&t.match(/^0x[0-9a-f]*$/i)){const r=new Uint8Array((t.length-2)/2);let s=2;for(let i=0;i>4]+Pd[s&15]}return n}function ce(t){return"0x"+t.map(e=>R(e).substring(2)).join("")}function as(t){return se(t,!0)?(t.length-2)/2:Q(t).length}function ye(t,e,n){const r=Q(t);return n!=null&&n>r.length&&N(!1,"cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:r,length:r.length,offset:n}),R(r.slice(e??0,n??r.length))}function Xm(t,e,n){const r=Q(t);N(e>=r.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(r),length:e,offset:e+1});const s=new Uint8Array(e);return s.fill(0),n?s.set(r,e-r.length):s.set(r,0),R(s)}function vn(t,e){return Xm(t,e,!0)}function Ev(t,e){return Xm(t,e,!1)}const Di=BigInt(0),Ut=BigInt(1),qr=9007199254740991;function ia(t,e){const n=Ra(t,"value"),r=BigInt(G(e,"width"));if(N(n>>r===Di,"overflow","NUMERIC_FAULT",{operation:"fromTwos",fault:"overflow",value:t}),n>>r-Ut){const s=(Ut<=-qr&&t<=qr,"overflow",e||"value",t),BigInt(t);case"string":try{if(t==="")throw new Error("empty string");return t[0]==="-"&&t[1]!=="-"?-BigInt(t.substring(1)):BigInt(t)}catch(n){v(!1,`invalid BigNumberish string: ${n.message}`,e||"value",t)}}v(!1,"invalid BigNumberish value",e||"value",t)}function Ra(t,e){const n=U(t,e);return N(n>=Di,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:t}),n}const Cd="0123456789abcdef";function Ba(t){if(t instanceof Uint8Array){let e="0x0";for(const n of t)e+=Cd[n>>4],e+=Cd[n&15];return BigInt(e)}return U(t)}function G(t,e){switch(typeof t){case"bigint":return v(t>=-qr&&t<=qr,"overflow",e||"value",t),Number(t);case"number":return v(Number.isInteger(t),"underflow",e||"value",t),v(t>=-qr&&t<=qr,"overflow",e||"value",t),t;case"string":try{if(t==="")throw new Error("empty string");return G(BigInt(t),e)}catch(n){v(!1,`invalid numeric string: ${n.message}`,e||"value",t)}}v(!1,"invalid numeric value",e||"value",t)}function xv(t){return G(Ba(t))}function Jn(t,e){const n=Ra(t,"value");let r=n.toString(16);if(e==null)r.length%2&&(r="0"+r);else{const s=G(e,"width");if(s===0&&n===Di)return"0x";for(N(s*2>=r.length,`value exceeds width (${s} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:t});r.length>6===2;o++)i++;return i}return t==="OVERRUN"?n.length-e-1:0}function Pv(t,e,n,r,s){return t==="OVERLONG"?(v(typeof s=="number","invalid bad code point for replacement","badCodepoint",s),r.push(s),0):(r.push(65533),eg(t,e,n))}const Cv=Object.freeze({error:Nv,ignore:eg,replace:Pv});function Tv(t,e){e==null&&(e=Cv.error);const n=Q(t,"bytes"),r=[];let s=0;for(;s>7)){r.push(i);continue}let o=null,a=null;if((i&224)===192)o=1,a=127;else if((i&240)===224)o=2,a=2047;else if((i&248)===240)o=3,a=65535;else{(i&192)===128?s+=e("UNEXPECTED_CONTINUE",s-1,n,r):s+=e("BAD_PREFIX",s-1,n,r);continue}if(s-1+o>=n.length){s+=e("OVERRUN",s-1,n,r);continue}let l=i&(1<<8-o-1)-1;for(let u=0;u1114111){s+=e("OUT_OF_RANGE",s-1-o,n,r,l);continue}if(l>=55296&&l<=57343){s+=e("UTF16_SURROGATE",s-1-o,n,r,l);continue}if(l<=a){s+=e("OVERLONG",s-1-o,n,r,l);continue}r.push(l)}}return r}function dn(t,e){v(typeof t=="string","invalid string value","str",t);let n=[];for(let r=0;r>6|192),n.push(s&63|128);else if((s&64512)==55296){r++;const i=t.charCodeAt(r);v(r>18|240),n.push(o>>12&63|128),n.push(o>>6&63|128),n.push(o&63|128)}else n.push(s>>12|224),n.push(s>>6&63|128),n.push(s&63|128)}return new Uint8Array(n)}function Iv(t){return t.map(e=>e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode((e>>10&1023)+55296,(e&1023)+56320))).join("")}function oa(t,e){return Iv(Tv(t,e))}function tg(t){async function e(n,r){N(r==null||!r.cancelled,"request cancelled before sending","CANCELLED");const s=n.url.split(":")[0].toLowerCase();N(s==="http"||s==="https",`unsupported protocol ${s}`,"UNSUPPORTED_OPERATION",{info:{protocol:s},operation:"request"}),N(s==="https"||!n.credentials||n.allowInsecureAuthentication,"insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});let i=null;const o=new AbortController,a=setTimeout(()=>{i=le("request timeout","TIMEOUT"),o.abort()},n.timeout);r&&r.addListener(()=>{i=le("request cancelled","CANCELLED"),o.abort()});const l=Object.assign({},t,{method:n.method,headers:new Headers(Array.from(n)),body:n.body||void 0,signal:o.signal});let u;try{u=await fetch(n.url,l)}catch(w){throw clearTimeout(a),i||w}clearTimeout(a);const f={};u.headers.forEach((w,m)=>{f[m.toLowerCase()]=w});const c=await u.arrayBuffer(),d=c==null?null:new Uint8Array(c);return{statusCode:u.status,statusMessage:u.statusText,headers:f,body:d}}return e}const Rv=12,Bv=250;let Rd=tg();const Ov=new RegExp("^data:([^;:]*)?(;base64)?,(.*)$","i"),Lv=new RegExp("^ipfs://(ipfs/)?(.*)$","i");let wl=!1;async function ng(t,e){try{const n=t.match(Ov);if(!n)throw new Error("invalid data");return new jn(200,"OK",{"content-type":n[1]||"text/plain"},n[2]?Sv(n[3]):Uv(n[3]))}catch{return new jn(599,"BAD REQUEST (invalid data: URI)",{},null,new Xt(t))}}function rg(t){async function e(n,r){try{const s=n.match(Lv);if(!s)throw new Error("invalid link");return new Xt(`${t}${s[2]}`)}catch{return new jn(599,"BAD REQUEST (invalid IPFS URI)",{},null,new Xt(n))}}return e}const uo={data:ng,ipfs:rg("https://gateway.ipfs.io/ipfs/")},sg=new WeakMap;class Fv{#e;#t;constructor(e){this.#e=[],this.#t=!1,sg.set(e,()=>{if(!this.#t){this.#t=!0;for(const n of this.#e)setTimeout(()=>{n()},0);this.#e=[]}})}addListener(e){N(!this.#t,"singal already cancelled","UNSUPPORTED_OPERATION",{operation:"fetchCancelSignal.addCancelListener"}),this.#e.push(e)}get cancelled(){return this.#t}checkSignal(){N(!this.cancelled,"cancelled","CANCELLED",{})}}function co(t){if(t==null)throw new Error("missing signal; should not happen");return t.checkSignal(),t}class Xt{#e;#t;#n;#r;#s;#o;#i;#a;#f;#u;#p;#m;#l;#c;#d;get url(){return this.#o}set url(e){this.#o=String(e)}get body(){return this.#i==null?null:new Uint8Array(this.#i)}set body(e){if(e==null)this.#i=void 0,this.#a=void 0;else if(typeof e=="string")this.#i=dn(e),this.#a="text/plain";else if(e instanceof Uint8Array)this.#i=e,this.#a="application/octet-stream";else if(typeof e=="object")this.#i=dn(JSON.stringify(e)),this.#a="application/json";else throw new Error("invalid body")}hasBody(){return this.#i!=null}get method(){return this.#r?this.#r:this.hasBody()?"POST":"GET"}set method(e){e==null&&(e=""),this.#r=String(e).toUpperCase()}get headers(){const e=Object.assign({},this.#n);return this.#f&&(e.authorization=`Basic ${kv(dn(this.#f))}`),this.allowGzip&&(e["accept-encoding"]="gzip"),e["content-type"]==null&&this.#a&&(e["content-type"]=this.#a),this.body&&(e["content-length"]=String(this.body.length)),e}getHeader(e){return this.headers[e.toLowerCase()]}setHeader(e,n){this.#n[String(e).toLowerCase()]=String(n)}clearHeaders(){this.#n={}}[Symbol.iterator](){const e=this.headers,n=Object.keys(e);let r=0;return{next:()=>{if(r=0,"timeout must be non-zero","timeout",e),this.#s=e}get preflightFunc(){return this.#u||null}set preflightFunc(e){this.#u=e}get processFunc(){return this.#p||null}set processFunc(e){this.#p=e}get retryFunc(){return this.#m||null}set retryFunc(e){this.#m=e}get getUrlFunc(){return this.#d||Rd}set getUrlFunc(e){this.#d=e}constructor(e){this.#o=String(e),this.#e=!1,this.#t=!0,this.#n={},this.#r="",this.#s=3e5,this.#c={slotInterval:Bv,maxAttempts:Rv},this.#d=null}toString(){return``}setThrottleParams(e){e.slotInterval!=null&&(this.#c.slotInterval=e.slotInterval),e.maxAttempts!=null&&(this.#c.maxAttempts=e.maxAttempts)}async#h(e,n,r,s,i){if(e>=this.#c.maxAttempts)return i.makeServerError("exceeded maximum retry limit");N(Bd()<=n,"timeout","TIMEOUT",{operation:"request.send",reason:"timeout",request:s}),r>0&&await Dv(r);let o=this.clone();const a=(o.url.split(":")[0]||"").toLowerCase();if(a in uo){const f=await uo[a](o.url,co(s.#l));if(f instanceof jn){let c=f;if(this.processFunc){co(s.#l);try{c=await this.processFunc(o,c)}catch(d){(d.throttle==null||typeof d.stall!="number")&&c.makeServerError("error in post-processing function",d).assertOk()}}return c}o=f}this.preflightFunc&&(o=await this.preflightFunc(o));const l=await this.getUrlFunc(o,co(s.#l));let u=new jn(l.statusCode,l.statusMessage,l.headers,l.body,s);if(u.statusCode===301||u.statusCode===302){try{const f=u.headers.location||"";return o.redirect(f).#h(e+1,n,0,s,u)}catch{}return u}else if(u.statusCode===429&&(this.retryFunc==null||await this.retryFunc(o,u,e))){const f=u.headers["retry-after"];let c=this.#c.slotInterval*Math.trunc(Math.random()*Math.pow(2,e));return typeof f=="string"&&f.match(/^[1-9][0-9]*$/)&&(c=parseInt(f)),o.clone().#h(e+1,n,c,s,u)}if(this.processFunc){co(s.#l);try{u=await this.processFunc(o,u)}catch(f){(f.throttle==null||typeof f.stall!="number")&&u.makeServerError("error in post-processing function",f).assertOk();let c=this.#c.slotInterval*Math.trunc(Math.random()*Math.pow(2,e));return f.stall>=0&&(c=f.stall),o.clone().#h(e+1,n,c,s,u)}}return u}send(){return N(this.#l==null,"request already sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.send"}),this.#l=new Fv(this),this.#h(0,Bd()+this.timeout,0,this,new jn(0,"",{},null,this))}cancel(){N(this.#l!=null,"request has not been sent","UNSUPPORTED_OPERATION",{operation:"fetchRequest.cancel"});const e=sg.get(this);if(!e)throw new Error("missing signal; should not happen");e()}redirect(e){const n=this.url.split(":")[0].toLowerCase(),r=e.split(":")[0].toLowerCase();N(this.method==="GET"&&(n!=="https"||r!=="http")&&e.match(/^https?:/),"unsupported redirect","UNSUPPORTED_OPERATION",{operation:`redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(e)})`});const s=new Xt(e);return s.method="GET",s.allowGzip=this.allowGzip,s.timeout=this.timeout,s.#n=Object.assign({},this.#n),this.#i&&(s.#i=new Uint8Array(this.#i)),s.#a=this.#a,s}clone(){const e=new Xt(this.url);return e.#r=this.#r,this.#i&&(e.#i=this.#i),e.#a=this.#a,e.#n=Object.assign({},this.#n),e.#f=this.#f,this.allowGzip&&(e.allowGzip=!0),e.timeout=this.timeout,this.allowInsecureAuthentication&&(e.allowInsecureAuthentication=!0),e.#u=this.#u,e.#p=this.#p,e.#m=this.#m,e.#c=Object.assign({},this.#c),e.#d=this.#d,e}static lockConfig(){wl=!0}static getGateway(e){return uo[e.toLowerCase()]||null}static registerGateway(e,n){if(e=e.toLowerCase(),e==="http"||e==="https")throw new Error(`cannot intercept ${e}; use registerGetUrl`);if(wl)throw new Error("gateways locked");uo[e]=n}static registerGetUrl(e){if(wl)throw new Error("gateways locked");Rd=e}static createGetUrlFunc(e){return tg(e)}static createDataGateway(){return ng}static createIpfsGatewayFunc(e){return rg(e)}}class jn{#e;#t;#n;#r;#s;#o;toString(){return``}get statusCode(){return this.#e}get statusMessage(){return this.#t}get headers(){return Object.assign({},this.#n)}get body(){return this.#r==null?null:new Uint8Array(this.#r)}get bodyText(){try{return this.#r==null?"":oa(this.#r)}catch{N(!1,"response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch{N(!1,"response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[Symbol.iterator](){const e=this.headers,n=Object.keys(e);let r=0;return{next:()=>{if(r(o[a.toLowerCase()]=String(r[a]),o),{}),this.#r=s==null?null:new Uint8Array(s),this.#s=i||null,this.#o={message:""}}makeServerError(e,n){let r;e?r=`CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${e})`:(e=`${this.statusCode} ${this.statusMessage}`,r=`CLIENT ESCALATED SERVER ERROR (${e})`);const s=new jn(599,r,this.headers,this.body,this.#s||void 0);return s.#o={message:e,error:n},s}throwThrottleError(e,n){n==null?n=-1:v(Number.isInteger(n)&&n>=0,"invalid stall timeout","stall",n);const r=new Error(e||"throttling requests");throw z(r,{stall:n,throttle:!0}),r}getHeader(e){return this.headers[e.toLowerCase()]}hasBody(){return this.#r!=null}get request(){return this.#s}ok(){return this.#o.message===""&&this.statusCode>=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:e,error:n}=this.#o;e===""&&(e=`server response ${this.statusCode} ${this.statusMessage}`);let r=null;this.request&&(r=this.request.url);let s=null;try{this.#r&&(s=oa(this.#r))}catch{}N(!1,e,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:n,info:{requestUrl:r,responseBody:s,responseStatus:`${this.statusCode} ${this.statusMessage}`}})}}function Bd(){return new Date().getTime()}function Uv(t){return dn(t.replace(/%([0-9a-f][0-9a-f])/gi,(e,n)=>String.fromCharCode(parseInt(n,16))))}function Dv(t){return new Promise(e=>setTimeout(e,t))}const Mv=BigInt(-1),Tt=BigInt(0),es=BigInt(1),_v=BigInt(5),Dr={};let ls="0000";for(;ls.length<80;)ls+=ls;function qn(t){let e=ls;for(;e.length=-s&&tTt?t=ia(dr(t,r),r):t=-ia(dr(-t,r),r)}else{const s=es<=0&&ti[a]==null?u:(v(typeof i[a]===l,"invalid fixed format ("+a+" not "+l+")","format."+a,i[a]),i[a]);e=o("signed","boolean",e),n=o("width","number",n),r=o("decimals","number",r)}v(n%8===0,"invalid FixedNumber width (not byte aligned)","format.width",n),v(r<=80,"invalid FixedNumber decimals (too large)","format.decimals",r);const s=(e?"":"u")+"fixed"+String(n)+"x"+String(r);return{signed:e,width:n,decimals:r,name:s}}function zv(t,e){let n="";t0?r*=qn(s):s<0&&(n*=qn(-s)),nr?1:0}eq(e){return this.cmp(e)===0}lt(e){return this.cmp(e)<0}lte(e){return this.cmp(e)<=0}gt(e){return this.cmp(e)>0}gte(e){return this.cmp(e)>=0}floor(){let e=this.#t;return this.#tTt&&(e+=this.#n-es),e=this.#t/this.#n*this.#n,this.#s(e,"ceiling")}round(e){if(e==null&&(e=0),e>=this.decimals)return this;const n=this.decimals-e,r=_v*qn(n-1);let s=this.value+r;const i=qn(n);return s=s/i*i,_s(s,this.#e,"round"),new nn(Dr,s,this.#e)}isZero(){return this.#t===Tt}isNegative(){return this.#t0){const l=qn(a);N(o%l===Tt,"value loses precision for format","NUMERIC_FAULT",{operation:"fromValue",fault:"underflow",value:e}),o/=l}else a<0&&(o*=qn(-a));return _s(o,i,"fromValue"),new nn(Dr,o,i)}static fromString(e,n){const r=e.match(/^(-?)([0-9]*)\.?([0-9]*)$/);v(r&&r[2].length+r[3].length>0,"invalid FixedNumber string value","value",e);const s=vl(n);let i=r[2]||"0",o=r[3]||"";for(;o.length{N(r<=t.length,"data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:r})};if(t[e]>=248){const r=t[e]-247;n(e+1+r);const s=Od(t,e+1,r);return n(e+1+r+s),Ld(t,e,e+1+r,r+s)}else if(t[e]>=192){const r=t[e]-192;return n(e+1+r),Ld(t,e,e+1,r)}else if(t[e]>=184){const r=t[e]-183;n(e+1+r);const s=Od(t,e+1,r);n(e+1+r+s);const i=R(t.slice(e+1+r,e+1+r+s));return{consumed:1+r+s,result:i}}else if(t[e]>=128){const r=t[e]-128;n(e+1+r);const s=R(t.slice(e+1,e+1+r));return{consumed:1+r,result:s}}return{consumed:1,result:Hv(t[e])}}function Mi(t){const e=Q(t,"data"),n=ig(e,0);return v(n.consumed===e.length,"unexpected junk after rlp payload","data",t),n.result}function Fd(t){const e=[];for(;t;)e.unshift(t&255),t>>=8;return e}function og(t){if(Array.isArray(t)){let r=[];if(t.forEach(function(i){r=r.concat(og(i))}),r.length<=55)return r.unshift(192+r.length),r;const s=Fd(r.length);return s.unshift(247+s.length),s.concat(r)}const e=Array.prototype.slice.call(Q(t,"object"));if(e.length===1&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const n=Fd(e.length);return n.unshift(183+n.length),n.concat(e)}const Ud="0123456789abcdef";function hn(t){let e="0x";for(const n of og(t))e+=Ud[n>>4],e+=Ud[n&15];return e}function Gv(t,e){let n=18;return n=G(e,"unit"),nn.fromValue(t,n,{decimals:n,width:512}).toString()}function jv(t,e){v(typeof t=="string","value must be a string","value",t);let n=18;return n=G(e,"unit"),nn.fromString(t,{decimals:n,width:512}).value}function Oa(t){return Gv(t,18)}function ag(t){return jv(t,18)}const Ke=32,Iu=new Uint8Array(Ke),Vv=["then"],fo={},lg=new WeakMap;function ir(t){return lg.get(t)}function Dd(t,e){lg.set(t,e)}function zs(t,e){const n=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw n.error=e,n}function Ru(t,e,n){return t.indexOf(null)>=0?e.map((r,s)=>r instanceof un?Ru(ir(r),r,n):r):t.reduce((r,s,i)=>{let o=e.getValue(s);return s in r||(n&&o instanceof un&&(o=Ru(ir(o),o,n)),r[s]=o),r},{})}class un extends Array{#e;constructor(...e){const n=e[0];let r=e[1],s=(e[2]||[]).slice(),i=!0;n!==fo&&(r=e,s=[],i=!1),super(r.length),r.forEach((l,u)=>{this[u]=l});const o=s.reduce((l,u)=>(typeof u=="string"&&l.set(u,(l.get(u)||0)+1),l),new Map);if(Dd(this,Object.freeze(r.map((l,u)=>{const f=s[u];return f!=null&&o.get(f)===1?f:null}))),this.#e=[],this.#e==null&&this.#e,!i)return;Object.freeze(this);const a=new Proxy(this,{get:(l,u,f)=>{if(typeof u=="string"){if(u.match(/^[0-9]+$/)){const d=G(u,"%index");if(d<0||d>=this.length)throw new RangeError("out of result range");const w=l[d];return w instanceof Error&&zs(`index ${d}`,w),w}if(Vv.indexOf(u)>=0)return Reflect.get(l,u,f);const c=l[u];if(c instanceof Function)return function(...d){return c.apply(this===f?l:this,d)};if(!(u in l))return l.getValue.apply(this===f?l:this,[u])}return Reflect.get(l,u,f)}});return Dd(a,ir(this)),a}toArray(e){const n=[];return this.forEach((r,s)=>{r instanceof Error&&zs(`index ${s}`,r),e&&r instanceof un&&(r=r.toArray(e)),n.push(r)}),n}toObject(e){const n=ir(this);return n.reduce((r,s,i)=>(N(s!=null,`value at index ${i} unnamed`,"UNSUPPORTED_OPERATION",{operation:"toObject()"}),Ru(n,this,e)),{})}slice(e,n){e==null&&(e=0),e<0&&(e+=this.length,e<0&&(e=0)),n==null&&(n=this.length),n<0&&(n+=this.length,n<0&&(n=0)),n>this.length&&(n=this.length);const r=ir(this),s=[],i=[];for(let o=e;o{this.#e[e]=Md(n)}}}class Wc{allowLoose;#e;#t;#n;#r;#s;constructor(e,n,r){z(this,{allowLoose:!!n}),this.#e=Qe(e),this.#n=0,this.#r=null,this.#s=r??1024,this.#t=0}get data(){return R(this.#e)}get dataLength(){return this.#e.length}get consumed(){return this.#t}get bytes(){return new Uint8Array(this.#e)}#o(e){if(this.#r)return this.#r.#o(e);this.#n+=e,N(this.#s<1||this.#n<=this.#s*this.dataLength,`compressed ABI data exceeds inflation ratio of ${this.#s} ( see: https://github.com/ethers-io/ethers.js/issues/4537 )`,"BUFFER_OVERRUN",{buffer:Qe(this.#e),offset:this.#t,length:e,info:{bytesRead:this.#n,dataLength:this.dataLength}})}#i(e,n,r){let s=Math.ceil(n/Ke)*Ke;return this.#t+s>this.#e.length&&(this.allowLoose&&r&&this.#t+n<=this.#e.length?s=n:N(!1,"data out-of-bounds","BUFFER_OVERRUN",{buffer:Qe(this.#e),length:this.#e.length,offset:this.#t+s})),this.#e.slice(this.#t,this.#t+s)}subReader(e){const n=new Wc(this.#e.slice(this.#t+e),this.allowLoose,this.#s);return n.#r=this,n}readBytes(e,n){let r=this.#i(0,e,!!n);return this.#o(e),this.#t+=r.length,r.slice(0,e)}readValue(){return Ba(this.readBytes(Ke))}readIndex(){return xv(this.readBytes(Ke))}}function aa(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function Zc(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function Qv(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");aa(t.outputLen),aa(t.blockLen)}function vs(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function ug(t,e){Zc(t);const n=e.outputLen;if(t.lengtht instanceof Uint8Array,Kv=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),El=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),Vt=(t,e)=>t<<32-e|t>>>e,Jv=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Jv)throw new Error("Non little-endian hardware is not supported");function Wv(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function La(t){if(typeof t=="string"&&(t=Wv(t)),!cg(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}function Zv(...t){const e=new Uint8Array(t.reduce((r,s)=>r+s.length,0));let n=0;return t.forEach(r=>{if(!cg(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}class Yc{clone(){return this._cloneInto()}}function Xc(t){const e=r=>t().update(La(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Yv(t=32){if(Al&&typeof Al.getRandomValues=="function")return Al.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}class fg extends Yc{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,Qv(e);const r=La(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const s=this.blockLen,i=new Uint8Array(s);i.set(r.length>s?e.create().update(r).digest():r);for(let o=0;onew fg(t,e).update(n).digest();dg.create=(t,e)=>new fg(t,e);function Xv(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const s=BigInt(32),i=BigInt(4294967295),o=Number(n>>s&i),a=Number(n&i),l=r?4:0,u=r?0:4;t.setUint32(e+l,o,r),t.setUint32(e+u,a,r)}class hg extends Yc{constructor(e,n,r,s){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=s,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=El(this.buffer)}update(e){vs(this);const{view:n,buffer:r,blockLen:s}=this;e=La(e);const i=e.length;for(let o=0;os-o&&(this.process(r,0),o=0);for(let c=o;cf.length)throw new Error("_sha2: outputLen bigger than state");for(let c=0;ct&e^~t&n,qv=(t,e,n)=>t&e^t&n^e&n,eA=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Sn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),kn=new Uint32Array(64);class tA extends hg{constructor(){super(64,32,8,!1),this.A=Sn[0]|0,this.B=Sn[1]|0,this.C=Sn[2]|0,this.D=Sn[3]|0,this.E=Sn[4]|0,this.F=Sn[5]|0,this.G=Sn[6]|0,this.H=Sn[7]|0}get(){const{A:e,B:n,C:r,D:s,E:i,F:o,G:a,H:l}=this;return[e,n,r,s,i,o,a,l]}set(e,n,r,s,i,o,a,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=s|0,this.E=i|0,this.F=o|0,this.G=a|0,this.H=l|0}process(e,n){for(let c=0;c<16;c++,n+=4)kn[c]=e.getUint32(n,!1);for(let c=16;c<64;c++){const d=kn[c-15],w=kn[c-2],m=Vt(d,7)^Vt(d,18)^d>>>3,g=Vt(w,17)^Vt(w,19)^w>>>10;kn[c]=g+kn[c-7]+m+kn[c-16]|0}let{A:r,B:s,C:i,D:o,E:a,F:l,G:u,H:f}=this;for(let c=0;c<64;c++){const d=Vt(a,6)^Vt(a,11)^Vt(a,25),w=f+d+$v(a,l,u)+eA[c]+kn[c]|0,g=(Vt(r,2)^Vt(r,13)^Vt(r,22))+qv(r,s,i)|0;f=u,u=l,l=a,a=o+w|0,o=i,i=s,s=r,r=w+g|0}r=r+this.A|0,s=s+this.B|0,i=i+this.C|0,o=o+this.D|0,a=a+this.E|0,l=l+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(r,s,i,o,a,l,u,f)}roundClean(){kn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const pg=Xc(()=>new tA),ho=BigInt(2**32-1),Ou=BigInt(32);function mg(t,e=!1){return e?{h:Number(t&ho),l:Number(t>>Ou&ho)}:{h:Number(t>>Ou&ho)|0,l:Number(t&ho)|0}}function gg(t,e=!1){let n=new Uint32Array(t.length),r=new Uint32Array(t.length);for(let s=0;sBigInt(t>>>0)<>>0),rA=(t,e,n)=>t>>>n,sA=(t,e,n)=>t<<32-n|e>>>n,iA=(t,e,n)=>t>>>n|e<<32-n,oA=(t,e,n)=>t<<32-n|e>>>n,aA=(t,e,n)=>t<<64-n|e>>>n-32,lA=(t,e,n)=>t>>>n-32|e<<64-n,uA=(t,e)=>e,cA=(t,e)=>t,yg=(t,e,n)=>t<>>32-n,wg=(t,e,n)=>e<>>32-n,vg=(t,e,n)=>e<>>64-n,Ag=(t,e,n)=>t<>>64-n;function fA(t,e,n,r){const s=(e>>>0)+(r>>>0);return{h:t+n+(s/2**32|0)|0,l:s|0}}const dA=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),hA=(t,e,n,r)=>e+n+r+(t/2**32|0)|0,pA=(t,e,n,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0),mA=(t,e,n,r,s)=>e+n+r+s+(t/2**32|0)|0,gA=(t,e,n,r,s)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0)+(s>>>0),yA=(t,e,n,r,s,i)=>e+n+r+s+i+(t/2**32|0)|0,V={fromBig:mg,split:gg,toBig:nA,shrSH:rA,shrSL:sA,rotrSH:iA,rotrSL:oA,rotrBH:aA,rotrBL:lA,rotr32H:uA,rotr32L:cA,rotlSH:yg,rotlSL:wg,rotlBH:vg,rotlBL:Ag,add:fA,add3L:dA,add3H:hA,add4L:pA,add4H:mA,add5H:yA,add5L:gA},[wA,vA]=V.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),Nn=new Uint32Array(80),Pn=new Uint32Array(80);class AA extends hg{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:e,Al:n,Bh:r,Bl:s,Ch:i,Cl:o,Dh:a,Dl:l,Eh:u,El:f,Fh:c,Fl:d,Gh:w,Gl:m,Hh:g,Hl:A}=this;return[e,n,r,s,i,o,a,l,u,f,c,d,w,m,g,A]}set(e,n,r,s,i,o,a,l,u,f,c,d,w,m,g,A){this.Ah=e|0,this.Al=n|0,this.Bh=r|0,this.Bl=s|0,this.Ch=i|0,this.Cl=o|0,this.Dh=a|0,this.Dl=l|0,this.Eh=u|0,this.El=f|0,this.Fh=c|0,this.Fl=d|0,this.Gh=w|0,this.Gl=m|0,this.Hh=g|0,this.Hl=A|0}process(e,n){for(let y=0;y<16;y++,n+=4)Nn[y]=e.getUint32(n),Pn[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){const E=Nn[y-15]|0,x=Pn[y-15]|0,S=V.rotrSH(E,x,1)^V.rotrSH(E,x,8)^V.shrSH(E,x,7),P=V.rotrSL(E,x,1)^V.rotrSL(E,x,8)^V.shrSL(E,x,7),k=Nn[y-2]|0,_=Pn[y-2]|0,B=V.rotrSH(k,_,19)^V.rotrBH(k,_,61)^V.shrSH(k,_,6),H=V.rotrSL(k,_,19)^V.rotrBL(k,_,61)^V.shrSL(k,_,6),ae=V.add4L(P,H,Pn[y-7],Pn[y-16]),fe=V.add4H(ae,S,B,Nn[y-7],Nn[y-16]);Nn[y]=fe|0,Pn[y]=ae|0}let{Ah:r,Al:s,Bh:i,Bl:o,Ch:a,Cl:l,Dh:u,Dl:f,Eh:c,El:d,Fh:w,Fl:m,Gh:g,Gl:A,Hh:h,Hl:p}=this;for(let y=0;y<80;y++){const E=V.rotrSH(c,d,14)^V.rotrSH(c,d,18)^V.rotrBH(c,d,41),x=V.rotrSL(c,d,14)^V.rotrSL(c,d,18)^V.rotrBL(c,d,41),S=c&w^~c&g,P=d&m^~d&A,k=V.add5L(p,x,P,vA[y],Pn[y]),_=V.add5H(k,h,E,S,wA[y],Nn[y]),B=k|0,H=V.rotrSH(r,s,28)^V.rotrBH(r,s,34)^V.rotrBH(r,s,39),ae=V.rotrSL(r,s,28)^V.rotrBL(r,s,34)^V.rotrBL(r,s,39),fe=r&i^r&a^i&a,ot=s&o^s&l^o&l;h=g|0,p=A|0,g=w|0,A=m|0,w=c|0,m=d|0,{h:c,l:d}=V.add(u|0,f|0,_|0,B|0),u=a|0,f=l|0,a=i|0,l=o|0,i=r|0,o=s|0;const I=V.add3L(B,ae,ot);r=V.add3H(I,_,H,fe),s=I|0}({h:r,l:s}=V.add(this.Ah|0,this.Al|0,r|0,s|0)),{h:i,l:o}=V.add(this.Bh|0,this.Bl|0,i|0,o|0),{h:a,l}=V.add(this.Ch|0,this.Cl|0,a|0,l|0),{h:u,l:f}=V.add(this.Dh|0,this.Dl|0,u|0,f|0),{h:c,l:d}=V.add(this.Eh|0,this.El|0,c|0,d|0),{h:w,l:m}=V.add(this.Fh|0,this.Fl|0,w|0,m|0),{h:g,l:A}=V.add(this.Gh|0,this.Gl|0,g|0,A|0),{h,l:p}=V.add(this.Hh|0,this.Hl|0,h|0,p|0),this.set(r,s,i,o,a,l,u,f,c,d,w,m,g,A,h,p)}roundClean(){Nn.fill(0),Pn.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const EA=Xc(()=>new AA);function xA(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")}const _d=xA();_d.crypto||_d.msCrypto;function bA(t){switch(t){case"sha256":return pg.create();case"sha512":return EA.create()}v(!1,"invalid hashing algorithm name","algorithm",t)}const[Eg,xg,bg]=[[],[],[]],SA=BigInt(0),Hs=BigInt(1),kA=BigInt(2),NA=BigInt(7),PA=BigInt(256),CA=BigInt(113);for(let t=0,e=Hs,n=1,r=0;t<24;t++){[n,r]=[r,(2*n+3*r)%5],Eg.push(2*(5*r+n)),xg.push((t+1)*(t+2)/2%64);let s=SA;for(let i=0;i<7;i++)e=(e<>NA)*CA)%PA,e&kA&&(s^=Hs<<(Hs<n>32?vg(t,e,n):yg(t,e,n),Hd=(t,e,n)=>n>32?Ag(t,e,n):wg(t,e,n);function RA(t,e=24){const n=new Uint32Array(10);for(let r=24-e;r<24;r++){for(let o=0;o<10;o++)n[o]=t[o]^t[o+10]^t[o+20]^t[o+30]^t[o+40];for(let o=0;o<10;o+=2){const a=(o+8)%10,l=(o+2)%10,u=n[l],f=n[l+1],c=zd(u,f,1)^n[a],d=Hd(u,f,1)^n[a+1];for(let w=0;w<50;w+=10)t[o+w]^=c,t[o+w+1]^=d}let s=t[2],i=t[3];for(let o=0;o<24;o++){const a=xg[o],l=zd(s,i,a),u=Hd(s,i,a),f=Eg[o];s=t[f],i=t[f+1],t[f]=l,t[f+1]=u}for(let o=0;o<50;o+=10){for(let a=0;a<10;a++)n[a]=t[o+a];for(let a=0;a<10;a++)t[o+a]^=~n[(a+2)%10]&n[(a+4)%10]}t[0]^=TA[r],t[1]^=IA[r]}n.fill(0)}class $c extends Yc{constructor(e,n,r,s=!1,i=24){if(super(),this.blockLen=e,this.suffix=n,this.outputLen=r,this.enableXOF=s,this.rounds=i,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,aa(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Kv(this.state)}keccak(){RA(this.state32,this.rounds),this.posOut=0,this.pos=0}update(e){vs(this);const{blockLen:n,state:r}=this;e=La(e);const s=e.length;for(let i=0;i=r&&this.keccak();const o=Math.min(r-this.posOut,i-s);e.set(n.subarray(this.posOut,this.posOut+o),s),this.posOut+=o,s+=o}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return aa(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(ug(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){const{blockLen:n,suffix:r,outputLen:s,rounds:i,enableXOF:o}=this;return e||(e=new $c(n,r,s,o,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=r,e.outputLen=s,e.enableXOF=o,e.destroyed=this.destroyed,e}}const BA=(t,e,n)=>Xc(()=>new $c(e,t,n)),OA=BA(1,136,256/8);let Sg=!1;const kg=function(t){return OA(t)};let Ng=kg;function ke(t){const e=Q(t,"data");return R(Ng(e))}ke._=kg;ke.lock=function(){Sg=!0};ke.register=function(t){if(Sg)throw new TypeError("keccak256 is locked");Ng=t};Object.freeze(ke);const Pg=function(t){return bA("sha256").update(t).digest()};let Cg=Pg,Tg=!1;function Ts(t){const e=Q(t,"data");return R(Cg(e))}Ts._=Pg;Ts.lock=function(){Tg=!0};Ts.register=function(t){if(Tg)throw new Error("sha256 is locked");Cg=t};Object.freeze(Ts);Object.freeze(Ts);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */BigInt(0);const LA=BigInt(1),FA=BigInt(2),Fa=t=>t instanceof Uint8Array,UA=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function As(t){if(!Fa(t))throw new Error("Uint8Array expected");let e="";for(let n=0;nr+s.length,0));let n=0;return t.forEach(r=>{if(!Fa(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}const nf=t=>(FA<new Uint8Array(t),Gd=t=>Uint8Array.from(t);function Ig(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=xl(t),s=xl(t),i=0;const o=()=>{r.fill(1),s.fill(0),i=0},a=(...c)=>n(s,r,...c),l=(c=xl())=>{s=a(Gd([0]),c),r=a(),c.length!==0&&(s=a(Gd([1]),c),r=a())},u=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let c=0;const d=[];for(;c{o(),l(c);let w;for(;!(w=d(u()));)l();return o(),w}}const DA={bigint:t=>typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||t instanceof Uint8Array,isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function _i(t,e,n={}){const r=(s,i,o)=>{const a=DA[i];if(typeof a!="function")throw new Error(`Invalid validator "${i}", expected function`);const l=t[s];if(!(o&&l===void 0)&&!a(l,t))throw new Error(`Invalid param ${String(s)}=${l} (${typeof l}), expected ${i}`)};for(const[s,i]of Object.entries(e))r(s,i,!1);for(const[s,i]of Object.entries(n))r(s,i,!0);return t}const MA=Object.freeze(Object.defineProperty({__proto__:null,bitMask:nf,bytesToHex:As,bytesToNumberBE:wr,bytesToNumberLE:ef,concatBytes:bi,createHmacDrbg:Ig,ensureBytes:Rt,hexToBytes:xi,hexToNumber:qc,numberToBytesBE:Es,numberToBytesLE:tf,validateObject:_i},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Re=BigInt(0),be=BigInt(1),or=BigInt(2),_A=BigInt(3),Lu=BigInt(4),jd=BigInt(5),Vd=BigInt(8);BigInt(9);BigInt(16);function $e(t,e){const n=t%e;return n>=Re?n:e+n}function zA(t,e,n){if(n<=Re||e 0");if(n===be)return Re;let r=be;for(;e>Re;)e&be&&(r=r*t%n),t=t*t%n,e>>=be;return r}function vt(t,e,n){let r=t;for(;e-- >Re;)r*=r,r%=n;return r}function Fu(t,e){if(t===Re||e<=Re)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let n=$e(t,e),r=e,s=Re,i=be;for(;n!==Re;){const a=r/n,l=r%n,u=s-i*a;r=n,n=l,s=i,i=u}if(r!==be)throw new Error("invert: does not exist");return $e(s,e)}function HA(t){const e=(t-be)/or;let n,r,s;for(n=t-be,r=0;n%or===Re;n/=or,r++);for(s=or;s(r[s]="function",r),e);return _i(t,n)}function QA(t,e,n){if(n 0");if(n===Re)return t.ONE;if(n===be)return e;let r=t.ONE,s=e;for(;n>Re;)n&be&&(r=t.mul(r,s)),s=t.sqr(s),n>>=be;return r}function KA(t,e){const n=new Array(e.length),r=e.reduce((i,o,a)=>t.is0(o)?i:(n[a]=i,t.mul(i,o)),t.ONE),s=t.inv(r);return e.reduceRight((i,o,a)=>t.is0(o)?i:(n[a]=t.mul(i,n[a]),t.mul(i,o)),s),n}function Rg(t,e){const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function JA(t,e,n=!1,r={}){if(t<=Re)throw new Error(`Expected Field ORDER > 0, got ${t}`);const{nBitLength:s,nByteLength:i}=Rg(t,e);if(i>2048)throw new Error("Field lengths over 2048 bytes are not supported");const o=GA(t),a=Object.freeze({ORDER:t,BITS:s,BYTES:i,MASK:nf(s),ZERO:Re,ONE:be,create:l=>$e(l,t),isValid:l=>{if(typeof l!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof l}`);return Re<=l&&ll===Re,isOdd:l=>(l&be)===be,neg:l=>$e(-l,t),eql:(l,u)=>l===u,sqr:l=>$e(l*l,t),add:(l,u)=>$e(l+u,t),sub:(l,u)=>$e(l-u,t),mul:(l,u)=>$e(l*u,t),pow:(l,u)=>QA(a,l,u),div:(l,u)=>$e(l*Fu(u,t),t),sqrN:l=>l*l,addN:(l,u)=>l+u,subN:(l,u)=>l-u,mulN:(l,u)=>l*u,inv:l=>Fu(l,t),sqrt:r.sqrt||(l=>o(a,l)),invertBatch:l=>KA(a,l),cmov:(l,u,f)=>f?u:l,toBytes:l=>n?tf(l,i):Es(l,i),fromBytes:l=>{if(l.length!==i)throw new Error(`Fp.fromBytes: expected ${i}, got ${l.length}`);return n?ef(l):wr(l)}});return Object.freeze(a)}function Bg(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function Og(t){const e=Bg(t);return e+Math.ceil(e/2)}function WA(t,e,n=!1){const r=t.length,s=Bg(e),i=Og(e);if(r<16||r1024)throw new Error(`expected ${i}-1024 bytes of input, got ${r}`);const o=n?wr(t):ef(t),a=$e(o,e-be)+be;return n?tf(a,s):Es(a,s)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ZA=BigInt(0),bl=BigInt(1);function YA(t,e){const n=(s,i)=>{const o=i.negate();return s?o:i},r=s=>{const i=Math.ceil(e/s)+1,o=2**(s-1);return{windows:i,windowSize:o}};return{constTimeNegate:n,unsafeLadder(s,i){let o=t.ZERO,a=s;for(;i>ZA;)i&bl&&(o=o.add(a)),a=a.double(),i>>=bl;return o},precomputeWindow(s,i){const{windows:o,windowSize:a}=r(i),l=[];let u=s,f=u;for(let c=0;c>=w,A>l&&(A-=d,o+=bl);const h=g,p=g+Math.abs(A)-1,y=m%2!==0,E=A<0;A===0?f=f.add(n(y,i[h])):u=u.add(n(E,i[p]))}return{p:u,f}},wNAFCached(s,i,o,a){const l=s._WINDOW_SIZE||1;let u=i.get(s);return u||(u=this.precomputeWindow(s,l),l!==1&&i.set(s,a(u))),this.wNAF(l,u,o)}}}function Lg(t){return VA(t.Fp),_i(t,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Rg(t.n,t.nBitLength),...t,p:t.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function XA(t){const e=Lg(t);_i(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:s}=e;if(n){if(!r.eql(s,r.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof n!="object"||typeof n.beta!="bigint"||typeof n.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}const{bytesToNumberBE:$A,hexToBytes:qA}=MA,hr={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(t){const{Err:e}=hr;if(t.length<2||t[0]!==2)throw new e("Invalid signature integer tag");const n=t[1],r=t.subarray(2,n+2);if(!n||r.length!==n)throw new e("Invalid signature integer: wrong length");if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:$A(r),l:t.subarray(n+2)}},toSig(t){const{Err:e}=hr,n=typeof t=="string"?qA(t):t;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new e("Invalid signature tag");if(n[1]!==r-2)throw new e("Invalid signature: incorrect length");const{d:s,l:i}=hr._parseInt(n.subarray(2)),{d:o,l:a}=hr._parseInt(i);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:s,s:o}},hexFromSig(t){const e=u=>Number.parseInt(u[0],16)&8?"00"+u:u,n=u=>{const f=u.toString(16);return f.length&1?`0${f}`:f},r=e(n(t.s)),s=e(n(t.r)),i=r.length/2,o=s.length/2,a=n(i),l=n(o);return`30${n(o+i+4)}02${l}${s}02${a}${r}`}},sn=BigInt(0),At=BigInt(1);BigInt(2);const Qd=BigInt(3);BigInt(4);function e1(t){const e=XA(t),{Fp:n}=e,r=e.toBytes||((m,g,A)=>{const h=g.toAffine();return bi(Uint8Array.from([4]),n.toBytes(h.x),n.toBytes(h.y))}),s=e.fromBytes||(m=>{const g=m.subarray(1),A=n.fromBytes(g.subarray(0,n.BYTES)),h=n.fromBytes(g.subarray(n.BYTES,2*n.BYTES));return{x:A,y:h}});function i(m){const{a:g,b:A}=e,h=n.sqr(m),p=n.mul(h,m);return n.add(n.add(p,n.mul(m,g)),A)}if(!n.eql(n.sqr(e.Gy),i(e.Gx)))throw new Error("bad generator point: equation left != right");function o(m){return typeof m=="bigint"&&snn.eql(y,n.ZERO);return p(A)&&p(h)?c.ZERO:new c(A,h,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){const A=n.invertBatch(g.map(h=>h.pz));return g.map((h,p)=>h.toAffine(A[p])).map(c.fromAffine)}static fromHex(g){const A=c.fromAffine(s(Rt("pointHex",g)));return A.assertValidity(),A}static fromPrivateKey(g){return c.BASE.multiply(l(g))}_setWindowSize(g){this._WINDOW_SIZE=g,u.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:g,y:A}=this.toAffine();if(!n.isValid(g)||!n.isValid(A))throw new Error("bad point: x or y not FE");const h=n.sqr(A),p=i(g);if(!n.eql(h,p))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:g}=this.toAffine();if(n.isOdd)return!n.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){f(g);const{px:A,py:h,pz:p}=this,{px:y,py:E,pz:x}=g,S=n.eql(n.mul(A,x),n.mul(y,p)),P=n.eql(n.mul(h,x),n.mul(E,p));return S&&P}negate(){return new c(this.px,n.neg(this.py),this.pz)}double(){const{a:g,b:A}=e,h=n.mul(A,Qd),{px:p,py:y,pz:E}=this;let x=n.ZERO,S=n.ZERO,P=n.ZERO,k=n.mul(p,p),_=n.mul(y,y),B=n.mul(E,E),H=n.mul(p,y);return H=n.add(H,H),P=n.mul(p,E),P=n.add(P,P),x=n.mul(g,P),S=n.mul(h,B),S=n.add(x,S),x=n.sub(_,S),S=n.add(_,S),S=n.mul(x,S),x=n.mul(H,x),P=n.mul(h,P),B=n.mul(g,B),H=n.sub(k,B),H=n.mul(g,H),H=n.add(H,P),P=n.add(k,k),k=n.add(P,k),k=n.add(k,B),k=n.mul(k,H),S=n.add(S,k),B=n.mul(y,E),B=n.add(B,B),k=n.mul(B,H),x=n.sub(x,k),P=n.mul(B,_),P=n.add(P,P),P=n.add(P,P),new c(x,S,P)}add(g){f(g);const{px:A,py:h,pz:p}=this,{px:y,py:E,pz:x}=g;let S=n.ZERO,P=n.ZERO,k=n.ZERO;const _=e.a,B=n.mul(e.b,Qd);let H=n.mul(A,y),ae=n.mul(h,E),fe=n.mul(p,x),ot=n.add(A,h),I=n.add(y,E);ot=n.mul(ot,I),I=n.add(H,ae),ot=n.sub(ot,I),I=n.add(A,p);let D=n.add(y,x);return I=n.mul(I,D),D=n.add(H,fe),I=n.sub(I,D),D=n.add(h,p),S=n.add(E,x),D=n.mul(D,S),S=n.add(ae,fe),D=n.sub(D,S),k=n.mul(_,I),S=n.mul(B,fe),k=n.add(S,k),S=n.sub(ae,k),k=n.add(ae,k),P=n.mul(S,k),ae=n.add(H,H),ae=n.add(ae,H),fe=n.mul(_,fe),I=n.mul(B,I),ae=n.add(ae,fe),fe=n.sub(H,fe),fe=n.mul(_,fe),I=n.add(I,fe),H=n.mul(ae,I),P=n.add(P,H),H=n.mul(D,I),S=n.mul(ot,S),S=n.sub(S,H),H=n.mul(ot,ae),k=n.mul(D,k),k=n.add(k,H),new c(S,P,k)}subtract(g){return this.add(g.negate())}is0(){return this.equals(c.ZERO)}wNAF(g){return w.wNAFCached(this,u,g,A=>{const h=n.invertBatch(A.map(p=>p.pz));return A.map((p,y)=>p.toAffine(h[y])).map(c.fromAffine)})}multiplyUnsafe(g){const A=c.ZERO;if(g===sn)return A;if(a(g),g===At)return this;const{endo:h}=e;if(!h)return w.unsafeLadder(this,g);let{k1neg:p,k1:y,k2neg:E,k2:x}=h.splitScalar(g),S=A,P=A,k=this;for(;y>sn||x>sn;)y&At&&(S=S.add(k)),x&At&&(P=P.add(k)),k=k.double(),y>>=At,x>>=At;return p&&(S=S.negate()),E&&(P=P.negate()),P=new c(n.mul(P.px,h.beta),P.py,P.pz),S.add(P)}multiply(g){a(g);let A=g,h,p;const{endo:y}=e;if(y){const{k1neg:E,k1:x,k2neg:S,k2:P}=y.splitScalar(A);let{p:k,f:_}=this.wNAF(x),{p:B,f:H}=this.wNAF(P);k=w.constTimeNegate(E,k),B=w.constTimeNegate(S,B),B=new c(n.mul(B.px,y.beta),B.py,B.pz),h=k.add(B),p=_.add(H)}else{const{p:E,f:x}=this.wNAF(A);h=E,p=x}return c.normalizeZ([h,p])[0]}multiplyAndAddUnsafe(g,A,h){const p=c.BASE,y=(x,S)=>S===sn||S===At||!x.equals(p)?x.multiplyUnsafe(S):x.multiply(S),E=y(this,A).add(y(g,h));return E.is0()?void 0:E}toAffine(g){const{px:A,py:h,pz:p}=this,y=this.is0();g==null&&(g=y?n.ONE:n.inv(p));const E=n.mul(A,g),x=n.mul(h,g),S=n.mul(p,g);if(y)return{x:n.ZERO,y:n.ZERO};if(!n.eql(S,n.ONE))throw new Error("invZ was invalid");return{x:E,y:x}}isTorsionFree(){const{h:g,isTorsionFree:A}=e;if(g===At)return!0;if(A)return A(c,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:g,clearCofactor:A}=e;return g===At?this:A?A(c,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return this.assertValidity(),r(c,this,g)}toHex(g=!0){return As(this.toRawBytes(g))}}c.BASE=new c(e.Gx,e.Gy,n.ONE),c.ZERO=new c(n.ZERO,n.ONE,n.ZERO);const d=e.nBitLength,w=YA(c,e.endo?Math.ceil(d/2):d);return{CURVE:e,ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:i,isWithinCurveOrder:o}}function t1(t){const e=Lg(t);return _i(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function n1(t){const e=t1(t),{Fp:n,n:r}=e,s=n.BYTES+1,i=2*n.BYTES+1;function o(I){return snAs(Es(I,e.nByteLength));function m(I){const D=r>>At;return I>D}function g(I){return m(I)?a(-I):I}const A=(I,D,j)=>wr(I.slice(D,j));class h{constructor(D,j,T){this.r=D,this.s=j,this.recovery=T,this.assertValidity()}static fromCompact(D){const j=e.nByteLength;return D=Rt("compactSignature",D,j*2),new h(A(D,0,j),A(D,j,2*j))}static fromDER(D){const{r:j,s:T}=hr.toSig(Rt("DER",D));return new h(j,T)}assertValidity(){if(!d(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!d(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(D){return new h(this.r,this.s,D)}recoverPublicKey(D){const{r:j,s:T,recovery:O}=this,M=P(Rt("msgHash",D));if(O==null||![0,1,2,3].includes(O))throw new Error("recovery id invalid");const J=O===2||O===3?j+e.n:j;if(J>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const X=O&1?"03":"02",at=u.fromHex(X+w(J)),Me=l(J),Ht=a(-M*Me),lt=a(T*Me),ut=u.BASE.multiplyAndAddUnsafe(at,Ht,lt);if(!ut)throw new Error("point at infinify");return ut.assertValidity(),ut}hasHighS(){return m(this.s)}normalizeS(){return this.hasHighS()?new h(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return xi(this.toDERHex())}toDERHex(){return hr.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return xi(this.toCompactHex())}toCompactHex(){return w(this.r)+w(this.s)}}const p={isValidPrivateKey(I){try{return f(I),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const I=Og(e.n);return WA(e.randomBytes(I),e.n)},precompute(I=8,D=u.BASE){return D._setWindowSize(I),D.multiply(BigInt(3)),D}};function y(I,D=!0){return u.fromPrivateKey(I).toRawBytes(D)}function E(I){const D=I instanceof Uint8Array,j=typeof I=="string",T=(D||j)&&I.length;return D?T===s||T===i:j?T===2*s||T===2*i:I instanceof u}function x(I,D,j=!0){if(E(I))throw new Error("first arg must be private key");if(!E(D))throw new Error("second arg must be public key");return u.fromHex(D).multiply(f(I)).toRawBytes(j)}const S=e.bits2int||function(I){const D=wr(I),j=I.length*8-e.nBitLength;return j>0?D>>BigInt(j):D},P=e.bits2int_modN||function(I){return a(S(I))},k=nf(e.nBitLength);function _(I){if(typeof I!="bigint")throw new Error("bigint expected");if(!(sn<=I&&I$n in j))throw new Error("sign() legacy options not supported");const{hash:T,randomBytes:O}=e;let{lowS:M,prehash:J,extraEntropy:X}=j;M==null&&(M=!0),I=Rt("msgHash",I),J&&(I=Rt("prehashed msgHash",T(I)));const at=P(I),Me=f(D),Ht=[_(Me),_(at)];if(X!=null){const $n=X===!0?O(n.BYTES):X;Ht.push(Rt("extraEntropy",$n))}const lt=bi(...Ht),ut=at;function Qa($n){const Lr=S($n);if(!d(Lr))return;const pf=l(Lr),Gt=u.BASE.multiply(Lr).toAffine(),Fr=a(Gt.x);if(Fr===sn)return;const Qi=a(pf*a(ut+Fr*Me));if(Qi===sn)return;let mf=(Gt.x===Fr?0:2)|Number(Gt.y&At),gf=Qi;return M&&m(Qi)&&(gf=g(Qi),mf^=1),new h(Fr,gf,mf)}return{seed:lt,k2sig:Qa}}const H={lowS:e.lowS,prehash:!1},ae={lowS:e.lowS,prehash:!1};function fe(I,D,j=H){const{seed:T,k2sig:O}=B(I,D,j),M=e;return Ig(M.hash.outputLen,M.nByteLength,M.hmac)(T,O)}u.BASE._setWindowSize(8);function ot(I,D,j,T=ae){const O=I;if(D=Rt("msgHash",D),j=Rt("publicKey",j),"strict"in T)throw new Error("options.strict was renamed to lowS");const{lowS:M,prehash:J}=T;let X,at;try{if(typeof O=="string"||O instanceof Uint8Array)try{X=h.fromDER(O)}catch(Gt){if(!(Gt instanceof hr.Err))throw Gt;X=h.fromCompact(O)}else if(typeof O=="object"&&typeof O.r=="bigint"&&typeof O.s=="bigint"){const{r:Gt,s:Fr}=O;X=new h(Gt,Fr)}else throw new Error("PARSE");at=u.fromHex(j)}catch(Gt){if(Gt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(M&&X.hasHighS())return!1;J&&(D=e.hash(D));const{r:Me,s:Ht}=X,lt=P(D),ut=l(Ht),Qa=a(lt*ut),$n=a(Me*ut),Lr=u.BASE.multiplyAndAddUnsafe(at,Qa,$n)?.toAffine();return Lr?a(Lr.x)===Me:!1}return{CURVE:e,getPublicKey:y,getSharedSecret:x,sign:fe,verify:ot,ProjectivePoint:u,Signature:h,utils:p}}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function r1(t){return{hash:t,hmac:(e,...n)=>dg(t,e,Zv(...n)),randomBytes:Yv}}function s1(t,e){const n=r=>n1({...t,...r1(r)});return Object.freeze({...n(e),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Fg=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Kd=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),i1=BigInt(1),Uu=BigInt(2),Jd=(t,e)=>(t+e/Uu)/e;function o1(t){const e=Fg,n=BigInt(3),r=BigInt(6),s=BigInt(11),i=BigInt(22),o=BigInt(23),a=BigInt(44),l=BigInt(88),u=t*t*t%e,f=u*u*t%e,c=vt(f,n,e)*f%e,d=vt(c,n,e)*f%e,w=vt(d,Uu,e)*u%e,m=vt(w,s,e)*w%e,g=vt(m,i,e)*m%e,A=vt(g,a,e)*g%e,h=vt(A,l,e)*A%e,p=vt(h,a,e)*g%e,y=vt(p,n,e)*f%e,E=vt(y,o,e)*m%e,x=vt(E,r,e)*u%e,S=vt(x,Uu,e);if(!Du.eql(Du.sqr(S),t))throw new Error("Cannot find square root");return S}const Du=JA(Fg,void 0,void 0,{sqrt:o1}),Cn=s1({a:BigInt(0),b:BigInt(7),Fp:Du,n:Kd,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:t=>{const e=Kd,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-i1*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=n,o=BigInt("0x100000000000000000000000000000000"),a=Jd(i*t,e),l=Jd(-r*t,e);let u=$e(t-a*n-l*s,e),f=$e(-a*r-l*i,e);const c=u>o,d=f>o;if(c&&(u=e-u),d&&(f=e-f),u>o||f>o)throw new Error("splitScalar: Endomorphism failed, k="+t);return{k1neg:c,k1:u,k2neg:d,k2:f}}}},pg);BigInt(0);Cn.ProjectivePoint;const Si="0x0000000000000000000000000000000000000000",Wd="0x0000000000000000000000000000000000000000000000000000000000000000",Zd=BigInt(0),Yd=BigInt(1),Mu=BigInt(2),Xd=BigInt(27),$d=BigInt(28),po=BigInt(35),Ug=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),a1=Ug/Mu,l1=Symbol.for("nodejs.util.inspect.custom"),er={};function Sl(t){return vn(Ne(t),32)}class de{#e;#t;#n;#r;get r(){return this.#e}set r(e){v(as(e)===32,"invalid r","value",e),this.#e=R(e)}get s(){return v(parseInt(this.#t.substring(0,3))<8,"non-canonical s; use ._s","s",this.#t),this.#t}set s(e){v(as(e)===32,"invalid s","value",e),this.#t=R(e)}get _s(){return this.#t}isValid(){return BigInt(this.#t)<=a1}get v(){return this.#n}set v(e){const n=G(e,"value");v(n===27||n===28,"invalid v","v",e),this.#n=n}get networkV(){return this.#r}get legacyChainId(){const e=this.networkV;return e==null?null:de.getChainId(e)}get yParity(){return this.v===27?0:1}get yParityAndS(){const e=Q(this.s);return this.yParity&&(e[0]|=128),R(e)}get compactSerialized(){return ce([this.r,this.yParityAndS])}get serialized(){return ce([this.r,this.s,this.yParity?"0x1c":"0x1b"])}constructor(e,n,r,s){Ui(e,er,"Signature"),this.#e=n,this.#t=r,this.#n=s,this.#r=null}getCanonical(){if(this.isValid())return this;const e=Ug-BigInt(this._s),n=55-this.v,r=new de(er,this.r,Sl(e),n);return this.networkV&&(r.#r=this.networkV),r}clone(){const e=new de(er,this.r,this._s,this.v);return this.networkV&&(e.#r=this.networkV),e}toJSON(){const e=this.networkV;return{_type:"signature",networkV:e!=null?e.toString():null,r:this.r,s:this._s,v:this.v}}[l1](){return this.toString()}toString(){return this.isValid()?`Signature { r: ${this.r}, s: ${this._s}, v: ${this.v} }`:`Signature { r: ${this.r}, s: ${this._s}, v: ${this.v}, valid: false }`}static getChainId(e){const n=U(e,"v");return n==Xd||n==$d?Zd:(v(n>=po,"invalid EIP-155 v","v",e),(n-po)/Mu)}static getChainIdV(e,n){return U(e)*Mu+BigInt(35+n-27)}static getNormalizedV(e){const n=U(e);return n===Zd||n===Xd?27:n===Yd||n===$d?28:(v(n>=po,"invalid v","v",e),n&Yd?27:28)}static from(e){function n(u,f){v(u,f,"signature",e)}if(e==null)return new de(er,Wd,Wd,27);if(typeof e=="string"){const u=Q(e,"signature");if(u.length===64){const f=R(u.slice(0,32)),c=u.slice(32,64),d=c[0]&128?28:27;return c[0]&=127,new de(er,f,R(c),d)}if(u.length===65){const f=R(u.slice(0,32)),c=R(u.slice(32,64)),d=de.getNormalizedV(u[64]);return new de(er,f,c,d)}n(!1,"invalid raw signature length")}if(e instanceof de)return e.clone();const r=e.r;n(r!=null,"missing r");const s=Sl(r),i=function(u,f){if(u!=null)return Sl(u);if(f!=null){n(se(f,32),"invalid yParityAndS");const c=Q(f);return c[0]&=127,R(c)}n(!1,"missing s")}(e.s,e.yParityAndS),{networkV:o,v:a}=function(u,f,c){if(u!=null){const d=U(u);return{networkV:d>=po?d:void 0,v:de.getNormalizedV(d)}}if(f!=null)return n(se(f,32),"invalid yParityAndS"),{v:Q(f)[0]&128?28:27};if(c!=null){switch(G(c,"sig.yParity")){case 0:return{v:27};case 1:return{v:28}}n(!1,"invalid yParity")}n(!1,"missing v")}(e.v,e.yParityAndS,e.yParity),l=new de(er,s,i,a);return o&&(l.#r=o),n(e.yParity==null||G(e.yParity,"sig.yParity")===l.yParity,"yParity mismatch"),n(e.yParityAndS==null||e.yParityAndS===l.yParityAndS,"yParityAndS mismatch"),l}}class on{#e;constructor(e){v(as(e)===32,"invalid private key","privateKey","[REDACTED]"),this.#e=R(e)}get privateKey(){return this.#e}get publicKey(){return on.computePublicKey(this.#e)}get compressedPublicKey(){return on.computePublicKey(this.#e,!0)}sign(e){v(as(e)===32,"invalid digest length","digest",e);const n=Cn.sign(Qe(e),Qe(this.#e),{lowS:!0});return de.from({r:Jn(n.r,32),s:Jn(n.s,32),v:n.recovery?28:27})}computeSharedSecret(e){const n=on.computePublicKey(e);return R(Cn.getSharedSecret(Qe(this.#e),Q(n),!1))}static computePublicKey(e,n){let r=Q(e,"key");if(r.length===32){const i=Cn.getPublicKey(r,!!n);return R(i)}if(r.length===64){const i=new Uint8Array(65);i[0]=4,i.set(r,1),r=i}const s=Cn.ProjectivePoint.fromHex(r);return R(s.toRawBytes(n))}static recoverPublicKey(e,n){v(as(e)===32,"invalid digest length","digest",e);const r=de.from(n);let s=Cn.Signature.fromCompact(Qe(ce([r.r,r.s])));s=s.addRecoveryBit(r.yParity);const i=s.recoverPublicKey(Qe(e));return v(i!=null,"invalid signature for digest","signature",n),"0x"+i.toHex(!1)}static addPoints(e,n,r){const s=Cn.ProjectivePoint.fromHex(on.computePublicKey(e).substring(2)),i=Cn.ProjectivePoint.fromHex(on.computePublicKey(n).substring(2));return"0x"+s.add(i).toHex(!!r)}}const u1=BigInt(0),c1=BigInt(36);function qd(t){t=t.toLowerCase();const e=t.substring(2).split(""),n=new Uint8Array(40);for(let s=0;s<40;s++)n[s]=e[s].charCodeAt(0);const r=Q(ke(n));for(let s=0;s<40;s+=2)r[s>>1]>>4>=8&&(e[s]=e[s].toUpperCase()),(r[s>>1]&15)>=8&&(e[s+1]=e[s+1].toUpperCase());return"0x"+e.join("")}const rf={};for(let t=0;t<10;t++)rf[String(t)]=String(t);for(let t=0;t<26;t++)rf[String.fromCharCode(65+t)]=String(10+t);const eh=15;function f1(t){t=t.toUpperCase(),t=t.substring(4)+t.substring(0,2)+"00";let e=t.split("").map(r=>rf[r]).join("");for(;e.length>=eh;){let r=e.substring(0,eh);e=parseInt(r,10)%97+e.substring(r.length)}let n=String(98-parseInt(e,10)%97);for(;n.length<2;)n="0"+n;return n}const d1=function(){const t={};for(let e=0;e<36;e++){const n="0123456789abcdefghijklmnopqrstuvwxyz"[e];t[n]=BigInt(e)}return t}();function h1(t){t=t.toLowerCase();let e=u1;for(let n=0;ne.format()).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return this.type.startsWith("bytes")}isString(){return this.type==="string"}get tupleName(){if(this.type!=="tuple")throw TypeError("not a tuple");return this.#e}get arrayLength(){if(this.type!=="array")throw TypeError("not an array");return this.#e===!0?-1:this.#e===!1?this.value.length:null}static from(e,n){return new ve(en,e,n)}static uint8(e){return L(e,8)}static uint16(e){return L(e,16)}static uint24(e){return L(e,24)}static uint32(e){return L(e,32)}static uint40(e){return L(e,40)}static uint48(e){return L(e,48)}static uint56(e){return L(e,56)}static uint64(e){return L(e,64)}static uint72(e){return L(e,72)}static uint80(e){return L(e,80)}static uint88(e){return L(e,88)}static uint96(e){return L(e,96)}static uint104(e){return L(e,104)}static uint112(e){return L(e,112)}static uint120(e){return L(e,120)}static uint128(e){return L(e,128)}static uint136(e){return L(e,136)}static uint144(e){return L(e,144)}static uint152(e){return L(e,152)}static uint160(e){return L(e,160)}static uint168(e){return L(e,168)}static uint176(e){return L(e,176)}static uint184(e){return L(e,184)}static uint192(e){return L(e,192)}static uint200(e){return L(e,200)}static uint208(e){return L(e,208)}static uint216(e){return L(e,216)}static uint224(e){return L(e,224)}static uint232(e){return L(e,232)}static uint240(e){return L(e,240)}static uint248(e){return L(e,248)}static uint256(e){return L(e,256)}static uint(e){return L(e,256)}static int8(e){return L(e,-8)}static int16(e){return L(e,-16)}static int24(e){return L(e,-24)}static int32(e){return L(e,-32)}static int40(e){return L(e,-40)}static int48(e){return L(e,-48)}static int56(e){return L(e,-56)}static int64(e){return L(e,-64)}static int72(e){return L(e,-72)}static int80(e){return L(e,-80)}static int88(e){return L(e,-88)}static int96(e){return L(e,-96)}static int104(e){return L(e,-104)}static int112(e){return L(e,-112)}static int120(e){return L(e,-120)}static int128(e){return L(e,-128)}static int136(e){return L(e,-136)}static int144(e){return L(e,-144)}static int152(e){return L(e,-152)}static int160(e){return L(e,-160)}static int168(e){return L(e,-168)}static int176(e){return L(e,-176)}static int184(e){return L(e,-184)}static int192(e){return L(e,-192)}static int200(e){return L(e,-200)}static int208(e){return L(e,-208)}static int216(e){return L(e,-216)}static int224(e){return L(e,-224)}static int232(e){return L(e,-232)}static int240(e){return L(e,-240)}static int248(e){return L(e,-248)}static int256(e){return L(e,-256)}static int(e){return L(e,-256)}static bytes1(e){return $(e,1)}static bytes2(e){return $(e,2)}static bytes3(e){return $(e,3)}static bytes4(e){return $(e,4)}static bytes5(e){return $(e,5)}static bytes6(e){return $(e,6)}static bytes7(e){return $(e,7)}static bytes8(e){return $(e,8)}static bytes9(e){return $(e,9)}static bytes10(e){return $(e,10)}static bytes11(e){return $(e,11)}static bytes12(e){return $(e,12)}static bytes13(e){return $(e,13)}static bytes14(e){return $(e,14)}static bytes15(e){return $(e,15)}static bytes16(e){return $(e,16)}static bytes17(e){return $(e,17)}static bytes18(e){return $(e,18)}static bytes19(e){return $(e,19)}static bytes20(e){return $(e,20)}static bytes21(e){return $(e,21)}static bytes22(e){return $(e,22)}static bytes23(e){return $(e,23)}static bytes24(e){return $(e,24)}static bytes25(e){return $(e,25)}static bytes26(e){return $(e,26)}static bytes27(e){return $(e,27)}static bytes28(e){return $(e,28)}static bytes29(e){return $(e,29)}static bytes30(e){return $(e,30)}static bytes31(e){return $(e,31)}static bytes32(e){return $(e,32)}static address(e){return new ve(en,"address",e)}static bool(e){return new ve(en,"bool",!!e)}static bytes(e){return new ve(en,"bytes",e)}static string(e){return new ve(en,"string",e)}static array(e,n){throw new Error("not implemented yet")}static tuple(e,n){throw new Error("not implemented yet")}static overrides(e){return new ve(en,"overrides",Object.assign({},e))}static isTyped(e){return e&&typeof e=="object"&&"_typedSymbol"in e&&e._typedSymbol===th}static dereference(e,n){if(ve.isTyped(e)){if(e.type!==n)throw new Error(`invalid type: expecetd ${n}, got ${e.type}`);return e.value}return e}}class m1 extends xn{constructor(e){super("address","address",e,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(e,n){let r=ve.dereference(n,"string");try{r=q(r)}catch(s){return this._throwError(s.message,n)}return e.writeValue(r)}decode(e){return q(Jn(e.readValue(),20))}}class g1 extends xn{coder;constructor(e){super(e.name,e.type,"_",e.dynamic),this.coder=e}defaultValue(){return this.coder.defaultValue()}encode(e,n){return this.coder.encode(e,n)}decode(e){return this.coder.decode(e)}}function Mg(t,e,n){let r=[];if(Array.isArray(n))r=n;else if(n&&typeof n=="object"){let l={};r=e.map(u=>{const f=u.localName;return N(f,"cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:u},value:n}),N(!l[f],"cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:u},value:n}),l[f]=!0,n[f]})}else v(!1,"invalid tuple value","tuple",n);v(e.length===r.length,"types/value length mismatch","tuple",n);let s=new Bu,i=new Bu,o=[];e.forEach((l,u)=>{let f=r[u];if(l.dynamic){let c=i.length;l.encode(i,f);let d=s.writeUpdatableValue();o.push(w=>{d(w+c)})}else l.encode(s,f)}),o.forEach(l=>{l(s.length)});let a=t.appendWriter(s);return a+=t.appendWriter(i),a}function _g(t,e){let n=[],r=[],s=t.subReader(0);return e.forEach(i=>{let o=null;if(i.dynamic){let a=t.readIndex(),l=s.subReader(a);try{o=i.decode(l)}catch(u){if(Fe(u,"BUFFER_OVERRUN"))throw u;o=u,o.baseType=i.name,o.name=i.localName,o.type=i.type}}else try{o=i.decode(t)}catch(a){if(Fe(a,"BUFFER_OVERRUN"))throw a;o=a,o.baseType=i.name,o.name=i.localName,o.type=i.type}if(o==null)throw new Error("investigate");n.push(o),r.push(i.localName||null)}),un.fromItems(n,r)}class y1 extends xn{coder;length;constructor(e,n,r){const s=e.type+"["+(n>=0?n:"")+"]",i=n===-1||e.dynamic;super("array",s,r,i),z(this,{coder:e,length:n})}defaultValue(){const e=this.coder.defaultValue(),n=[];for(let r=0;ri||r<-(i+S1))&&this._throwError("value out-of-bounds",n),r=$m(r,8*Ke)}else(rdr(s,this.size*8))&&this._throwError("value out-of-bounds",n);return e.writeValue(r)}decode(e){let n=dr(e.readValue(),this.size*8);return this.signed&&(n=ia(n,this.size*8)),n}}class P1 extends zg{constructor(e){super("string",e)}defaultValue(){return""}encode(e,n){return super.encode(e,dn(ve.dereference(n,"string")))}decode(e){return oa(super.decode(e))}}class mo extends xn{coders;constructor(e,n){let r=!1;const s=[];e.forEach(o=>{o.dynamic&&(r=!0),s.push(o.type)});const i="tuple("+s.join(",")+")";super("tuple",i,n,r),z(this,{coders:Object.freeze(e.slice())})}defaultValue(){const e=[];this.coders.forEach(r=>{e.push(r.defaultValue())});const n=this.coders.reduce((r,s)=>{const i=s.localName;return i&&(r[i]||(r[i]=0),r[i]++),r},{});return this.coders.forEach((r,s)=>{let i=r.localName;!i||n[i]!==1||(i==="length"&&(i="_length"),e[i]==null&&(e[i]=e[s]))}),Object.freeze(e)}encode(e,n){const r=ve.dereference(n,"tuple");return Mg(e,this.coders,r)}decode(e){return _g(e,this.coders)}}function Nl(t,e){return{address:q(t),storageKeys:e.map((n,r)=>(v(se(n,32),"invalid slot",`storageKeys[${r}]`,n),n.toLowerCase()))}}function Rr(t){if(Array.isArray(t))return t.map((n,r)=>Array.isArray(n)?(v(n.length===2,"invalid slot set",`value[${r}]`,n),Nl(n[0],n[1])):(v(n!=null&&typeof n=="object","invalid address-slot set","value",t),Nl(n.address,n.storageKeys)));v(t!=null&&typeof t=="object","invalid access list","value",t);const e=Object.keys(t).map(n=>{const r=t[n].reduce((s,i)=>(s[i]=!0,s),{});return Nl(n,Object.keys(r).sort())});return e.sort((n,r)=>n.address.localeCompare(r.address)),e}function Hg(t){return{address:q(t.address),nonce:U(t.nonce!=null?t.nonce:0),chainId:U(t.chainId!=null?t.chainId:0),signature:de.from(t.signature)}}function C1(t){let e;return typeof t=="string"?e=on.computePublicKey(t,!1):e=t.publicKey,q(ke("0x"+e.substring(4)).substring(26))}function T1(t,e){return C1(on.recoverPublicKey(t,e))}const Ie=BigInt(0),I1=BigInt(2),R1=BigInt(27),B1=BigInt(28),O1=BigInt(35),L1=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),F1=Symbol.for("nodejs.util.inspect.custom"),Pl=4096*32,Ro=128;function U1(t){return{blobToKzgCommitment:r=>{if("computeBlobProof"in t){if("blobToKzgCommitment"in t&&typeof t.blobToKzgCommitment=="function")return Q(t.blobToKzgCommitment(R(r)))}else if("blobToKzgCommitment"in t&&typeof t.blobToKzgCommitment=="function")return Q(t.blobToKzgCommitment(r));if("blobToKZGCommitment"in t&&typeof t.blobToKZGCommitment=="function")return Q(t.blobToKZGCommitment(R(r)));v(!1,"unsupported KZG library","kzg",t)},computeBlobKzgProof:(r,s)=>{if("computeBlobProof"in t&&typeof t.computeBlobProof=="function")return Q(t.computeBlobProof(R(r),R(s)));if("computeBlobKzgProof"in t&&typeof t.computeBlobKzgProof=="function")return t.computeBlobKzgProof(r,s);if("computeBlobKZGProof"in t&&typeof t.computeBlobKZGProof=="function")return Q(t.computeBlobKZGProof(R(r),R(s)));v(!1,"unsupported KZG library","kzg",t)}}}function nh(t,e){let n=t.toString(16);for(;n.length<2;)n="0"+n;return n+=Ts(e).substring(4),"0x"+n}function Is(t){return t==="0x"?null:q(t)}function Ua(t,e){try{return Rr(t)}catch(n){v(!1,n.message,e,t)}}function D1(t,e){try{if(!Array.isArray(t))throw new Error("authorizationList: invalid array");const n=[];for(let r=0;r[e.address,e.storageKeys])}function M1(t){return t.map(e=>[Z(e.chainId,"chainId"),e.address,Z(e.nonce,"nonce"),Z(e.signature.yParity,"yParity"),Ne(e.signature.r),Ne(e.signature._s)])}function _1(t,e){v(Array.isArray(t),`invalid ${e}`,"value",t);for(let n=0;no.data),n.map(o=>o.commitment),i])])}return ce(["0x03",hn([r,n.map(s=>s.data),n.map(s=>s.commitment),n.map(s=>s.proof)])])}return ce(["0x03",hn(r)])}function W1(t){const e=Mi(Q(t).slice(1));v(Array.isArray(e)&&(e.length===10||e.length===13),"invalid field count for transaction type: 4","data",R(t));const n={type:4,chainId:te(e[0],"chainId"),nonce:Br(e[1],"nonce"),maxPriorityFeePerGas:te(e[2],"maxPriorityFeePerGas"),maxFeePerGas:te(e[3],"maxFeePerGas"),gasPrice:null,gasLimit:te(e[4],"gasLimit"),to:Is(e[5]),value:te(e[6],"value"),data:R(e[7]),accessList:Ua(e[8],"accessList"),authorizationList:D1(e[9],"authorizationList")};return e.length===10||Ma(n,e.slice(10)),n}function Z1(t,e){const n=[Z(t.chainId,"chainId"),Z(t.nonce,"nonce"),Z(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),Z(t.maxFeePerGas||0,"maxFeePerGas"),Z(t.gasLimit,"gasLimit"),t.to||"0x",Z(t.value,"value"),t.data,Da(t.accessList||[]),M1(t.authorizationList||[])];return e&&(n.push(Z(e.yParity,"yParity")),n.push(Ne(e.r)),n.push(Ne(e.s))),ce(["0x04",hn(n)])}class Bt{#e;#t;#n;#r;#s;#o;#i;#a;#f;#u;#p;#m;#l;#c;#d;#h;#w;#g;get type(){return this.#e}set type(e){switch(e){case null:this.#e=null;break;case 0:case"legacy":this.#e=0;break;case 1:case"berlin":case"eip-2930":this.#e=1;break;case 2:case"london":case"eip-1559":this.#e=2;break;case 3:case"cancun":case"eip-4844":this.#e=3;break;case 4:case"pectra":case"eip-7702":this.#e=4;break;default:v(!1,"unsupported transaction type","type",e)}}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559";case 3:return"eip-4844";case 4:return"eip-7702"}return null}get to(){const e=this.#t;return e==null&&this.type===3?Si:e}set to(e){this.#t=e==null?null:q(e)}get nonce(){return this.#r}set nonce(e){this.#r=G(e,"value")}get gasLimit(){return this.#s}set gasLimit(e){this.#s=U(e)}get gasPrice(){const e=this.#o;return e==null&&(this.type===0||this.type===1)?Ie:e}set gasPrice(e){this.#o=e==null?null:U(e,"gasPrice")}get maxPriorityFeePerGas(){const e=this.#i;return e??(this.type===2||this.type===3?Ie:null)}set maxPriorityFeePerGas(e){this.#i=e==null?null:U(e,"maxPriorityFeePerGas")}get maxFeePerGas(){const e=this.#a;return e??(this.type===2||this.type===3?Ie:null)}set maxFeePerGas(e){this.#a=e==null?null:U(e,"maxFeePerGas")}get data(){return this.#n}set data(e){this.#n=R(e)}get value(){return this.#f}set value(e){this.#f=U(e,"value")}get chainId(){return this.#u}set chainId(e){this.#u=U(e)}get signature(){return this.#p||null}set signature(e){this.#p=e==null?null:de.from(e)}isValid(){const e=this.signature;if(e&&!e.isValid())return!1;const n=this.authorizationList;if(n){for(const r of n)if(!r.signature.isValid())return!1}return!0}get accessList(){const e=this.#m||null;return e??(this.type===1||this.type===2||this.type===3?[]:null)}set accessList(e){this.#m=e==null?null:Rr(e)}get authorizationList(){const e=this.#w||null;return e==null&&this.type===4?[]:e}set authorizationList(e){this.#w=e==null?null:e.map(n=>Hg(n))}get maxFeePerBlobGas(){const e=this.#l;return e==null&&this.type===3?Ie:e}set maxFeePerBlobGas(e){this.#l=e==null?null:U(e,"maxFeePerBlobGas")}get blobVersionedHashes(){let e=this.#c;return e==null&&this.type===3?[]:e}set blobVersionedHashes(e){if(e!=null){v(Array.isArray(e),"blobVersionedHashes must be an Array","value",e),e=e.slice();for(let n=0;nObject.assign({},e))}set blobs(e){if(e==null){this.#h=null;return}const n=[],r=[];for(let s=0;s=0?2:e.pop()}inferTypes(){const e=this.gasPrice!=null,n=this.maxFeePerGas!=null||this.maxPriorityFeePerGas!=null,r=this.accessList!=null,s=this.#l!=null||this.#c;this.maxFeePerGas!=null&&this.maxPriorityFeePerGas!=null&&N(this.maxFeePerGas>=this.maxPriorityFeePerGas,"priorityFee cannot be more than maxFee","BAD_DATA",{value:this}),N(!n||this.type!==0&&this.type!==1,"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas","BAD_DATA",{value:this}),N(this.type!==0||!r,"legacy transaction cannot have accessList","BAD_DATA",{value:this});const i=[];return this.type!=null?i.push(this.type):this.authorizationList&&this.authorizationList.length?i.push(4):n?i.push(2):e?(i.push(1),r||i.push(0)):r?(i.push(1),i.push(2)):(s&&this.to||(i.push(0),i.push(1),i.push(2)),i.push(3)),i.sort(),i}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}clone(){return Bt.from(this)}toJSON(){const e=n=>n==null?null:n.toString();return{type:this.type,to:this.to,data:this.data,nonce:this.nonce,gasLimit:e(this.gasLimit),gasPrice:e(this.gasPrice),maxPriorityFeePerGas:e(this.maxPriorityFeePerGas),maxFeePerGas:e(this.maxFeePerGas),value:e(this.value),chainId:e(this.chainId),sig:this.signature?this.signature.toJSON():null,accessList:this.accessList}}[F1](){return this.toString()}toString(){const e=[],n=s=>{let i=this[s];typeof i=="string"&&(i=JSON.stringify(i)),e.push(`${s}: ${i}`)};this.type&&n("type"),n("to"),n("data"),n("nonce"),n("gasLimit"),n("value"),this.chainId!=null&&n("chainId"),this.signature&&(n("from"),e.push(`signature: ${this.signature.toString()}`));const r=this.authorizationList;if(r){const s=[];for(const i of r){const o=[];o.push(`address: ${JSON.stringify(i.address)}`),i.nonce!=null&&o.push(`nonce: ${i.nonce}`),i.chainId!=null&&o.push(`chainId: ${i.chainId}`),i.signature&&o.push(`signature: ${i.signature.toString()}`),s.push(`Authorization { ${o.join(", ")} }`)}e.push(`authorizations: [ ${s.join(", ")} ]`)}return`Transaction { ${e.join(", ")} }`}static from(e){if(e==null)return new Bt;if(typeof e=="string"){const r=Q(e);if(r[0]>=127)return Bt.from(z1(r));switch(r[0]){case 1:return Bt.from(V1(r));case 2:return Bt.from(G1(r));case 3:return Bt.from(K1(r));case 4:return Bt.from(W1(r))}N(!1,"unsupported transaction type","UNSUPPORTED_OPERATION",{operation:"from"})}const n=new Bt;return e.type!=null&&(n.type=e.type),e.to!=null&&(n.to=e.to),e.nonce!=null&&(n.nonce=e.nonce),e.gasLimit!=null&&(n.gasLimit=e.gasLimit),e.gasPrice!=null&&(n.gasPrice=e.gasPrice),e.maxPriorityFeePerGas!=null&&(n.maxPriorityFeePerGas=e.maxPriorityFeePerGas),e.maxFeePerGas!=null&&(n.maxFeePerGas=e.maxFeePerGas),e.maxFeePerBlobGas!=null&&(n.maxFeePerBlobGas=e.maxFeePerBlobGas),e.data!=null&&(n.data=e.data),e.value!=null&&(n.value=e.value),e.chainId!=null&&(n.chainId=e.chainId),e.signature!=null&&(n.signature=de.from(e.signature)),e.accessList!=null&&(n.accessList=e.accessList),e.authorizationList!=null&&(n.authorizationList=e.authorizationList),e.blobVersionedHashes!=null&&(n.blobVersionedHashes=e.blobVersionedHashes),e.kzg!=null&&(n.kzg=e.kzg),e.blobWrapperVersion!=null&&(n.blobWrapperVersion=e.blobWrapperVersion),e.blobs!=null&&(n.blobs=e.blobs),e.hash!=null&&(v(n.isSigned(),"unsigned transaction cannot define '.hash'","tx",e),v(n.hash===e.hash,"hash mismatch","tx",e)),e.from!=null&&(v(n.isSigned(),"unsigned transaction cannot define '.from'","tx",e),v(n.from.toLowerCase()===(e.from||"").toLowerCase(),"from mismatch","tx",e)),n}}function kr(t){return ke(dn(t))}var Y1="AEEUdwmgDS8BxQKKAP4BOgDjATAAngDUAIMAoABoAOAAagCOAEQAhABMAHIAOwA9ACsANgAmAGIAHgAuACgAJwAXAC0AGgAjAB8ALwAUACkAEgAeAAkAGwARABkAFgA5ACgALQArADcAFQApABAAHgAiABAAGgAeABMAGAUhBe8BFxREN8sF2wC5AK5HAW8ArQkDzQCuhzc3NzcBP68NEfMABQdHBuw5BV8FYAA9MzkI9r4ZBg7QyQAWA9CeOwLNCjcCjqkChuA/lm+RAsXTAoP6ASfnEQDytQFJAjWVCkeXAOsA6godAB/cwdAUE0WlBCN/AQUCQRjFD/MRBjHxDQSJbw0jBzUAswBxme+tnIcAYwabAysG8QAjAEMMmxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfBC0D3x4BJQDBGdUFAhEgVD8JnwmQJiNWYUzrg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2ChglX1UDYD30ABsAFAAdABZzIGRAnwDD8wAjAEEMzRbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9AMMVbwLpABM1NJEX0ZkCgYMBEyMAxRVvAukAEzUBUFAtmUwSAy4DBTER33EftQHfSwB5MxJ/AjkWKQLzL8E/cwBB6QH9LQDPDtO9ASNriQC5DQANAwCK21EFI91zHwCoL9kBqQcHBwcHKzUDowBvAQohPvU3fAQgHwCyAc8CKQMA5zMSezr7ULgFmDp/LzVQBgEGAi8FYQVgt8AFcTtlQhpCWEmfe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEzmXgIHwABIAGQA8AEUAQDt3gdvIEGcQZAkGTRFMdEIVEwK0D64L7REdDNkq09PgADSxB/MDWwfzA1sDWwfzB/MDWwfzA1sDWwNbA1scEvAi28gQZw9QBHUFlgWTBN4IiyZREYkHMAjaVBV0JhxPA00BBCMtSSQ7mzMTJUpMFE0LCAQ2SmyvfUADTzGzVP2QqgPTMlc5dAkGHnkSqAAyD3skNb1OhnpPcagKU0+2tYdJak5vAsY6sEAACikJm2/Dd1YGRRAfJ6kQ+ww3AbkBPw3xS9wE9QY/BM0fgRkdD9GVoAipLeEM8SbnLqWAXiP5KocF8Uv4POELUVFsD10LaQnnOmeBUgMlAREijwrhDT0IcRD3Cs1vDekRSQc9A9lJngCpBwULFR05FbkmFGKwCw05ewb/GvoLkyazEy17AAXXGiUGUQEtGwMA0y7rhbRaNVwgT2MGBwspI8sUrFAkDSlAu3hMGh8HGSWtApVDdEqLUToelyH6PEENai4XUYAH+TwJGVMLhTyiRq9FEhHWPpE9TCJNTDAEOYMsMyePCdMPiQy9fHYBXQklCbUMdRM1ERs3yQg9Bx0xlygnGQglRplgngT7owP3E9UDDwVDCUUHFwO5HDETMhUtBRGBKNsC9zbZLrcCk1aEARsFzw8pH+MQVEfkDu0InwJpA4cl7wAxFSUAGyKfCEdnAGOP3FMJLs8Iy2pwI3gDaxTrZRF3B5UOWwerHDcVwxzlcMxeD4YMKKezCV8BeQmdAWME5wgNNV+MpCBFZ1eLXBifIGVBQ14AAjUMaRWjRMGHfAKPD28SHwE5AXcHPQ0FAnsR8RFvEJkI74YINbkz/DopBFMhhyAVCisDU2zSCysm/Qz8bQGnEmYDEDRBd/Jnr2C6KBgBBx0yyUFkIfULlk/RDKAaxRhGVDIZ6AfDA/ca9yfuQVsGAwOnBxc6UTPyBMELbQiPCUMATQ6nGwfbGG4KdYzUATWPAbudA1uVhwJzkwY7Bw8Aaw+LBX3pACECqwinAAkA0wNbAD0CsQehAB0AiUUBQQMrMwEl6QKTA5cINc8BmTMB9y0EH8cMGQD7O25OAsO1AoBuZqYF4VwCkgJNOQFRKQQJUktVA7N15QDfAE8GF+NLARmvTs8e50cB43MvAMsA/wAJOQcJRQHRAfdxALsBYws1Caa3uQFR7S0AhwAZbwHbAo0A4QA5AIP1AVcAUQVd/QXXAlNNARU1HC9bZQG/AyMBNwERAH0Gz5GpzQsjBHEH1wIQHxXlAu8yB7kFAyLjE9FCyQK94lkAMhoKPAqrCqpgX2Q3CjV2PVQAEh+sPss/UgVVO1c7XDtXO1w7VztcO1c7XDtXO1wDm8Pmw+YKcF9JYe8Mqg3YRMw6TRPfYFVgNhPMLbsUxRXSJVoZQRrAJwkl6FUNDwgt12Y0CDA0eRfAAEMpbINFY4oeNApPHOtTlVT8LR8AtUumM7MNsBsZREQFS3XxYi4WEgomAmSFAmJGX1GzAV83JAKh+wJonAJmDQKfiDgfDwJmPwJmKgRyBIMDfxcDfpY5Cjl7GzmGOicnAmwhAjI6OA4CbcsCbbLzjgM3a0kvAWsA4gDlAE4JB5wMkQECD8YAEbkCdzMCdqZDAnlPRwJ4viFg30WyRvcCfEMCeswCfQ0CfPRIBEiBZygALxlJXEpfGRtK0ALRBQLQ0EsrA4hTA4fqRMmRNgLypV0HAwOyS9JMMSkH001QTbMCi0MCitzFHwshR2sJuwKOOwKOYESbhQKO3QKOYHxRuFM5AQ5S2FSJApP/ApMQAO0AIFUiVbNV1AosHymZijLleGpFPz0Cl6MC77ZYJawAXSkClpMCloCgAK1ZsFoNhVEAPwKWuQKWUlxIXNUCmc8CmWhczl0LHQKcnznGOqECnBoCn58CnryOACETNS4TAp31Ap6WALlBYThh8wKe1wKgcgGtAp6jIwKeUqljzGQrKS8CJ7MCJoICoP8CoFDbAqYzAqXSAqgDAIECp/ZogGi1AAdNaiBq1QKs5wKssgKtawKtBgJXIQJV4AKx5dsDH1JsmwKywRECsuwbbORtZ21MYwMl0QK2YD9DbpQDKUkCuGICuUsZArkue3A6cOUCvR0DLbYDMhUCvoxyBgMzdQK+HnMmc1MCw88CwwhzhnRPOUl05AM8qwEDPJ4DPcMCxYACxksCxhSNAshtVQLISALJUwLJMgJkoQLd1nh9ZXiyeSlL1AMYp2cGAmH4GfeVKHsPXpZevxUCz28Cz3AzT1fW9xejAMqxAs93AS3uA04Wfk8JAtwrAtuOAtJTA1JgA1NjAQUDVZCAjUMEzxrxZEl5A4LSg5EC2ssC2eKEFIRNp0ADhqkAMwNkEoZ1Xf0AWQLfaQLevHd7AuIz7RgB8zQrAfSfAfLWiwLr9wLpdH0DAur9AuroAP1LAb0C7o0C66CWrpcHAu5DA4XkmH1w5HGlAvMHAG0DjhqZlwL3FwORcgOSiwL3nAL53QL4apogmq+/O5siA52HAv7+AR8APZ8gAZ+3AwWRA6ZuA6bdANXJAwZuoYyiCQ0DDE0BEwEjB3EGZb1rCQC/BG/DFY8etxEAG3k9ACcDNxJRA42DAWcrJQCM8wAlAOanC6OVCLsGI6fJBgCvBRnDBvElRUYFFoAFcD9GSDNCKUK8X3kZX8QAls0FOgCQVCGbwTsuYDoZutcONxjOGJHJ/gVfBWAFXwVgBWsFYAVfBWAFXwVgBV8FYAVfBWBOHQjfjW8KCgoKbF7xMwTRA7kGN8PDAMMEr8MA70gxFroFTj5xPnhCR0K+X30/X/AAWBkzswCNBsxzzASm70aCRS4rDDMeLz49fnXfcsH5GcoscQFz13Y4HwVnBXLJycnACNdRYwgICAqEXoWTxgA7P4kACxbZBu21Kw0AjMsTAwkVAOVtJUUsJ1JCuULESUArXy9gPi9AKwnJRQYKTD9LPoA+iT54PnkCkULEUUpDX9NWV3JVEjQAc1w3A3IBE3YnX+g7QiMJb6MKaiszRCUuQrNCxDPMCcwEX9EWJzYREBEEBwIHKn6l33JCNVIfybPJtAltydPUCmhBZw/tEKsZAJOVJU1CLRuxbUHOQAo7P0s+eEJHHA8SJVRPdGM0NVrpvBoKhfUlM0JHHGUQUhEWO1xLSj8MO0ucNAqJIzVCRxv9EFsqKyA4OQgNj2nwZgp5ZNFgE2A1K3YHS2AhQQojJmC7DgpzGG1WYFUZCQYHZO9gHWCdYIVgu2BTYJlwFh8GvRbcXbG8YgtDHrMBwzPVyQonHQgkCyYBgQJ0Ajc4nVqIAwGSCsBPIgDsK3SWEtIVBa5N8gGjAo+kVwVIZwD/AEUSCDweX4ITrRQsJ8K3TwBXFDwEAB0TvzVcAtoTS20RIwDgVgZ9BBImYgA5AL4Coi8LFnezOkCnIQFjAY4KBAPh9RcGsgZSBsEAJctdsWIRu2kTkQstRw7DAcMBKgpPBGIGMDAwKCYnKTQaLg4AKRSVAFwCdl+YUZ0JdicFD3lPAdt1F9ZZKCGxuE3yBxkFVGcA/wBFEgiCBwAOLHQSjxOtQDg1z7deFRMAZ8QTAGtKb1ApIiPHADkAvgKiLy1DFtYCmBiDAlDDWNB0eo7fpaMO/aEVRRv0ATEQZBIODyMEAc8JQhCbDRgzFD4TAEMAu9YBCgCsAOkAm5I3ABwAYxvONnR+MhXJAxgKQyxL2+kkJhMbhQKDBMkSsvF0AD9BNQ6uQC7WqSQHwxEAEEIu1hkhAH2z4iQPwyJPHNWpdyYBRSpnJALzoBAEVPPsH20MxA0CCEQKRgAFyAtFAlMNwwjEDUQJRArELtapMg7DDZgJIw+TGukEIwvDFkMAqAtDEMMMBhioe+QAO3MMRAACrgnEBSPY9Q0FDnbSBoMAB8MSYxkSxAEJAPIJAAB8FWMOFtMc/HcXwxhDAC7DAvOowwAewwJdKDKHAAHDAALrFUQVwwAbwyvzpWMWv8wA/ABpAy++bcYDUKPD0KhDCwKmJ1MAAmMA5+UZwxAagwipBRL/eADfw6fDGOMCGsOjk3l6BwOpo4sAEsMOGxMAA5sAbcMOAAvDp0MJGkMDwgipnNIPAwfIqUMGAOGDAAPzABXDAAcDAAnDAGmTABrDAA7DChjDjnEWAwABYwAOcwAuUyYABsMAF8MIKQANUgC6wy4AA8MADqMq8wCyYgAcIwAB8wqpAAXOCx0V4wAHowBCwwEKAGnDAAuDAB3DAAjDCakABdIAbqcZ3QCZCCkABdIAAAFDAAfjAB2jCCkABqIACYMAGzMAbSMA5sOIAAhjAAhDABTDBAkpAAbSAOOTAAlDC6kOzPtnAAdDAG6kQFAATwAKwwwAA0MACbUDPwAHIwAZgwACE6cDAAojAApDAAoDp/MGwwAJIwADEwAQQwgAFEMAEXMAD5MADfMADcMAGRMOFiMAFUMAbqMWuwHDAMIAE0MLAGkzEgDhUwACQwAEWgAXgwUjAAbYABjDBSYBgzBaAEFNALcQBxUMegAwMngBrA0IZgJ0KxQHBREPd1N0ZzKRJwaIHAZqNT4DqQq8BwngAB4DAwt2AX56T1ocKQNXAh1GATQGC3tOxYNagkgAMQA5CQADAQEAWxLjAIOYNAEzAH7tFRk6TglSAF8NAAlYAQ+S1ACAQwQorQBiAN4dAJ1wPyeTANVzuQDX3AIeEMp9eyMgXiUAEdkBkJizKltbVVAaRMqRAAEAhyQ/SDEz6BmfVwB6ATEsOClKIRcDOF0E/832AFNt5AByAnkCRxGCOs94NjXdAwINGBonDBwPALW2AwICAgAAAAAAAAYDBQMDARrUAwAtAAAAAgEGBgYGBgYFBQUFBQUEBQYHCAkEBQUFBQQAAAICAAAAIgCNAJAAlT0A6gC7ANwApEQAwgCyAK0AqADuAKYA2gCjAOcBCAEDAMcAgQBiANIA1AEDAN4A8gCQAKkBMQDqAN8A3AsBCQ8yO9ra2tq8xuLT1tRJOB0BUgFcNU0BWgFpAWgBWwFMUUlLbhMBUxsNEAs6PhMOACcUKy0vMj5AQENDQ0RFFEYGJFdXV1dZWVhZL1pbXVxcI2NnZ2ZoZypsbnZ1eHh4eHh4enp6enp6enp6enp8fH18e2IARPIASQCaAHgAMgBm+ACOAFcAVwA3AnbvAIsABfj4AGQAk/IAnwBPAGIAZP//sACFAIUAaQBWALEAJAC2AIMCQAJDAPwA5wD+AP4A6AD/AOkA6QDoAOYALwJ7AVEBQAE+AVQBPgE+AT4BOQE4ATgBOAEcAVgXADEQCAEAUx8SHgsdHhYAjgCWAKYAUQBqIAIxAHYAbwCXAxUDJzIDIUlGTzEAkQJPAMcCVwKkAMAClgKWApYClgKWApYCiwKWApYClgKWApYClgKVApUCmAKgApcClgKWApQClAKUApQCkgKVAnUB1AKXAp8ClgKWApUeAIETBQD+DQOfAmECOh8BVBg9AuIZEjMbAU4/G1WZAXusRAFpYQEFA0FPAQYAmTEeIJdyADFoAHEANgCRA5zMk/C2jGINwjMWygIZCaXdfDILBCs5dAE7YnQBugDlhoiHhoiGiYqKhouOjIaNkI6Ij4qQipGGkoaThpSSlYaWhpeKmIaZhpqGm4aci52QnoqfhuIC4XTpAt90AIp0LHSoAIsAdHQEQwRABEIERQRDBEkERgRBBEcESQRIBEQERgRJAJ5udACrA490ALxuAQ10ANFZdHQA13QCFHQA/mJ0AP4BIQD+APwA/AD9APwDhGZ03ASMK23HAP4A/AD8AP0A/CR0dACRYnQA/gCRASEA/gCRAvQA/gCRA4RmdNwEjCttxyR0AP9idAEhAP4A/gD8APwA/QD8AP8A/AD8AP0A/AOEZnTcBIwrbcckdHQAkWJ0ASEA/gCRAP4AkQL0AP4AkQOEZnTcBIwrbcckdAJLAT50AlIBQXQCU8l0dAJfdHQDpgL0A6YDpgOnA6cDpwOnA4RmdNwEjCttxyR0dACRYnQBIQOmAJEDpgCRAvQDpgCRA4RmdNwEjCttxyR0BDh0AJEEOQCRDpU5dSgCADR03gV2CwArdAEFAM5iCnR0AF1iAAYcOgp0dACRCnQAXAEIwWZ0CnRmdHQAkWZ0CnRmdEXgAFF03gp0dEY0tlT2u3SOAQTwscwhjZZKrhYcBSfFp9XNbKiVDOD2b+cpe4/Z17mQnbtzzhaeQtE2GGj0IDNTjRUSyTxxw/RPHW/+vS7d1NfRt9z9QPZg4X7QFfhCnkvgNPIItOsC2eV6hPannZNHlZ9xrwZXIMOlu3jSoQSq78WEjwLjw1ELSlF1aBvfzwk5ZX7AUvQzjPQKbDuQ+sm4wNOp4A6AdVuRS0t1y/DZpg4R6m7FNjM9HgvW7Bi88zaMjOo6lM8wtBBdj8LP4ylv3zCXPhebMKJc066o9sF71oFW/8JXu86HJbwDID5lzw5GWLR/LhT0Qqnp2JQxNZNfcbLIzPy+YypqRm/lBmGmex+82+PisxUumSeJkALIT6rJezxMH+CTJmQtt5uwTVbL3ptmjDUQzlSIvWi8Tl7ng1NpuRn1Ng4n14Qc+3Iil7OwkvNWogLSPkn3pihIFytyIGmMhOe3n1tWsuMy9BdKyqF4Z3v2SgggTL9KVvMXPnCbRe+oOuFFP3HejBG/w9gvmfNYvg6JuWia2lcSSN1uIjBktzoIazOHPJZ7kKHPz8mRWVdW3lA8WGF9dQF6Bm673boov3BUWDU2JNcahR23GtfHKLOz/viZ+rYnZFaIznXO67CYEJ1fXuTRpZhYZkKe54xeoagkNGLs+NTZHE0rX45/XvQ2RGADX6vcAvdxIUBV27wxGm2zjZo4X3ILgAlrOFheuZ6wtsvaIj4yLY7qqawlliaIcrz2G+c3vscAnCkCuMzMmZvMfu9lLwTvfX+3cVSyPdN9ZwgDZhfjRgNJcLiJ67b9xx8JHswprbiE3v9UphotAPIgnXVIN5KmMc0piXhc6cChPnN+MRhG9adtdttQTTwSIpl8I4/j//d3sz1326qTBTpPRM/Hgh3kzqEXs8ZAk4ErQhNO8hzrQ0DLkWMA/N+91tn2MdOJnWC2FCZehkQrwzwbKOjhvZsbM95QoeL9skYyMf4srVPVJSgg7pOLUtr/n9eT99oe9nLtFRpjA9okV2Kj8h9k5HaC0oivRD8VyXkJ81tcd4fHNXPCfloIQasxsuO18/46dR2jgul/UIet2G0kRvnyONMKhHs6J26FEoqSqd+rfYjeEGwHWVDpX1fh1jBBcKGMqRepju9Y00mDVHC+Xdij/j44rKfvfjGinNs1jO/0F3jB83XCDINN/HB84axlP+3E/klktRo+vl3U/aiyMJbIodE1XSsDn6UAzIoMtUObY2+k/4gY/l+AkZJ5Sj2vQrkyLm3FoxjhDX+31UXBFf9XrAH31fFqoBmDEZvhvvpnZ87N+oZEu7U9O/nnk+QWj3x8uyoRbEnf+O5UMr9i0nHP38IF5AvzrBW8YWBUR0mIAzIvndQq9N3v/Jto3aPjPXUPl8ASdPPyAp7jENf8bk7VMM9ol9XGmlBmeDMuGqt+WzuL6CXAxXjIhCPM5vACchgMJ/8XBGLO/D1isVvGhwwHHr1DLaI5mn2Jr/b1pUD90uciDaS8cXNDzCWvNmT/PhQe5e8nTnnnkt8Ds/SIjibcum/fqDhKopxAY8AkSrPn+IGDEKOO+U3XOP6djFs2H5N9+orhOahiQk5KnEUWa+CzkVzhp8bMHRbg81qhjjXuIKbHjSLSIBKWqockGtKinY+z4/RdBUF6pcc3JmnlxVcNgrI4SEzKUZSwcD2QCyxzKve+gAmg6ZuSRkpPFa6mfThu7LJNu3H5K42uCpNvPAsoedolKV/LHe/eJ+BbaG5MG0NaSGVPRUmNFMFFSSpXEcXwbVh7UETOZZtoVNRGOIbbkig3McEtR68cG0RZAoJevWYo7Dg/lZ1CQzblWeUvVHmr8fY4Nqd9JJiH/zEX24mJviH60fAyFr0A3c4bC1j3yZU60VgJxXn8JgJXLUIsiBnmKmMYz+7yBQFBvqb2eYnuW59joZBf56/wXvWIR4R8wTmV80i1mZy+S4+BUES+hzjk0uXpC///z/IlqHZ1monzlXp8aCfhGKMti73FI1KbL1q6IKO4fuBuZ59gagjn5xU79muMpHXg6S+e+gDM/U9BKLHbl9l6o8czQKl4RUkJJiqftQG2i3BMg/TQlUYFkJDYBOOvAugYuzYSDnZbDDd/aSd9x0Oe6F+bJcHfl9+gp6L5/TgA+BdFFovbfCrQ40s5vMPw8866pNX8zyFGeFWdxIpPVp9Rg1UPOVFbFZrvaFq/YAzHQgqMWpahMYfqHpmwXfHL1/kpYmGuHFwT55mQu0dylfNuq2Oq0hTMCPwqfxnuBIPLXfci4Y1ANy+1CUipQxld/izVh16WyG2Q0CQQ9NqtAnx1HCHwDj7sYxOSB0wopZSnOzxQOcExmxrVTF2BkOthVpGfuhaGECfCJpJKpjnihY+xOT2QJxN61+9K6QSqtv2Shr82I3jgJrqBg0wELFZPjvHpvzTtaJnLK6Vb97Yn933koO/saN7fsjwNKzp4l2lJVx2orjCGzC/4ZL4zCver6aQYtC5sdoychuFE6ufOiog+VWi5UDkbmvmtah/3aArEBIi39s5ILUnlFLgilcGuz9CQshEY7fw2ouoILAYPVT/gyAIq3TFAIwVsl+ktkRz/qGfnCDGrm5gsl/l9QdvCWGsjPz3dU7XuqKfdUrr/6XIgjp4rey6AJBmCmUJMjITHVdFb5m1p+dLMCL8t55zD42cmftmLEJC0Da04YiRCVUBLLa8D071/N5UBNBXDh0LFsmhV/5B5ExOB4j3WVG/S3lfK5o+V6ELHvy6RR9n4ac+VsK4VE4yphPvV+kG9FegTBH4ZRXL2HytUHCduJazB/KykjfetYxOXTLws267aGOd+I+JhKP//+VnXmS90OD/jvLcVu0asyqcuYN1mSb6XTlCkqv1vigZPIYwNF/zpWcT1GR/6aEIRjkh0yhg4LXJfaGobYJTY4JI58KiAKgmmgAKWdl5nYCeLqavRJGQNuYuZtZFGx+IkI4w4NS2xwbetNMunOjBu/hmKCI/w7tfiiyUd//4rbTeWt4izBY8YvGIN6vyKYmP/8X8wHKCeN+WRcKM70+tXKNGyevU9H2Dg5BsljnTf8YbsJ1TmMs74Ce2XlHisleguhyeg44rQOHZuw/6HTkhnnurK2d62q6yS7210SsAIaR+jXMQA+svkrLpsUY+F30Uw89uOdGAR6vo4FIME0EfVVeHTu6eKicfhSqOeXJhbftcd08sWEnNUL1C9fnprTgd83IMut8onVUF0hvqzZfHduPjbjwEXIcoYmy+P6tcJZHmeOv6VrvEdkHDJecjHuHeWANe79VG662qTjA/HCvumVv3qL+LrOcpqGps2ZGwQdFJ7PU4iuyRlBrwfO+xnPyr47s2cXVbWzAyznDiBGjCM3ksxjjqM62GE9C8f5U38kB3VjtabKp/nRdvMESPGDG90bWRLAt1Qk5DyLuazRR1YzdC1c+hZXvAWV8xA72S4A8B67vjVhbba3MMop293FeEXpe7zItMWrJG/LOH9ByOXmYnNJfjmfuX9KbrpgLOba4nZ+fl8Gbdv/ihv+6wFGKHCYrVwmhFC0J3V2bn2tIB1wCc1CST3d3X2OyxhguXcs4sm679UngzofuSeBewMFJboIQHbUh/m2JhW2hG9DIvG2t7yZIzKBTz9wBtnNC+2pCRYhSIuQ1j8xsz5VvqnyUIthvuoyyu7fNIrg/KQUVmGQaqkqZk/Vx5b33/gsEs8yX7SC1J+NV4icz6bvIE7C5G6McBaI8rVg56q5QBJWxn/87Q1sPK4+sQa8fLU5gXo4paaq4cOcQ4wR0VBHPGjKh+UlPCbA1nLXyEUX45qZ8J7/Ln4FPJE2TdzD0Z8MLSNQiykMMmSyOCiFfy84Rq60emYB2vD09KjYwsoIpeDcBDTElBbXxND72yhd9pC/1CMid/5HUMvAL27OtcIJDzNKpRPNqPOpyt2aPGz9QWIs9hQ9LiX5s8m9hjTUu/f7MyIatjjd+tSfQ3ufZxPpmJhTaBtZtKLUcfOCUqADuO+QoH8B9v6U+P0HV1GLQmtoNFTb3s74ivZgjES0qfK+8RdGgBbcCMSy8eBvh98+et1KIFqSe1KQPyXULBMTsIYnysIwiZBJYdI20vseV+wuJkcqGemehKjaAb9L57xZm3g2zX0bZ2xk/fU+bCo7TlnbW7JuF1YdURo/2Gw7VclDG1W7LOtas2LX4upifZ/23rzpsnY/ALfRgrcWP5hYmV9VxVOQA1fZvp9F2UNU+7d7xRyVm5wiLp3/0dlV7vdw1PMiZrbDAYzIVqEjRY2YU03sJhPnlwIPcZUG5ltL6S8XCxU1eYS5cjr34veBmXAvy7yN4ZjArIG0dfD/5UpBNlX1ZPoxJOwyqRi3wQWtOzd4oNKh0LkoTm8cwqgIfKhqqGOhwo71I+zXnMemTv2B2AUzABWyFztGgGULjDDzWYwJUVBTjKCn5K2QGMK1CQT7SzziOjo+BhAmqBjzuc3xYym2eedGeOIRJVyTwDw37iCMe4g5Vbnsb5ZBdxOAnMT7HU4DHpxWGuQ7GeiY30Cpbvzss55+5Km1YsbD5ea3NI9QNYIXol5apgSu9dZ8f8xS5dtHpido5BclDuLWY4lhik0tbJa07yJhH0BOyEut/GRbYTS6RfiTYWGMCkNpfSHi7HvdiTglEVHKZXaVhezH4kkXiIvKopYAlPusftpE4a5IZwvw1x/eLvoDIh/zpo9FiQInsTb2SAkKHV42XYBjpJDg4374XiVb3ws4qM0s9eSQ5HzsMU4OZJKuopFjBM+dAZEl8RUMx5uU2N486Kr141tVsGQfGjORYMCJAMsxELeNT4RmWjRcpdTGBwcx6XN9drWqPmJzcrGrH4+DRc7+n1w3kPZwu0BkNr6hQrqgo7JTB9A5kdJ/H7P4cWBMwsmuixAzJB3yrQpnGIq90lxAXLzDCdn1LPibsRt7rHNjgQBklRgPZ8vTbjXdgXrTWQsK5MdrXXQVPp0Rinq3frzZKJ0qD6Qhc40VzAraUXlob1gvkhK3vpmHgI6FRlQZNx6eRqkp0zy4AQlX813fAPtL3jMRaitGFFjo0zmErloC+h+YYdVQ6k4F/epxAoF0BmqEoKNTt6j4vQZNQ2BoqF9Vj53TOIoNmDiu9Xp15RkIgQIGcoLpfoIbenzpGUAtqFJp5W+LLnx38jHeECTJ/navKY1NWfN0sY1T8/pB8kIH3DU3DX+u6W3YwpypBMYOhbSxGjq84RZ84fWJow8pyHqn4S/9J15EcCMsXqrfwyd9mhiu3+rEo9pPpoJkdZqHjra4NvzFwuThNKy6hao/SlLw3ZADUcUp3w3SRVfW2rhl80zOgTYnKE0Hs2qp1J6H3xqPqIkvUDRMFDYyRbsFI3M9MEyovPk8rlw7/0a81cDVLmBsR2ze2pBuKb23fbeZC0uXoIvDppfTwIDxk1Oq2dGesGc+oJXWJLGkOha3CX+DUnzgAp9HGH9RsPZN63Hn4RMA5eSVhPHO+9RcRb/IOgtW31V1Q5IPGtoxPjC+MEJbVlIMYADd9aHYWUIQKopuPOHmoqSkubnAKnzgKHqgIOfW5RdAgotN6BN+O2ZYHkuemLnvQ8U9THVrS1RtLmKbcC7PeeDsYznvqzeg6VCNwmr0Yyx1wnLjyT84BZz3EJyCptD3yeueAyDWIs0L2qs/VQ3HUyqfrja0V1LdDzqAikeWuV4sc7RLIB69jEIBjCkyZedoUHqCrOvShVzyd73OdrJW0hPOuQv2qOoHDc9xVb6Yu6uq3Xqp2ZaH46A7lzevbxQEmfrzvAYSJuZ4WDk1Hz3QX1LVdiUK0EvlAGAYlG3Md30r7dcPN63yqBCIj25prpvZP0nI4+EgWoFG95V596CurXpKRBGRjQlHCvy5Ib/iW8nZJWwrET3mgd6mEhfP4KCuaLjopWs7h+MdXFdIv8dHQJgg1xi1eYqB0uDYjxwVmri0Sv5XKut/onqapC+FQiC2C1lvYJ9MVco6yDYsS3AANUfMtvtbYI2hfwZatiSsnoUeMZd34GVjkMMKA+XnjJpXgRW2SHTZplVowPmJsvXy6w3cfO1AK2dvtZEKTkC/TY9LFiKHCG0DnrMQdGm2lzlBHM9iEYynH2UcVMhUEjsc0oDBTgo2ZSQ1gzkAHeWeBXYFjYLuuf8yzTCy7/RFR81WDjXMbq2BOH5dURnxo6oivmxL3cKzKInlZkD31nvpHB9Kk7GfcfE1t+1V64b9LtgeJGlpRFxQCAqWJ5DoY77ski8gsOEOr2uywZaoO/NGa0X0y1pNQHBi3b2SUGNpcZxDT7rLbBf1FSnQ8guxGW3W+36BW0gBje4DOz6Ba6SVk0xiKgt+q2JOFyr4SYfnu+Ic1QZYIuwHBrgzr6UvOcSCzPTOo7D6IC4ISeS7zkl4h+2VoeHpnG/uWR3+ysNgPcOIXQbv0n4mr3BwQcdKJxgPSeyuP/z1Jjg4e9nUvoXegqQVIE30EHx5GHv+FAVUNTowYDJgyFhf5IvlYmEqRif6+WN1MkEJmDcQITx9FX23a4mxy1AQRsOHO/+eImX9l8EMJI3oPWzVXxSOeHU1dUWYr2uAA7AMb+vAEZSbU3qob9ibCyXeypEMpZ6863o6QPqlqGHZkuWABSTVNd4cOh9hv3qEpSx2Zy/DJMP6cItEmiBJ5PFqQnDEIt3NrA3COlOSgz43D7gpNFNJ5MBh4oFzhDPiglC2ypsNU4ISywY2erkyb1NC3Qh/IfWj0eDgZI4/ln8WPfBsT3meTjq1Uqt1E7Zl/qftqkx6aM9KueMCekSnMrcHj1CqTWWzEzPsZGcDe3Ue4Ws+XFYVxNbOFF8ezkvQGR6ZOtOLU2lQEnMBStx47vE6Pb7AYMBRj2OOfZXfisjJnpTfSNjo6sZ6qSvNxZNmDeS7Gk3yYyCk1HtKN2UnhMIjOXUzAqDv90lx9O/q/AT1ZMnit5XQe9wmQxnE/WSH0CqZ9/2Hy+Sfmpeg8RwsHI5Z8kC8H293m/LHVVM/BA7HaTJYg5Enk7M/xWpq0192ACfBai2LA/qrCjCr6Dh1BIMzMXINBmX96MJ5Hn2nxln/RXPFhwHxUmSV0EV2V0jm86/dxxuYSU1W7sVkEbN9EzkG0QFwPhyHKyb3t+Fj5WoUUTErcazE/N6EW6Lvp0d//SDPj7EV9UdJN+Amnf3Wwk3A0SlJ9Z00yvXZ7n3z70G47Hfsow8Wq1JXcfwnA+Yxa5mFsgV464KKP4T31wqIgzFPd3eCe3j5ory5fBF2hgCFyVFrLzI9eetNXvM7oQqyFgDo4CTp/hDV9NMX9JDHQ/nyHTLvZLNLF6ftn2OxjGm8+PqOwhxnPHWipkE/8wbtyri80Sr7pMNkQGMfo4ZYK9OcCC4ESVFFbLMIvlxSoRqWie0wxqnLfcLSXMSpMMQEJYDVObYsXIQNv4TGNwjq1kvT1UOkicTrG3IaBZ3XdScS3u8sgeZPVpOLkbiF940FjbCeNRINNvDbd01EPBrTCPpm12m43ze1bBB59Ia6Ovhnur/Nvx3IxwSWol+3H2qfCJR8df6aQf4v6WiONxkK+IqT4pKQrZK/LplgDI/PJZbOep8dtbV7oCr6CgfpWa8NczOkPx81iSHbsNhVSJBOtrLIMrL31LK9TqHqAbAHe0RLmmV806kRLDLNEhUEJfm9u0sxpkL93Zgd6rw+tqBfTMi59xqXHLXSHwSbSBl0EK0+loECOPtrl+/nsaFe197di4yUgoe4jKoAJDXc6DGDjrQOoFDWZJ9HXwt8xDrQP+7aRwWKWI1GF8s8O4KzxWBBcwnl3vnl1Oez3oh6Ea1vjR7/z7DDTrFtqU2W/KAEzAuXDNZ7MY73MF216dzdSbWmUp4lcm7keJfWaMHgut9x5C9mj66Z0lJ+yhsjVvyiWrfk1lzPOTdhG15Y7gQlXtacvI7qv/XNSscDwqkgwHT/gUsD5yB7LdRRvJxQGYINn9hTpodKFVSTPrtGvyQw+HlRFXIkodErAGu9Iy1YpfSPc3jkFh5CX3lPxv7aqjE/JAfTIpEjGb/H7MO0e2vsViSW1qa/Lmi4/n4DEI3g7lYrcanspDfEpKkdV1OjSLOy0BCUqVoECaB55vs06rXl4jqmLsPsFM/7vYJ0vrBhDCm/00A/H81l1uekJ/6Lml3Hb9+NKiLqATJmDpyzfYZFHumEjC662L0Bwkxi7E9U4cQA0XMVDuMYAIeLMPgQaMVOd8fmt5SflFIfuBoszeAw7ow5gXPE2Y/yBc/7jExARUf/BxIHQBF5Sn3i61w4z5xJdCyO1F1X3+3ax+JSvMeZ7S6QSKp1Fp/sjYz6Z+VgCZzibGeEoujryfMulH7Rai5kAft9ebcW50DyJr2uo2z97mTWIu45YsSnNSMrrNUuG1XsYBtD9TDYzQffKB87vWbkM4EbPAFgoBV4GQS+vtFDUqOFAoi1nTtmIOvg38N4hT2Sn8r8clmBCXspBlMBYTnrqFJGBT3wZOzAyJDre9dHH7+x7qaaKDOB4UQALD5ecS0DE4obubQEiuJZ0EpBVpLuYcce8Aa4PYd/V4DLDAJBYKQPCWTcrEaZ5HYbJi11Gd6hjGom1ii18VHYnG28NKpkz2UKVPxlhYSp8uZr367iOmoy7zsxehW9wzcy2zG0a80PBMCRQMb32hnaHeOR8fnNDzZhaNYhkOdDsBUZ3loDMa1YP0uS0cjUP3b/6DBlqmZOeNABDsLl5BI5QJups8uxAuWJdkUB/pO6Zax6tsg7fN5mjjDgMGngO+DPcKqiHIDbFIGudxtPTIyDi9SFMKBDcfdGQRv41q1AqmxgkVfJMnP8w/Bc7N9/TR6C7mGObFqFkIEom8sKi2xYqJLTCHK7cxzaZvqODo22c3wisBCP4HeAgcRbNPAsBkNRhSmD48dHupdBRw4mIvtS5oeF6zeT1KMCyhMnmhpkFAGWnGscoNkwvQ8ZM5lE/vgTHFYL99OuNxdFBxTEDd5v2qLR8y9WkXsWgG6kZNndFG+pO/UAkOCipqIhL3hq7cRSdrCq7YhUsTocEcnaFa6nVkhnSeRYUA1YO0z5itF9Sly3VlxYDw239TJJH6f3EUfYO5lb7bcFcz8Bp7Oo8QmnsUHOz/fagVUBtKEw1iT88j+aKkv8cscKNkMxjYr8344D1kFoZ7/td1W6LCNYN594301tUGRmFjAzeRg5vyoM1F6+bJZ/Q54jN/k8SFd3DxPTYaAUsivsBfgTn7Mx8H2SpPt4GOdYRnEJOH6jHM2p6SgB0gzIRq6fHxGMmSmqaPCmlfwxiuloaVIitLGN8wie2CDWhkzLoCJcODh7KIOAqbHEvXdUxaS4TTTs07Clzj/6GmVs9kiZDerMxEnhUB6QQPlcfqkG9882RqHoLiHGBoHfQuXIsAG8GTAtao2KVwRnvvam8jo1e312GQAKWEa4sUVEAMG4G6ckcONDwRcg1e2D3+ohXgY4UAWF8wHKQMrSnzCgfFpsxh+aHXMGtPQroQasRY4U6UdG0rz1Vjbka0MekOGRZQEvqQFlxseFor8zWFgHek3v29+WqN6gaK5gZOTOMZzpQIC1201LkMCXild3vWXSc5UX9xcFYfbRPzGFa1FDcPfPB/jUEq/FeGt419CI3YmBlVoHsa4KdcwQP5ZSwHHhFJ7/Ph/Rap/4vmG91eDwPP0lDfCDRCLszTqfzM71xpmiKi2HwS4WlqvGNwtvwF5Dqpn6KTq8ax00UMPkxDcZrEEEsIvHiUXXEphdb4GB4FymlPwBz4Gperqq5pW7TQ6/yNRhW8VT5NhuP0udlxo4gILq5ZxAZk8ZGh3g4CqxJlPKY7AQxupfUcVpWT5VItp1+30UqoyP4wWsRo3olRRgkWZZ2ZN6VC3OZFeXB8NbnUrSdikNptD1QiGuKkr8EmSR/AK9Rw+FF3s5uwuPbvHGiPeFOViltMK7AUaOsq9+x9cndk3iJEE5LKZRlWJbKOZweROzmPNVPkjE3K/TyA57Rs68TkZ3MR8akKpm7cFjnjPd/DdkWjgYoKHSr5Wu5ssoBYU4acRs5g2DHxUmdq8VXOXRbunD8QN0LhgkssgahcdoYsNvuXGUK/KXD/7oFb+VGdhqIn02veuM5bLudJOc2Ky0GMaG4W/xWBxIJcL7yliJOXOpx0AkBqUgzlDczmLT4iILXDxxtRR1oZa2JWFgiAb43obrJnG/TZC2KSK2wqOzRZTXavZZFMb1f3bXvVaNaK828w9TO610gk8JNf3gMfETzXXsbcvRGCG9JWQZ6+cDPqc4466Yo2RcKH+PILeKOqtnlbInR3MmBeGG3FH10yzkybuqEC2HSQwpA0An7d9+73BkDUTm30bZmoP/RGbgFN+GrCOfADgqr0WbI1a1okpFms8iHYw9hm0zUvlEMivBRxModrbJJ+9/p3jUdQQ9BCtQdxnOGrT5dzRUmw0593/mbRSdBg0nRvRZM5/E16m7ZHmDEtWhwvfdZCZ8J8M12W0yRMszXamWfQTwIZ4ayYktrnscQuWr8idp3PjT2eF/jmtdhIfcpMnb+IfZY2FebW6UY/AK3jP4u3Tu4zE4qlnQgLFbM19EBIsNf7KhjdbqQ/D6yiDb+NlEi2SKD+ivXVUK8ib0oBo366gXkR8ZxGjpJIDcEgZPa9TcYe0TIbiPl/rPUQDu3XBJ9X/GNq3FAUsKsll57DzaGMrjcT+gctp+9MLYXCq+sqP81eVQ0r9lt+gcQfZbACRbEjvlMskztZG8gbC8Qn9tt26Q7y7nDrbZq/LEz7kR6Jc6pg3N9rVX8Y5MJrGlML9p9lU4jbTkKqCveeZUJjHB03m2KRKR2TytoFkTXOLg7keU1s1lrPMQJpoOKLuAAC+y1HlJucU6ysB5hsXhvSPPLq5J7JtnqHKZ4vYjC4Vy8153QY+6780xDuGARsGbOs1WqzH0QS765rnSKEbbKlkO8oI/VDwUd0is13tKpqILu1mDJFNy/iJAWcvDgjxvusIT+PGz3ST/J9r9Mtfd0jpaGeiLYIqXc7DiHSS8TcjFVksi66PEkxW1z6ujbLLUGNNYnzOWpH8BZGK4bCK7iR+MbIv8ncDAz1u4StN3vTTzewr9IQjk9wxFxn+6N1ddKs0vffJiS08N3a4G1SVrlZ97Q/M+8G9fe5AP6d9/Qq4WRnORVhofPIKEdCr3llspUfE0oKIIYoByBRPh+bX1HLS3JWGJRhIvE1aW4NTd8ePi4Z+kXb+Z8snYfSNcqijhAgVsx4RCM54cXUiYkjeBmmC4ajOHrChoELscJJC7+9jjMjw5BagZKlgRMiSNYz7h7vvZIoQqbtQmspc0cUk1G/73iXtSpROl5wtLgQi0mW2Ex8i3WULhcggx6E1LMVHUsdc9GHI1PH3U2Ko0PyGdn9KdVOLm7FPBui0i9a0HpA60MsewVE4z8CAt5d401Gv6zXlIT5Ybit1VIA0FCs7wtvYreru1fUyW3oLAZ/+aTnZrOcYRNVA8spoRtlRoWflsRClFcgzkqiHOrf0/SVw+EpVaFlJ0g4Kxq1MMOmiQdpMNpte8lMMQqm6cIFXlnGbfJllysKDi+0JJMotkqgIxOSQgU9dn/lWkeVf8nUm3iwX2Nl3WDw9i6AUK3vBAbZZrcJpDQ/N64AVwjT07Jef30GSSmtNu2WlW7YoyW2FlWfZFQUwk867EdLYKk9VG6JgEnBiBxkY7LMo4YLQJJlAo9l/oTvJkSARDF/XtyAzM8O2t3eT/iXa6wDN3WewNmQHdPfsxChU/KtLG2Mn8i4ZqKdSlIaBZadxJmRzVS/o4yA65RTSViq60oa395Lqw0pzY4SipwE0SXXsKV+GZraGSkr/RW08wPRvqvSUkYBMA9lPx4m24az+IHmCbXA+0faxTRE9wuGeO06DIXa6QlKJ3puIyiuAVfPr736vzo2pBirS+Vxel3TMm3JKhz9o2ZoRvaFVpIkykb0Hcm4oHFBMcNSNj7/4GJt43ogonY2Vg4nsDQIWxAcorpXACzgBqQPjYsE/VUpXpwNManEru4NwMCFPkXvMoqvoeLN3qyu/N1eWEHttMD65v19l/0kH2mR35iv/FI+yjoHJ9gPMz67af3Mq/BoWXqu3rphiWMXVkmnPSEkpGpUI2h1MThideGFEOK6YZHPwYzMBvpNC7+ZHxPb7epfefGyIB4JzO9DTNEYnDLVVHdQyvOEVefrk6Uv5kTQYVYWWdqrdcIl7yljwwIWdfQ/y+2QB3eR/qxYObuYyB4gTbo2in4PzarU1sO9nETkmj9/AoxDA+JM3GMqQtJR4jtduHtnoCLxd1gQUscHRB/MoRYIEsP2pDZ9KvHgtlk1iTbWWbHhohwFEYX7y51fUV2nuUmnoUcqnWIQAAgl9LTVX+Bc0QGNEhChxHR4YjfE51PUdGfsSFE6ck7BL3/hTf9jLq4G1IafINxOLKeAtO7quulYvH5YOBc+zX7CrMgWnW47/jfRsWnJjYYoE7xMfWV2HN2iyIqLI";const rh=new Map([[8217,"apostrophe"],[8260,"fraction slash"],[12539,"middle dot"]]),sh=4;function X1(t){let e=0;function n(){return t[e++]<<8|t[e++]}let r=n(),s=1,i=[0,1];for(let x=1;x>--l&1}const c=31,d=2**c,w=d>>>1,m=w>>1,g=d-1;let A=0;for(let x=0;x1;){let B=S+P>>>1;x>>1|f(),k=k<<1^w,_=(_^w)<<1|w|1;p=k,y=1+_-k}let E=r-4;return h.map(x=>{switch(x-E){case 3:return E+65792+(t[a++]<<16|t[a++]<<8|t[a++]);case 2:return E+256+(t[a++]<<8|t[a++]);case 1:return E+t[a++];default:return x-1}})}function $1(t){let e=0;return()=>t[e++]}function Gg(t){return $1(X1(q1(t)))}function q1(t){let e=[];[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].forEach((s,i)=>e[s.charCodeAt(0)]=i);let n=t.length,r=new Uint8Array(6*n>>3);for(let s=0,i=0,o=0,a=0;s=8&&(r[i++]=a>>(o-=8));return r}function eE(t){return t&1?~t>>1:t>>1}function tE(t,e){let n=Array(t);for(let r=0,s=0;r{let e=ki(t);if(e.length)return e})}function Vg(t){let e=[];for(;;){let n=t();if(n==0)break;e.push(nE(n,t))}for(;;){let n=t()-1;if(n<0)break;e.push(rE(n,t))}return e.flat()}function Ni(t){let e=[];for(;;){let n=t(e.length);if(!n)break;e.push(n)}return e}function Qg(t,e,n){let r=Array(t).fill().map(()=>[]);for(let s=0;sr[o].push(i));return r}function nE(t,e){let n=1+e(),r=e(),s=Ni(e);return Qg(s.length,1+t,e).flatMap((o,a)=>{let[l,...u]=o;return Array(s[a]).fill().map((f,c)=>{let d=c*r;return[l+c*n,u.map(w=>w+d)]})})}function rE(t,e){let n=1+e();return Qg(n,1+t,e).map(s=>[s[0],s.slice(1)])}function sE(t){let e=[],n=ki(t);return s(r([]),[]),e;function r(i){let o=t(),a=Ni(()=>{let l=ki(t).map(u=>n[u]);if(l.length)return r(l)});return{S:o,B:a,Q:i}}function s({S:i,B:o},a,l){if(!(i&4&&l===a[a.length-1])){i&2&&(l=a[a.length-1]),i&1&&e.push(a);for(let u of o)for(let f of u.Q)s(u,[...a,f],l)}}}function iE(t){return t.toString(16).toUpperCase().padStart(2,"0")}function Kg(t){return`{${iE(t)}}`}function oE(t){let e=[];for(let n=0,r=t.length;n>24&255}function Zg(t){return t&16777215}let _u,ih,zu,Bo;function pE(){let t=Gg(lE);_u=new Map(jg(t).flatMap((e,n)=>e.map(r=>[r,n+1<<24]))),ih=new Set(ki(t)),zu=new Map,Bo=new Map;for(let[e,n]of Vg(t)){if(!ih.has(e)&&n.length==2){let[r,s]=n,i=Bo.get(r);i||(i=new Map,Bo.set(r,i)),i.set(s,e)}zu.set(e,n.reverse())}}function Yg(t){return t>=Pi&&t=la&&t=ua&&eca&&e0&&s(ca+u)}else{let o=zu.get(i);o?n.push(...o):s(i)}if(!n.length)break;i=n.pop()}if(r&&e.length>1){let i=Ks(e[0]);for(let o=1;o0&&s>=o)o==0?(e.push(r,...n),n.length=0,r=a):n.push(a),s=o;else{let l=mE(r,a);l>=0?r=l:s==0&&o==0?(e.push(r),r=a):(n.push(a),s=o)}}return r>=0&&e.push(r,...n),e}function $g(t){return Xg(t).map(Zg)}function yE(t){return gE(Xg(t))}const oh=45,qg=".",ey=65039,ty=1,da=t=>Array.from(t);function Ci(t,e){return t.P.has(e)||t.Q.has(e)}class wE extends Array{get is_emoji(){return!0}}let Hu,ny,pr,Gu,ry,us,Cl,_r,sr,ah,ju;function sf(){if(Hu)return;let t=Gg(Y1);const e=()=>ki(t),n=()=>new Set(e()),r=(f,c)=>c.forEach(d=>f.add(d));Hu=new Map(Vg(t)),ny=n(),pr=e(),Gu=new Set(e().map(f=>pr[f])),pr=new Set(pr),ry=n(),n();let s=jg(t),i=t();const o=()=>{let f=new Set;return e().forEach(c=>r(f,s[c])),r(f,e()),f};us=Ni(f=>{let c=Ni(t).map(d=>d+96);if(c.length){let d=f>=i;c[0]-=32,c=xs(c),d&&(c=`Restricted[${c}]`);let w=o(),m=o(),g=!t();return{N:c,P:w,Q:m,M:g,R:d}}}),Cl=n(),_r=new Map;let a=e().concat(da(Cl)).sort((f,c)=>f-c);a.forEach((f,c)=>{let d=t(),w=a[c]=d?a[c-d]:{V:[],M:new Map};w.V.push(f),Cl.has(f)||_r.set(f,w)});for(let{V:f,M:c}of new Set(_r.values())){let d=[];for(let m of f){let g=us.filter(h=>Ci(h,m)),A=d.find(({G:h})=>g.some(p=>h.has(p)));A||(A={G:new Set,V:[]},d.push(A)),A.V.push(m),r(A.G,g)}let w=d.flatMap(m=>da(m.G));for(let{G:m,V:g}of d){let A=new Set(w.filter(h=>!m.has(h)));for(let h of g)c.set(h,A)}}sr=new Set;let l=new Set;const u=f=>sr.has(f)?l.add(f):sr.add(f);for(let f of us){for(let c of f.P)u(c);for(let c of f.Q)u(c)}for(let f of sr)!_r.has(f)&&!l.has(f)&&_r.set(f,ty);r(sr,$g(sr)),ah=sE(t).map(f=>wE.from(f)).sort(aE),ju=new Map;for(let f of ah){let c=[ju];for(let d of f){let w=c.map(m=>{let g=m.get(d);return g||(g=new Map,m.set(d,g)),g});d===ey?c.push(...w):c=w}for(let d of c)d.V=f}}function of(t){return(sy(t)?"":`${af(_a([t]))} `)+Kg(t)}function af(t){return`"${t}"‎`}function vE(t){if(t.length>=4&&t[2]==oh&&t[3]==oh)throw new Error(`invalid label extension: "${xs(t.slice(0,4))}"`)}function AE(t){for(let n=t.lastIndexOf(95);n>0;)if(t[--n]!==95)throw new Error("underscore allowed only at start")}function EE(t){let e=t[0],n=rh.get(e);if(n)throw ri(`leading ${n}`);let r=t.length,s=-1;for(let i=1;ie&&(e>>=1,t=[...t.slice(0,e),8230,...t.slice(-e)]);let s=0,i=t.length;for(let o=0;o{let i=oE(s),o={input:i,offset:r};r+=i.length+1;try{let a=o.tokens=TE(i,e,n),l=a.length,u;if(!l)throw new Error("empty label");let f=o.output=a.flat();if(AE(f),!(o.emoji=l>1||a[0].is_emoji)&&f.every(d=>d<128))vE(f),u="ASCII";else{let d=a.flatMap(w=>w.is_emoji?[]:w);if(!d.length)u="Emoji";else{if(pr.has(f[0]))throw ri("leading combining mark");for(let g=1;go.has(a)):da(o),!n.length)return}else r.push(s)}if(n){for(let s of n)if(r.every(i=>Ci(s,i)))throw new Error(`whole-script confusable: ${t.N}/${s.N}`)}}function NE(t){let e=us;for(let n of t){let r=e.filter(s=>Ci(s,n));if(!r.length)throw us.some(s=>Ci(s,n))?oy(e[0],n):iy(n);if(e=r,r.length==1)break}return e}function PE(t){return t.map(({input:e,error:n,output:r})=>{if(n){let s=n.message;throw new Error(t.length==1?s:`Invalid label ${af(_a(e,63))}: ${s}`)}return xs(r)}).join(qg)}function iy(t){return new Error(`disallowed character: ${of(t)}`)}function oy(t,e){let n=of(e),r=us.find(s=>s.P.has(e));return r&&(n=`${r.N} ${n}`),new Error(`illegal mixture: ${t.N} + ${n}`)}function ri(t){return new Error(`illegal placement: ${t}`)}function CE(t,e){for(let n of e)if(!Ci(t,n))throw oy(t,n);if(t.M){let n=$g(e);for(let r=1,s=n.length;rsh)throw new Error(`excessive non-spacing marks: ${af(_a(n.slice(r-1,i)))} (${i-r}/${sh})`);r=i}}}function TE(t,e,n){let r=[],s=[];for(t=t.slice().reverse();t.length;){let i=RE(t);if(i)s.length&&(r.push(e(s)),s=[]),r.push(n(i));else{let o=t.pop();if(sr.has(o))s.push(o);else{let a=Hu.get(o);if(a)s.push(...a);else if(!ny.has(o))throw iy(o)}}}return s.length&&r.push(e(s)),r}function IE(t){return t.filter(e=>e!=ey)}function RE(t,e){let n=ju,r,s=t.length;for(;s&&(n=n.get(t[--s]),!!n);){let{V:i}=n;i&&(r=i,t.length=s)}return r}const ay=new Uint8Array(32);ay.fill(0);function lh(t){return v(t.length!==0,"invalid ENS name; empty component","comp",t),t}function ly(t){const e=dn(BE(t)),n=[];if(t.length===0)return n;let r=0;for(let s=0;s{v(r.length<=n,`label ${JSON.stringify(t)} exceeds ${n} bytes`,"name",t);const s=new Uint8Array(r.length+1);return s.set(r,1),s[0]=s.length-1,s})))+"00"}const uy=new Uint8Array(32);uy.fill(0);const LE=BigInt(-1),cy=BigInt(0),fy=BigInt(1),FE=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function UE(t){const e=Q(t),n=e.length%32;return n?ce([e,uy.slice(n)]):R(e)}const DE=Jn(fy,32),ME=Jn(cy,32),uh={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},Tl=["name","version","chainId","verifyingContract","salt"];function ch(t){return function(e){return v(typeof e=="string",`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const _E={name:ch("name"),version:ch("version"),chainId:function(t){const e=U(t,"domain.chainId");return v(e>=0,"invalid chain ID","domain.chainId",t),Number.isSafeInteger(e)?Number(e):Ft(e)},verifyingContract:function(t){try{return q(t).toLowerCase()}catch{}v(!1,'invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=Q(t,"domain.salt");return v(e.length===32,'invalid domain value "salt"',"domain.salt",t),R(e)}};function Il(t){{const e=t.match(/^(u?)int(\d+)$/);if(e){const n=e[1]==="",r=parseInt(e[2]);v(r%8===0&&r!==0&&r<=256&&e[2]===String(r),"invalid numeric width","type",t);const s=dr(FE,n?r-1:r),i=n?(s+fy)*LE:cy;return function(o){const a=U(o,"value");return v(a>=i&&a<=s,`value out-of-bounds for ${t}`,"value",a),Jn(n?$m(a,256):a,32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const n=parseInt(e[1]);return v(n!==0&&n<=32&&e[1]===String(n),"invalid bytes width","type",t),function(r){const s=Q(r);return v(s.length===n,`invalid length for ${t}`,"value",r),UE(r)}}}switch(t){case"address":return function(e){return vn(q(e),32)};case"bool":return function(e){return e?DE:ME};case"bytes":return function(e){return ke(e)};case"string":return function(e){return kr(e)}}return null}function fh(t,e){return`${t}(${e.map(({name:n,type:r})=>r+" "+n).join(",")})`}function go(t){const e=t.match(/^([^\x5b]*)((\x5b\d*\x5d)*)(\x5b(\d*)\x5d)$/);return e?{base:e[1],index:e[2]+e[4],array:{base:e[1],prefix:e[1]+e[2],count:e[5]?parseInt(e[5]):-1}}:{base:t}}class ct{primaryType;#e;get types(){return JSON.parse(this.#e)}#t;#n;constructor(e){this.#t=new Map,this.#n=new Map;const n=new Map,r=new Map,s=new Map,i={};Object.keys(e).forEach(l=>{i[l]=e[l].map(({name:u,type:f})=>{let{base:c,index:d}=go(f);return c==="int"&&!e.int&&(c="int256"),c==="uint"&&!e.uint&&(c="uint256"),{name:u,type:c+(d||"")}}),n.set(l,new Set),r.set(l,[]),s.set(l,new Set)}),this.#e=JSON.stringify(i);for(const l in i){const u=new Set;for(const f of i[l]){v(!u.has(f.name),`duplicate variable name ${JSON.stringify(f.name)} in ${JSON.stringify(l)}`,"types",e),u.add(f.name);const c=go(f.type).base;v(c!==l,`circular type reference to ${JSON.stringify(c)}`,"types",e),!Il(c)&&(v(r.has(c),`unknown type ${JSON.stringify(c)}`,"types",e),r.get(c).push(l),n.get(l).add(c))}}const o=Array.from(r.keys()).filter(l=>r.get(l).length===0);v(o.length!==0,"missing primary type","types",e),v(o.length===1,`ambiguous primary types or unused types: ${o.map(l=>JSON.stringify(l)).join(", ")}`,"types",e),z(this,{primaryType:o[0]});function a(l,u){v(!u.has(l),`circular type reference to ${JSON.stringify(l)}`,"types",e),u.add(l);for(const f of n.get(l))if(r.has(f)){a(f,u);for(const c of u)s.get(c).add(f)}u.delete(l)}a(this.primaryType,new Set);for(const[l,u]of s){const f=Array.from(u);f.sort(),this.#t.set(l,fh(l,i[l])+f.map(c=>fh(c,i[c])).join(""))}}getEncoder(e){let n=this.#n.get(e);return n||(n=this.#r(e),this.#n.set(e,n)),n}#r(e){{const s=Il(e);if(s)return s}const n=go(e).array;if(n){const s=n.prefix,i=this.getEncoder(s);return o=>{v(n.count===-1||n.count===o.length,`array length mismatch; expected length ${n.count}`,"value",o);let a=o.map(i);return this.#t.has(s)&&(a=a.map(ke)),ke(ce(a))}}const r=this.types[e];if(r){const s=kr(this.#t.get(e));return i=>{const o=r.map(({name:a,type:l})=>{const u=this.getEncoder(l)(i[a]);return this.#t.has(l)?ke(u):u});return o.unshift(s),ce(o)}}v(!1,`unknown type: ${e}`,"type",e)}encodeType(e){const n=this.#t.get(e);return v(n,`unknown type: ${JSON.stringify(e)}`,"name",e),n}encodeData(e,n){return this.getEncoder(e)(n)}hashStruct(e,n){return ke(this.encodeData(e,n))}encode(e){return this.encodeData(this.primaryType,e)}hash(e){return this.hashStruct(this.primaryType,e)}_visit(e,n,r){if(Il(e))return r(e,n);const s=go(e).array;if(s)return v(s.count===-1||s.count===n.length,`array length mismatch; expected length ${s.count}`,"value",n),n.map(o=>this._visit(s.prefix,o,r));const i=this.types[e];if(i)return i.reduce((o,{name:a,type:l})=>(o[a]=this._visit(l,n[a],r),o),{});v(!1,`unknown type: ${e}`,"type",e)}visit(e,n){return this._visit(this.primaryType,e,n)}static from(e){return new ct(e)}static getPrimaryType(e){return ct.from(e).primaryType}static hashStruct(e,n,r){return ct.from(n).hashStruct(e,r)}static hashDomain(e){const n=[];for(const r in e){if(e[r]==null)continue;const s=uh[r];v(s,`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",e),n.push({name:r,type:s})}return n.sort((r,s)=>Tl.indexOf(r.name)-Tl.indexOf(s.name)),ct.hashStruct("EIP712Domain",{EIP712Domain:n},e)}static encode(e,n,r){return ce(["0x1901",ct.hashDomain(e),ct.from(n).hash(r)])}static hash(e,n,r){return ke(ct.encode(e,n,r))}static async resolveNames(e,n,r,s){e=Object.assign({},e);for(const a in e)e[a]==null&&delete e[a];const i={};e.verifyingContract&&!se(e.verifyingContract,20)&&(i[e.verifyingContract]="0x");const o=ct.from(n);o.visit(r,(a,l)=>(a==="address"&&!se(l,20)&&(i[l]="0x"),l));for(const a in i)i[a]=await s(a);return e.verifyingContract&&i[e.verifyingContract]&&(e.verifyingContract=i[e.verifyingContract]),r=o.visit(r,(a,l)=>a==="address"&&i[l]?i[l]:l),{domain:e,value:r}}static getPayload(e,n,r){ct.hashDomain(e);const s={},i=[];Tl.forEach(l=>{const u=e[l];u!=null&&(s[l]=_E[l](u),i.push({name:l,type:uh[l]}))});const o=ct.from(n);n=o.types;const a=Object.assign({},n);return v(a.EIP712Domain==null,"types must not contain EIP712Domain type","types.EIP712Domain",n),a.EIP712Domain=i,o.encode(r),{types:a,domain:s,primaryType:o.primaryType,message:o.visit(r,(l,u)=>{if(l.match(/^bytes(\d*)/))return R(Q(u));if(l.match(/^u?int/))return U(u).toString();switch(l){case"address":return u.toLowerCase();case"bool":return!!u;case"string":return v(typeof u=="string","invalid string","value",u),u}v(!1,"unsupported type","type",l)})}}}function We(t){const e=new Set;return t.forEach(n=>e.add(n)),Object.freeze(e)}const zE="external public payable override",HE=We(zE.split(" ")),dy="constant external internal payable private public pure view override",GE=We(dy.split(" ")),hy="constructor error event fallback function receive struct",py=We(hy.split(" ")),my="calldata memory storage payable indexed",jE=We(my.split(" ")),VE="tuple returns",QE=[hy,my,VE,dy].join(" "),KE=We(QE.split(" ")),JE={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},WE=new RegExp("^(\\s*)"),ZE=new RegExp("^([0-9]+)"),YE=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),gy=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$"),yy=new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");class Pt{#e;#t;get offset(){return this.#e}get length(){return this.#t.length-this.#e}constructor(e){this.#e=0,this.#t=e.slice()}clone(){return new Pt(this.#t)}reset(){this.#e=0}#n(e=0,n=0){return new Pt(this.#t.slice(e,n).map(r=>Object.freeze(Object.assign({},r,{match:r.match-e,linkBack:r.linkBack-e,linkNext:r.linkNext-e}))))}popKeyword(e){const n=this.peek();if(n.type!=="KEYWORD"||!e.has(n.text))throw new Error(`expected keyword ${n.text}`);return this.pop().text}popType(e){if(this.peek().type!==e){const n=this.peek();throw new Error(`expected ${e}; got ${n.type} ${JSON.stringify(n.text)}`)}return this.pop().text}popParen(){const e=this.peek();if(e.type!=="OPEN_PAREN")throw new Error("bad start");const n=this.#n(this.#e+1,e.match+1);return this.#e=e.match+1,n}popParams(){const e=this.peek();if(e.type!=="OPEN_PAREN")throw new Error("bad start");const n=[];for(;this.#e=this.#t.length)throw new Error("out-of-bounds");return this.#t[this.#e]}peekKeyword(e){const n=this.peekType("KEYWORD");return n!=null&&e.has(n)?n:null}peekType(e){if(this.length===0)return null;const n=this.peek();return n.type===e?n.text:null}pop(){const e=this.peek();return this.#e++,e}toString(){const e=[];for(let n=this.#e;n`}}function Xn(t){const e=[],n=o=>{const a=i0&&e[e.length-1].type==="NUMBER"){const c=e.pop().text;f=c+f,e[e.length-1].value=G(c)}if(e.length===0||e[e.length-1].type!=="BRACKET")throw new Error("missing opening bracket");e[e.length-1].text+=f}continue}if(a=o.match(YE),a){if(l.text=a[1],i+=l.text.length,KE.has(l.text)){l.type="KEYWORD";continue}if(l.text.match(yy)){l.type="TYPE";continue}l.type="ID";continue}if(a=o.match(ZE),a){l.text=a[1],l.type="NUMBER",i+=l.text.length;continue}throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`)}return new Pt(e.map(o=>Object.freeze(o)))}function dh(t,e){let n=[];for(const r in e.keys())t.has(r)&&n.push(r);if(n.length>1)throw new Error(`conflicting types: ${n.join(", ")}`)}function za(t,e){if(e.peekKeyword(py)){const n=e.pop().text;if(n!==t)throw new Error(`expected ${t}, got ${n}`)}return e.popType("ID")}function An(t,e){const n=new Set;for(;;){const r=t.peekType("KEYWORD");if(r==null||e&&!e.has(r))break;if(t.pop(),n.has(r))throw new Error(`duplicate keywords: ${JSON.stringify(r)}`);n.add(r)}return Object.freeze(n)}function wy(t){let e=An(t,GE);return dh(e,We("constant payable nonpayable".split(" "))),dh(e,We("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}function pn(t,e){return t.popParams().map(n=>ne.from(n,e))}function vy(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return U(t.pop().text);throw new Error("invalid gas")}return null}function Nr(t){if(t.length)throw new Error(`unexpected tokens at offset ${t.offset}: ${t.toString()}`)}const XE=new RegExp(/^(.*)\[([0-9]*)\]$/);function hh(t){const e=t.match(yy);if(v(e,"invalid type","type",t),t==="uint")return"uint256";if(t==="int")return"int256";if(e[2]){const n=parseInt(e[2]);v(n!==0&&n<=32,"invalid bytes length","type",t)}else if(e[3]){const n=parseInt(e[3]);v(n!==0&&n<=256&&n%8===0,"invalid numeric width","type",t)}return t}const pe={},it=Symbol.for("_ethers_internal"),ph="_ParamTypeInternal",mh="_ErrorInternal",gh="_EventInternal",yh="_ConstructorInternal",wh="_FallbackInternal",vh="_FunctionInternal",Ah="_StructInternal";class ne{name;type;baseType;indexed;components;arrayLength;arrayChildren;constructor(e,n,r,s,i,o,a,l){if(Ui(e,pe,"ParamType"),Object.defineProperty(this,it,{value:ph}),o&&(o=Object.freeze(o.slice())),s==="array"){if(a==null||l==null)throw new Error("")}else if(a!=null||l!=null)throw new Error("");if(s==="tuple"){if(o==null)throw new Error("")}else if(o!=null)throw new Error("");z(this,{name:n,type:r,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:l})}format(e){if(e==null&&(e="sighash"),e==="json"){const r=this.name||"";if(this.isArray()){const i=JSON.parse(this.arrayChildren.format("json"));return i.name=r,i.type+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`,JSON.stringify(i)}const s={type:this.baseType==="tuple"?"tuple":this.type,name:r};return typeof this.indexed=="boolean"&&(s.indexed=this.indexed),this.isTuple()&&(s.components=this.components.map(i=>JSON.parse(i.format(e)))),JSON.stringify(s)}let n="";return this.isArray()?(n+=this.arrayChildren.format(e),n+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?n+="("+this.components.map(r=>r.format(e)).join(e==="full"?", ":",")+")":n+=this.type,e!=="sighash"&&(this.indexed===!0&&(n+=" indexed"),e==="full"&&this.name&&(n+=" "+this.name)),n}isArray(){return this.baseType==="array"}isTuple(){return this.baseType==="tuple"}isIndexable(){return this.indexed!=null}walk(e,n){if(this.isArray()){if(!Array.isArray(e))throw new Error("invalid array value");if(this.arrayLength!==-1&&e.length!==this.arrayLength)throw new Error("array is wrong length");const r=this;return e.map(s=>r.arrayChildren.walk(s,n))}if(this.isTuple()){if(!Array.isArray(e))throw new Error("invalid tuple value");if(e.length!==this.components.length)throw new Error("array is wrong length");const r=this;return e.map((s,i)=>r.components[i].walk(s,n))}return n(this.type,e)}#e(e,n,r,s){if(this.isArray()){if(!Array.isArray(n))throw new Error("invalid array value");if(this.arrayLength!==-1&&n.length!==this.arrayLength)throw new Error("array is wrong length");const o=this.arrayChildren,a=n.slice();a.forEach((l,u)=>{o.#e(e,l,r,f=>{a[u]=f})}),s(a);return}if(this.isTuple()){const o=this.components;let a;if(Array.isArray(n))a=n.slice();else{if(n==null||typeof n!="object")throw new Error("invalid tuple value");a=o.map(l=>{if(!l.name)throw new Error("cannot use object value with unnamed components");if(!(l.name in n))throw new Error(`missing value for component ${l.name}`);return n[l.name]})}if(a.length!==this.components.length)throw new Error("array is wrong length");a.forEach((l,u)=>{o[u].#e(e,l,r,f=>{a[u]=f})}),s(a);return}const i=r(this.type,n);i.then?e.push(async function(){s(await i)}()):s(i)}async walkAsync(e,n){const r=[],s=[e];return this.#e(r,e,n,i=>{s[0]=i}),r.length&&await Promise.all(r),s[0]}static from(e,n){if(ne.isParamType(e))return e;if(typeof e=="string")try{return ne.from(Xn(e),n)}catch{v(!1,"invalid param type","obj",e)}else if(e instanceof Pt){let a="",l="",u=null;An(e,We(["tuple"])).has("tuple")||e.peekType("OPEN_PAREN")?(l="tuple",u=e.popParams().map(g=>ne.from(g)),a=`tuple(${u.map(g=>g.format()).join(",")})`):(a=hh(e.popType("TYPE")),l=a);let f=null,c=null;for(;e.length&&e.peekType("BRACKET");){const g=e.pop();f=new ne(pe,"",a,l,null,u,c,f),c=g.value,a+=g.text,l="array",u=null}let d=null;if(An(e,jE).has("indexed")){if(!n)throw new Error("");d=!0}const m=e.peekType("ID")?e.pop().text:"";if(e.length)throw new Error("leftover tokens");return new ne(pe,m,a,l,d,u,c,f)}const r=e.name;v(!r||typeof r=="string"&&r.match(gy),"invalid name","obj.name",r);let s=e.indexed;s!=null&&(v(n,"parameter cannot be indexed","obj.indexed",e.indexed),s=!!s);let i=e.type,o=i.match(XE);if(o){const a=parseInt(o[2]||"-1"),l=ne.from({type:o[1],components:e.components});return new ne(pe,r||"",i,"array",s,null,a,l)}if(i==="tuple"||i.startsWith("tuple(")||i.startsWith("(")){const a=e.components!=null?e.components.map(u=>ne.from(u)):null;return new ne(pe,r||"",i,"tuple",s,a,null,null)}return i=hh(e.type),new ne(pe,r||"",i,i,s,null,null,null)}static isParamType(e){return e&&e[it]===ph}}class Pr{type;inputs;constructor(e,n,r){Ui(e,pe,"Fragment"),r=Object.freeze(r.slice()),z(this,{type:n,inputs:r})}static from(e){if(typeof e=="string"){try{Pr.from(JSON.parse(e))}catch{}return Pr.from(Xn(e))}if(e instanceof Pt)switch(e.peekKeyword(py)){case"constructor":return cn.from(e);case"error":return et.from(e);case"event":return Jt.from(e);case"fallback":case"receive":return rn.from(e);case"function":return Wt.from(e);case"struct":return vr.from(e)}else if(typeof e=="object"){switch(e.type){case"constructor":return cn.from(e);case"error":return et.from(e);case"event":return Jt.from(e);case"fallback":case"receive":return rn.from(e);case"function":return Wt.from(e);case"struct":return vr.from(e)}N(!1,`unsupported type: ${e.type}`,"UNSUPPORTED_OPERATION",{operation:"Fragment.from"})}v(!1,"unsupported frgament object","obj",e)}static isConstructor(e){return cn.isFragment(e)}static isError(e){return et.isFragment(e)}static isEvent(e){return Jt.isFragment(e)}static isFunction(e){return Wt.isFragment(e)}static isStruct(e){return vr.isFragment(e)}}class Ha extends Pr{name;constructor(e,n,r,s){super(e,n,s),v(typeof r=="string"&&r.match(gy),"invalid identifier","name",r),s=Object.freeze(s.slice()),z(this,{name:r})}}function Ti(t,e){return"("+e.map(n=>n.format(t)).join(t==="full"?", ":",")+")"}class et extends Ha{constructor(e,n,r){super(e,"error",n,r),Object.defineProperty(this,it,{value:mh})}get selector(){return kr(this.format("sighash")).substring(0,10)}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("error"),n.push(this.name+Ti(e,this.inputs)),n.join(" ")}static from(e){if(et.isFragment(e))return e;if(typeof e=="string")return et.from(Xn(e));if(e instanceof Pt){const n=za("error",e),r=pn(e);return Nr(e),new et(pe,n,r)}return new et(pe,e.name,e.inputs?e.inputs.map(ne.from):[])}static isFragment(e){return e&&e[it]===mh}}class Jt extends Ha{anonymous;constructor(e,n,r,s){super(e,"event",n,r),Object.defineProperty(this,it,{value:gh}),z(this,{anonymous:s})}get topicHash(){return kr(this.format("sighash"))}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("event"),n.push(this.name+Ti(e,this.inputs)),e!=="sighash"&&this.anonymous&&n.push("anonymous"),n.join(" ")}static getTopicHash(e,n){return n=(n||[]).map(s=>ne.from(s)),new Jt(pe,e,n,!1).topicHash}static from(e){if(Jt.isFragment(e))return e;if(typeof e=="string")try{return Jt.from(Xn(e))}catch{v(!1,"invalid event fragment","obj",e)}else if(e instanceof Pt){const n=za("event",e),r=pn(e,!0),s=!!An(e,We(["anonymous"])).has("anonymous");return Nr(e),new Jt(pe,n,r,s)}return new Jt(pe,e.name,e.inputs?e.inputs.map(n=>ne.from(n,!0)):[],!!e.anonymous)}static isFragment(e){return e&&e[it]===gh}}class cn extends Pr{payable;gas;constructor(e,n,r,s,i){super(e,n,r),Object.defineProperty(this,it,{value:yh}),z(this,{payable:s,gas:i})}format(e){if(N(e!=null&&e!=="sighash","cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),e==="json")return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(r=>JSON.parse(r.format(e)))});const n=[`constructor${Ti(e,this.inputs)}`];return this.payable&&n.push("payable"),this.gas!=null&&n.push(`@${this.gas.toString()}`),n.join(" ")}static from(e){if(cn.isFragment(e))return e;if(typeof e=="string")try{return cn.from(Xn(e))}catch{v(!1,"invalid constuctor fragment","obj",e)}else if(e instanceof Pt){An(e,We(["constructor"]));const n=pn(e),r=!!An(e,HE).has("payable"),s=vy(e);return Nr(e),new cn(pe,"constructor",n,r,s)}return new cn(pe,"constructor",e.inputs?e.inputs.map(ne.from):[],!!e.payable,e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[it]===yh}}class rn extends Pr{payable;constructor(e,n,r){super(e,"fallback",n),Object.defineProperty(this,it,{value:wh}),z(this,{payable:r})}format(e){const n=this.inputs.length===0?"receive":"fallback";if(e==="json"){const r=this.payable?"payable":"nonpayable";return JSON.stringify({type:n,stateMutability:r})}return`${n}()${this.payable?" payable":""}`}static from(e){if(rn.isFragment(e))return e;if(typeof e=="string")try{return rn.from(Xn(e))}catch{v(!1,"invalid fallback fragment","obj",e)}else if(e instanceof Pt){const n=e.toString(),r=e.peekKeyword(We(["fallback","receive"]));if(v(r,"type must be fallback or receive","obj",n),e.popKeyword(We(["fallback","receive"]))==="receive"){const a=pn(e);return v(a.length===0,"receive cannot have arguments","obj.inputs",a),An(e,We(["payable"])),Nr(e),new rn(pe,[],!0)}let i=pn(e);i.length?v(i.length===1&&i[0].type==="bytes","invalid fallback inputs","obj.inputs",i.map(a=>a.format("minimal")).join(", ")):i=[ne.from("bytes")];const o=wy(e);if(v(o==="nonpayable"||o==="payable","fallback cannot be constants","obj.stateMutability",o),An(e,We(["returns"])).has("returns")){const a=pn(e);v(a.length===1&&a[0].type==="bytes","invalid fallback outputs","obj.outputs",a.map(l=>l.format("minimal")).join(", "))}return Nr(e),new rn(pe,i,o==="payable")}if(e.type==="receive")return new rn(pe,[],!0);if(e.type==="fallback"){const n=[ne.from("bytes")],r=e.stateMutability==="payable";return new rn(pe,n,r)}v(!1,"invalid fallback description","obj",e)}static isFragment(e){return e&&e[it]===wh}}class Wt extends Ha{constant;outputs;stateMutability;payable;gas;constructor(e,n,r,s,i,o){super(e,"function",n,s),Object.defineProperty(this,it,{value:vh}),i=Object.freeze(i.slice()),z(this,{constant:r==="view"||r==="pure",gas:o,outputs:i,payable:r==="payable",stateMutability:r})}get selector(){return kr(this.format("sighash")).substring(0,10)}format(e){if(e==null&&(e="sighash"),e==="json")return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:this.stateMutability!=="nonpayable"?this.stateMutability:void 0,payable:this.payable,gas:this.gas!=null?this.gas:void 0,inputs:this.inputs.map(r=>JSON.parse(r.format(e))),outputs:this.outputs.map(r=>JSON.parse(r.format(e)))});const n=[];return e!=="sighash"&&n.push("function"),n.push(this.name+Ti(e,this.inputs)),e!=="sighash"&&(this.stateMutability!=="nonpayable"&&n.push(this.stateMutability),this.outputs&&this.outputs.length&&(n.push("returns"),n.push(Ti(e,this.outputs))),this.gas!=null&&n.push(`@${this.gas.toString()}`)),n.join(" ")}static getSelector(e,n){return n=(n||[]).map(s=>ne.from(s)),new Wt(pe,e,"view",n,[],null).selector}static from(e){if(Wt.isFragment(e))return e;if(typeof e=="string")try{return Wt.from(Xn(e))}catch{v(!1,"invalid function fragment","obj",e)}else if(e instanceof Pt){const r=za("function",e),s=pn(e),i=wy(e);let o=[];An(e,We(["returns"])).has("returns")&&(o=pn(e));const a=vy(e);return Nr(e),new Wt(pe,r,i,s,o,a)}let n=e.stateMutability;return n==null&&(n="payable",typeof e.constant=="boolean"?(n="view",e.constant||(n="payable",typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable"))):typeof e.payable=="boolean"&&!e.payable&&(n="nonpayable")),new Wt(pe,e.name,n,e.inputs?e.inputs.map(ne.from):[],e.outputs?e.outputs.map(ne.from):[],e.gas!=null?e.gas:null)}static isFragment(e){return e&&e[it]===vh}}class vr extends Ha{constructor(e,n,r){super(e,"struct",n,r),Object.defineProperty(this,it,{value:Ah})}format(){throw new Error("@TODO")}static from(e){if(typeof e=="string")try{return vr.from(Xn(e))}catch{v(!1,"invalid struct fragment","obj",e)}else if(e instanceof Pt){const n=za("struct",e),r=pn(e);return Nr(e),new vr(pe,n,r)}return new vr(pe,e.name,e.inputs?e.inputs.map(ne.from):[])}static isFragment(e){return e&&e[it]===Ah}}const zt=new Map;zt.set(0,"GENERIC_PANIC");zt.set(1,"ASSERT_FALSE");zt.set(17,"OVERFLOW");zt.set(18,"DIVIDE_BY_ZERO");zt.set(33,"ENUM_RANGE_ERROR");zt.set(34,"BAD_STORAGE_DATA");zt.set(49,"STACK_UNDERFLOW");zt.set(50,"ARRAY_RANGE_ERROR");zt.set(65,"OUT_OF_MEMORY");zt.set(81,"UNINITIALIZED_FUNCTION_CALL");const $E=new RegExp(/^bytes([0-9]*)$/),qE=new RegExp(/^(u?int)([0-9]*)$/);let Rl=null,Eh=1024;function e2(t,e,n,r){let s="missing revert data",i=null;const o=null;let a=null;if(n){s="execution reverted";const u=Q(n);if(n=R(n),u.length===0)s+=" (no data present; likely require(false) occurred",i="require(false)";else if(u.length%32!==4)s+=" (could not decode reason; invalid data length)";else if(R(u.slice(0,4))==="0x08c379a0")try{i=r.decode(["string"],u.slice(4))[0],a={signature:"Error(string)",name:"Error",args:[i]},s+=`: ${JSON.stringify(i)}`}catch{s+=" (could not decode reason; invalid string data)"}else if(R(u.slice(0,4))==="0x4e487b71")try{const f=Number(r.decode(["uint256"],u.slice(4))[0]);a={signature:"Panic(uint256)",name:"Panic",args:[f]},i=`Panic due to ${zt.get(f)||"UNKNOWN"}(${f})`,s+=`: ${i}`}catch{s+=" (could not decode panic code)"}else s+=" (unknown custom error)"}const l={to:e.to?q(e.to):null,data:e.data||"0x"};return e.from&&(l.from=q(e.from)),le(s,"CALL_EXCEPTION",{action:t,data:n,reason:i,transaction:l,invocation:o,revert:a})}class Ss{#e(e){if(e.isArray())return new y1(this.#e(e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new mo(e.components.map(r=>this.#e(r)),e.name);switch(e.baseType){case"address":return new m1(e.name);case"bool":return new w1(e.name);case"string":return new P1(e.name);case"bytes":return new v1(e.name);case"":return new x1(e.name)}let n=e.type.match(qE);if(n){let r=parseInt(n[2]||"256");return v(r!==0&&r<=256&&r%8===0,"invalid "+n[1]+" bit length","param",e),new N1(r/8,n[1]==="int",e.name)}if(n=e.type.match($E),n){let r=parseInt(n[1]);return v(r!==0&&r<=32,"invalid bytes length","param",e),new A1(r,e.name)}v(!1,"invalid type","type",e.type)}getDefaultValue(e){const n=e.map(s=>this.#e(ne.from(s)));return new mo(n,"_").defaultValue()}encode(e,n){Zm(n.length,e.length,"types/values length mismatch");const r=e.map(o=>this.#e(ne.from(o))),s=new mo(r,"_"),i=new Bu;return s.encode(i,n),i.data}decode(e,n,r){const s=e.map(o=>this.#e(ne.from(o)));return new mo(s,"_").decode(new Wc(n,r,Eh))}static _setDefaultMaxInflation(e){v(typeof e=="number"&&Number.isInteger(e),"invalid defaultMaxInflation factor","value",e),Eh=e}static defaultAbiCoder(){return Rl==null&&(Rl=new Ss),Rl}static getBuiltinCallException(e,n,r){return e2(e,n,r,Ss.defaultAbiCoder())}}class t2{fragment;name;signature;topic;args;constructor(e,n,r){const s=e.name,i=e.format();z(this,{fragment:e,name:s,signature:i,topic:n,args:r})}}class n2{fragment;name;args;signature;selector;value;constructor(e,n,r,s){const i=e.name,o=e.format();z(this,{fragment:e,name:i,args:r,signature:o,selector:n,value:s})}}class r2{fragment;name;args;signature;selector;constructor(e,n,r){const s=e.name,i=e.format();z(this,{fragment:e,name:s,args:r,signature:i,selector:n})}}class xh{hash;_isIndexed;static isIndexed(e){return!!(e&&e._isIndexed)}constructor(e){z(this,{hash:e,_isIndexed:!0})}}const bh={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},Sh={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&bh[t.toString()]&&(e=bh[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class ar{fragments;deploy;fallback;receive;#e;#t;#n;#r;constructor(e){let n=[];typeof e=="string"?n=JSON.parse(e):n=e,this.#n=new Map,this.#e=new Map,this.#t=new Map;const r=[];for(const o of n)try{r.push(Pr.from(o))}catch(a){console.log(`[Warning] Invalid Fragment ${JSON.stringify(o)}:`,a.message)}z(this,{fragments:Object.freeze(r)});let s=null,i=!1;this.#r=this.getAbiCoder(),this.fragments.forEach((o,a)=>{let l;switch(o.type){case"constructor":if(this.deploy){console.log("duplicate definition - constructor");return}z(this,{deploy:o});return;case"fallback":o.inputs.length===0?i=!0:(v(!s||o.payable!==s.payable,"conflicting fallback fragments",`fragments[${a}]`,o),s=o,i=s.payable);return;case"function":l=this.#n;break;case"event":l=this.#t;break;case"error":l=this.#e;break;default:return}const u=o.format();l.has(u)||l.set(u,o)}),this.deploy||z(this,{deploy:cn.from("constructor()")}),z(this,{fallback:s,receive:i})}format(e){const n=e?"minimal":"full";return this.fragments.map(s=>s.format(n))}formatJson(){const e=this.fragments.map(n=>n.format("json"));return JSON.stringify(e.map(n=>JSON.parse(n)))}getAbiCoder(){return Ss.defaultAbiCoder()}#s(e,n,r){if(se(e)){const i=e.toLowerCase();for(const o of this.#n.values())if(i===o.selector)return o;return null}if(e.indexOf("(")===-1){const i=[];for(const[o,a]of this.#n)o.split("(")[0]===e&&i.push(a);if(n){const o=n.length>0?n[n.length-1]:null;let a=n.length,l=!0;ve.isTyped(o)&&o.type==="overrides"&&(l=!1,a--);for(let u=i.length-1;u>=0;u--){const f=i[u].inputs.length;f!==a&&(!l||f!==a-1)&&i.splice(u,1)}for(let u=i.length-1;u>=0;u--){const f=i[u].inputs;for(let c=0;c=f.length){if(n[c].type==="overrides")continue;i.splice(u,1);break}if(n[c].type!==f[c].baseType){i.splice(u,1);break}}}}if(i.length===1&&n&&n.length!==i[0].inputs.length){const o=n[n.length-1];(o==null||Array.isArray(o)||typeof o!="object")&&i.splice(0,1)}if(i.length===0)return null;if(i.length>1&&r){const o=i.map(a=>JSON.stringify(a.format())).join(", ");v(!1,`ambiguous function description (i.e. matches ${o})`,"key",e)}return i[0]}const s=this.#n.get(Wt.from(e).format());return s||null}getFunctionName(e){const n=this.#s(e,null,!1);return v(n,"no matching function","key",e),n.name}hasFunction(e){return!!this.#s(e,null,!1)}getFunction(e,n){return this.#s(e,n||null,!0)}forEachFunction(e){const n=Array.from(this.#n.keys());n.sort((r,s)=>r.localeCompare(s));for(let r=0;r=0;o--)i[o].inputs.length=0;o--){const a=i[o].inputs;for(let l=0;l1&&r){const o=i.map(a=>JSON.stringify(a.format())).join(", ");v(!1,`ambiguous event description (i.e. matches ${o})`,"key",e)}return i[0]}const s=this.#t.get(Jt.from(e).format());return s||null}getEventName(e){const n=this.#o(e,null,!1);return v(n,"no matching event","key",e),n.name}hasEvent(e){return!!this.#o(e,null,!1)}getEvent(e,n){return this.#o(e,n||null,!0)}forEachEvent(e){const n=Array.from(this.#t.keys());n.sort((r,s)=>r.localeCompare(s));for(let r=0;r1){const i=s.map(o=>JSON.stringify(o.format())).join(", ");v(!1,`ambiguous error description (i.e. ${i})`,"name",e)}return s[0]}if(e=et.from(e).format(),e==="Error(string)")return et.from("error Error(string)");if(e==="Panic(uint256)")return et.from("error Panic(uint256)");const r=this.#e.get(e);return r||null}forEachError(e){const n=Array.from(this.#e.keys());n.sort((r,s)=>r.localeCompare(s));for(let r=0;ri.type==="string"?kr(o):i.type==="bytes"?ke(R(o)):(i.type==="bool"&&typeof o=="boolean"?o=o?"0x01":"0x00":i.type.match(/^u?int/)?o=Jn(o):i.type.match(/^bytes/)?o=Ev(o,32):i.type==="address"&&this.#r.encode(["address"],[o]),vn(R(o),32));for(n.forEach((i,o)=>{const a=e.inputs[o];if(!a.indexed){v(i==null,"cannot filter non-indexed parameters; must be null","contract."+a.name,i);return}i==null?r.push(null):a.baseType==="array"||a.baseType==="tuple"?v(!1,"filtering with tuples or arrays not supported","contract."+a.name,i):Array.isArray(i)?r.push(i.map(l=>s(a,l))):r.push(s(a,i))});r.length&&r[r.length-1]===null;)r.pop();return r}encodeEventLog(e,n){if(typeof e=="string"){const o=this.getEvent(e);v(o,"unknown event","eventFragment",e),e=o}const r=[],s=[],i=[];return e.anonymous||r.push(e.topicHash),v(n.length===e.inputs.length,"event arguments/values mismatch","values",n),e.inputs.forEach((o,a)=>{const l=n[a];if(o.indexed)if(o.type==="string")r.push(kr(l));else if(o.type==="bytes")r.push(ke(l));else{if(o.baseType==="tuple"||o.baseType==="array")throw new Error("not implemented");r.push(this.#r.encode([o.type],[l]))}else s.push(o),i.push(l)}),{data:this.#r.encode(s,i),topics:r}}decodeEventLog(e,n,r){if(typeof e=="string"){const w=this.getEvent(e);v(w,"unknown event","eventFragment",e),e=w}if(r!=null&&!e.anonymous){const w=e.topicHash;v(se(r[0],32)&&r[0].toLowerCase()===w,"fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const s=[],i=[],o=[];e.inputs.forEach((w,m)=>{w.indexed?w.type==="string"||w.type==="bytes"||w.baseType==="tuple"||w.baseType==="array"?(s.push(ne.from({type:"bytes32",name:w.name})),o.push(!0)):(s.push(w),o.push(!1)):(i.push(w),o.push(!1))});const a=r!=null?this.#r.decode(s,ce(r)):null,l=this.#r.decode(i,n,!0),u=[],f=[];let c=0,d=0;return e.inputs.forEach((w,m)=>{let g=null;if(w.indexed)if(a==null)g=new xh(null);else if(o[m])g=new xh(a[d++]);else try{g=a[d++]}catch(A){g=A}else try{g=l[c++]}catch(A){g=A}u.push(g),f.push(w.name||null)}),un.fromItems(u,f)}parseTransaction(e){const n=Q(e.data,"tx.data"),r=U(e.value!=null?e.value:0,"tx.value"),s=this.getFunction(R(n.slice(0,4)));if(!s)return null;const i=this.#r.decode(s.inputs,n.slice(4));return new n2(s,s.selector,i,r)}parseCallResult(e){throw new Error("@TODO")}parseLog(e){const n=this.getEvent(e.topics[0]);return!n||n.anonymous?null:new t2(n,n.topicHash,this.decodeEventLog(n,e.data,e.topics))}parseError(e){const n=R(e),r=this.getError(ye(n,0,4));if(!r)return null;const s=this.#r.decode(r.inputs,ye(n,4));return new r2(r,r.selector,s)}static from(e){return e instanceof ar?e:typeof e=="string"?new ar(JSON.parse(e)):typeof e.formatJson=="function"?new ar(e.formatJson()):typeof e.format=="function"?new ar(e.format("json")):new ar(e)}}const Ay=BigInt(0);function cs(t){return t??null}function Ee(t){return t==null?null:t.toString()}class kh{gasPrice;maxFeePerGas;maxPriorityFeePerGas;constructor(e,n,r){z(this,{gasPrice:cs(e),maxFeePerGas:cs(n),maxPriorityFeePerGas:cs(r)})}toJSON(){const{gasPrice:e,maxFeePerGas:n,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:Ee(e),maxFeePerGas:Ee(n),maxPriorityFeePerGas:Ee(r)}}}function ha(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=R(t.data));const n="chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value".split(/,/);for(const s of n)!(s in t)||t[s]==null||(e[s]=U(t[s],`request.${s}`));const r="type,nonce".split(/,/);for(const s of r)!(s in t)||t[s]==null||(e[s]=G(t[s],`request.${s}`));return t.accessList&&(e.accessList=Rr(t.accessList)),t.authorizationList&&(e.authorizationList=t.authorizationList.slice()),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipRead=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),"blobVersionedHashes"in t&&t.blobVersionedHashes&&(e.blobVersionedHashes=t.blobVersionedHashes.slice()),"kzg"in t&&(e.kzg=t.kzg),"blobWrapperVersion"in t&&(e.blobWrapperVersion=t.blobWrapperVersion),"blobs"in t&&t.blobs&&(e.blobs=t.blobs.map(s=>Jc(s)?R(s):Object.assign({},s))),e}class s2{provider;number;hash;timestamp;parentHash;parentBeaconBlockRoot;nonce;difficulty;gasLimit;gasUsed;stateRoot;receiptsRoot;blobGasUsed;excessBlobGas;miner;prevRandao;extraData;baseFeePerGas;#e;constructor(e,n){this.#e=e.transactions.map(r=>typeof r!="string"?new Hi(r,n):r),z(this,{provider:n,hash:cs(e.hash),number:e.number,timestamp:e.timestamp,parentHash:e.parentHash,parentBeaconBlockRoot:e.parentBeaconBlockRoot,nonce:e.nonce,difficulty:e.difficulty,gasLimit:e.gasLimit,gasUsed:e.gasUsed,blobGasUsed:e.blobGasUsed,excessBlobGas:e.excessBlobGas,miner:e.miner,prevRandao:cs(e.prevRandao),extraData:e.extraData,baseFeePerGas:cs(e.baseFeePerGas),stateRoot:e.stateRoot,receiptsRoot:e.receiptsRoot})}get transactions(){return this.#e.map(e=>typeof e=="string"?e:e.hash)}get prefetchedTransactions(){const e=this.#e.slice();return e.length===0?[]:(N(typeof e[0]=="object","transactions were not prefetched with block request","UNSUPPORTED_OPERATION",{operation:"transactionResponses()"}),e)}toJSON(){const{baseFeePerGas:e,difficulty:n,extraData:r,gasLimit:s,gasUsed:i,hash:o,miner:a,prevRandao:l,nonce:u,number:f,parentHash:c,parentBeaconBlockRoot:d,stateRoot:w,receiptsRoot:m,timestamp:g,transactions:A}=this;return{_type:"Block",baseFeePerGas:Ee(e),difficulty:Ee(n),extraData:r,gasLimit:Ee(s),gasUsed:Ee(i),blobGasUsed:Ee(this.blobGasUsed),excessBlobGas:Ee(this.excessBlobGas),hash:o,miner:a,prevRandao:l,nonce:u,number:f,parentHash:c,timestamp:g,parentBeaconBlockRoot:d,stateRoot:w,receiptsRoot:m,transactions:A}}[Symbol.iterator](){let e=0;const n=this.transactions;return{next:()=>enew zi(s,n)));let r=Ay;e.effectiveGasPrice!=null?r=e.effectiveGasPrice:e.gasPrice!=null&&(r=e.gasPrice),z(this,{provider:n,to:e.to,from:e.from,contractAddress:e.contractAddress,hash:e.hash,index:e.index,blockHash:e.blockHash,blockNumber:e.blockNumber,logsBloom:e.logsBloom,gasUsed:e.gasUsed,cumulativeGasUsed:e.cumulativeGasUsed,blobGasUsed:e.blobGasUsed,gasPrice:r,blobGasPrice:e.blobGasPrice,type:e.type,status:e.status,root:e.root})}get logs(){return this.#e}toJSON(){const{to:e,from:n,contractAddress:r,hash:s,index:i,blockHash:o,blockNumber:a,logsBloom:l,logs:u,status:f,root:c}=this;return{_type:"TransactionReceipt",blockHash:o,blockNumber:a,contractAddress:r,cumulativeGasUsed:Ee(this.cumulativeGasUsed),from:n,gasPrice:Ee(this.gasPrice),blobGasUsed:Ee(this.blobGasUsed),blobGasPrice:Ee(this.blobGasPrice),gasUsed:Ee(this.gasUsed),hash:s,index:i,logs:u,logsBloom:l,root:c,status:f,to:e}}get length(){return this.logs.length}[Symbol.iterator](){let e=0;return{next:()=>e{if(a)return null;const{blockNumber:d,nonce:w}=await Ve({blockNumber:this.provider.getBlockNumber(),nonce:this.provider.getTransactionCount(this.from)});if(w{if(d==null||d.status!==0)return d;N(!1,"transaction execution reverted","CALL_EXCEPTION",{action:"sendTransaction",data:null,reason:null,invocation:null,revert:null,transaction:{to:d.to,from:d.from,data:""},receipt:d})},f=await this.provider.getTransactionReceipt(this.hash);if(r===0)return u(f);if(f){if(r===1||await f.confirmations()>=r)return u(f)}else if(await l(),r===0)return null;return await new Promise((d,w)=>{const m=[],g=()=>{m.forEach(h=>h())};if(m.push(()=>{a=!0}),s>0){const h=setTimeout(()=>{g(),w(le("wait for transaction timeout","TIMEOUT"))},s);m.push(()=>{clearTimeout(h)})}const A=async h=>{if(await h.confirmations()>=r){g();try{d(u(h))}catch(p){w(p)}}};if(m.push(()=>{this.provider.off(this.hash,A)}),this.provider.on(this.hash,A),i>=0){const h=async()=>{try{await l()}catch(p){if(Fe(p,"TRANSACTION_REPLACED")){g(),w(p);return}}a||this.provider.once("block",h)};m.push(()=>{this.provider.off("block",h)}),this.provider.once("block",h)}})}isMined(){return this.blockHash!=null}isLegacy(){return this.type===0}isBerlin(){return this.type===1}isLondon(){return this.type===2}isCancun(){return this.type===3}removedEvent(){return N(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),by(this)}reorderedEvent(e){return N(this.isMined(),"unmined transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),N(!e||e.isMined(),"unmined 'other' transaction canot be orphaned","UNSUPPORTED_OPERATION",{operation:"removeEvent()"}),xy(this,e)}replaceableTransaction(e){v(Number.isInteger(e)&&e>=0,"invalid startBlock","startBlock",e);const n=new Hi(this,this.provider);return n.#e=e,n}}function i2(t){return{orphan:"drop-block",hash:t.hash,number:t.number}}function xy(t,e){return{orphan:"reorder-transaction",tx:t,other:e}}function by(t){return{orphan:"drop-transaction",tx:t}}function o2(t){return{orphan:"drop-log",log:{transactionHash:t.transactionHash,blockHash:t.blockHash,blockNumber:t.blockNumber,address:t.address,data:t.data,topics:Object.freeze(t.topics.slice()),index:t.index}}}class lf extends zi{interface;fragment;args;constructor(e,n,r){super(e,e.provider);const s=n.decodeEventLog(r,e.data,e.topics);z(this,{args:s,fragment:r,interface:n})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class Sy extends zi{error;constructor(e,n){super(e,e.provider),z(this,{error:n})}}class a2 extends Ey{#e;constructor(e,n,r){super(r,n),this.#e=e}get logs(){return super.logs.map(e=>{const n=e.topics.length?this.#e.getEvent(e.topics[0]):null;if(n)try{return new lf(e,this.#e,n)}catch(r){return new Sy(e,r)}return e})}}class uf extends Hi{#e;constructor(e,n,r){super(r,n),this.#e=e}async wait(e,n){const r=await super.wait(e,n);return r==null?null:new a2(this.#e,this.provider,r)}}class ky extends qm{log;constructor(e,n,r,s){super(e,n,r),z(this,{log:s})}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}class l2 extends ky{constructor(e,n,r,s,i){super(e,n,r,new lf(i,e.interface,s));const o=e.interface.decodeEventLog(s,this.log.data,this.log.topics);z(this,{args:o,fragment:s})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}const Nh=BigInt(0);function Ny(t){return t&&typeof t.call=="function"}function Py(t){return t&&typeof t.estimateGas=="function"}function Ga(t){return t&&typeof t.resolveName=="function"}function Cy(t){return t&&typeof t.sendTransaction=="function"}function Ty(t){if(t!=null){if(Ga(t))return t;if(t.provider)return t.provider}}class u2{#e;fragment;constructor(e,n,r){if(z(this,{fragment:n}),n.inputs.lengthr[l]==null?null:a.walkAsync(r[l],(f,c)=>f==="address"?Array.isArray(c)?Promise.all(c.map(d=>Je(d,i))):Je(c,i):c)));return e.interface.encodeFilterTopics(n,o)}()}getTopicFilter(){return this.#e}}function Cr(t,e){return t==null?null:typeof t[e]=="function"?t:t.provider&&typeof t.provider[e]=="function"?t.provider:null}function mr(t){return t==null?null:t.provider||null}async function Iy(t,e){const n=ve.dereference(t,"overrides");v(typeof n=="object","invalid overrides parameter","overrides",t);const r=ha(n);return v(r.to==null||(e||[]).indexOf("to")>=0,"cannot override to","overrides.to",r.to),v(r.data==null||(e||[]).indexOf("data")>=0,"cannot override data","overrides.data",r.data),r.from&&(r.from=r.from),r}async function c2(t,e,n){const r=Cr(t,"resolveName"),s=Ga(r)?r:null;return await Promise.all(e.map((i,o)=>i.walkAsync(n[o],(a,l)=>(l=ve.dereference(l,a),a==="address"?Je(l,s):l))))}function f2(t){const e=async function(o){const a=await Iy(o,["data"]);a.to=await t.getAddress(),a.from&&(a.from=await Je(a.from,Ty(t.runner)));const l=t.interface,u=U(a.value||Nh,"overrides.value")===Nh,f=(a.data||"0x")==="0x";l.fallback&&!l.fallback.payable&&l.receive&&!f&&!u&&v(!1,"cannot send data to receive or send value to non-payable fallback","overrides",o),v(l.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data);const c=l.receive||l.fallback&&l.fallback.payable;return v(c||u,"cannot send value to non-payable fallback","overrides.value",a.value),v(l.fallback||f,"cannot send data to receive-only contract","overrides.data",a.data),a},n=async function(o){const a=Cr(t.runner,"call");N(Ny(a),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const l=await e(o);try{return await a.call(l)}catch(u){throw Kc(u)&&u.data?t.interface.makeError(u.data,l):u}},r=async function(o){const a=t.runner;N(Cy(a),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const l=await a.sendTransaction(await e(o)),u=mr(t.runner);return new uf(t.interface,u,l)},s=async function(o){const a=Cr(t.runner,"estimateGas");return N(Py(a),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await a.estimateGas(await e(o))},i=async o=>await r(o);return z(i,{_contract:t,estimateGas:s,populateTransaction:e,send:r,staticCall:n}),i}function d2(t,e){const n=function(...u){const f=t.interface.getFunction(e,u);return N(f,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e,args:u}}),f},r=async function(...u){const f=n(...u);let c={};if(f.inputs.length+1===u.length&&(c=await Iy(u.pop()),c.from&&(c.from=await Je(c.from,Ty(t.runner)))),f.inputs.length!==u.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const d=await c2(t.runner,f.inputs,u);return Object.assign({},c,await Ve({to:t.getAddress(),data:t.interface.encodeFunctionData(f,d)}))},s=async function(...u){const f=await a(...u);return f.length===1?f[0]:f},i=async function(...u){const f=t.runner;N(Cy(f),"contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});const c=await f.sendTransaction(await r(...u)),d=mr(t.runner);return new uf(t.interface,d,c)},o=async function(...u){const f=Cr(t.runner,"estimateGas");return N(Py(f),"contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"}),await f.estimateGas(await r(...u))},a=async function(...u){const f=Cr(t.runner,"call");N(Ny(f),"contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});const c=await r(...u);let d="0x";try{d=await f.call(c)}catch(m){throw Kc(m)&&m.data?t.interface.makeError(m.data,c):m}const w=n(...u);return t.interface.decodeFunctionResult(w,d)},l=async(...u)=>n(...u).constant?await s(...u):await i(...u);return z(l,{name:t.interface.getFunctionName(e),_contract:t,_key:e,getFragment:n,estimateGas:o,populateTransaction:r,send:i,staticCall:s,staticCallResult:a}),Object.defineProperty(l,"fragment",{configurable:!1,enumerable:!0,get:()=>{const u=t.interface.getFunction(e);return N(u,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e}}),u}}),l}function h2(t,e){const n=function(...s){const i=t.interface.getEvent(e,s);return N(i,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e,args:s}}),i},r=function(...s){return new u2(t,n(...s),s)};return z(r,{name:t.interface.getEventName(e),_contract:t,_key:e,getFragment:n}),Object.defineProperty(r,"fragment",{configurable:!1,enumerable:!0,get:()=>{const s=t.interface.getEvent(e);return N(s,"no matching fragment","UNSUPPORTED_OPERATION",{operation:"fragment",info:{key:e}}),s}}),r}const pa=Symbol.for("_ethersInternal_contract"),Ry=new WeakMap;function p2(t,e){Ry.set(t[pa],e)}function ft(t){return Ry.get(t[pa])}function m2(t){return t&&typeof t=="object"&&"getTopicFilter"in t&&typeof t.getTopicFilter=="function"&&t.fragment}async function cf(t,e){let n,r=null;if(Array.isArray(e)){const i=function(o){if(se(o,32))return o;const a=t.interface.getEvent(o);return v(a,"unknown fragment","name",o),a.topicHash};n=e.map(o=>o==null?null:Array.isArray(o)?o.map(i):i(o))}else e==="*"?n=[null]:typeof e=="string"?se(e,32)?n=[e]:(r=t.interface.getEvent(e),v(r,"unknown fragment","event",e),n=[r.topicHash]):m2(e)?n=await e.getTopicFilter():"fragment"in e?(r=e.fragment,n=[r.topicHash]):v(!1,"unknown event name","event",e);n=n.map(i=>{if(i==null)return null;if(Array.isArray(i)){const o=Array.from(new Set(i.map(a=>a.toLowerCase())).values());return o.length===1?o[0]:(o.sort(),o)}return i.toLowerCase()});const s=n.map(i=>i==null?"null":Array.isArray(i)?i.join("|"):i).join("&");return{fragment:r,tag:s,topics:n}}async function Js(t,e){const{subs:n}=ft(t);return n.get((await cf(t,e)).tag)||null}async function Ph(t,e,n){const r=mr(t.runner);N(r,"contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:e});const{fragment:s,tag:i,topics:o}=await cf(t,n),{addr:a,subs:l}=ft(t);let u=l.get(i);if(!u){const c={address:a||t,topics:o},d=A=>{let h=s;if(h==null)try{h=t.interface.getEvent(A.topics[0])}catch{}if(h){const p=h,y=s?t.interface.decodeEventLog(s,A.data,A.topics):[];Ku(t,n,y,E=>new l2(t,E,n,p,A))}else Ku(t,n,[],p=>new ky(t,p,n,A))};let w=[];u={tag:i,listeners:[],start:()=>{w.length||w.push(r.on(c,d))},stop:async()=>{if(w.length==0)return;let A=w;w=[],await Promise.all(A),r.off(c,d)}},l.set(i,u)}return u}let Qu=Promise.resolve();async function g2(t,e,n,r){await Qu;const s=await Js(t,e);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter(({listener:o,once:a})=>{const l=Array.from(n);r&&l.push(r(a?null:o));try{o.call(t,...l)}catch{}return!a}),s.listeners.length===0&&(s.stop(),ft(t).subs.delete(s.tag)),i>0}async function Ku(t,e,n,r){try{await Qu}catch{}const s=g2(t,e,n,r);return Qu=s,await s}const yo=["then"];class si{target;interface;runner;filters;[pa];fallback;constructor(e,n,r,s){v(typeof e=="string"||Dg(e),"invalid value for Contract target","target",e),r==null&&(r=null);const i=ar.from(n);z(this,{target:e,runner:r,interface:i}),Object.defineProperty(this,pa,{value:{}});let o,a=null,l=null;if(s){const c=mr(r);l=new uf(this.interface,c,s)}let u=new Map;if(typeof e=="string")if(se(e))a=e,o=Promise.resolve(e);else{const c=Cr(r,"resolveName");if(!Ga(c))throw le("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});o=c.resolveName(e).then(d=>{if(d==null)throw le("an ENS name used for a contract target must be correctly configured","UNCONFIGURED_NAME",{value:e});return ft(this).addr=d,d})}else o=e.getAddress().then(c=>{if(c==null)throw new Error("TODO");return ft(this).addr=c,c});p2(this,{addrPromise:o,addr:a,deployTx:l,subs:u});const f=new Proxy({},{get:(c,d,w)=>{if(typeof d=="symbol"||yo.indexOf(d)>=0)return Reflect.get(c,d,w);try{return this.getEvent(d)}catch(m){if(!Fe(m,"INVALID_ARGUMENT")||m.argument!=="key")throw m}},has:(c,d)=>yo.indexOf(d)>=0?Reflect.has(c,d):Reflect.has(c,d)||this.interface.hasEvent(String(d))});return z(this,{filters:f}),z(this,{fallback:i.receive||i.fallback?f2(this):null}),new Proxy(this,{get:(c,d,w)=>{if(typeof d=="symbol"||d in c||yo.indexOf(d)>=0)return Reflect.get(c,d,w);try{return c.getFunction(d)}catch(m){if(!Fe(m,"INVALID_ARGUMENT")||m.argument!=="key")throw m}},has:(c,d)=>typeof d=="symbol"||d in c||yo.indexOf(d)>=0?Reflect.has(c,d):c.interface.hasFunction(d)})}connect(e){return new si(this.target,this.interface,e)}attach(e){return new si(e,this.interface,this.runner)}async getAddress(){return await ft(this).addrPromise}async getDeployedCode(){const e=mr(this.runner);N(e,"runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"getDeployedCode"});const n=await e.getCode(await this.getAddress());return n==="0x"?null:n}async waitForDeployment(){const e=this.deploymentTransaction();if(e)return await e.wait(),this;if(await this.getDeployedCode()!=null)return this;const r=mr(this.runner);return N(r!=null,"contract runner does not support .provider","UNSUPPORTED_OPERATION",{operation:"waitForDeployment"}),new Promise((s,i)=>{const o=async()=>{try{if(await this.getDeployedCode()!=null)return s(this);r.once("block",o)}catch(a){i(a)}};o()})}deploymentTransaction(){return ft(this).deployTx}getFunction(e){return typeof e!="string"&&(e=e.format()),d2(this,e)}getEvent(e){return typeof e!="string"&&(e=e.format()),h2(this,e)}async queryTransaction(e){throw new Error("@TODO")}async queryFilter(e,n,r){n==null&&(n=0),r==null&&(r="latest");const{addr:s,addrPromise:i}=ft(this),o=s||await i,{fragment:a,topics:l}=await cf(this,e),u={address:o,topics:l,fromBlock:n,toBlock:r},f=mr(this.runner);return N(f,"contract runner does not have a provider","UNSUPPORTED_OPERATION",{operation:"queryFilter"}),(await f.getLogs(u)).map(c=>{let d=a;if(d==null)try{d=this.interface.getEvent(c.topics[0])}catch{}if(d)try{return new lf(c,this.interface,d)}catch(w){return new Sy(c,w)}return new zi(c,f)})}async on(e,n){const r=await Ph(this,"on",e);return r.listeners.push({listener:n,once:!1}),r.start(),this}async once(e,n){const r=await Ph(this,"once",e);return r.listeners.push({listener:n,once:!0}),r.start(),this}async emit(e,...n){return await Ku(this,e,n,null)}async listenerCount(e){if(e){const s=await Js(this,e);return s?s.listeners.length:0}const{subs:n}=ft(this);let r=0;for(const{listeners:s}of n.values())r+=s.length;return r}async listeners(e){if(e){const s=await Js(this,e);return s?s.listeners.map(({listener:i})=>i):[]}const{subs:n}=ft(this);let r=[];for(const{listeners:s}of n.values())r=r.concat(s.map(({listener:i})=>i));return r}async off(e,n){const r=await Js(this,e);if(!r)return this;if(n){const s=r.listeners.map(({listener:i})=>i).indexOf(n);s>=0&&r.listeners.splice(s,1)}return(n==null||r.listeners.length===0)&&(r.stop(),ft(this).subs.delete(r.tag)),this}async removeAllListeners(e){if(e){const n=await Js(this,e);if(!n)return this;n.stop(),ft(this).subs.delete(n.tag)}else{const{subs:n}=ft(this);for(const{tag:r,stop:s}of n.values())s(),n.delete(r)}return this}async addListener(e,n){return await this.on(e,n)}async removeListener(e,n){return await this.off(e,n)}static buildClass(e){class n extends si{constructor(s,i=null){super(s,e,i)}}return n}static from(e,n,r){return r==null&&(r=null),new this(e,n,r)}}function y2(){return si}class Vn extends y2(){}function Bl(t){return t.match(/^ipfs:\/\/ipfs\//i)?t=t.substring(12):t.match(/^ipfs:\/\//i)?t=t.substring(7):v(!1,"unsupported IPFS format","link",t),`https://gateway.ipfs.io/ipfs/${t}`}class w2{name;constructor(e){z(this,{name:e})}connect(e){return this}supportsCoinType(e){return!1}async encodeAddress(e,n){throw new Error("unsupported coin")}async decodeAddress(e,n){throw new Error("unsupported coin")}}const By=new RegExp("^(ipfs)://(.*)$","i"),Ch=[new RegExp("^(https)://(.*)$","i"),new RegExp("^(data):(.*)$","i"),By,new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$","i")];class fs{provider;address;name;#e;#t;constructor(e,n,r){z(this,{provider:e,address:n,name:r}),this.#e=null,this.#t=new Vn(n,["function supportsInterface(bytes4) view returns (bool)","function resolve(bytes, bytes) view returns (bytes)","function addr(bytes32) view returns (address)","function addr(bytes32, uint) view returns (bytes)","function text(bytes32, string) view returns (string)","function contenthash(bytes32) view returns (bytes)"],e)}async supportsWildcard(){return this.#e==null&&(this.#e=(async()=>{try{return await this.#t.supportsInterface("0x9061b923")}catch(e){if(Fe(e,"CALL_EXCEPTION"))return!1;throw this.#e=null,e}})()),await this.#e}async#n(e,n){n=(n||[]).slice();const r=this.#t.interface;n.unshift(Vu(this.name));let s=null;await this.supportsWildcard()&&(s=r.getFunction(e),N(s,"missing fragment","UNKNOWN_ERROR",{info:{funcName:e}}),n=[OE(this.name,255),r.encodeFunctionData(s,n)],e="resolve(bytes,bytes)"),n.push({enableCcipRead:!0});try{const i=await this.#t[e](...n);return s?r.decodeFunctionResult(s,i)[0]:i}catch(i){if(!Fe(i,"CALL_EXCEPTION"))throw i}return null}async getAddress(e){if(e==null&&(e=60),e===60)try{const i=await this.#n("addr(bytes32)");return i==null||i===Si?null:i}catch(i){if(Fe(i,"CALL_EXCEPTION"))return null;throw i}if(e>=0&&e<2147483648){let i=e+2147483648;const o=await this.#n("addr(bytes32,uint)",[i]);if(se(o,20))return q(o)}let n=null;for(const i of this.provider.plugins)if(i instanceof w2&&i.supportsCoinType(e)){n=i;break}if(n==null)return null;const r=await this.#n("addr(bytes32,uint)",[e]);if(r==null||r==="0x")return null;const s=await n.decodeAddress(e,r);if(s!=null)return s;N(!1,"invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${e})`,info:{coinType:e,data:r}})}async getText(e){const n=await this.#n("text(bytes32,string)",[e]);return n==null||n==="0x"?null:n}async getContentHash(){const e=await this.#n("contenthash(bytes32)");if(e==null||e==="0x")return null;const n=e.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(n){const s=n[1]==="e3010170"?"ipfs":"ipns",i=parseInt(n[4],16);if(n[5].length===i*2)return`${s}://${bv("0x"+n[2])}`}const r=e.match(/^0xe40101fa011b20([0-9a-f]*)$/);if(r&&r[1].length===64)return`bzz://${r[1]}`;N(!1,"invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:e}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const e=[{type:"name",value:this.name}];try{const n=await this.getText("avatar");if(n==null)return e.push({type:"!avatar",value:""}),{url:null,linkage:e};e.push({type:"avatar",value:n});for(let r=0;r{if(e&&n==null)return null;if(!Array.isArray(n))throw new Error("not an array");return n.map(r=>t(r))}}function Gi(t,e){return n=>{const r={};for(const s in t){let i=s;if(e&&s in e&&!(i in n)){for(const o of e[s])if(o in n){i=o;break}}try{const o=t[s](n[i]);o!==void 0&&(r[s]=o)}catch(o){const a=o instanceof Error?o.message:"not-an-error";N(!1,`invalid value for value.${s} (${a})`,"BAD_DATA",{value:n})}}return r}}function v2(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}v(!1,`invalid boolean; ${JSON.stringify(t)}`,"value",t)}function ks(t){return v(se(t,!0),"invalid data","value",t),t}function Le(t){return v(se(t,32),"invalid hash","value",t),t}const A2=Gi({address:q,blockHash:Le,blockNumber:G,data:ks,index:G,removed:W(v2,!1),topics:Ii(Le),transactionHash:Le,transactionIndex:G},{index:["logIndex"]});function E2(t){return A2(t)}const x2=Gi({hash:W(Le),parentHash:Le,parentBeaconBlockRoot:W(Le,null),number:G,timestamp:G,nonce:W(ks),difficulty:U,gasLimit:U,gasUsed:U,stateRoot:W(Le,null),receiptsRoot:W(Le,null),blobGasUsed:W(U,null),excessBlobGas:W(U,null),miner:W(q),prevRandao:W(Le,null),extraData:ks,baseFeePerGas:W(U)},{prevRandao:["mixHash"]});function b2(t){const e=x2(t);return e.transactions=t.transactions.map(n=>typeof n=="string"?n:Oy(n)),e}const S2=Gi({transactionIndex:G,blockNumber:G,transactionHash:Le,address:q,topics:Ii(Le),data:ks,index:G,blockHash:Le},{index:["logIndex"]});function k2(t){return S2(t)}const N2=Gi({to:W(q,null),from:W(q,null),contractAddress:W(q,null),index:G,root:W(R),gasUsed:U,blobGasUsed:W(U,null),logsBloom:W(ks),blockHash:Le,hash:Le,logs:Ii(k2),blockNumber:G,cumulativeGasUsed:U,effectiveGasPrice:W(U),blobGasPrice:W(U,null),status:W(G),type:W(G,0)},{effectiveGasPrice:["gasPrice"],hash:["transactionHash"],index:["transactionIndex"]});function P2(t){return N2(t)}function Oy(t){t.to&&U(t.to)===Th&&(t.to="0x0000000000000000000000000000000000000000");const e=Gi({hash:Le,index:W(G,void 0),type:n=>n==="0x"||n==null?0:G(n),accessList:W(Rr,null),blobVersionedHashes:W(Ii(Le,!0),null),authorizationList:W(Ii(n=>{let r;if(n.signature)r=n.signature;else{let s=n.yParity;s==="0x1b"?s=0:s==="0x1c"&&(s=1),r=Object.assign({},n,{yParity:s})}return{address:q(n.address),chainId:U(n.chainId),nonce:U(n.nonce),signature:de.from(r)}},!1),null),blockHash:W(Le,null),blockNumber:W(G,null),transactionIndex:W(G,null),from:q,gasPrice:W(U),maxPriorityFeePerGas:W(U),maxFeePerGas:W(U),maxFeePerBlobGas:W(U,null),gasLimit:U,to:W(q,null),value:U,nonce:G,data:ks,creates:W(q,null),chainId:W(U,null)},{data:["input"],gasLimit:["gas"],index:["transactionIndex"]})(t);if(e.to==null&&e.creates==null&&(e.creates=p1(e)),(t.type===1||t.type===2)&&t.accessList==null&&(e.accessList=[]),t.signature?e.signature=de.from(t.signature):e.signature=de.from(t),e.chainId==null){const n=e.signature.legacyChainId;n!=null&&(e.chainId=n)}return e.blockHash&&U(e.blockHash)===Th&&(e.blockHash=null),e}const C2="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";class ji{name;constructor(e){z(this,{name:e})}clone(){return new ji(this.name)}}class ja extends ji{effectiveBlock;txBase;txCreate;txDataZero;txDataNonzero;txAccessListStorageKey;txAccessListAddress;constructor(e,n){e==null&&(e=0),super(`org.ethers.network.plugins.GasCost#${e||0}`);const r={effectiveBlock:e};function s(i,o){let a=(n||{})[i];a==null&&(a=o),v(typeof a=="number",`invalud value for ${i}`,"costs",n),r[i]=a}s("txBase",21e3),s("txCreate",32e3),s("txDataZero",4),s("txDataNonzero",16),s("txAccessListStorageKey",1900),s("txAccessListAddress",2400),z(this,r)}clone(){return new ja(this.effectiveBlock,this)}}class Va extends ji{address;targetNetwork;constructor(e,n){super("org.ethers.plugins.network.Ens"),z(this,{address:e||C2,targetNetwork:n??1})}clone(){return new Va(this.address,this.targetNetwork)}}class T2 extends ji{#e;#t;get url(){return this.#e}get processFunc(){return this.#t}constructor(e,n){super("org.ethers.plugins.network.FetchUrlFeeDataPlugin"),this.#e=e,this.#t=n}clone(){return this}}const Ol=new Map;class pt{#e;#t;#n;constructor(e,n){this.#e=e,this.#t=U(n),this.#n=new Map}toJSON(){return{name:this.name,chainId:String(this.chainId)}}get name(){return this.#e}set name(e){this.#e=e}get chainId(){return this.#t}set chainId(e){this.#t=U(e,"chainId")}matches(e){if(e==null)return!1;if(typeof e=="string"){try{return this.chainId===U(e)}catch{}return this.name===e}if(typeof e=="number"||typeof e=="bigint"){try{return this.chainId===U(e)}catch{}return!1}if(typeof e=="object"){if(e.chainId!=null){try{return this.chainId===U(e.chainId)}catch{}return!1}return e.name!=null?this.name===e.name:!1}return!1}get plugins(){return Array.from(this.#n.values())}attachPlugin(e){if(this.#n.get(e.name))throw new Error(`cannot replace existing plugin: ${e.name} `);return this.#n.set(e.name,e.clone()),this}getPlugin(e){return this.#n.get(e)||null}getPlugins(e){return this.plugins.filter(n=>n.name.split("#")[0]===e)}clone(){const e=new pt(this.name,this.chainId);return this.plugins.forEach(n=>{e.attachPlugin(n.clone())}),e}computeIntrinsicGas(e){const n=this.getPlugin("org.ethers.plugins.network.GasCost")||new ja;let r=n.txBase;if(e.to==null&&(r+=n.txCreate),e.data)for(let s=2;s9){let s=BigInt(r[1].substring(0,9));r[1].substring(9).match(/^0+$/)||s++,r[1]=s.toString()}return BigInt(r[0]+r[1])}function Rh(t){return new T2(t,async(e,n,r)=>{r.setHeader("User-Agent","ethers");let s;try{const[i,o]=await Promise.all([r.send(),e()]);s=i;const a=s.bodyJson.standard;return{gasPrice:o.gasPrice,maxFeePerGas:Ih(a.maxFee,9),maxPriorityFeePerGas:Ih(a.maxPriorityFee,9)}}catch(i){N(!1,`error encountered with polygon gas station (${JSON.stringify(r.url)})`,"SERVER_ERROR",{request:r,response:s,error:i})}})}let Bh=!1;function I2(){if(Bh)return;Bh=!0;function t(e,n,r){const s=function(){const i=new pt(e,n);return r.ensNetwork!=null&&i.attachPlugin(new Va(null,r.ensNetwork)),i.attachPlugin(new ja),(r.plugins||[]).forEach(o=>{i.attachPlugin(o)}),i};pt.register(e,s),pt.register(n,s),r.altNames&&r.altNames.forEach(i=>{pt.register(i,s)})}t("mainnet",1,{ensNetwork:1,altNames:["homestead"]}),t("ropsten",3,{ensNetwork:3}),t("rinkeby",4,{ensNetwork:4}),t("goerli",5,{ensNetwork:5}),t("kovan",42,{ensNetwork:42}),t("sepolia",11155111,{ensNetwork:11155111}),t("holesky",17e3,{ensNetwork:17e3}),t("classic",61,{}),t("classicKotti",6,{}),t("arbitrum",42161,{ensNetwork:1}),t("arbitrum-goerli",421613,{}),t("arbitrum-sepolia",421614,{}),t("base",8453,{ensNetwork:1}),t("base-goerli",84531,{}),t("base-sepolia",84532,{}),t("bnb",56,{ensNetwork:1}),t("bnbt",97,{}),t("filecoin",314,{}),t("filecoin-calibration",314159,{}),t("linea",59144,{ensNetwork:1}),t("linea-goerli",59140,{}),t("linea-sepolia",59141,{}),t("matic",137,{ensNetwork:1,plugins:[Rh("https://gasstation.polygon.technology/v2")]}),t("matic-amoy",80002,{}),t("matic-mumbai",80001,{altNames:["maticMumbai","maticmum"],plugins:[Rh("https://gasstation-testnet.polygon.technology/v2")]}),t("optimism",10,{ensNetwork:1,plugins:[]}),t("optimism-goerli",420,{}),t("optimism-sepolia",11155420,{}),t("xdai",100,{ensNetwork:1})}function Ju(t){return JSON.parse(JSON.stringify(t))}class R2{#e;#t;#n;#r;constructor(e){this.#e=e,this.#t=null,this.#n=4e3,this.#r=-2}get pollingInterval(){return this.#n}set pollingInterval(e){this.#n=e}async#s(){try{const e=await this.#e.getBlockNumber();if(this.#r===-2){this.#r=e;return}if(e!==this.#r){for(let n=this.#r+1;n<=e;n++){if(this.#t==null)return;await this.#e.emit("block",n)}this.#r=e}}catch{}this.#t!=null&&(this.#t=this.#e._setTimeout(this.#s.bind(this),this.#n))}start(){this.#t||(this.#t=this.#e._setTimeout(this.#s.bind(this),this.#n),this.#s())}stop(){this.#t&&(this.#e._clearTimeout(this.#t),this.#t=null)}pause(e){this.stop(),e&&(this.#r=-2)}resume(){this.start()}}class ff{#e;#t;#n;constructor(e){this.#e=e,this.#n=!1,this.#t=n=>{this._poll(n,this.#e)}}async _poll(e,n){throw new Error("sub-classes must override this")}start(){this.#n||(this.#n=!0,this.#t(-2),this.#e.on("block",this.#t))}stop(){this.#n&&(this.#n=!1,this.#e.off("block",this.#t))}pause(e){this.stop()}resume(){this.start()}}class B2 extends ff{#e;#t;constructor(e,n){super(e),this.#e=n,this.#t=-2}pause(e){e&&(this.#t=-2),super.pause(e)}async _poll(e,n){const r=await n.getBlock(this.#e);r!=null&&(this.#t===-2?this.#t=r.number:r.number>this.#t&&(n.emit(this.#e,r.number),this.#t=r.number))}}class O2 extends ff{#e;constructor(e,n){super(e),this.#e=Ju(n)}async _poll(e,n){throw new Error("@TODO")}}class L2 extends ff{#e;constructor(e,n){super(e),this.#e=n}async _poll(e,n){const r=await n.getTransactionReceipt(this.#e);r&&n.emit(this.#e,r)}}class df{#e;#t;#n;#r;#s;constructor(e,n){this.#e=e,this.#t=Ju(n),this.#n=this.#o.bind(this),this.#r=!1,this.#s=-2}async#o(e){if(this.#s===-2)return;const n=Ju(this.#t);n.fromBlock=this.#s+1,n.toBlock=e;const r=await this.#e.getLogs(n);if(r.length===0){this.#s{this.#s=e}),this.#e.on("block",this.#n))}stop(){this.#r&&(this.#r=!1,this.#e.off("block",this.#n))}pause(e){this.stop(),e&&(this.#s=-2)}resume(){this.start()}}const F2=BigInt(2),U2=10;function wo(t){return t&&typeof t.then=="function"}function Oo(t,e){return t+":"+JSON.stringify(e,(n,r)=>{if(r==null)return"null";if(typeof r=="bigint")return`bigint:${r.toString()}`;if(typeof r=="string")return r.toLowerCase();if(typeof r=="object"&&!Array.isArray(r)){const s=Object.keys(r);return s.sort(),s.reduce((i,o)=>(i[o]=r[o],i),{})}return r})}class Ly{name;constructor(e){z(this,{name:e})}start(){}stop(){}pause(e){}resume(){}}function D2(t){return JSON.parse(JSON.stringify(t))}function Wu(t){return t=Array.from(new Set(t).values()),t.sort(),t}async function Ll(t,e){if(t==null)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),typeof t=="string")switch(t){case"block":case"debug":case"error":case"finalized":case"network":case"pending":case"safe":return{type:t,tag:t}}if(se(t,32)){const n=t.toLowerCase();return{type:"transaction",tag:Oo("tx",{hash:n}),hash:n}}if(t.orphan){const n=t;return{type:"orphan",tag:Oo("orphan",n),filter:D2(n)}}if(t.address||t.topics){const n=t,r={topics:(n.topics||[]).map(s=>s==null?null:Array.isArray(s)?Wu(s.map(i=>i.toLowerCase())):s.toLowerCase())};if(n.address){const s=[],i=[],o=a=>{se(a)?s.push(a):i.push((async()=>{s.push(await Je(a,e))})())};Array.isArray(n.address)?n.address.forEach(o):o(n.address),i.length&&await Promise.all(i),r.address=Wu(s.map(a=>a.toLowerCase()))}return{filter:r,tag:Oo("event",r),type:"event"}}v(!1,"unknown ProviderEvent","event",t)}function Fl(){return new Date().getTime()}const M2={cacheTimeout:250,pollingInterval:4e3};class _2{#e;#t;#n;#r;#s;#o;#i;#a;#f;#u;#p;#m;constructor(e,n){if(this.#m=Object.assign({},M2,n||{}),e==="any")this.#o=!0,this.#s=null;else if(e){const r=pt.from(e);this.#o=!1,this.#s=Promise.resolve(r),setTimeout(()=>{this.emit("network",r,null)},0)}else this.#o=!1,this.#s=null;this.#a=-1,this.#i=new Map,this.#e=new Map,this.#t=new Map,this.#n=null,this.#r=!1,this.#f=1,this.#u=new Map,this.#p=!1}get pollingInterval(){return this.#m.pollingInterval}get provider(){return this}get plugins(){return Array.from(this.#t.values())}attachPlugin(e){if(this.#t.get(e.name))throw new Error(`cannot replace existing plugin: ${e.name} `);return this.#t.set(e.name,e.connect(this)),this}getPlugin(e){return this.#t.get(e)||null}get disableCcipRead(){return this.#p}set disableCcipRead(e){this.#p=!!e}async#l(e){const n=this.#m.cacheTimeout;if(n<0)return await this._perform(e);const r=Oo(e.method,e);let s=this.#i.get(r);return s||(s=this._perform(e),this.#i.set(r,s),setTimeout(()=>{this.#i.get(r)===s&&this.#i.delete(r)},n)),await s}async ccipReadFetch(e,n,r){if(this.disableCcipRead||r.length===0||e.to==null)return null;const s=e.to.toLowerCase(),i=n.toLowerCase(),o=[];for(let a=0;a=500,`response not found during CCIP fetch: ${c}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:e,info:{url:l,errorMessage:c}}),o.push(c)}N(!1,`error encountered during CCIP fetch: ${o.map(a=>JSON.stringify(a)).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:e,info:{urls:r,errorMessages:o}})}_wrapBlock(e,n){return new s2(b2(e),this)}_wrapLog(e,n){return new zi(E2(e),this)}_wrapTransactionReceipt(e,n){return new Ey(P2(e),this)}_wrapTransactionResponse(e,n){return new Hi(Oy(e),this)}_detectNetwork(){N(!1,"sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(e){N(!1,`unsupported method: ${e.method}`,"UNSUPPORTED_OPERATION",{operation:e.method,info:e})}async getBlockNumber(){const e=G(await this.#l({method:"getBlockNumber"}),"%response");return this.#a>=0&&(this.#a=e),e}_getAddress(e){return Je(e,this)}_getBlockTag(e){if(e==null)return"latest";switch(e){case"earliest":return"0x0";case"finalized":case"latest":case"pending":case"safe":return e}if(se(e))return se(e,32)?e:Ft(e);if(typeof e=="bigint"&&(e=G(e,"blockTag")),typeof e=="number")return e>=0?Ft(e):this.#a>=0?Ft(this.#a+e):this.getBlockNumber().then(n=>Ft(n+e));v(!1,"invalid blockTag","blockTag",e)}_getFilter(e){const n=(e.topics||[]).map(l=>l==null?null:Array.isArray(l)?Wu(l.map(u=>u.toLowerCase())):l.toLowerCase()),r="blockHash"in e?e.blockHash:void 0,s=(l,u,f)=>{let c;switch(l.length){case 0:break;case 1:c=l[0];break;default:l.sort(),c=l}if(r&&(u!=null||f!=null))throw new Error("invalid filter");const d={};return c&&(d.address=c),n.length&&(d.topics=n),u&&(d.fromBlock=u),f&&(d.toBlock=f),r&&(d.blockHash=r),d};let i=[];if(e.address)if(Array.isArray(e.address))for(const l of e.address)i.push(this._getAddress(l));else i.push(this._getAddress(e.address));let o;"fromBlock"in e&&(o=this._getBlockTag(e.fromBlock));let a;return"toBlock"in e&&(a=this._getBlockTag(e.toBlock)),i.filter(l=>typeof l!="string").length||o!=null&&typeof o!="string"||a!=null&&typeof a!="string"?Promise.all([Promise.all(i),o,a]).then(l=>s(l[0],l[1],l[2])):s(i,o,a)}_getTransactionRequest(e){const n=ha(e),r=[];if(["to","from"].forEach(s=>{if(n[s]==null)return;const i=Je(n[s],this);wo(i)?r.push(async function(){n[s]=await i}()):n[s]=i}),n.blockTag!=null){const s=this._getBlockTag(n.blockTag);wo(s)?r.push(async function(){n.blockTag=await s}()):n.blockTag=s}return r.length?async function(){return await Promise.all(r),n}():n}async getNetwork(){if(this.#s==null){const s=(async()=>{try{const i=await this._detectNetwork();return this.emit("network",i,null),i}catch(i){throw this.#s===s&&(this.#s=null),i}})();return this.#s=s,(await s).clone()}const e=this.#s,[n,r]=await Promise.all([e,this._detectNetwork()]);return n.chainId!==r.chainId&&(this.#o?(this.emit("network",r,n),this.#s===e&&(this.#s=Promise.resolve(r))):N(!1,`network changed: ${n.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),n.clone()}async getFeeData(){const e=await this.getNetwork(),n=async()=>{const{_block:s,gasPrice:i,priorityFee:o}=await Ve({_block:this.#w("latest",!1),gasPrice:(async()=>{try{const f=await this.#l({method:"getGasPrice"});return U(f,"%response")}catch{}return null})(),priorityFee:(async()=>{try{const f=await this.#l({method:"getPriorityFee"});return U(f,"%response")}catch{}return null})()});let a=null,l=null;const u=this._wrapBlock(s,e);return u&&u.baseFeePerGas&&(l=o??BigInt("1000000000"),a=u.baseFeePerGas*F2+l),new kh(i,a,l)},r=e.getPlugin("org.ethers.plugins.network.FetchUrlFeeDataPlugin");if(r){const s=new Xt(r.url),i=await r.processFunc(n,this,s);return new kh(i.gasPrice,i.maxFeePerGas,i.maxPriorityFeePerGas)}return await n()}async estimateGas(e){let n=this._getTransactionRequest(e);return wo(n)&&(n=await n),U(await this.#l({method:"estimateGas",transaction:n}),"%response")}async#c(e,n,r){N(r=0&&n==="latest"&&s.to!=null&&ye(i.data,0,4)==="0x556f1830"){const o=i.data,a=await Je(s.to,this);let l;try{l=V2(ye(i.data,4))}catch(c){N(!1,c.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:o}})}N(l.sender.toLowerCase()===a.toLowerCase(),"CCIP Read sender mismatch","CALL_EXCEPTION",{action:"call",data:o,reason:"OffchainLookup",transaction:s,invocation:null,revert:{signature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",name:"OffchainLookup",args:l.errorArgs}});const u=await this.ccipReadFetch(s,l.calldata,l.urls);N(u!=null,"CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:i.data,errorArgs:l.errorArgs}});const f={to:a,data:ce([l.selector,j2([u,l.extraData])])};this.emit("debug",{action:"sendCcipReadCall",transaction:f});try{const c=await this.#c(f,n,r+1);return this.emit("debug",{action:"receiveCcipReadCallResult",transaction:Object.assign({},f),result:c}),c}catch(c){throw this.emit("debug",{action:"receiveCcipReadCallError",transaction:Object.assign({},f),error:c}),c}}throw i}}async#d(e){const{value:n}=await Ve({network:this.getNetwork(),value:e});return n}async call(e){const{tx:n,blockTag:r}=await Ve({tx:this._getTransactionRequest(e),blockTag:this._getBlockTag(e.blockTag)});return await this.#d(this.#c(n,r,e.enableCcipRead?0:-1))}async#h(e,n,r){let s=this._getAddress(n),i=this._getBlockTag(r);return(typeof s!="string"||typeof i!="string")&&([s,i]=await Promise.all([s,i])),await this.#d(this.#l(Object.assign(e,{address:s,blockTag:i})))}async getBalance(e,n){return U(await this.#h({method:"getBalance"},e,n),"%response")}async getTransactionCount(e,n){return G(await this.#h({method:"getTransactionCount"},e,n),"%response")}async getCode(e,n){return R(await this.#h({method:"getCode"},e,n))}async getStorage(e,n,r){const s=U(n,"position");return R(await this.#h({method:"getStorage",position:s},e,r))}async broadcastTransaction(e){const{blockNumber:n,hash:r,network:s}=await Ve({blockNumber:this.getBlockNumber(),hash:this._perform({method:"broadcastTransaction",signedTransaction:e}),network:this.getNetwork()}),i=Bt.from(e);if(i.hash!==r)throw new Error("@TODO: the returned hash did not match");return this._wrapTransactionResponse(i,s).replaceableTransaction(n)}async#w(e,n){if(se(e,32))return await this.#l({method:"getBlock",blockHash:e,includeTransactions:n});let r=this._getBlockTag(e);return typeof r!="string"&&(r=await r),await this.#l({method:"getBlock",blockTag:r,includeTransactions:n})}async getBlock(e,n){const{network:r,params:s}=await Ve({network:this.getNetwork(),params:this.#w(e,!!n)});return s==null?null:this._wrapBlock(s,r)}async getTransaction(e){const{network:n,params:r}=await Ve({network:this.getNetwork(),params:this.#l({method:"getTransaction",hash:e})});return r==null?null:this._wrapTransactionResponse(r,n)}async getTransactionReceipt(e){const{network:n,params:r}=await Ve({network:this.getNetwork(),params:this.#l({method:"getTransactionReceipt",hash:e})});if(r==null)return null;if(r.gasPrice==null&&r.effectiveGasPrice==null){const s=await this.#l({method:"getTransaction",hash:e});if(s==null)throw new Error("report this; could not find tx or effectiveGasPrice");r.effectiveGasPrice=s.gasPrice}return this._wrapTransactionReceipt(r,n)}async getTransactionResult(e){const{result:n}=await Ve({network:this.getNetwork(),result:this.#l({method:"getTransactionResult",hash:e})});return n==null?null:R(n)}async getLogs(e){let n=this._getFilter(e);wo(n)&&(n=await n);const{network:r,params:s}=await Ve({network:this.getNetwork(),params:this.#l({method:"getLogs",filter:n})});return s.map(i=>this._wrapLog(i,r))}_getProvider(e){N(!1,"provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(e){return await fs.fromName(this,e)}async getAvatar(e){const n=await this.getResolver(e);return n?await n.getAvatar():null}async resolveName(e){const n=await this.getResolver(e);return n?await n.getAddress():null}async lookupAddress(e){e=q(e);const n=Vu(e.substring(2).toLowerCase()+".addr.reverse");try{const r=await fs.getEnsAddress(this),i=await new Vn(r,["function resolver(bytes32) view returns (address)"],this).resolver(n);if(i==null||i===Si)return null;const a=await new Vn(i,["function name(bytes32) view returns (string)"],this).name(n);return await this.resolveName(a)!==e?null:a}catch(r){if(Fe(r,"BAD_DATA")&&r.value==="0x"||Fe(r,"CALL_EXCEPTION"))return null;throw r}return null}async waitForTransaction(e,n,r){const s=n??1;return s===0?this.getTransactionReceipt(e):new Promise(async(i,o)=>{let a=null;const l=async u=>{try{const f=await this.getTransactionReceipt(e);if(f!=null&&u-f.blockNumber+1>=s){i(f),a&&(clearTimeout(a),a=null);return}}catch(f){console.log("EEE",f)}this.once("block",l)};r!=null&&(a=setTimeout(()=>{a!=null&&(a=null,this.off("block",l),o(le("timeout","TIMEOUT",{reason:"timeout"})))},r)),l(await this.getBlockNumber())})}async waitForBlock(e){N(!1,"not implemented yet","NOT_IMPLEMENTED",{operation:"waitForBlock"})}_clearTimeout(e){const n=this.#u.get(e);n&&(n.timer&&clearTimeout(n.timer),this.#u.delete(e))}_setTimeout(e,n){n==null&&(n=0);const r=this.#f++,s=()=>{this.#u.delete(r),e()};if(this.paused)this.#u.set(r,{timer:null,func:s,time:n});else{const i=setTimeout(s,n);this.#u.set(r,{timer:i,func:s,time:Fl()})}return r}_forEachSubscriber(e){for(const n of this.#e.values())e(n.subscriber)}_getSubscriber(e){switch(e.type){case"debug":case"error":case"network":return new Ly(e.type);case"block":{const n=new R2(this);return n.pollingInterval=this.pollingInterval,n}case"safe":case"finalized":return new B2(this,e.type);case"event":return new df(this,e.filter);case"transaction":return new L2(this,e.hash);case"orphan":return new O2(this,e.filter)}throw new Error(`unsupported event: ${e.type}`)}_recoverSubscriber(e,n){for(const r of this.#e.values())if(r.subscriber===e){r.started&&r.subscriber.stop(),r.subscriber=n,r.started&&n.start(),this.#n!=null&&n.pause(this.#n);break}}async#g(e,n){let r=await Ll(e,this);return r.type==="event"&&n&&n.length>0&&n[0].removed===!0&&(r=await Ll({orphan:"drop-log",log:n[0]},this)),this.#e.get(r.tag)||null}async#y(e){const n=await Ll(e,this),r=n.tag;let s=this.#e.get(r);return s||(s={subscriber:this._getSubscriber(n),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},this.#e.set(r,s)),s}async on(e,n){const r=await this.#y(e);return r.listeners.push({listener:n,once:!1}),r.started||(r.subscriber.start(),r.started=!0,this.#n!=null&&r.subscriber.pause(this.#n)),this}async once(e,n){const r=await this.#y(e);return r.listeners.push({listener:n,once:!0}),r.started||(r.subscriber.start(),r.started=!0,this.#n!=null&&r.subscriber.pause(this.#n)),this}async emit(e,...n){const r=await this.#g(e,n);if(!r||r.listeners.length===0)return!1;const s=r.listeners.length;return r.listeners=r.listeners.filter(({listener:i,once:o})=>{const a=new qm(this,o?null:i,e);try{i.call(this,...n,a)}catch{}return!o}),r.listeners.length===0&&(r.started&&r.subscriber.stop(),this.#e.delete(r.tag)),s>0}async listenerCount(e){if(e){const r=await this.#g(e);return r?r.listeners.length:0}let n=0;for(const{listeners:r}of this.#e.values())n+=r.length;return n}async listeners(e){if(e){const r=await this.#g(e);return r?r.listeners.map(({listener:s})=>s):[]}let n=[];for(const{listeners:r}of this.#e.values())n=n.concat(r.map(({listener:s})=>s));return n}async off(e,n){const r=await this.#g(e);if(!r)return this;if(n){const s=r.listeners.map(({listener:i})=>i).indexOf(n);s>=0&&r.listeners.splice(s,1)}return(!n||r.listeners.length===0)&&(r.started&&r.subscriber.stop(),this.#e.delete(r.tag)),this}async removeAllListeners(e){if(e){const{tag:n,started:r,subscriber:s}=await this.#y(e);r&&s.stop(),this.#e.delete(n)}else for(const[n,{started:r,subscriber:s}]of this.#e)r&&s.stop(),this.#e.delete(n);return this}async addListener(e,n){return await this.on(e,n)}async removeListener(e,n){return this.off(e,n)}get destroyed(){return this.#r}destroy(){this.removeAllListeners();for(const e of this.#u.keys())this._clearTimeout(e);this.#r=!0}get paused(){return this.#n!=null}set paused(e){!!e!==this.paused&&(this.paused?this.resume():this.pause(!1))}pause(e){if(this.#a=-1,this.#n!=null){if(this.#n==!!e)return;N(!1,"cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber(n=>n.pause(e)),this.#n=!!e;for(const n of this.#u.values())n.timer&&clearTimeout(n.timer),n.time=Fl()-n.time}resume(){if(this.#n!=null){this._forEachSubscriber(e=>e.resume()),this.#n=null;for(const e of this.#u.values()){let n=e.time;n<0&&(n=0),e.time=Fl(),setTimeout(e.func,n)}}}}function z2(t,e){try{const n=Zu(t,e);if(n)return oa(n)}catch{}return null}function Zu(t,e){if(t==="0x")return null;try{const n=G(ye(t,e,e+32)),r=G(ye(t,n,n+32));return ye(t,n+32,n+32+r)}catch{}return null}function Oh(t){const e=Ne(t);if(e.length>32)throw new Error("internal; should not happen");const n=new Uint8Array(32);return n.set(e,32-e.length),n}function H2(t){if(t.length%32===0)return t;const e=new Uint8Array(Math.ceil(t.length/32)*32);return e.set(t),e}const G2=new Uint8Array([]);function j2(t){const e=[];let n=0;for(let r=0;r=5*32,"insufficient OffchainLookup data","OFFCHAIN_FAULT",{reason:"insufficient OffchainLookup data"});const n=ye(t,0,32);N(ye(n,0,12)===ye(Lh,0,12),"corrupt OffchainLookup sender","OFFCHAIN_FAULT",{reason:"corrupt OffchainLookup sender"}),e.sender=ye(n,12);try{const r=[],s=G(ye(t,32,64)),i=G(ye(t,s,s+32)),o=ye(t,s+32);for(let a=0;ae[r]),e}function tr(t,e){if(t.provider)return t.provider;N(!1,"missing provider","UNSUPPORTED_OPERATION",{operation:e})}async function Fh(t,e){let n=ha(e);if(n.to!=null&&(n.to=Je(n.to,t)),n.from!=null){const r=n.from;n.from=Promise.all([t.getAddress(),Je(r,t)]).then(([s,i])=>(v(s.toLowerCase()===i.toLowerCase(),"transaction from mismatch","tx.from",i),s))}else n.from=t.getAddress();return await Ve(n)}class Q2{provider;constructor(e){z(this,{provider:e||null})}async getNonce(e){return tr(this,"getTransactionCount").getTransactionCount(await this.getAddress(),e)}async populateCall(e){return await Fh(this,e)}async populateTransaction(e){const n=tr(this,"populateTransaction"),r=await Fh(this,e);r.nonce==null&&(r.nonce=await this.getNonce("pending")),r.gasLimit==null&&(r.gasLimit=await this.estimateGas(r));const s=await this.provider.getNetwork();if(r.chainId!=null){const o=U(r.chainId);v(o===s.chainId,"transaction chainId mismatch","tx.chainId",e.chainId)}else r.chainId=s.chainId;const i=r.maxFeePerGas!=null||r.maxPriorityFeePerGas!=null;if(r.gasPrice!=null&&(r.type===2||i)?v(!1,"eip-1559 transaction do not support gasPrice","tx",e):(r.type===0||r.type===1)&&i&&v(!1,"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas","tx",e),(r.type===2||r.type==null)&&r.maxFeePerGas!=null&&r.maxPriorityFeePerGas!=null)r.type=2;else if(r.type===0||r.type===1){const o=await n.getFeeData();N(o.gasPrice!=null,"network does not support gasPrice","UNSUPPORTED_OPERATION",{operation:"getGasPrice"}),r.gasPrice==null&&(r.gasPrice=o.gasPrice)}else{const o=await n.getFeeData();if(r.type==null)if(o.maxFeePerGas!=null&&o.maxPriorityFeePerGas!=null)if(r.authorizationList&&r.authorizationList.length?r.type=4:r.type=2,r.gasPrice!=null){const a=r.gasPrice;delete r.gasPrice,r.maxFeePerGas=a,r.maxPriorityFeePerGas=a}else r.maxFeePerGas==null&&(r.maxFeePerGas=o.maxFeePerGas),r.maxPriorityFeePerGas==null&&(r.maxPriorityFeePerGas=o.maxPriorityFeePerGas);else o.gasPrice!=null?(N(!i,"network does not support EIP-1559","UNSUPPORTED_OPERATION",{operation:"populateTransaction"}),r.gasPrice==null&&(r.gasPrice=o.gasPrice),r.type=0):N(!1,"failed to get consistent fee data","UNSUPPORTED_OPERATION",{operation:"signer.getFeeData"});else(r.type===2||r.type===3||r.type===4)&&(r.maxFeePerGas==null&&(r.maxFeePerGas=o.maxFeePerGas),r.maxPriorityFeePerGas==null&&(r.maxPriorityFeePerGas=o.maxPriorityFeePerGas))}return await Ve(r)}async populateAuthorization(e){const n=Object.assign({},e);return n.chainId==null&&(n.chainId=(await tr(this,"getNetwork").getNetwork()).chainId),n.nonce==null&&(n.nonce=await this.getNonce()),n}async estimateGas(e){return tr(this,"estimateGas").estimateGas(await this.populateCall(e))}async call(e){return tr(this,"call").call(await this.populateCall(e))}async resolveName(e){return await tr(this,"resolveName").resolveName(e)}async sendTransaction(e){const n=tr(this,"sendTransaction"),r=await this.populateTransaction(e);delete r.from;const s=Bt.from(r);return await n.broadcastTransaction(await this.signTransaction(s))}authorize(e){N(!1,"authorization not implemented for this signer","UNSUPPORTED_OPERATION",{operation:"authorize"})}}function K2(t){return JSON.parse(JSON.stringify(t))}class Fy{#e;#t;#n;#r;#s;#o;constructor(e){this.#e=e,this.#t=null,this.#n=this.#i.bind(this),this.#r=!1,this.#s=null,this.#o=!1}_subscribe(e){throw new Error("subclasses must override this")}_emitResults(e,n){throw new Error("subclasses must override this")}_recover(e){throw new Error("subclasses must override this")}async#i(e){try{this.#t==null&&(this.#t=this._subscribe(this.#e));let n=null;try{n=await this.#t}catch(i){if(!Fe(i,"UNSUPPORTED_OPERATION")||i.operation!=="eth_newFilter")throw i}if(n==null){this.#t=null,this.#e._recoverSubscriber(this,this._recover(this.#e));return}const r=await this.#e.getNetwork();if(this.#s||(this.#s=r),this.#s.chainId!==r.chainId)throw new Error("chaid changed");if(this.#o)return;const s=await this.#e.send("eth_getFilterChanges",[n]);await this._emitResults(this.#e,s)}catch(n){console.log("@TODO",n)}this.#e.once("block",this.#n)}#a(){const e=this.#t;e&&(this.#t=null,e.then(n=>{this.#e.destroyed||this.#e.send("eth_uninstallFilter",[n])}))}start(){this.#r||(this.#r=!0,this.#i(-2))}stop(){this.#r&&(this.#r=!1,this.#o=!0,this.#a(),this.#e.off("block",this.#n))}pause(e){e&&this.#a(),this.#e.off("block",this.#n)}resume(){this.start()}}class J2 extends Fy{#e;constructor(e,n){super(e),this.#e=K2(n)}_recover(e){return new df(e,this.#e)}async _subscribe(e){return await e.send("eth_newFilter",[this.#e])}async _emitResults(e,n){for(const r of n)e.emit(this.#e,e._wrapLog(r,e._network))}}class W2 extends Fy{async _subscribe(e){return await e.send("eth_newPendingTransactionFilter",[])}async _emitResults(e,n){for(const r of n)e.emit("pending",r)}}const Z2="bigint,boolean,function,number,string,symbol".split(/,/g);function Lo(t){if(t==null||Z2.indexOf(typeof t)>=0||typeof t.getAddress=="function")return t;if(Array.isArray(t))return t.map(Lo);if(typeof t=="object")return Object.keys(t).reduce((e,n)=>(e[n]=t[n],e),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function Y2(t){return new Promise(e=>{setTimeout(e,t)})}function Mr(t){return t&&t.toLowerCase()}function Uh(t){return t&&typeof t.pollingInterval=="number"}const Uy={polling:!1,staticNetwork:null,batchStallTime:10,batchMaxSize:1<<20,batchMaxCount:100,cacheTimeout:250,pollingInterval:4e3};class Ul extends Q2{address;constructor(e,n){super(e),n=q(n),z(this,{address:n})}connect(e){N(!1,"cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async populateTransaction(e){return await this.populateCall(e)}async sendUncheckedTransaction(e){const n=Lo(e),r=[];if(n.from){const i=n.from;r.push((async()=>{const o=await Je(i,this.provider);v(o!=null&&o.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=o})())}else n.from=this.address;if(n.gasLimit==null&&r.push((async()=>{n.gasLimit=await this.provider.estimateGas({...n,from:this.address})})()),n.to!=null){const i=n.to;r.push((async()=>{n.to=await Je(i,this.provider)})())}r.length&&await Promise.all(r);const s=this.provider.getRpcTransaction(n);return this.provider.send("eth_sendTransaction",[s])}async sendTransaction(e){const n=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(e);return await new Promise((s,i)=>{const o=[1e3,100];let a=0;const l=async()=>{try{const u=await this.provider.getTransaction(r);if(u!=null){s(u.replaceableTransaction(n));return}}catch(u){if(Fe(u,"CANCELLED")||Fe(u,"BAD_DATA")||Fe(u,"NETWORK_ERROR")||Fe(u,"UNSUPPORTED_OPERATION")){u.info==null&&(u.info={}),u.info.sendTransactionHash=r,i(u);return}if(Fe(u,"INVALID_ARGUMENT")&&(a++,u.info==null&&(u.info={}),u.info.sendTransactionHash=r,a>10)){i(u);return}this.provider.emit("error",le("failed to fetch transation after sending (will try again)","UNKNOWN_ERROR",{error:u}))}this.provider._setTimeout(()=>{l()},o.pop()||4e3)};l()})}async signTransaction(e){const n=Lo(e);if(n.from){const s=await Je(n.from,this.provider);v(s!=null&&s.toLowerCase()===this.address.toLowerCase(),"from address mismatch","transaction",e),n.from=s}else n.from=this.address;const r=this.provider.getRpcTransaction(n);return await this.provider.send("eth_signTransaction",[r])}async signMessage(e){const n=typeof e=="string"?dn(e):e;return await this.provider.send("personal_sign",[R(n),this.address.toLowerCase()])}async signTypedData(e,n,r){const s=Lo(r),i=await ct.resolveNames(e,n,s,async o=>{const a=await Je(o);return v(a!=null,"TypedData does not support null address","value",o),a});return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(ct.getPayload(i.domain,n,i.value))])}async unlock(e){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),e,null])}async _legacySignMessage(e){const n=typeof e=="string"?dn(e):e;return await this.provider.send("eth_sign",[this.address.toLowerCase(),R(n)])}}class X2 extends _2{#e;#t;#n;#r;#s;#o;#i;#a(){if(this.#r)return;const e=this._getOption("batchMaxCount")===1?0:this._getOption("batchStallTime");this.#r=setTimeout(()=>{this.#r=null;const n=this.#n;for(this.#n=[];n.length;){const r=[n.shift()];for(;n.length&&r.length!==this.#e.batchMaxCount;)if(r.push(n.shift()),JSON.stringify(r.map(i=>i.payload)).length>this.#e.batchMaxSize){n.unshift(r.pop());break}(async()=>{const s=r.length===1?r[0].payload:r.map(i=>i.payload);this.emit("debug",{action:"sendRpcPayload",payload:s});try{const i=await this._send(s);this.emit("debug",{action:"receiveRpcResult",result:i});for(const{resolve:o,reject:a,payload:l}of r){if(this.destroyed){a(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:l.method}));continue}const u=i.filter(f=>f.id===l.id)[0];if(u==null){const f=le("missing response for request","BAD_DATA",{value:i,info:{payload:l}});this.emit("error",f),a(f);continue}if("error"in u){a(this.getRpcError(l,u));continue}o(u.result)}}catch(i){this.emit("debug",{action:"receiveRpcError",error:i});for(const{reject:o}of r)o(i)}})()}},e)}constructor(e,n){super(e,n),this.#t=1,this.#e=Object.assign({},Uy,n||{}),this.#n=[],this.#r=null,this.#o=null,this.#i=null;{let s=null;const i=new Promise(o=>{s=o});this.#s={promise:i,resolve:s}}const r=this._getOption("staticNetwork");typeof r=="boolean"?(v(!r||e!=="any","staticNetwork cannot be used on special network 'any'","options",n),r&&e!=null&&(this.#o=pt.from(e))):r&&(v(e==null||r.matches(e),"staticNetwork MUST match network object","options",n),this.#o=r)}_getOption(e){return this.#e[e]}get _network(){return N(this.#o,"network is not available yet","NETWORK_ERROR"),this.#o}async _perform(e){if(e.method==="call"||e.method==="estimateGas"){let r=e.transaction;if(r&&r.type!=null&&U(r.type)&&r.maxFeePerGas==null&&r.maxPriorityFeePerGas==null){const s=await this.getFeeData();s.maxFeePerGas==null&&s.maxPriorityFeePerGas==null&&(e=Object.assign({},e,{transaction:Object.assign({},r,{type:void 0})}))}}const n=this.getRpcRequest(e);return n!=null?await this.send(n.method,n.args):super._perform(e)}async _detectNetwork(){const e=this._getOption("staticNetwork");if(e)if(e===!0){if(this.#o)return this.#o}else return e;return this.#i?await this.#i:this.ready?(this.#i=(async()=>{try{const n=pt.from(U(await this.send("eth_chainId",[])));return this.#i=null,n}catch(n){throw this.#i=null,n}})(),await this.#i):(this.#i=(async()=>{const n={id:this.#t++,method:"eth_chainId",params:[],jsonrpc:"2.0"};this.emit("debug",{action:"sendRpcPayload",payload:n});let r;try{r=(await this._send(n))[0],this.#i=null}catch(s){throw this.#i=null,this.emit("debug",{action:"receiveRpcError",error:s}),s}if(this.emit("debug",{action:"receiveRpcResult",result:r}),"result"in r)return pt.from(U(r.result));throw this.getRpcError(n,r)})(),await this.#i)}_start(){this.#s==null||this.#s.resolve==null||(this.#s.resolve(),this.#s=null,(async()=>{for(;this.#o==null&&!this.destroyed;)try{this.#o=await this._detectNetwork()}catch(e){if(this.destroyed)break;console.log("JsonRpcProvider failed to detect network and cannot start up; retry in 1s (perhaps the URL is wrong or the node is not started)"),this.emit("error",le("failed to bootstrap network detection","NETWORK_ERROR",{event:"initial-network-discovery",info:{error:e}})),await Y2(1e3)}this.#a()})())}async _waitUntilReady(){if(this.#s!=null)return await this.#s.promise}_getSubscriber(e){return e.type==="pending"?new W2(this):e.type==="event"?this._getOption("polling")?new df(this,e.filter):new J2(this,e.filter):e.type==="orphan"&&e.filter.orphan==="drop-log"?new Ly("orphan"):super._getSubscriber(e)}get ready(){return this.#s==null}getRpcTransaction(e){const n={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach(r=>{if(e[r]==null)return;let s=r;r==="gasLimit"&&(s="gas"),n[s]=Ft(U(e[r],`tx.${r}`))}),["from","to","data"].forEach(r=>{e[r]!=null&&(n[r]=R(e[r]))}),e.accessList&&(n.accessList=Rr(e.accessList)),e.blobVersionedHashes&&(n.blobVersionedHashes=e.blobVersionedHashes.map(r=>r.toLowerCase())),e.authorizationList&&(n.authorizationList=e.authorizationList.map(r=>{const s=Hg(r);return{address:s.address,nonce:Ft(s.nonce),chainId:Ft(s.chainId),yParity:Ft(s.signature.yParity),r:Ft(s.signature.r),s:Ft(s.signature.s)}})),n}getRpcRequest(e){switch(e.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getPriorityFee":return{method:"eth_maxPriorityFeePerGas",args:[]};case"getBalance":return{method:"eth_getBalance",args:[Mr(e.address),e.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[Mr(e.address),e.blockTag]};case"getCode":return{method:"eth_getCode",args:[Mr(e.address),e.blockTag]};case"getStorage":return{method:"eth_getStorageAt",args:[Mr(e.address),"0x"+e.position.toString(16),e.blockTag]};case"broadcastTransaction":return{method:"eth_sendRawTransaction",args:[e.signedTransaction]};case"getBlock":if("blockTag"in e)return{method:"eth_getBlockByNumber",args:[e.blockTag,!!e.includeTransactions]};if("blockHash"in e)return{method:"eth_getBlockByHash",args:[e.blockHash,!!e.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[e.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[e.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(e.transaction),e.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(e.transaction)]};case"getLogs":return e.filter&&e.filter.address!=null&&(Array.isArray(e.filter.address)?e.filter.address=e.filter.address.map(Mr):e.filter.address=Mr(e.filter.address)),{method:"eth_getLogs",args:[e.filter]}}return null}getRpcError(e,n){const{method:r}=e,{error:s}=n;if(r==="eth_estimateGas"&&s.message){const a=s.message;if(!a.match(/revert/i)&&a.match(/insufficient funds/i))return le("insufficient funds","INSUFFICIENT_FUNDS",{transaction:e.params[0],info:{payload:e,error:s}});if(a.match(/nonce/i)&&a.match(/too low/i))return le("nonce has already been used","NONCE_EXPIRED",{transaction:e.params[0],info:{payload:e,error:s}})}if(r==="eth_call"||r==="eth_estimateGas"){const a=Yu(s),l=Ss.getBuiltinCallException(r==="eth_call"?"call":"estimateGas",e.params[0],a?a.data:null);return l.info={error:s,payload:e},l}const i=JSON.stringify(q2(s));if(typeof s.message=="string"&&s.message.match(/user denied|ethers-user-denied/i))return le("user rejected action","ACTION_REJECTED",{action:{eth_sign:"signMessage",personal_sign:"signMessage",eth_signTypedData_v4:"signTypedData",eth_signTransaction:"signTransaction",eth_sendTransaction:"sendTransaction",eth_requestAccounts:"requestAccess",wallet_requestAccounts:"requestAccess"}[r]||"unknown",reason:"rejected",info:{payload:e,error:s}});if(r==="eth_sendRawTransaction"||r==="eth_sendTransaction"){const a=e.params[0];if(i.match(/insufficient funds|base fee exceeds gas limit/i))return le("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:a,info:{error:s}});if(i.match(/nonce/i)&&i.match(/too low/i))return le("nonce has already been used","NONCE_EXPIRED",{transaction:a,info:{error:s}});if(i.match(/replacement transaction/i)&&i.match(/underpriced/i))return le("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:a,info:{error:s}});if(i.match(/only replay-protected/i))return le("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:r,info:{transaction:a,info:{error:s}}})}let o=!!i.match(/the method .* does not exist/i);return o||s&&s.details&&s.details.startsWith("Unauthorized method:")&&(o=!0),o?le("unsupported operation","UNSUPPORTED_OPERATION",{operation:e.method,info:{error:s,payload:e}}):le("could not coalesce error","UNKNOWN_ERROR",{error:s,payload:e})}send(e,n){if(this.destroyed)return Promise.reject(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e}));const r=this.#t++,s=new Promise((i,o)=>{this.#n.push({resolve:i,reject:o,payload:{method:e,params:n,id:r,jsonrpc:"2.0"}})});return this.#a(),s}async getSigner(e){e==null&&(e=0);const n=this.send("eth_accounts",[]);if(typeof e=="number"){const s=await n;if(e>=s.length)throw new Error("no such account");return new Ul(this,s[e])}const{accounts:r}=await Ve({network:this.getNetwork(),accounts:n});e=q(e);for(const s of r)if(q(s)===e)return new Ul(this,e);throw new Error("invalid account")}async listAccounts(){return(await this.send("eth_accounts",[])).map(n=>new Ul(this,n))}destroy(){this.#r&&(clearTimeout(this.#r),this.#r=null);for(const{payload:e,reject:n}of this.#n)n(le("provider destroyed; cancelled request","UNSUPPORTED_OPERATION",{operation:e.method}));this.#n=[],super.destroy()}}class Dy extends X2{#e;constructor(e,n){super(e,n);let r=this._getOption("pollingInterval");r==null&&(r=Uy.pollingInterval),this.#e=r}_getSubscriber(e){const n=super._getSubscriber(e);return Uh(n)&&(n.pollingInterval=this.#e),n}get pollingInterval(){return this.#e}set pollingInterval(e){if(!Number.isInteger(e)||e<0)throw new Error("invalid interval");this.#e=e,this._forEachSubscriber(n=>{Uh(n)&&(n.pollingInterval=this.#e)})}}class $2 extends Dy{#e;constructor(e,n,r){e==null&&(e="http://localhost:8545"),super(n,r),typeof e=="string"?this.#e=new Xt(e):this.#e=e.clone()}_getConnection(){return this.#e.clone()}async send(e,n){return await this._start(),await super.send(e,n)}async _send(e){const n=this._getConnection();n.body=JSON.stringify(e),n.setHeader("content-type","application/json");const r=await n.send();r.assertOk();let s=r.bodyJson;return Array.isArray(s)||(s=[s]),s}}function Yu(t){if(t==null)return null;if(typeof t.message=="string"&&t.message.match(/revert/i)&&se(t.data))return{message:t.message,data:t.data};if(typeof t=="object"){for(const e in t){const n=Yu(t[e]);if(n)return n}return null}if(typeof t=="string")try{return Yu(JSON.parse(t))}catch{}return null}function Xu(t,e){if(t!=null){if(typeof t.message=="string"&&e.push(t.message),typeof t=="object")for(const n in t)Xu(t[n],e);if(typeof t=="string")try{return Xu(JSON.parse(t),e)}catch{}}}function q2(t){const e=[];return Xu(t,e),e}class lr extends Dy{#e;#t;constructor(e,n,r){const s=Object.assign({},r??{},{batchMaxCount:1});v(e&&e.request,"invalid EIP-1193 provider","ethereum",e),super(n,s),this.#t=null,r&&r.providerInfo&&(this.#t=r.providerInfo),this.#e=async(i,o)=>{const a={method:i,params:o};this.emit("debug",{action:"sendEip1193Request",payload:a});try{const l=await e.request(a);return this.emit("debug",{action:"receiveEip1193Result",result:l}),l}catch(l){const u=new Error(l.message);throw u.code=l.code,u.data=l.data,u.payload=a,this.emit("debug",{action:"receiveEip1193Error",error:u}),u}}}get providerInfo(){return this.#t}async send(e,n){return await this._start(),await super.send(e,n)}async _send(e){v(!Array.isArray(e),"EIP-1193 does not support batch request","payload",e);try{const n=await this.#e(e.method,e.params||[]);return[{id:e.id,result:n}]}catch(n){return[{id:e.id,error:{code:n.code,data:n.data,message:n.message}}]}}getRpcError(e,n){switch(n=JSON.parse(JSON.stringify(n)),n.error.code||-1){case 4001:n.error.message=`ethers-user-denied: ${n.error.message}`;break;case 4200:n.error.message=`ethers-unsupported: ${n.error.message}`;break}return super.getRpcError(e,n)}async hasSigner(e){e==null&&(e=0);const n=await this.send("eth_accounts",[]);return typeof e=="number"?n.length>e:(e=e.toLowerCase(),n.filter(r=>r.toLowerCase()===e).length!==0)}async getSigner(e){if(e==null&&(e=0),!await this.hasSigner(e))try{await this.#e("eth_requestAccounts",[])}catch(n){const r=n.payload;throw this.getRpcError(r,{id:r.id,error:n})}return await super.getSigner(e)}static async discover(e){if(e==null&&(e={}),e.provider)return new lr(e.provider);const n=e.window?e.window:typeof window<"u"?window:null;if(n==null)return null;const r=e.anyProvider;if(r&&n.ethereum)return new lr(n.ethereum);if(!("addEventListener"in n&&"dispatchEvent"in n&&"removeEventListener"in n))return null;const s=e.timeout?e.timeout:300;return s===0?null:await new Promise((i,o)=>{let a=[];const l=c=>{a.push(c.detail),r&&u()},u=()=>{if(clearTimeout(f),a.length)if(e&&e.filter){const c=e.filter(a.map(d=>Object.assign({},d.info)));if(c==null)i(null);else if(c instanceof lr)i(c);else{let d=null;if(c.uuid&&(d=a.filter(m=>c.uuid===m.info.uuid)[0]),d){const{provider:w,info:m}=d;i(new lr(w,void 0,{providerInfo:m}))}else o(le("filter returned unknown info","UNSUPPORTED_OPERATION",{value:c}))}}else{const{provider:c,info:d}=a[0];i(new lr(c,void 0,{providerInfo:d}))}else i(null);n.removeEventListener("eip6963:announceProvider",l)},f=setTimeout(()=>{u()},s);n.addEventListener("eip6963:announceProvider",l),n.dispatchEvent(new Event("eip6963:requestProvider"))})}}const ex=[{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"contract TaxVault",name:"_taxVault",type:"address"},{internalType:"uint256",name:"_taxBasisPoints",type:"uint256"}],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:"ReentrancyGuardReentrantCall",type:"error"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"SafeERC20FailedOperation",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"funder",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ContractFunded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamCancelled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"},{indexed:!0,internalType:"address",name:"employer",type:"address"},{indexed:!0,internalType:"address",name:"employee",type:"address"},{indexed:!1,internalType:"uint256",name:"ratePerSecond",type:"uint256"}],name:"StreamCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamPaused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"}],name:"StreamResumed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldRate",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newRate",type:"uint256"}],name:"TaxRateUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"streamId",type:"uint256"},{indexed:!0,internalType:"address",name:"employee",type:"address"},{indexed:!1,internalType:"uint256",name:"employeeAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"taxAmount",type:"uint256"}],name:"Withdrawal",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"HR_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"calculateAccrued",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"cancelStream",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"}],name:"createStream",outputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"fundContract",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:"uint256",name:"streamId",type:"uint256"}],name:"getStream",outputs:[{components:[{internalType:"address",name:"employer",type:"address"},{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"},{internalType:"uint256",name:"lastClaimTime",type:"uint256"},{internalType:"bool",name:"active",type:"bool"}],internalType:"struct PayStream.Stream",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getStreamCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTreasuryBalance",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:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"pauseStream",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:"uint256",name:"streamId",type:"uint256"}],name:"resumeStream",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:"newTaxBasisPoints",type:"uint256"}],name:"setTaxRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"streams",outputs:[{internalType:"address",name:"employer",type:"address"},{internalType:"address",name:"employee",type:"address"},{internalType:"uint256",name:"ratePerSecond",type:"uint256"},{internalType:"uint256",name:"lastClaimTime",type:"uint256"},{internalType:"bool",name:"active",type:"bool"}],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:"taxBasisPoints",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"taxVault",outputs:[{internalType:"contract TaxVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"streamId",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}],tx={abi:ex},nx=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"},{internalType:"uint256",name:"initialSupply",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{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:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,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"}],rx={abi:nx},sx=[{inputs:[{internalType:"contract IERC20",name:"_token",type:"address"},{internalType:"address",name:"_admin",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{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:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"TaxDeposited",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"TaxWithdrawn",type:"event"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}],ix={abi:sx};let hf="",My="",_y="";try{const t=await wv(()=>import("./addresses-BwW-EkRO.js"),[]);hf=t.payStream||"",My=t.token||"",_y=t.taxVault||""}catch{console.warn("No deployment addresses found. Please deploy contracts first.")}function Or(){return window.ethereum?new lr(window.ethereum):new $2("http://127.0.0.1:8545")}async function Vi(){return Or().getSigner()}async function ox(){if(!window.ethereum)throw new Error("MetaMask not installed. Please install MetaMask to continue.");return(await window.ethereum.request({method:"eth_requestAccounts"}))[0]}async function $t(t){return new Vn(hf,tx.abi,t)}async function ax(t){return new Vn(My,rx.abi,t)}async function lx(t){return new Vn(_y,ix.abi,t)}async function ux(t,e){const n=await Vi(),r=await $t(n),s=ag(e.toString()),i=await r.createStream(t,s);return await i.wait(),i}async function cx(t){const e=await Vi(),r=await(await $t(e)).pauseStream(t);return await r.wait(),r}async function fx(t){const e=await Vi(),r=await(await $t(e)).resumeStream(t);return await r.wait(),r}async function dx(t){const e=await Vi(),r=await(await $t(e)).cancelStream(t);return await r.wait(),r}async function hx(t){const e=await Vi(),n=await ax(e),r=await $t(e),s=ag(t.toString());await(await n.approve(hf,s)).wait();const o=await r.fundContract(s);return await o.wait(),o}async function zy(){const t=Or(),n=await(await $t(t)).getStreamCount();return Number(n)}async function px(t){const e=Or();return(await $t(e)).getStream(t)}async function mx(){const t=await zy(),e=[];for(let n=0;n{if(f.preventDefault(),l(""),!e||!r){l("Please fill in all fields.");return}if(!/^0x[a-fA-F0-9]{40}$/.test(e)){l("Invalid Ethereum address format.");return}if(Number(r)<=0){l("Rate must be greater than zero.");return}try{o(!0),await ux(e,r),n(""),s(""),t&&t()}catch(c){console.error("Create stream failed:",c),l(c.reason||c.message||"Transaction failed")}finally{o(!1)}};return b.jsxs("div",{className:"glass-card",children:[b.jsx("div",{className:"card-header",children:b.jsxs("h2",{className:"card-title",children:[b.jsx("span",{className:"card-title-icon",children:"➕"}),"Create Stream"]})}),b.jsxs("form",{onSubmit:u,children:[b.jsxs("div",{className:"form-group",children:[b.jsx("label",{className:"form-label",htmlFor:"employee-address",children:"Employee Address"}),b.jsx("input",{id:"employee-address",className:"form-input",type:"text",placeholder:"0x...",value:e,onChange:f=>n(f.target.value),disabled:i})]}),b.jsxs("div",{className:"form-group",children:[b.jsx("label",{className:"form-label",htmlFor:"rate-per-second",children:"Rate Per Second (PST)"}),b.jsx("input",{id:"rate-per-second",className:"form-input",type:"number",step:"any",min:"0",placeholder:"e.g. 0.01",value:r,onChange:f=>s(f.target.value),disabled:i}),b.jsx("p",{className:"form-hint",children:"Tokens streamed to employee every second. 0.01 ≈ 864 PST/day."})]}),a&&b.jsxs("p",{style:{color:"#f87171",fontSize:"0.8rem",marginBottom:"0.75rem"},children:["⚠ ",a]}),b.jsx("button",{type:"submit",className:"btn btn-primary",disabled:i,style:{width:"100%"},children:i?b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"spinner"}),"Creating…"]}):"🚀 Create Stream"})]})]})}function xx({refreshTrigger:t}){const[e,n]=Ae.useState([]),[r,s]=Ae.useState({}),[i,o]=Ae.useState(!0),[a,l]=Ae.useState({}),u=Ae.useCallback(async()=>{try{o(!0);const m=await mx();n(m)}catch(m){console.error("Failed to load streams:",m)}finally{o(!1)}},[]);Ae.useEffect(()=>{u()},[u,t]),Ae.useEffect(()=>{if(e.length===0)return;const m=async()=>{const A={};for(const h of e)if(h.active)try{const p=await gx(h.id);A[h.id]=Oa(p)}catch{A[h.id]="0"}else A[h.id]="0";s(A)};m();const g=setInterval(m,2e3);return()=>clearInterval(g)},[e]);const f=async m=>{l(g=>({...g,[m]:"pause"}));try{await cx(m),await u()}catch(g){console.error("Pause failed:",g)}finally{l(g=>({...g,[m]:null}))}},c=async m=>{l(g=>({...g,[m]:"resume"}));try{await fx(m),await u()}catch(g){console.error("Resume failed:",g)}finally{l(g=>({...g,[m]:null}))}},d=async m=>{if(confirm("Cancel this stream? Pending accrued will be auto-claimed.")){l(g=>({...g,[m]:"cancel"}));try{await dx(m),await u()}catch(g){console.error("Cancel failed:",g)}finally{l(g=>({...g,[m]:null}))}}},w=m=>m.active?b.jsx("span",{className:"badge badge-active",children:"Active"}):b.jsx("span",{className:"badge badge-cancelled",children:"Inactive"});return i?b.jsxs("div",{className:"glass-card",children:[b.jsx("div",{className:"card-header",children:b.jsxs("h2",{className:"card-title",children:[b.jsx("span",{className:"card-title-icon",children:"📊"}),"Salary Streams"]})}),b.jsxs("div",{className:"empty-state",children:[b.jsx("div",{className:"spinner",style:{width:32,height:32}}),b.jsx("p",{className:"empty-state-text",style:{marginTop:"1rem"},children:"Loading streams…"})]})]}):b.jsxs("div",{className:"glass-card",children:[b.jsxs("div",{className:"card-header",children:[b.jsxs("h2",{className:"card-title",children:[b.jsx("span",{className:"card-title-icon",children:"📊"}),"Salary Streams"]}),b.jsx("button",{className:"btn btn-ghost btn-sm",onClick:u,children:"🔄 Refresh"})]}),e.length===0?b.jsxs("div",{className:"empty-state",children:[b.jsx("div",{className:"empty-state-icon",children:"💸"}),b.jsx("p",{className:"empty-state-text",children:"No streams yet"}),b.jsx("p",{className:"empty-state-sub",children:"Create your first salary stream using the form."})]}):b.jsx("div",{style:{overflowX:"auto"},children:b.jsxs("table",{className:"stream-table",children:[b.jsx("thead",{children:b.jsxs("tr",{children:[b.jsx("th",{children:"ID"}),b.jsx("th",{children:"Employee"}),b.jsx("th",{children:"Rate/sec"}),b.jsx("th",{children:"Accrued"}),b.jsx("th",{children:"Status"}),b.jsx("th",{children:"Actions"})]})}),b.jsx("tbody",{children:e.map(m=>b.jsxs("tr",{children:[b.jsxs("td",{style:{fontWeight:600},children:["#",m.id]}),b.jsx("td",{className:"address-cell",children:Hy(m.employee)}),b.jsxs("td",{className:"rate-cell",children:[Ax(m.ratePerSecond)," PST"]}),b.jsxs("td",{className:"accrued-cell",children:[r[m.id]?Number(r[m.id]).toFixed(4):"0.0000"," ","PST"]}),b.jsx("td",{children:w(m)}),b.jsx("td",{children:b.jsx("div",{className:"actions-group",children:m.active?b.jsxs(b.Fragment,{children:[b.jsx("button",{className:"btn btn-warning btn-sm",onClick:()=>f(m.id),disabled:!!a[m.id],children:a[m.id]==="pause"?b.jsx("span",{className:"spinner"}):"⏸ Pause"}),b.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>d(m.id),disabled:!!a[m.id],children:a[m.id]==="cancel"?b.jsx("span",{className:"spinner"}):"✕ Cancel"})]}):b.jsx("button",{className:"btn btn-success btn-sm",onClick:()=>c(m.id),disabled:!!a[m.id],children:a[m.id]==="resume"?b.jsx("span",{className:"spinner"}):"▶ Resume"})})})]},m.id))})]})})]})}function bx(){const[t,e]=Ae.useState(null),[n,r]=Ae.useState({treasury:"0",taxRate:0,taxVault:"0",streamCount:0}),[s,i]=Ae.useState(0),[o,a]=Ae.useState(""),[l,u]=Ae.useState(!1),f=Ae.useCallback(async()=>{try{const[m,g,A,h]=await Promise.all([yx(),wx(),vx(),zy()]);r({treasury:m,taxRate:g,taxVault:A,streamCount:h})}catch(m){console.error("Failed to load stats:",m)}},[]);Ae.useEffect(()=>{if(t){f();const m=setInterval(f,1e4);return()=>clearInterval(m)}},[t,f,s]);const c=async()=>{try{const m=await ox();e(m)}catch(m){alert(m.message)}},d=async()=>{if(!(!o||Number(o)<=0))try{u(!0),await hx(o),a(""),f()}catch(m){console.error("Fund failed:",m),alert(m.reason||m.message)}finally{u(!1)}},w=()=>{i(m=>m+1),f()};return t?b.jsxs("div",{className:"app-container",children:[b.jsxs("header",{className:"header",children:[b.jsxs("div",{className:"header-brand",children:[b.jsx("div",{className:"header-logo",children:"P"}),b.jsxs("div",{children:[b.jsx("h1",{className:"header-title",children:"PayStream"}),b.jsx("p",{className:"header-subtitle",children:"HR Dashboard"})]})]}),b.jsxs("button",{className:"btn-connect connected",onClick:()=>e(null),children:[b.jsx("span",{className:"wallet-dot"}),Hy(t)]})]}),b.jsxs("div",{className:"stats-row",children:[b.jsxs("div",{className:"stat-card",children:[b.jsx("div",{className:"stat-label",children:"Treasury Balance"}),b.jsx("div",{className:"stat-value",children:Number(n.treasury).toLocaleString(void 0,{maximumFractionDigits:2})}),b.jsx("div",{className:"stat-sub",children:"PST Tokens"})]}),b.jsxs("div",{className:"stat-card",children:[b.jsx("div",{className:"stat-label",children:"Active Streams"}),b.jsx("div",{className:"stat-value",children:n.streamCount}),b.jsx("div",{className:"stat-sub",children:"Total created"})]}),b.jsxs("div",{className:"stat-card",children:[b.jsx("div",{className:"stat-label",children:"Tax Rate"}),b.jsxs("div",{className:"stat-value",children:[(n.taxRate/100).toFixed(1),"%"]}),b.jsxs("div",{className:"stat-sub",children:[n.taxRate," basis points"]})]}),b.jsxs("div",{className:"stat-card",children:[b.jsx("div",{className:"stat-label",children:"Tax Vault"}),b.jsx("div",{className:"stat-value",children:Number(n.taxVault).toLocaleString(void 0,{maximumFractionDigits:2})}),b.jsx("div",{className:"stat-sub",children:"PST Collected"})]})]}),b.jsxs("div",{className:"content-grid",children:[b.jsxs("div",{children:[b.jsx(Ex,{onStreamCreated:w}),b.jsxs("div",{className:"glass-card",children:[b.jsx("div",{className:"card-header",children:b.jsxs("h2",{className:"card-title",children:[b.jsx("span",{className:"card-title-icon",children:"💰"}),"Fund Treasury"]})}),b.jsxs("div",{className:"form-group",children:[b.jsx("label",{className:"form-label",htmlFor:"fund-amount",children:"Amount (PST)"}),b.jsx("input",{id:"fund-amount",className:"form-input",type:"number",min:"0",step:"any",placeholder:"e.g. 10000",value:o,onChange:m=>a(m.target.value),disabled:l})]}),b.jsx("button",{className:"btn btn-success",style:{width:"100%"},onClick:d,disabled:l||!o,children:l?b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"spinner"}),"Funding…"]}):"📥 Deposit Tokens"})]})]}),b.jsx("div",{children:b.jsx(xx,{refreshTrigger:s})})]})]}):b.jsxs("div",{className:"app-container",children:[b.jsx("header",{className:"header",children:b.jsxs("div",{className:"header-brand",children:[b.jsx("div",{className:"header-logo",children:"P"}),b.jsxs("div",{children:[b.jsx("h1",{className:"header-title",children:"PayStream"}),b.jsx("p",{className:"header-subtitle",children:"HR Dashboard"})]})]})}),b.jsxs("div",{className:"not-connected",children:[b.jsx("div",{className:"not-connected-icon",children:"🔐"}),b.jsx("h2",{children:"Connect Your Wallet"}),b.jsx("p",{children:"Connect MetaMask to manage payroll streams and fund the treasury."}),b.jsx("button",{className:"btn btn-primary",onClick:c,children:"🦊 Connect MetaMask"})]})]})}function Sx(){return b.jsx(bx,{})}Dl.createRoot(document.getElementById("root")).render(b.jsx(s0.StrictMode,{children:b.jsx(Sx,{})})); diff --git a/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-UoqIBajK.css b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-UoqIBajK.css new file mode 100644 index 000000000..8bd30a920 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/dist/assets/index-UoqIBajK.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap";*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--bg-primary: #0a0a12;--bg-secondary: #12121f;--bg-card: rgba(20, 20, 40, .6);--bg-card-hover: rgba(30, 30, 55, .7);--bg-input: rgba(15, 15, 30, .8);--glass-border: rgba(100, 100, 180, .15);--glass-shadow: 0 8px 32px rgba(0, 0, 0, .4);--glass-blur: 16px;--gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6, #a855f7);--gradient-accent: linear-gradient(135deg, #818cf8, #c084fc);--gradient-danger: linear-gradient(135deg, #ef4444, #f97316);--gradient-success: linear-gradient(135deg, #10b981, #34d399);--gradient-warning: linear-gradient(135deg, #f59e0b, #fbbf24);--gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(99, 102, 241, .08) 0%, transparent 50%), radial-gradient(ellipse at 80% 20%, rgba(168, 85, 247, .06) 0%, transparent 50%), radial-gradient(ellipse at 50% 80%, rgba(139, 92, 246, .04) 0%, transparent 50%);--text-primary: #f1f5f9;--text-secondary: #94a3b8;--text-muted: #64748b;--text-accent: #a5b4fc;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-full: 9999px;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-base: .25s cubic-bezier(.4, 0, .2, 1);--transition-slow: .4s cubic-bezier(.4, 0, .2, 1)}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;line-height:1.6}#root{min-height:100vh;background:var(--gradient-bg)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#6464b44d;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#6464b480}.app-container{max-width:1280px;margin:0 auto;padding:2rem 1.5rem}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--glass-border)}.header-brand{display:flex;align-items:center;gap:.75rem}.header-logo{width:42px;height:42px;background:var(--gradient-primary);border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;font-size:1.25rem;font-weight:800;box-shadow:0 4px 15px #6366f14d}.header-title{font-size:1.5rem;font-weight:700;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.header-subtitle{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em;font-weight:600}.btn-connect{display:flex;align-items:center;gap:.5rem;padding:.65rem 1.25rem;background:var(--gradient-primary);border:none;border-radius:var(--radius-full);color:#fff;font-family:inherit;font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--transition-base);box-shadow:0 4px 15px #6366f14d}.btn-connect:hover{transform:translateY(-2px);box-shadow:0 6px 25px #6366f173}.btn-connect.connected{background:var(--bg-card);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.wallet-dot{width:8px;height:8px;border-radius:50%;background:#34d399;box-shadow:0 0 8px #34d39980;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.2)}}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.25rem;margin-bottom:2rem}.stat-card{background:var(--bg-card);backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:1.25rem 1.5rem;box-shadow:var(--glass-shadow);transition:all var(--transition-base);position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--gradient-primary);opacity:0;transition:opacity var(--transition-base)}.stat-card:hover:before{opacity:1}.stat-card:hover{transform:translateY(-3px);border-color:#6464b440}.stat-label{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;font-weight:600;margin-bottom:.5rem}.stat-value{font-size:1.75rem;font-weight:800;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.stat-sub{font-size:.75rem;color:var(--text-secondary);margin-top:.25rem}.glass-card{background:var(--bg-card);backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:var(--radius-xl);padding:1.75rem;box-shadow:var(--glass-shadow);margin-bottom:1.5rem}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.25rem}.card-title{font-size:1.1rem;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:.5rem}.card-title-icon{font-size:1.25rem}.form-group{margin-bottom:1rem}.form-label{display:block;font-size:.8rem;font-weight:600;color:var(--text-secondary);margin-bottom:.4rem;text-transform:uppercase;letter-spacing:.05em}.form-input{width:100%;padding:.75rem 1rem;background:var(--bg-input);border:1px solid var(--glass-border);border-radius:var(--radius-md);color:var(--text-primary);font-family:inherit;font-size:.9rem;transition:all var(--transition-fast);outline:none}.form-input::placeholder{color:var(--text-muted)}.form-input:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f126}.form-row{display:grid;grid-template-columns:2fr 1fr;gap:1rem}.form-hint{font-size:.7rem;color:var(--text-muted);margin-top:.25rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.65rem 1.25rem;border:none;border-radius:var(--radius-md);font-family:inherit;font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-base);text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.btn-primary{background:var(--gradient-primary);color:#fff;box-shadow:0 4px 15px #6366f14d}.btn-primary:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 25px #6366f173}.btn-sm{padding:.4rem .75rem;font-size:.75rem;border-radius:var(--radius-sm)}.btn-danger{background:var(--gradient-danger);color:#fff}.btn-danger:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 15px #ef44444d}.btn-warning{background:var(--gradient-warning);color:#1a1a2e}.btn-success{background:var(--gradient-success);color:#fff}.btn-ghost{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--glass-border)}.btn-ghost:hover:not(:disabled){background:#ffffff1a;color:var(--text-primary)}.stream-table{width:100%;border-collapse:separate;border-spacing:0}.stream-table thead th{padding:.75rem 1rem;font-size:.7rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;text-align:left;border-bottom:1px solid var(--glass-border)}.stream-table tbody tr{transition:background var(--transition-fast)}.stream-table tbody tr:hover{background:#6366f10a}.stream-table tbody td{padding:.85rem 1rem;font-size:.875rem;border-bottom:1px solid rgba(100,100,180,.06);vertical-align:middle}.address-cell{font-family:SF Mono,Fira Code,monospace;font-size:.8rem;color:var(--text-accent)}.rate-cell{font-weight:600;color:var(--text-primary)}.accrued-cell{font-weight:700;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .7rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.badge-active{background:#10b9811f;color:#34d399;border:1px solid rgba(16,185,129,.2)}.badge-active:before{content:"";width:6px;height:6px;border-radius:50%;background:#34d399;box-shadow:0 0 6px #34d39980;animation:pulse-dot 2s ease-in-out infinite}.badge-paused{background:#f59e0b1f;color:#fbbf24;border:1px solid rgba(245,158,11,.2)}.badge-cancelled{background:#ef44441a;color:#f87171;border:1px solid rgba(239,68,68,.15)}.actions-group{display:flex;gap:.4rem}.empty-state{text-align:center;padding:3rem 1rem;color:var(--text-muted)}.empty-state-icon{font-size:3rem;margin-bottom:.75rem;opacity:.5}.empty-state-text{font-size:.95rem;font-weight:500}.empty-state-sub{font-size:.8rem;margin-top:.25rem}.toast{position:fixed;bottom:2rem;right:2rem;padding:1rem 1.5rem;border-radius:var(--radius-md);font-size:.85rem;font-weight:500;z-index:1000;animation:slideUp .3s ease-out;max-width:400px;backdrop-filter:blur(12px)}.toast-success{background:#10b98126;border:1px solid rgba(16,185,129,.3);color:#34d399}.toast-error{background:#ef444426;border:1px solid rgba(239,68,68,.3);color:#f87171}.toast-info{background:#6366f126;border:1px solid rgba(99,102,241,.3);color:#a5b4fc}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.not-connected{text-align:center;padding:5rem 2rem}.not-connected-icon{font-size:4rem;margin-bottom:1rem;animation:float 3s ease-in-out infinite}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.not-connected h2{font-size:1.5rem;font-weight:700;margin-bottom:.5rem}.not-connected p{color:var(--text-secondary);margin-bottom:1.5rem}.spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.content-grid{display:grid;grid-template-columns:1fr;gap:1.5rem}@media (min-width: 1024px){.content-grid{grid-template-columns:380px 1fr}}@media (max-width: 768px){.app-container{padding:1rem}.header{flex-direction:column;gap:1rem}.form-row{grid-template-columns:1fr}.stats-row{grid-template-columns:1fr 1fr}.stream-table{font-size:.8rem}} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/dist/index.html b/Nexus/paystream-main/frontend/hr-dashboard/dist/index.html new file mode 100644 index 000000000..6306e0376 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/dist/index.html @@ -0,0 +1,17 @@ + + + + + + + PayStream — HR Dashboard + + + + + + + +
+ + diff --git a/Nexus/paystream-main/frontend/hr-dashboard/index.html b/Nexus/paystream-main/frontend/hr-dashboard/index.html new file mode 100644 index 000000000..6d8f6ef8a --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/index.html @@ -0,0 +1,16 @@ + + + + + + + PayStream — HR Dashboard + + + + + +
+ + + diff --git a/Nexus/paystream-main/frontend/hr-dashboard/package-lock.json b/Nexus/paystream-main/frontend/hr-dashboard/package-lock.json new file mode 100644 index 000000000..4c40e4ac6 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/package-lock.json @@ -0,0 +1,1818 @@ +{ + "name": "hr-dashboard", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hr-dashboard", + "version": "1.0.0", + "dependencies": { + "ethers": "^6.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@vitejs/plugin-react": "^4.2.0", + "vite": "^5.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/package.json b/Nexus/paystream-main/frontend/hr-dashboard/package.json new file mode 100644 index 000000000..ff9a583e7 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/package.json @@ -0,0 +1,22 @@ +{ + "name": "hr-dashboard", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "ethers": "^6.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@vitejs/plugin-react": "^4.2.0", + "vite": "^5.0.0" + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/App.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/App.jsx new file mode 100644 index 000000000..ac09912b9 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/App.jsx @@ -0,0 +1,6 @@ +import './index.css'; +import Dashboard from './components/Dashboard'; + +export default function App() { + return ; +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/components/CreateStreamForm.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/components/CreateStreamForm.jsx new file mode 100644 index 000000000..18f640099 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/components/CreateStreamForm.jsx @@ -0,0 +1,103 @@ +import { useState } from 'react'; +import { createStream } from '../services/contractService'; + +export default function CreateStreamForm({ onStreamCreated }) { + const [employee, setEmployee] = useState(''); + const [rate, setRate] = useState(''); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(''); + + if (!employee || !rate) { + setError('Please fill in all fields.'); + return; + } + + if (!/^0x[a-fA-F0-9]{40}$/.test(employee)) { + setError('Invalid Ethereum address format.'); + return; + } + + if (Number(rate) <= 0) { + setError('Rate must be greater than zero.'); + return; + } + + try { + setLoading(true); + await createStream(employee, rate); + setEmployee(''); + setRate(''); + if (onStreamCreated) onStreamCreated(); + } catch (err) { + console.error('Create stream failed:', err); + setError(err.reason || err.message || 'Transaction failed'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+

+ + Create Stream +

+
+
+
+ + setEmployee(e.target.value)} + disabled={loading} + /> +
+
+ + setRate(e.target.value)} + disabled={loading} + /> +

+ Tokens streamed to employee every second. 0.01 ≈ 864 PST/day. +

+
+ {error && ( +

+ ⚠ {error} +

+ )} + +
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/components/Dashboard.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/components/Dashboard.jsx new file mode 100644 index 000000000..1b6f223ef --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/components/Dashboard.jsx @@ -0,0 +1,209 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + connectWallet, + getTreasuryBalance, + getTaxRate, + getTaxVaultBalance, + getStreamCount, + fundContract, + formatAddress, +} from '../services/contractService'; +import CreateStreamForm from './CreateStreamForm'; +import StreamTable from './StreamTable'; +import PendingRequests from './PendingRequests'; + +export default function Dashboard() { + const [account, setAccount] = useState(null); + const [stats, setStats] = useState({ + treasury: '0', + taxRate: 0, + taxVault: '0', + streamCount: 0, + }); + const [refreshTrigger, setRefreshTrigger] = useState(0); + const [fundAmount, setFundAmount] = useState(''); + const [fundLoading, setFundLoading] = useState(false); + + const loadStats = useCallback(async () => { + try { + const [treasury, taxRate, taxVault, streamCount] = await Promise.all([ + getTreasuryBalance(), + getTaxRate(), + getTaxVaultBalance(), + getStreamCount(), + ]); + setStats({ treasury, taxRate, taxVault, streamCount }); + } catch (err) { + console.error('Failed to load stats:', err); + } + }, []); + + useEffect(() => { + if (account) { + loadStats(); + // Poll every 5 seconds for real-time updates + const interval = setInterval(() => { + loadStats(); + setRefreshTrigger(prev => prev + 1); + }, 5000); + return () => clearInterval(interval); + } + }, [account, loadStats]); // Removed refreshTrigger from dependency to avoid loop (though setRefreshTrigger is stable) + + const handleConnect = async () => { + try { + const addr = await connectWallet(); + setAccount(addr); + } catch (err) { + alert(err.message); + } + }; + + const handleFund = async () => { + if (!fundAmount || Number(fundAmount) <= 0) return; + try { + setFundLoading(true); + await fundContract(fundAmount); + setFundAmount(''); + loadStats(); + } catch (err) { + console.error('Fund failed:', err); + alert(err.reason || err.message); + } finally { + setFundLoading(false); + } + }; + + const handleStreamCreated = () => { + setRefreshTrigger((t) => t + 1); + loadStats(); + }; + + const handleRequestProcessed = () => { + setRefreshTrigger((t) => t + 1); + loadStats(); + }; + + if (!account) { + return ( +
+
+
+
P
+
+

PayStream

+

HR Dashboard

+
+
+
+
+
🔐
+

Connect Your Wallet

+

Connect MetaMask to manage payroll streams and fund the treasury.

+ +
+
+ ); + } + + return ( +
+ {/* Header */} +
+
+
P
+
+

PayStream

+

HR Dashboard

+
+
+ +
+ + {/* Stats */} +
+
+
Treasury Balance
+
{Number(stats.treasury).toLocaleString(undefined, { maximumFractionDigits: 2 })}
+
HLUSD Tokens
+
+
+
Active Streams
+
{stats.streamCount}
+
Total created
+
+
+
Tax Rate
+
{(stats.taxRate / 100).toFixed(1)}%
+
{stats.taxRate} basis points
+
+
+
Tax Vault
+
{Number(stats.taxVault).toLocaleString(undefined, { maximumFractionDigits: 2 })}
+
HLUSD Collected
+
+
+ + {/* Content Grid */} +
+ {/* Left — Create + Fund */} +
+ + + {/* Fund Treasury */} +
+
+

+ 💰 + Fund Treasury +

+
+
+ + setFundAmount(e.target.value)} + disabled={fundLoading} + /> +
+ +
+
+ + {/* Right — Pending Requests + Stream Table */} +
+ + +
+
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/components/PendingRequests.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/components/PendingRequests.jsx new file mode 100644 index 000000000..169f27caf --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/components/PendingRequests.jsx @@ -0,0 +1,167 @@ +import { useState, useEffect } from 'react'; +import { + getPendingRequests, + approveStreamRequest, + rejectStreamRequest, + formatAddress, + formatRate, +} from '../services/contractService'; + +export default function PendingRequests({ refreshTrigger, onRequestProcessed }) { + const [requests, setRequests] = useState([]); + const [loading, setLoading] = useState(false); + const [actionLoading, setActionLoading] = useState({}); + + useEffect(() => { + loadRequests(); + }, [refreshTrigger]); + + const loadRequests = async () => { + try { + setLoading(true); + const pending = await getPendingRequests(); + setRequests(pending); + } catch (err) { + console.error('Failed to load pending requests:', err); + } finally { + setLoading(false); + } + }; + + const handleApprove = async (requestId) => { + setActionLoading((p) => ({ ...p, [requestId]: 'approve' })); + try { + await approveStreamRequest(requestId); + await loadRequests(); + if (onRequestProcessed) onRequestProcessed(); + } catch (err) { + console.error('Approve failed:', err); + alert(err.reason || err.message || 'Approval failed'); + } finally { + setActionLoading((p) => ({ ...p, [requestId]: null })); + } + }; + + const handleReject = async (requestId) => { + if (!confirm('Are you sure you want to reject this request?')) return; + + setActionLoading((p) => ({ ...p, [requestId]: 'reject' })); + try { + await rejectStreamRequest(requestId); + await loadRequests(); + if (onRequestProcessed) onRequestProcessed(); + } catch (err) { + console.error('Reject failed:', err); + alert(err.reason || err.message || 'Rejection failed'); + } finally { + setActionLoading((p) => ({ ...p, [requestId]: null })); + } + }; + + if (loading && requests.length === 0) { + return ( +
+
+

+ + Pending Stream Requests +

+
+
+
+

Loading requests…

+
+
+ ); + } + + if (requests.length === 0) { + return ( +
+
+

+ + Pending Stream Requests +

+
+
+
+

No pending requests

+
+
+ ); + } + + return ( +
+
+

+ + Pending Stream Requests ({requests.length}) +

+
+
+ {requests.map((req) => ( +
+
+ Request #{req.id} + + Pending + +
+
+
+
Employee
+
{formatAddress(req.employee)}
+
+
+
Requested Rate
+
+ {formatRate(req.ratePerSecond)} HLUSD/sec +
+
+
+
Daily
+
+ ~{(Number(formatRate(req.ratePerSecond)) * 86400).toFixed(2)} PST +
+
+
+
+ + +
+
+ ))} +
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/components/StreamTable.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/components/StreamTable.jsx new file mode 100644 index 000000000..513684b81 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/components/StreamTable.jsx @@ -0,0 +1,230 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + getAllStreams, + calculateAccrued, + pauseStream, + resumeStream, + cancelStream, + formatAddress, + formatRate, + ethers, +} from '../services/contractService'; + +export default function StreamTable({ refreshTrigger }) { + const [streams, setStreams] = useState([]); + const [accrued, setAccrued] = useState({}); + const [loading, setLoading] = useState(true); + const [actionLoading, setActionLoading] = useState({}); + + const loadStreams = useCallback(async () => { + try { + setLoading(true); + const data = await getAllStreams(); + setStreams(data); + } catch (err) { + console.error('Failed to load streams:', err); + } finally { + setLoading(false); + } + }, []); + + // Load streams on mount and when refreshTrigger changes + useEffect(() => { + loadStreams(); + }, [loadStreams, refreshTrigger]); + + // Update accrued values every 2 seconds + useEffect(() => { + if (streams.length === 0) return; + + const updateAccrued = async () => { + const newAccrued = {}; + for (const s of streams) { + if (s.active) { + try { + const val = await calculateAccrued(s.id); + newAccrued[s.id] = ethers.formatEther(val); + } catch { + newAccrued[s.id] = '0'; + } + } else { + newAccrued[s.id] = '0'; + } + } + setAccrued(newAccrued); + }; + + updateAccrued(); + const interval = setInterval(updateAccrued, 2000); + return () => clearInterval(interval); + }, [streams]); + + const handlePause = async (id) => { + setActionLoading((prev) => ({ ...prev, [id]: 'pause' })); + try { + await pauseStream(id); + await loadStreams(); + alert('✅ Stream paused successfully!'); + } catch (err) { + console.error('Pause failed:', err); + alert(`❌ Failed to pause stream:\n${err.reason || err.message || 'Unknown error'}`); + } finally { + setActionLoading((prev) => ({ ...prev, [id]: null })); + } + }; + + const handleResume = async (id) => { + setActionLoading((prev) => ({ ...prev, [id]: 'resume' })); + try { + await resumeStream(id); + await loadStreams(); + alert('✅ Stream resumed successfully!'); + } catch (err) { + console.error('Resume failed:', err); + alert(`❌ Failed to resume stream:\n${err.reason || err.message || 'Unknown error'}`); + } finally { + setActionLoading((prev) => ({ ...prev, [id]: null })); + } + }; + + const handleCancel = async (id) => { + if (!confirm('Cancel this stream? Pending accrued will be auto-claimed.')) return; + setActionLoading((prev) => ({ ...prev, [id]: 'cancel' })); + try { + await cancelStream(id); + await loadStreams(); + alert('✅ Stream cancelled successfully!'); + } catch (err) { + console.error('Cancel failed:', err); + alert(`❌ Failed to cancel stream:\n${err.reason || err.message || 'Unknown error'}`); + } finally { + setActionLoading((prev) => ({ ...prev, [id]: null })); + } + }; + + const getStatus = (stream) => { + if (!stream.active) { + return Inactive; + } + return Active; + }; + + if (loading) { + return ( +
+
+

+ 📊 + Salary Streams +

+
+
+
+

Loading streams…

+
+
+ ); + } + + return ( +
+
+

+ 📊 + Salary Streams +

+ +
+ + {streams.length === 0 ? ( +
+
💸
+

No streams yet

+

Create your first salary stream using the form.

+
+ ) : ( +
+ + + + + + + + + + + + + {streams.map((stream) => ( + + + + + + + + + ))} + +
Stream IDEmployeeRate (HLUSD/s)Accrued (HLUSD)Status.Actions
#{stream.id}{formatAddress(stream.employee)}{formatRate(stream.ratePerSecond)} HLUSD + {accrued[stream.id] + ? Number(accrued[stream.id]).toFixed(4) + : '0.0000'}{' '} + PST + {getStatus(stream)} +
+ {stream.active ? ( + <> + + + + ) : ( + + )} + +
+
+
+ )} +
+ ); +} diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/index.css b/Nexus/paystream-main/frontend/hr-dashboard/src/index.css new file mode 100644 index 000000000..96f2cad56 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/index.css @@ -0,0 +1,670 @@ +/* ───────────────────────────────────────── + PayStream HR Dashboard — Design System + Dark glassmorphism with indigo→violet accents + ───────────────────────────────────────── */ + +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); + +/* ── Reset ── */ +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + /* Core palette */ + --bg-primary: #0a0a12; + --bg-secondary: #12121f; + --bg-card: rgba(20, 20, 40, 0.6); + --bg-card-hover: rgba(30, 30, 55, 0.7); + --bg-input: rgba(15, 15, 30, 0.8); + + /* Glass */ + --glass-border: rgba(100, 100, 180, 0.15); + --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); + --glass-blur: 16px; + + /* Gradients */ + --gradient-primary: linear-gradient(135deg, #6366f1, #8b5cf6, #a855f7); + --gradient-accent: linear-gradient(135deg, #818cf8, #c084fc); + --gradient-danger: linear-gradient(135deg, #ef4444, #f97316); + --gradient-success: linear-gradient(135deg, #10b981, #34d399); + --gradient-warning: linear-gradient(135deg, #f59e0b, #fbbf24); + --gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(99, 102, 241, 0.08) 0%, transparent 50%), + radial-gradient(ellipse at 80% 20%, rgba(168, 85, 247, 0.06) 0%, transparent 50%), + radial-gradient(ellipse at 50% 80%, rgba(139, 92, 246, 0.04) 0%, transparent 50%); + + /* Text */ + --text-primary: #f1f5f9; + --text-secondary: #94a3b8; + --text-muted: #64748b; + --text-accent: #a5b4fc; + + /* Sizes */ + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 20px; + --radius-full: 9999px; + + /* Transitions */ + --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-slow: 400ms cubic-bezier(0.4, 0, 0.2, 1); +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + min-height: 100vh; + line-height: 1.6; +} + +#root { + min-height: 100vh; + background: var(--gradient-bg); +} + +/* ── Scrollbar ── */ +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: rgba(100, 100, 180, 0.3); + border-radius: 3px; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(100, 100, 180, 0.5); +} + +/* ── Layout ── */ +.app-container { + max-width: 1280px; + margin: 0 auto; + padding: 2rem 1.5rem; +} + +/* ── Header ── */ +.header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2.5rem; + padding-bottom: 1.5rem; + border-bottom: 1px solid var(--glass-border); +} + +.header-brand { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.header-logo { + width: 42px; + height: 42px; + background: var(--gradient-primary); + border-radius: var(--radius-md); + display: flex; + align-items: center; + justify-content: center; + font-size: 1.25rem; + font-weight: 800; + box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); +} + +.header-title { + font-size: 1.5rem; + font-weight: 700; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.header-subtitle { + font-size: 0.75rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: 600; +} + +.btn-connect { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.65rem 1.25rem; + background: var(--gradient-primary); + border: none; + border-radius: var(--radius-full); + color: white; + font-family: inherit; + font-size: 0.875rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); +} + +.btn-connect:hover { + transform: translateY(-2px); + box-shadow: 0 6px 25px rgba(99, 102, 241, 0.45); +} + +.btn-connect.connected { + background: var(--bg-card); + border: 1px solid var(--glass-border); + box-shadow: var(--glass-shadow); +} + +.wallet-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #34d399; + box-shadow: 0 0 8px rgba(52, 211, 153, 0.5); + animation: pulse-dot 2s ease-in-out infinite; +} + +@keyframes pulse-dot { + + 0%, + 100% { + opacity: 1; + transform: scale(1); + } + + 50% { + opacity: 0.7; + transform: scale(1.2); + } +} + +/* ── Stats Row ── */ +.stats-row { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 1.25rem; + margin-bottom: 2rem; +} + +.stat-card { + background: var(--bg-card); + backdrop-filter: blur(var(--glass-blur)); + border: 1px solid var(--glass-border); + border-radius: var(--radius-lg); + padding: 1.25rem 1.5rem; + box-shadow: var(--glass-shadow); + transition: all var(--transition-base); + position: relative; + overflow: hidden; +} + +.stat-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: var(--gradient-primary); + opacity: 0; + transition: opacity var(--transition-base); +} + +.stat-card:hover::before { + opacity: 1; +} + +.stat-card:hover { + transform: translateY(-3px); + border-color: rgba(100, 100, 180, 0.25); +} + +.stat-label { + font-size: 0.75rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.08em; + font-weight: 600; + margin-bottom: 0.5rem; +} + +.stat-value { + font-size: 1.75rem; + font-weight: 800; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.stat-sub { + font-size: 0.75rem; + color: var(--text-secondary); + margin-top: 0.25rem; +} + +/* ── Glass Card ── */ +.glass-card { + background: var(--bg-card); + backdrop-filter: blur(var(--glass-blur)); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + padding: 1.75rem; + box-shadow: var(--glass-shadow); + margin-bottom: 1.5rem; +} + +.card-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.25rem; +} + +.card-title { + font-size: 1.1rem; + font-weight: 700; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 0.5rem; +} + +.card-title-icon { + font-size: 1.25rem; +} + +/* ── Form ── */ +.form-group { + margin-bottom: 1rem; +} + +.form-label { + display: block; + font-size: 0.8rem; + font-weight: 600; + color: var(--text-secondary); + margin-bottom: 0.4rem; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.form-input { + width: 100%; + padding: 0.75rem 1rem; + background: var(--bg-input); + border: 1px solid var(--glass-border); + border-radius: var(--radius-md); + color: var(--text-primary); + font-family: inherit; + font-size: 0.9rem; + transition: all var(--transition-fast); + outline: none; +} + +.form-input::placeholder { + color: var(--text-muted); +} + +.form-input:focus { + border-color: #6366f1; + box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15); +} + +.form-row { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 1rem; +} + +.form-hint { + font-size: 0.7rem; + color: var(--text-muted); + margin-top: 0.25rem; +} + +/* ── Buttons ── */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.4rem; + padding: 0.65rem 1.25rem; + border: none; + border-radius: var(--radius-md); + font-family: inherit; + font-size: 0.85rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + text-decoration: none; +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none !important; +} + +.btn-primary { + background: var(--gradient-primary); + color: white; + box-shadow: 0 4px 15px rgba(99, 102, 241, 0.3); +} + +.btn-primary:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 6px 25px rgba(99, 102, 241, 0.45); +} + +.btn-sm { + padding: 0.4rem 0.75rem; + font-size: 0.75rem; + border-radius: var(--radius-sm); +} + +.btn-danger { + background: var(--gradient-danger); + color: white; +} + +.btn-danger:hover:not(:disabled) { + transform: translateY(-1px); + box-shadow: 0 4px 15px rgba(239, 68, 68, 0.3); +} + +.btn-warning { + background: var(--gradient-warning); + color: #1a1a2e; +} + +.btn-success { + background: var(--gradient-success); + color: white; +} + +.btn-ghost { + background: rgba(255, 255, 255, 0.05); + color: var(--text-secondary); + border: 1px solid var(--glass-border); +} + +.btn-ghost:hover:not(:disabled) { + background: rgba(255, 255, 255, 0.1); + color: var(--text-primary); +} + +/* ── Table ── */ +.stream-table { + width: 100%; + border-collapse: separate; + border-spacing: 0; +} + +.stream-table thead th { + padding: 0.75rem 1rem; + font-size: 0.7rem; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.08em; + text-align: left; + border-bottom: 1px solid var(--glass-border); +} + +.stream-table tbody tr { + transition: background var(--transition-fast); +} + +.stream-table tbody tr:hover { + background: rgba(99, 102, 241, 0.04); +} + +.stream-table tbody td { + padding: 0.85rem 1rem; + font-size: 0.875rem; + border-bottom: 1px solid rgba(100, 100, 180, 0.06); + vertical-align: middle; +} + +.address-cell { + font-family: 'SF Mono', 'Fira Code', monospace; + font-size: 0.8rem; + color: var(--text-accent); +} + +.rate-cell { + font-weight: 600; + color: var(--text-primary); +} + +.accrued-cell { + font-weight: 700; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +/* ── Status Badge ── */ +.badge { + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.25rem 0.7rem; + border-radius: var(--radius-full); + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.badge-active { + background: rgba(16, 185, 129, 0.12); + color: #34d399; + border: 1px solid rgba(16, 185, 129, 0.2); +} + +.badge-active::before { + content: ''; + width: 6px; + height: 6px; + border-radius: 50%; + background: #34d399; + box-shadow: 0 0 6px rgba(52, 211, 153, 0.5); + animation: pulse-dot 2s ease-in-out infinite; +} + +.badge-paused { + background: rgba(245, 158, 11, 0.12); + color: #fbbf24; + border: 1px solid rgba(245, 158, 11, 0.2); +} + +.badge-cancelled { + background: rgba(239, 68, 68, 0.1); + color: #f87171; + border: 1px solid rgba(239, 68, 68, 0.15); +} + +/* ── Actions Group ── */ +.actions-group { + display: flex; + gap: 0.4rem; +} + +/* ── Empty State ── */ +.empty-state { + text-align: center; + padding: 3rem 1rem; + color: var(--text-muted); +} + +.empty-state-icon { + font-size: 3rem; + margin-bottom: 0.75rem; + opacity: 0.5; +} + +.empty-state-text { + font-size: 0.95rem; + font-weight: 500; +} + +.empty-state-sub { + font-size: 0.8rem; + margin-top: 0.25rem; +} + +/* ── Toast / Status ── */ +.toast { + position: fixed; + bottom: 2rem; + right: 2rem; + padding: 1rem 1.5rem; + border-radius: var(--radius-md); + font-size: 0.85rem; + font-weight: 500; + z-index: 1000; + animation: slideUp 0.3s ease-out; + max-width: 400px; + backdrop-filter: blur(12px); +} + +.toast-success { + background: rgba(16, 185, 129, 0.15); + border: 1px solid rgba(16, 185, 129, 0.3); + color: #34d399; +} + +.toast-error { + background: rgba(239, 68, 68, 0.15); + border: 1px solid rgba(239, 68, 68, 0.3); + color: #f87171; +} + +.toast-info { + background: rgba(99, 102, 241, 0.15); + border: 1px solid rgba(99, 102, 241, 0.3); + color: #a5b4fc; +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(20px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ── Not Connected ── */ +.not-connected { + text-align: center; + padding: 5rem 2rem; +} + +.not-connected-icon { + font-size: 4rem; + margin-bottom: 1rem; + animation: float 3s ease-in-out infinite; +} + +@keyframes float { + + 0%, + 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-10px); + } +} + +.not-connected h2 { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 0.5rem; +} + +.not-connected p { + color: var(--text-secondary); + margin-bottom: 1.5rem; +} + +/* ── Loading spinner ── */ +.spinner { + display: inline-block; + width: 16px; + height: 16px; + border: 2px solid rgba(255, 255, 255, 0.2); + border-top-color: white; + border-radius: 50%; + animation: spin 0.6s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* ── Grid Layout ── */ +.content-grid { + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; +} + +@media (min-width: 1024px) { + .content-grid { + grid-template-columns: 380px 1fr; + } +} + +/* ── Responsive ── */ +@media (max-width: 768px) { + .app-container { + padding: 1rem; + } + + .header { + flex-direction: column; + gap: 1rem; + } + + .form-row { + grid-template-columns: 1fr; + } + + .stats-row { + grid-template-columns: 1fr 1fr; + } + + .stream-table { + font-size: 0.8rem; + } +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/main.jsx b/Nexus/paystream-main/frontend/hr-dashboard/src/main.jsx new file mode 100644 index 000000000..226a04a53 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/main.jsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +); diff --git a/Nexus/paystream-main/frontend/hr-dashboard/src/services/contractService.js b/Nexus/paystream-main/frontend/hr-dashboard/src/services/contractService.js new file mode 100644 index 000000000..b7e963572 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/src/services/contractService.js @@ -0,0 +1,317 @@ +import { ethers } from 'ethers'; +import PayStreamABI from '../../../../shared/abi/PayStream.json'; +import MockTokenABI from '../../../../shared/abi/MockToken.json'; +import TaxVaultABI from '../../../../shared/abi/TaxVault.json'; + +// Default addresses for local hardhat deployment — overwritten dynamically +let PAYSTREAM_ADDRESS = ''; +let TOKEN_ADDRESS = ''; +let TAX_VAULT_ADDRESS = ''; + +// Try to load addresses from deployment +try { + const addresses = await import('../../../../shared/abi/addresses.json'); + PAYSTREAM_ADDRESS = addresses.payStream || ''; + TOKEN_ADDRESS = addresses.token || ''; + TAX_VAULT_ADDRESS = addresses.taxVault || ''; +} catch (e) { + console.warn('No deployment addresses found. Please deploy contracts first.'); +} + +export function getProvider() { + if (window.ethereum) { + return new ethers.BrowserProvider(window.ethereum); + } + // Fallback to HeLa Testnet Public RPC + return new ethers.JsonRpcProvider('https://testnet-rpc.helachain.com'); +} + +export async function getSigner() { + const provider = getProvider(); + return provider.getSigner(); +} + +export async function switchToHeLaNetwork() { + if (typeof window.ethereum === 'undefined') { + throw new Error('MetaMask is not installed'); + } + + const chainId = '0xA2D08'; // 666888 in hex (HeLa Testnet) + + try { + // Try to switch to the network + await window.ethereum.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId }], + }); + } catch (switchError) { + // If the network doesn't exist, add it + if (switchError.code === 4902) { + try { + await window.ethereum.request({ + method: 'wallet_addEthereumChain', + params: [{ + chainId, + chainName: 'HeLa Testnet', + nativeCurrency: { + name: 'HLUSD', + symbol: 'HLUSD', + decimals: 18 + }, + rpcUrls: ['https://testnet-rpc.helachain.com'], + blockExplorerUrls: ['https://testnet-blockexplorer.helachain.com'] + }], + }); + } catch (addError) { + console.error('Add chain error:', addError); + throw new Error('Failed to add HeLa Testnet to MetaMask'); + } + } else { + throw switchError; + } + } +} + +export async function connectWallet() { + console.log('Attempting to connect wallet...'); + console.log('window.ethereum type:', typeof window.ethereum); + + if (typeof window.ethereum === 'undefined') { + console.error('MetaMask not detected!'); + throw new Error('MetaMask is not installed. Please install the browser extension from metamask.io'); + } + + // First, try to switch to HeLa network + try { + await switchToHeLaNetwork(); + console.log('✅ Switched to HeLa Testnet'); + } catch (err) { + console.warn('Could not switch network:', err); + throw new Error('Please manually switch MetaMask to HeLa Testnet (Chain ID: 666888)'); + } + + const accounts = await window.ethereum.request({ + method: 'eth_requestAccounts', + }); + console.log('Connected account:', accounts[0]); + return accounts[0]; +} + +export async function getPayStreamContract(signerOrProvider) { + return new ethers.Contract(PAYSTREAM_ADDRESS, PayStreamABI.abi, signerOrProvider); +} + +export async function getTokenContract(signerOrProvider) { + return new ethers.Contract(TOKEN_ADDRESS, MockTokenABI.abi, signerOrProvider); +} + +export async function getTaxVaultContract(signerOrProvider) { + return new ethers.Contract(TAX_VAULT_ADDRESS, TaxVaultABI.abi, signerOrProvider); +} + +// ── Write Functions ── + +export async function createStream(employeeAddress, ratePerSecond) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const rateWei = ethers.parseEther(ratePerSecond.toString()); + const tx = await contract.createStream(employeeAddress, rateWei); + await tx.wait(); + return tx; +} + +export async function pauseStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.pauseStream(streamId); + await tx.wait(); + return tx; +} + +export async function resumeStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.resumeStream(streamId); + await tx.wait(); + return tx; +} + +export async function cancelStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.cancelStream(streamId); + await tx.wait(); + return tx; +} + +export async function fundContract(amount) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const amountWei = ethers.parseEther(amount.toString()); + + const network = await (await getProvider()).getNetwork(); + + // Chain ID 666888 is HeLa Testnet where we use native HLUSD (which needs wrapping) + if (network.chainId === 666888n) { + // 1. Wrap Native HLUSD -> Wrapped HLUSD (WHLUSD) + const token = new ethers.Contract(TOKEN_ADDRESS, ['function deposit() payable', 'function approve(address, uint256)', 'function balanceOf(address) view returns (uint256)'], signer); + + console.log(`Checking WHLUSD balance...`); + const bal = await token.balanceOf(await signer.getAddress()); + console.log(`Current WHLUSD Balance: ${ethers.formatEther(bal)}`); + + // Only wrap what is needed + if (bal < amountWei) { + const needed = amountWei - bal; + console.log(`Wrapping ${ethers.formatEther(needed)} HLUSD...`); + // Explicit high gas limit to bypass estimation issues + const depositTx = await token.deposit({ value: needed, gasLimit: 500000 }); + await depositTx.wait(); + console.log('Wrap complete'); + } else { + console.log('Sufficient WHLUSD balance, skipping wrap.'); + } + + // 2. Approve PayStream to spend WHLUSD + console.log(`Approving transfer...`); + const approveTx = await token.approve(PAYSTREAM_ADDRESS, amountWei, { gasLimit: 200000 }); + await approveTx.wait(); + console.log('Approval complete'); + + // 3. Fund Contract + console.log(`Funding contract...`); + const fundTx = await contract.fundContract(amountWei, { gasLimit: 500000 }); + await fundTx.wait(); + return fundTx; + } else { + // Standard ERC20 logic (Localhost) + const token = await getTokenContract(signer); + const approveTx = await token.approve(PAYSTREAM_ADDRESS, amountWei); + await approveTx.wait(); + + const fundTx = await contract.fundContract(amountWei); + await fundTx.wait(); + return fundTx; + } +} + +export async function setTaxRate(basisPoints) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.setTaxRate(basisPoints); + await tx.wait(); + return tx; +} + +export async function approveStreamRequest(requestId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.approveStreamRequest(requestId); + await tx.wait(); + return tx; +} + +export async function rejectStreamRequest(requestId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.rejectStreamRequest(requestId); + await tx.wait(); + return tx; +} + +export async function awardBonus(employeeAddress, amount) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const amountWei = ethers.parseEther(amount.toString()); + const tx = await contract.awardBonus(employeeAddress, amountWei); + await tx.wait(); + return tx; +} + +// ── Read Functions ── + +export async function getStreamCount() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const count = await contract.getStreamCount(); + return Number(count); +} + +export async function getStream(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.getStream(streamId); +} + +export async function getAllStreams() { + const count = await getStreamCount(); + const streams = []; + for (let i = 0; i < count; i++) { + const s = await getStream(i); + streams.push({ + id: i, + employer: s.employer, + employee: s.employee, + ratePerSecond: s.ratePerSecond, + lastClaimTime: Number(s.lastClaimTime), + active: s.active, + }); + } + return streams; +} + +export async function calculateAccrued(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.calculateAccrued(streamId); +} + +export async function getTreasuryBalance() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const balance = await contract.getTreasuryBalance(); + return ethers.formatEther(balance); +} + +export async function getTaxRate() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const rate = await contract.taxBasisPoints(); + return Number(rate); +} + +export async function getTaxVaultBalance() { + const provider = getProvider(); + const vault = await getTaxVaultContract(provider); + const balance = await vault.getBalance(); + return ethers.formatEther(balance); +} + +export async function getPendingRequests() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const { requestIds, requests } = await contract.getPendingRequests(); + + const pendingRequests = []; + for (let i = 0; i < requests.length; i++) { + pendingRequests.push({ + id: Number(requestIds[i]), + employee: requests[i].employee, + ratePerSecond: requests[i].ratePerSecond, + timestamp: Number(requests[i].timestamp), + processed: requests[i].processed, + }); + } + return pendingRequests; +} + +export function formatAddress(address) { + if (!address) return ''; + return `${address.slice(0, 6)}…${address.slice(-4)}`; +} + +export function formatRate(rateWei) { + return ethers.formatEther(rateWei); +} + +export { ethers }; diff --git a/Nexus/paystream-main/frontend/hr-dashboard/vite.config.js b/Nexus/paystream-main/frontend/hr-dashboard/vite.config.js new file mode 100644 index 000000000..618f398d8 --- /dev/null +++ b/Nexus/paystream-main/frontend/hr-dashboard/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + server: { + port: 3000, + fs: { + allow: ['../../..'], + }, + }, + build: { + target: 'esnext', + }, +}); diff --git a/Nexus/paystream-main/frontend/paystream-app/dist/assets/addresses-Q5z2Stz7.js b/Nexus/paystream-main/frontend/paystream-app/dist/assets/addresses-Q5z2Stz7.js new file mode 100644 index 000000000..4c62be077 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/dist/assets/addresses-Q5z2Stz7.js @@ -0,0 +1 @@ +const e="",t="0xe1Fd27F4390DcBE165f4D60DBF821e4B9Bb02dEd",a="0xc582Bc0317dbb0908203541971a358c44b1F3766",c="hela",o="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",d="2026-02-15T16:45:30.736Z",s={666888:{token:"",taxVault:"0x821f3361D454cc98b7555221A06Be563a7E2E0A6",payStream:"0x1780bCf4103D3F501463AD3414c7f4b654bb7aFd",network:"hela",deployer:"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",timestamp:"2026-02-15T17:53:47.850Z"},token:e,taxVault:t,payStream:a,network:c,deployer:o,timestamp:d};export{s as default,o as deployer,c as network,a as payStream,t as taxVault,d as timestamp,e as token}; diff --git a/Nexus/paystream-main/frontend/paystream-app/dist/assets/index-B4MmoxS7.js b/Nexus/paystream-main/frontend/paystream-app/dist/assets/index-B4MmoxS7.js new file mode 100644 index 000000000..c88156fcd --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/dist/assets/index-B4MmoxS7.js @@ -0,0 +1,78 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const a of i.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function v3(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Jg={exports:{}},Jc={},Yg={exports:{}},X={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ao=Symbol.for("react.element"),E3=Symbol.for("react.portal"),A3=Symbol.for("react.fragment"),k3=Symbol.for("react.strict_mode"),S3=Symbol.for("react.profiler"),C3=Symbol.for("react.provider"),P3=Symbol.for("react.context"),N3=Symbol.for("react.forward_ref"),R3=Symbol.for("react.suspense"),T3=Symbol.for("react.memo"),I3=Symbol.for("react.lazy"),Vp=Symbol.iterator;function O3(t){return t===null||typeof t!="object"?null:(t=Vp&&t[Vp]||t["@@iterator"],typeof t=="function"?t:null)}var qg={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Zg=Object.assign,Xg={};function Ji(t,e,n){this.props=t,this.context=e,this.refs=Xg,this.updater=n||qg}Ji.prototype.isReactComponent={};Ji.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Ji.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function ey(){}ey.prototype=Ji.prototype;function B0(t,e,n){this.props=t,this.context=e,this.refs=Xg,this.updater=n||qg}var M0=B0.prototype=new ey;M0.constructor=B0;Zg(M0,Ji.prototype);M0.isPureReactComponent=!0;var Wp=Array.isArray,ty=Object.prototype.hasOwnProperty,F0={current:null},ny={key:!0,ref:!0,__self:!0,__source:!0};function ry(t,e,n){var r,s={},i=null,a=null;if(e!=null)for(r in e.ref!==void 0&&(a=e.ref),e.key!==void 0&&(i=""+e.key),e)ty.call(e,r)&&!ny.hasOwnProperty(r)&&(s[r]=e[r]);var o=arguments.length-2;if(o===1)s.children=n;else if(1>>1,te=_[J];if(0>>1;Js(Sn,V))Pts(Nt,Sn)?(_[J]=Nt,_[Pt]=V,J=Pt):(_[J]=Sn,_[tt]=V,J=tt);else if(Pts(Nt,V))_[J]=Nt,_[Pt]=V,J=Pt;else break e}}return F}function s(_,F){var V=_.sortIndex-F.sortIndex;return V!==0?V:_.id-F.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;t.unstable_now=function(){return i.now()}}else{var a=Date,o=a.now();t.unstable_now=function(){return a.now()-o}}var l=[],c=[],f=1,u=null,d=3,m=!1,b=!1,x=!1,v=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,p=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(_){for(var F=n(c);F!==null;){if(F.callback===null)r(c);else if(F.startTime<=_)r(c),F.sortIndex=F.expirationTime,e(l,F);else break;F=n(c)}}function A(_){if(x=!1,y(_),!b)if(n(l)!==null)b=!0,M(E);else{var F=n(c);F!==null&&W(A,F.startTime-_)}}function E(_,F){b=!1,x&&(x=!1,h(N),N=-1),m=!0;var V=d;try{for(y(F),u=n(l);u!==null&&(!(u.expirationTime>F)||_&&!D());){var J=u.callback;if(typeof J=="function"){u.callback=null,d=u.priorityLevel;var te=J(u.expirationTime<=F);F=t.unstable_now(),typeof te=="function"?u.callback=te:u===n(l)&&r(l),y(F)}else r(l);u=n(l)}if(u!==null)var Ct=!0;else{var tt=n(c);tt!==null&&W(A,tt.startTime-F),Ct=!1}return Ct}finally{u=null,d=V,m=!1}}var S=!1,C=null,N=-1,T=5,I=-1;function D(){return!(t.unstable_now()-I_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return d},t.unstable_getFirstCallbackNode=function(){return n(l)},t.unstable_next=function(_){switch(d){case 1:case 2:case 3:var F=3;break;default:F=d}var V=d;d=F;try{return _()}finally{d=V}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(_,F){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var V=d;d=_;try{return F()}finally{d=V}},t.unstable_scheduleCallback=function(_,F,V){var J=t.unstable_now();switch(typeof V=="object"&&V!==null?(V=V.delay,V=typeof V=="number"&&0J?(_.sortIndex=V,e(c,_),n(l)===null&&_===n(c)&&(x?(h(N),N=-1):x=!0,W(A,V-J))):(_.sortIndex=te,e(l,_),b||m||(b=!0,M(E))),_},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(_){var F=d;return function(){var V=d;d=F;try{return _.apply(this,arguments)}finally{d=V}}}})(ly);oy.exports=ly;var G3=oy.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var V3=k,jt=G3;function U(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ed=Object.prototype.hasOwnProperty,W3=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Kp={},Qp={};function $3(t){return ed.call(Qp,t)?!0:ed.call(Kp,t)?!1:W3.test(t)?Qp[t]=!0:(Kp[t]=!0,!1)}function K3(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function Q3(t,e,n,r){if(e===null||typeof e>"u"||K3(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function xt(t,e,n,r,s,i,a){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=i,this.removeEmptyString=a}var Xe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){Xe[t]=new xt(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];Xe[e]=new xt(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){Xe[t]=new xt(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){Xe[t]=new xt(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){Xe[t]=new xt(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){Xe[t]=new xt(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){Xe[t]=new xt(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){Xe[t]=new xt(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){Xe[t]=new xt(t,5,!1,t.toLowerCase(),null,!1,!1)});var j0=/[\-:]([a-z])/g;function z0(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(j0,z0);Xe[e]=new xt(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(j0,z0);Xe[e]=new xt(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(j0,z0);Xe[e]=new xt(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){Xe[t]=new xt(t,1,!1,t.toLowerCase(),null,!1,!1)});Xe.xlinkHref=new xt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){Xe[t]=new xt(t,1,!1,t.toLowerCase(),null,!0,!0)});function H0(t,e,n,r){var s=Xe.hasOwnProperty(e)?Xe[e]:null;(s!==null?s.type!==0:r||!(2o||s[a]!==i[o]){var l=` +`+s[a].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=a&&0<=o);break}}}finally{zu=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?va(t):""}function J3(t){switch(t.tag){case 5:return va(t.type);case 16:return va("Lazy");case 13:return va("Suspense");case 19:return va("SuspenseList");case 0:case 2:case 15:return t=Hu(t.type,!1),t;case 11:return t=Hu(t.type.render,!1),t;case 1:return t=Hu(t.type,!0),t;default:return""}}function sd(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case ti:return"Fragment";case ei:return"Portal";case td:return"Profiler";case G0:return"StrictMode";case nd:return"Suspense";case rd:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case fy:return(t.displayName||"Context")+".Consumer";case uy:return(t._context.displayName||"Context")+".Provider";case V0:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case W0:return e=t.displayName||null,e!==null?e:sd(t.type)||"Memo";case Cr:e=t._payload,t=t._init;try{return sd(t(e))}catch{}}return null}function Y3(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return sd(e);case 8:return e===G0?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Qr(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function hy(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function q3(t){var e=hy(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,i=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return s.call(this)},set:function(a){r=""+a,i.call(this,a)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Jo(t){t._valueTracker||(t._valueTracker=q3(t))}function py(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=hy(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function lc(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function id(t,e){var n=e.checked;return Ne({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function Yp(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=Qr(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function my(t,e){e=e.checked,e!=null&&H0(t,"checked",e,!1)}function ad(t,e){my(t,e);var n=Qr(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?od(t,e.type,n):e.hasOwnProperty("defaultValue")&&od(t,e.type,Qr(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function qp(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function od(t,e,n){(e!=="number"||lc(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var Ea=Array.isArray;function gi(t,e,n,r){if(t=t.options,e){e={};for(var s=0;s"+e.valueOf().toString()+"",e=Yo.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Va(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var Ia={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Z3=["Webkit","ms","Moz","O"];Object.keys(Ia).forEach(function(t){Z3.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),Ia[e]=Ia[t]})});function by(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||Ia.hasOwnProperty(t)&&Ia[t]?(""+e).trim():e+"px"}function wy(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=by(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,s):t[n]=s}}var X3=Ne({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ud(t,e){if(e){if(X3[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(U(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(U(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(U(61))}if(e.style!=null&&typeof e.style!="object")throw Error(U(62))}}function fd(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var dd=null;function $0(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var hd=null,yi=null,bi=null;function em(t){if(t=Co(t)){if(typeof hd!="function")throw Error(U(280));var e=t.stateNode;e&&(e=eu(e),hd(t.stateNode,t.type,e))}}function vy(t){yi?bi?bi.push(t):bi=[t]:yi=t}function Ey(){if(yi){var t=yi,e=bi;if(bi=yi=null,em(t),e)for(t=0;t>>=0,t===0?32:31-(u4(t)/f4|0)|0}var qo=64,Zo=4194304;function Aa(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function dc(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,s=t.suspendedLanes,i=t.pingedLanes,a=n&268435455;if(a!==0){var o=a&~s;o!==0?r=Aa(o):(i&=a,i!==0&&(r=Aa(i)))}else a=n&~s,a!==0?r=Aa(a):i!==0&&(r=Aa(i));if(r===0)return 0;if(e!==0&&e!==r&&!(e&s)&&(s=r&-r,i=e&-e,s>=i||s===16&&(i&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function ko(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-gn(e),t[e]=n}function m4(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=_a),cm=" ",um=!1;function Hy(t,e){switch(t){case"keyup":return G4.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Gy(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ni=!1;function W4(t,e){switch(t){case"compositionend":return Gy(e);case"keypress":return e.which!==32?null:(um=!0,cm);case"textInput":return t=e.data,t===cm&&um?null:t;default:return null}}function $4(t,e){if(ni)return t==="compositionend"||!eh&&Hy(t,e)?(t=jy(),Fl=q0=_r=null,ni=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=pm(n)}}function Ky(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Ky(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Qy(){for(var t=window,e=lc();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=lc(t.document)}return e}function th(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function t8(t){var e=Qy(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&Ky(n.ownerDocument.documentElement,n)){if(r!==null&&th(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var s=n.textContent.length,i=Math.min(r.start,s);r=r.end===void 0?i:Math.min(r.end,s),!t.extend&&i>r&&(s=r,r=i,i=s),s=mm(n,i);var a=mm(n,r);s&&a&&(t.rangeCount!==1||t.anchorNode!==s.node||t.anchorOffset!==s.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)&&(e=e.createRange(),e.setStart(s.node,s.offset),t.removeAllRanges(),i>r?(t.addRange(e),t.extend(a.node,a.offset)):(e.setEnd(a.node,a.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,ri=null,bd=null,Ua=null,wd=!1;function xm(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;wd||ri==null||ri!==lc(r)||(r=ri,"selectionStart"in r&&th(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ua&&Ya(Ua,r)||(Ua=r,r=mc(bd,"onSelect"),0ai||(t.current=Cd[ai],Cd[ai]=null,ai--)}function pe(t,e){ai++,Cd[ai]=t.current,t.current=e}var Jr={},it=es(Jr),Et=es(!1),Os=Jr;function Ri(t,e){var n=t.type.contextTypes;if(!n)return Jr;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var s={},i;for(i in n)s[i]=e[i];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=s),s}function At(t){return t=t.childContextTypes,t!=null}function gc(){ye(Et),ye(it)}function Am(t,e,n){if(it.current!==Jr)throw Error(U(168));pe(it,e),pe(Et,n)}function rb(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in e))throw Error(U(108,Y3(t)||"Unknown",s));return Ne({},n,r)}function yc(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||Jr,Os=it.current,pe(it,t),pe(Et,Et.current),!0}function km(t,e,n){var r=t.stateNode;if(!r)throw Error(U(169));n?(t=rb(t,e,Os),r.__reactInternalMemoizedMergedChildContext=t,ye(Et),ye(it),pe(it,t)):ye(Et),pe(Et,n)}var Jn=null,tu=!1,nf=!1;function sb(t){Jn===null?Jn=[t]:Jn.push(t)}function h8(t){tu=!0,sb(t)}function ts(){if(!nf&&Jn!==null){nf=!0;var t=0,e=oe;try{var n=Jn;for(oe=1;t>=a,s-=a,Xn=1<<32-gn(e)+s|n<N?(T=C,C=null):T=C.sibling;var I=d(h,C,y[N],A);if(I===null){C===null&&(C=T);break}t&&C&&I.alternate===null&&e(h,C),p=i(I,p,N),S===null?E=I:S.sibling=I,S=I,C=T}if(N===y.length)return n(h,C),Ee&&ms(h,N),E;if(C===null){for(;NN?(T=C,C=null):T=C.sibling;var D=d(h,C,I.value,A);if(D===null){C===null&&(C=T);break}t&&C&&D.alternate===null&&e(h,C),p=i(D,p,N),S===null?E=D:S.sibling=D,S=D,C=T}if(I.done)return n(h,C),Ee&&ms(h,N),E;if(C===null){for(;!I.done;N++,I=y.next())I=u(h,I.value,A),I!==null&&(p=i(I,p,N),S===null?E=I:S.sibling=I,S=I);return Ee&&ms(h,N),E}for(C=r(h,C);!I.done;N++,I=y.next())I=m(C,h,N,I.value,A),I!==null&&(t&&I.alternate!==null&&C.delete(I.key===null?N:I.key),p=i(I,p,N),S===null?E=I:S.sibling=I,S=I);return t&&C.forEach(function(K){return e(h,K)}),Ee&&ms(h,N),E}function v(h,p,y,A){if(typeof y=="object"&&y!==null&&y.type===ti&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Qo:e:{for(var E=y.key,S=p;S!==null;){if(S.key===E){if(E=y.type,E===ti){if(S.tag===7){n(h,S.sibling),p=s(S,y.props.children),p.return=h,h=p;break e}}else if(S.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Cr&&Pm(E)===S.type){n(h,S.sibling),p=s(S,y.props),p.ref=ha(h,S,y),p.return=h,h=p;break e}n(h,S);break}else e(h,S);S=S.sibling}y.type===ti?(p=Ns(y.props.children,h.mode,A,y.key),p.return=h,h=p):(A=$l(y.type,y.key,y.props,null,h.mode,A),A.ref=ha(h,p,y),A.return=h,h=A)}return a(h);case ei:e:{for(S=y.key;p!==null;){if(p.key===S)if(p.tag===4&&p.stateNode.containerInfo===y.containerInfo&&p.stateNode.implementation===y.implementation){n(h,p.sibling),p=s(p,y.children||[]),p.return=h,h=p;break e}else{n(h,p);break}else e(h,p);p=p.sibling}p=ff(y,h.mode,A),p.return=h,h=p}return a(h);case Cr:return S=y._init,v(h,p,S(y._payload),A)}if(Ea(y))return b(h,p,y,A);if(la(y))return x(h,p,y,A);il(h,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,p!==null&&p.tag===6?(n(h,p.sibling),p=s(p,y),p.return=h,h=p):(n(h,p),p=uf(y,h.mode,A),p.return=h,h=p),a(h)):n(h,p)}return v}var Ii=lb(!0),cb=lb(!1),vc=es(null),Ec=null,ci=null,ih=null;function ah(){ih=ci=Ec=null}function oh(t){var e=vc.current;ye(vc),t._currentValue=e}function Rd(t,e,n){for(;t!==null;){var r=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,r!==null&&(r.childLanes|=e)):r!==null&&(r.childLanes&e)!==e&&(r.childLanes|=e),t===n)break;t=t.return}}function vi(t,e){Ec=t,ih=ci=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(vt=!0),t.firstContext=null)}function tn(t){var e=t._currentValue;if(ih!==t)if(t={context:t,memoizedValue:e,next:null},ci===null){if(Ec===null)throw Error(U(308));ci=t,Ec.dependencies={lanes:0,firstContext:t}}else ci=ci.next=t;return e}var Es=null;function lh(t){Es===null?Es=[t]:Es.push(t)}function ub(t,e,n,r){var s=e.interleaved;return s===null?(n.next=n,lh(e)):(n.next=s.next,s.next=n),e.interleaved=n,lr(t,r)}function lr(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var Pr=!1;function ch(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function fb(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function tr(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function zr(t,e,n){var r=t.updateQueue;if(r===null)return null;if(r=r.shared,se&2){var s=r.pending;return s===null?e.next=e:(e.next=s.next,s.next=e),r.pending=e,lr(t,n)}return s=r.interleaved,s===null?(e.next=e,lh(r)):(e.next=s.next,s.next=e),r.interleaved=e,lr(t,n)}function jl(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,Q0(t,n)}}function Nm(t,e){var n=t.updateQueue,r=t.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?s=i=a:i=i.next=a,n=n.next}while(n!==null);i===null?s=i=e:i=i.next=e}else s=i=e;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:r.shared,effects:r.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function Ac(t,e,n,r){var s=t.updateQueue;Pr=!1;var i=s.firstBaseUpdate,a=s.lastBaseUpdate,o=s.shared.pending;if(o!==null){s.shared.pending=null;var l=o,c=l.next;l.next=null,a===null?i=c:a.next=c,a=l;var f=t.alternate;f!==null&&(f=f.updateQueue,o=f.lastBaseUpdate,o!==a&&(o===null?f.firstBaseUpdate=c:o.next=c,f.lastBaseUpdate=l))}if(i!==null){var u=s.baseState;a=0,f=c=l=null,o=i;do{var d=o.lane,m=o.eventTime;if((r&d)===d){f!==null&&(f=f.next={eventTime:m,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var b=t,x=o;switch(d=e,m=n,x.tag){case 1:if(b=x.payload,typeof b=="function"){u=b.call(m,u,d);break e}u=b;break e;case 3:b.flags=b.flags&-65537|128;case 0:if(b=x.payload,d=typeof b=="function"?b.call(m,u,d):b,d==null)break e;u=Ne({},u,d);break e;case 2:Pr=!0}}o.callback!==null&&o.lane!==0&&(t.flags|=64,d=s.effects,d===null?s.effects=[o]:d.push(o))}else m={eventTime:m,lane:d,tag:o.tag,payload:o.payload,callback:o.callback,next:null},f===null?(c=f=m,l=u):f=f.next=m,a|=d;if(o=o.next,o===null){if(o=s.shared.pending,o===null)break;d=o,o=d.next,d.next=null,s.lastBaseUpdate=d,s.shared.pending=null}}while(!0);if(f===null&&(l=u),s.baseState=l,s.firstBaseUpdate=c,s.lastBaseUpdate=f,e=s.shared.interleaved,e!==null){s=e;do a|=s.lane,s=s.next;while(s!==e)}else i===null&&(s.shared.lanes=0);Us|=a,t.lanes=a,t.memoizedState=u}}function Rm(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;en?n:4,t(!0);var r=sf.transition;sf.transition={};try{t(!1),e()}finally{oe=n,sf.transition=r}}function Nb(){return nn().memoizedState}function g8(t,e,n){var r=Gr(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Rb(t))Tb(e,n);else if(n=ub(t,e,n,r),n!==null){var s=ht();yn(n,t,r,s),Ib(n,e,r)}}function y8(t,e,n){var r=Gr(t),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Rb(t))Tb(e,s);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var a=e.lastRenderedState,o=i(a,n);if(s.hasEagerState=!0,s.eagerState=o,En(o,a)){var l=e.interleaved;l===null?(s.next=s,lh(e)):(s.next=l.next,l.next=s),e.interleaved=s;return}}catch{}finally{}n=ub(t,e,s,r),n!==null&&(s=ht(),yn(n,t,r,s),Ib(n,e,r))}}function Rb(t){var e=t.alternate;return t===Pe||e!==null&&e===Pe}function Tb(t,e){Ba=Sc=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Ib(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,Q0(t,n)}}var Cc={readContext:tn,useCallback:nt,useContext:nt,useEffect:nt,useImperativeHandle:nt,useInsertionEffect:nt,useLayoutEffect:nt,useMemo:nt,useReducer:nt,useRef:nt,useState:nt,useDebugValue:nt,useDeferredValue:nt,useTransition:nt,useMutableSource:nt,useSyncExternalStore:nt,useId:nt,unstable_isNewReconciler:!1},b8={readContext:tn,useCallback:function(t,e){return In().memoizedState=[t,e===void 0?null:e],t},useContext:tn,useEffect:Im,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,Hl(4194308,4,Ab.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Hl(4194308,4,t,e)},useInsertionEffect:function(t,e){return Hl(4,2,t,e)},useMemo:function(t,e){var n=In();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=In();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=g8.bind(null,Pe,t),[r.memoizedState,t]},useRef:function(t){var e=In();return t={current:t},e.memoizedState=t},useState:Tm,useDebugValue:gh,useDeferredValue:function(t){return In().memoizedState=t},useTransition:function(){var t=Tm(!1),e=t[0];return t=x8.bind(null,t[1]),In().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=Pe,s=In();if(Ee){if(n===void 0)throw Error(U(407));n=n()}else{if(n=e(),Ke===null)throw Error(U(349));Ls&30||mb(r,e,n)}s.memoizedState=n;var i={value:n,getSnapshot:e};return s.queue=i,Im(gb.bind(null,r,i,t),[t]),r.flags|=2048,so(9,xb.bind(null,r,i,n,e),void 0,null),n},useId:function(){var t=In(),e=Ke.identifierPrefix;if(Ee){var n=er,r=Xn;n=(r&~(1<<32-gn(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=no++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=a.createElement(n,{is:r.is}):(t=a.createElement(n),n==="select"&&(a=t,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):t=a.createElementNS(t,n),t[Un]=e,t[Xa]=r,zb(t,e,!1,!1),e.stateNode=t;e:{switch(a=fd(n,r),n){case"dialog":ge("cancel",t),ge("close",t),s=r;break;case"iframe":case"object":case"embed":ge("load",t),s=r;break;case"video":case"audio":for(s=0;sLi&&(e.flags|=128,r=!0,pa(i,!1),e.lanes=4194304)}else{if(!r)if(t=kc(a),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),pa(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!Ee)return rt(e),null}else 2*Oe()-i.renderingStartTime>Li&&n!==1073741824&&(e.flags|=128,r=!0,pa(i,!1),e.lanes=4194304);i.isBackwards?(a.sibling=e.child,e.child=a):(n=i.last,n!==null?n.sibling=a:e.child=a,i.last=a)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Oe(),e.sibling=null,n=ke.current,pe(ke,r?n&1|2:n&1),e):(rt(e),null);case 22:case 23:return Ah(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?It&1073741824&&(rt(e),e.subtreeFlags&6&&(e.flags|=8192)):rt(e),null;case 24:return null;case 25:return null}throw Error(U(156,e.tag))}function P8(t,e){switch(rh(e),e.tag){case 1:return At(e.type)&&gc(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Oi(),ye(Et),ye(it),dh(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return fh(e),null;case 13:if(ye(ke),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(U(340));Ti()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return ye(ke),null;case 4:return Oi(),null;case 10:return oh(e.type._context),null;case 22:case 23:return Ah(),null;case 24:return null;default:return null}}var ol=!1,st=!1,N8=typeof WeakSet=="function"?WeakSet:Set,G=null;function ui(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Re(t,e,r)}else n.current=null}function Fd(t,e,n){try{n()}catch(r){Re(t,e,r)}}var Hm=!1;function R8(t,e){if(vd=hc,t=Qy(),th(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var a=0,o=-1,l=-1,c=0,f=0,u=t,d=null;t:for(;;){for(var m;u!==n||s!==0&&u.nodeType!==3||(o=a+s),u!==i||r!==0&&u.nodeType!==3||(l=a+r),u.nodeType===3&&(a+=u.nodeValue.length),(m=u.firstChild)!==null;)d=u,u=m;for(;;){if(u===t)break t;if(d===n&&++c===s&&(o=a),d===i&&++f===r&&(l=a),(m=u.nextSibling)!==null)break;u=d,d=u.parentNode}u=m}n=o===-1||l===-1?null:{start:o,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ed={focusedElem:t,selectionRange:n},hc=!1,G=e;G!==null;)if(e=G,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,G=t;else for(;G!==null;){e=G;try{var b=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(b!==null){var x=b.memoizedProps,v=b.memoizedState,h=e.stateNode,p=h.getSnapshotBeforeUpdate(e.elementType===e.type?x:cn(e.type,x),v);h.__reactInternalSnapshotBeforeUpdate=p}break;case 3:var y=e.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(U(163))}}catch(A){Re(e,e.return,A)}if(t=e.sibling,t!==null){t.return=e.return,G=t;break}G=e.return}return b=Hm,Hm=!1,b}function Ma(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&t)===t){var i=s.destroy;s.destroy=void 0,i!==void 0&&Fd(e,n,i)}s=s.next}while(s!==r)}}function su(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function Dd(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function Vb(t){var e=t.alternate;e!==null&&(t.alternate=null,Vb(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Un],delete e[Xa],delete e[Sd],delete e[f8],delete e[d8])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function Wb(t){return t.tag===5||t.tag===3||t.tag===4}function Gm(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Wb(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function jd(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=xc));else if(r!==4&&(t=t.child,t!==null))for(jd(t,e,n),t=t.sibling;t!==null;)jd(t,e,n),t=t.sibling}function zd(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(zd(t,e,n),t=t.sibling;t!==null;)zd(t,e,n),t=t.sibling}var Je=null,fn=!1;function yr(t,e,n){for(n=n.child;n!==null;)$b(t,e,n),n=n.sibling}function $b(t,e,n){if(Fn&&typeof Fn.onCommitFiberUnmount=="function")try{Fn.onCommitFiberUnmount(Yc,n)}catch{}switch(n.tag){case 5:st||ui(n,e);case 6:var r=Je,s=fn;Je=null,yr(t,e,n),Je=r,fn=s,Je!==null&&(fn?(t=Je,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):Je.removeChild(n.stateNode));break;case 18:Je!==null&&(fn?(t=Je,n=n.stateNode,t.nodeType===8?tf(t.parentNode,n):t.nodeType===1&&tf(t,n),Qa(t)):tf(Je,n.stateNode));break;case 4:r=Je,s=fn,Je=n.stateNode.containerInfo,fn=!0,yr(t,e,n),Je=r,fn=s;break;case 0:case 11:case 14:case 15:if(!st&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var i=s,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&Fd(n,e,a),s=s.next}while(s!==r)}yr(t,e,n);break;case 1:if(!st&&(ui(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(o){Re(n,e,o)}yr(t,e,n);break;case 21:yr(t,e,n);break;case 22:n.mode&1?(st=(r=st)||n.memoizedState!==null,yr(t,e,n),st=r):yr(t,e,n);break;default:yr(t,e,n)}}function Vm(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new N8),e.forEach(function(r){var s=F8.bind(null,t,r);n.has(r)||(n.add(r),r.then(s,s))})}}function on(t,e){var n=e.deletions;if(n!==null)for(var r=0;rs&&(s=a),r&=~i}if(r=s,r=Oe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*I8(r/1960))-r,10t?16:t,Lr===null)var r=!1;else{if(t=Lr,Lr=null,Rc=0,se&6)throw Error(U(331));var s=se;for(se|=4,G=t.current;G!==null;){var i=G,a=i.child;if(G.flags&16){var o=i.deletions;if(o!==null){for(var l=0;lOe()-vh?Ps(t,0):wh|=n),kt(t,e)}function e1(t,e){e===0&&(t.mode&1?(e=Zo,Zo<<=1,!(Zo&130023424)&&(Zo=4194304)):e=1);var n=ht();t=lr(t,e),t!==null&&(ko(t,e,n),kt(t,n))}function M8(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),e1(t,n)}function F8(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,s=t.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(U(314))}r!==null&&r.delete(e),e1(t,n)}var t1;t1=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||Et.current)vt=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return vt=!1,S8(t,e,n);vt=!!(t.flags&131072)}else vt=!1,Ee&&e.flags&1048576&&ib(e,wc,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;Gl(t,e),t=e.pendingProps;var s=Ri(e,it.current);vi(e,n),s=ph(null,e,r,t,s,n);var i=mh();return e.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,At(r)?(i=!0,yc(e)):i=!1,e.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,ch(e),s.updater=ru,e.stateNode=s,s._reactInternals=e,Id(e,r,t,n),e=Ld(null,e,r,!0,i,n)):(e.tag=0,Ee&&i&&nh(e),at(null,e,s,n),e=e.child),e;case 16:r=e.elementType;e:{switch(Gl(t,e),t=e.pendingProps,s=r._init,r=s(r._payload),e.type=r,s=e.tag=j8(r),t=cn(r,t),s){case 0:e=_d(null,e,r,t,n);break e;case 1:e=Dm(null,e,r,t,n);break e;case 11:e=Mm(null,e,r,t,n);break e;case 14:e=Fm(null,e,r,cn(r.type,t),n);break e}throw Error(U(306,r,""))}return e;case 0:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:cn(r,s),_d(t,e,r,s,n);case 1:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:cn(r,s),Dm(t,e,r,s,n);case 3:e:{if(Fb(e),t===null)throw Error(U(387));r=e.pendingProps,i=e.memoizedState,s=i.element,fb(t,e),Ac(e,r,null,n);var a=e.memoizedState;if(r=a.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},e.updateQueue.baseState=i,e.memoizedState=i,e.flags&256){s=_i(Error(U(423)),e),e=jm(t,e,r,n,s);break e}else if(r!==s){s=_i(Error(U(424)),e),e=jm(t,e,r,n,s);break e}else for(Bt=jr(e.stateNode.containerInfo.firstChild),Mt=e,Ee=!0,dn=null,n=cb(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ti(),r===s){e=cr(t,e,n);break e}at(t,e,r,n)}e=e.child}return e;case 5:return db(e),t===null&&Nd(e),r=e.type,s=e.pendingProps,i=t!==null?t.memoizedProps:null,a=s.children,Ad(r,s)?a=null:i!==null&&Ad(r,i)&&(e.flags|=32),Mb(t,e),at(t,e,a,n),e.child;case 6:return t===null&&Nd(e),null;case 13:return Db(t,e,n);case 4:return uh(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=Ii(e,null,r,n):at(t,e,r,n),e.child;case 11:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:cn(r,s),Mm(t,e,r,s,n);case 7:return at(t,e,e.pendingProps,n),e.child;case 8:return at(t,e,e.pendingProps.children,n),e.child;case 12:return at(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,s=e.pendingProps,i=e.memoizedProps,a=s.value,pe(vc,r._currentValue),r._currentValue=a,i!==null)if(En(i.value,a)){if(i.children===s.children&&!Et.current){e=cr(t,e,n);break e}}else for(i=e.child,i!==null&&(i.return=e);i!==null;){var o=i.dependencies;if(o!==null){a=i.child;for(var l=o.firstContext;l!==null;){if(l.context===r){if(i.tag===1){l=tr(-1,n&-n),l.tag=2;var c=i.updateQueue;if(c!==null){c=c.shared;var f=c.pending;f===null?l.next=l:(l.next=f.next,f.next=l),c.pending=l}}i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),Rd(i.return,n,e),o.lanes|=n;break}l=l.next}}else if(i.tag===10)a=i.type===e.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(U(341));a.lanes|=n,o=a.alternate,o!==null&&(o.lanes|=n),Rd(a,n,e),a=i.sibling}else a=i.child;if(a!==null)a.return=i;else for(a=i;a!==null;){if(a===e){a=null;break}if(i=a.sibling,i!==null){i.return=a.return,a=i;break}a=a.return}i=a}at(t,e,s.children,n),e=e.child}return e;case 9:return s=e.type,r=e.pendingProps.children,vi(e,n),s=tn(s),r=r(s),e.flags|=1,at(t,e,r,n),e.child;case 14:return r=e.type,s=cn(r,e.pendingProps),s=cn(r.type,s),Fm(t,e,r,s,n);case 15:return Ub(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,s=e.pendingProps,s=e.elementType===r?s:cn(r,s),Gl(t,e),e.tag=1,At(r)?(t=!0,yc(e)):t=!1,vi(e,n),Ob(e,r,s),Id(e,r,s,n),Ld(null,e,r,!0,t,n);case 19:return jb(t,e,n);case 22:return Bb(t,e,n)}throw Error(U(156,e.tag))};function n1(t,e){return Ry(t,e)}function D8(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Zt(t,e,n,r){return new D8(t,e,n,r)}function Sh(t){return t=t.prototype,!(!t||!t.isReactComponent)}function j8(t){if(typeof t=="function")return Sh(t)?1:0;if(t!=null){if(t=t.$$typeof,t===V0)return 11;if(t===W0)return 14}return 2}function Vr(t,e){var n=t.alternate;return n===null?(n=Zt(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function $l(t,e,n,r,s,i){var a=2;if(r=t,typeof t=="function")Sh(t)&&(a=1);else if(typeof t=="string")a=5;else e:switch(t){case ti:return Ns(n.children,s,i,e);case G0:a=8,s|=8;break;case td:return t=Zt(12,n,e,s|2),t.elementType=td,t.lanes=i,t;case nd:return t=Zt(13,n,e,s),t.elementType=nd,t.lanes=i,t;case rd:return t=Zt(19,n,e,s),t.elementType=rd,t.lanes=i,t;case dy:return au(n,s,i,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case uy:a=10;break e;case fy:a=9;break e;case V0:a=11;break e;case W0:a=14;break e;case Cr:a=16,r=null;break e}throw Error(U(130,t==null?t:typeof t,""))}return e=Zt(a,n,e,s),e.elementType=t,e.type=r,e.lanes=i,e}function Ns(t,e,n,r){return t=Zt(7,t,r,e),t.lanes=n,t}function au(t,e,n,r){return t=Zt(22,t,r,e),t.elementType=dy,t.lanes=n,t.stateNode={isHidden:!1},t}function uf(t,e,n){return t=Zt(6,t,null,e),t.lanes=n,t}function ff(t,e,n){return e=Zt(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function z8(t,e,n,r,s){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Vu(0),this.expirationTimes=Vu(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Vu(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function Ch(t,e,n,r,s,i,a,o,l){return t=new z8(t,e,n,o,l),e===1?(e=1,i===!0&&(e|=8)):e=0,i=Zt(3,null,null,e),t.current=i,i.stateNode=t,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},ch(i),t}function H8(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a1)}catch(t){console.error(t)}}a1(),ay.exports=zt;var o1=ay.exports,Zm=o1;Xf.createRoot=Zm.createRoot,Xf.hydrateRoot=Zm.hydrateRoot;/** + * react-router v7.13.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */var Xm="popstate";function K8(t={}){function e(r,s){let{pathname:i,search:a,hash:o}=r.location;return $d("",{pathname:i,search:a,hash:o},s.state&&s.state.usr||null,s.state&&s.state.key||"default")}function n(r,s){return typeof s=="string"?s:ao(s)}return J8(e,n,null,t)}function Ae(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function An(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Q8(){return Math.random().toString(36).substring(2,10)}function ex(t,e){return{usr:t.state,key:t.key,idx:e}}function $d(t,e,n=null,r){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?Zi(e):e,state:n,key:e&&e.key||r||Q8()}}function ao({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Zi(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substring(r),t=t.substring(0,r)),t&&(e.pathname=t)}return e}function J8(t,e,n,r={}){let{window:s=document.defaultView,v5Compat:i=!1}=r,a=s.history,o="POP",l=null,c=f();c==null&&(c=0,a.replaceState({...a.state,idx:c},""));function f(){return(a.state||{idx:null}).idx}function u(){o="POP";let v=f(),h=v==null?null:v-c;c=v,l&&l({action:o,location:x.location,delta:h})}function d(v,h){o="PUSH";let p=$d(x.location,v,h);c=f()+1;let y=ex(p,c),A=x.createHref(p);try{a.pushState(y,"",A)}catch(E){if(E instanceof DOMException&&E.name==="DataCloneError")throw E;s.location.assign(A)}i&&l&&l({action:o,location:x.location,delta:1})}function m(v,h){o="REPLACE";let p=$d(x.location,v,h);c=f();let y=ex(p,c),A=x.createHref(p);a.replaceState(y,"",A),i&&l&&l({action:o,location:x.location,delta:0})}function b(v){return Y8(v)}let x={get action(){return o},get location(){return t(s,a)},listen(v){if(l)throw new Error("A history only accepts one active listener");return s.addEventListener(Xm,u),l=v,()=>{s.removeEventListener(Xm,u),l=null}},createHref(v){return e(s,v)},createURL:b,encodeLocation(v){let h=b(v);return{pathname:h.pathname,search:h.search,hash:h.hash}},push:d,replace:m,go(v){return a.go(v)}};return x}function Y8(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),Ae(n,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:ao(t);return r=r.replace(/ $/,"%20"),!e&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function l1(t,e,n="/"){return q8(t,e,n,!1)}function q8(t,e,n,r){let s=typeof e=="string"?Zi(e):e,i=ur(s.pathname||"/",n);if(i==null)return null;let a=c1(t);Z8(a);let o=null;for(let l=0;o==null&&l{let f={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:o,route:a};if(f.relativePath.startsWith("/")){if(!f.relativePath.startsWith(r)&&l)return;Ae(f.relativePath.startsWith(r),`Absolute route path "${f.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),f.relativePath=f.relativePath.slice(r.length)}let u=nr([r,f.relativePath]),d=n.concat(f);a.children&&a.children.length>0&&(Ae(a.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${u}".`),c1(a.children,e,d,u,l)),!(a.path==null&&!a.index)&&e.push({path:u,score:i6(u,a.index),routesMeta:d})};return t.forEach((a,o)=>{if(a.path===""||!a.path?.includes("?"))i(a,o);else for(let l of u1(a.path))i(a,o,!0,l)}),e}function u1(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,s=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return s?[i,""]:[i];let a=u1(r.join("/")),o=[];return o.push(...a.map(l=>l===""?i:[i,l].join("/"))),s&&o.push(...a),o.map(l=>t.startsWith("/")&&l===""?"/":l)}function Z8(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:a6(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var X8=/^:[\w-]+$/,e6=3,t6=2,n6=1,r6=10,s6=-2,tx=t=>t==="*";function i6(t,e){let n=t.split("/"),r=n.length;return n.some(tx)&&(r+=s6),e&&(r+=t6),n.filter(s=>!tx(s)).reduce((s,i)=>s+(X8.test(i)?e6:i===""?n6:r6),r)}function a6(t,e){return t.length===e.length&&t.slice(0,-1).every((r,s)=>r===e[s])?t[t.length-1]-e[e.length-1]:0}function o6(t,e,n=!1){let{routesMeta:r}=t,s={},i="/",a=[];for(let o=0;o{if(f==="*"){let b=o[d]||"";a=i.slice(0,i.length-b.length).replace(/(.)\/+$/,"$1")}const m=o[d];return u&&!m?c[f]=void 0:c[f]=(m||"").replace(/%2F/g,"/"),c},{}),pathname:i,pathnameBase:a,pattern:t}}function l6(t,e=!1,n=!0){An(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let r=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(a,o,l)=>(r.push({paramName:o,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(r.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,e?void 0:"i"),r]}function c6(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return An(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function ur(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}var u6=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function f6(t,e="/"){let{pathname:n,search:r="",hash:s=""}=typeof t=="string"?Zi(t):t,i;return n?(n=n.replace(/\/\/+/g,"/"),n.startsWith("/")?i=nx(n.substring(1),"/"):i=nx(n,e)):i=e,{pathname:i,search:p6(r),hash:m6(s)}}function nx(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(s=>{s===".."?n.length>1&&n.pop():s!=="."&&n.push(s)}),n.length>1?n.join("/"):"/"}function df(t,e,n,r){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function d6(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function Th(t){let e=d6(t);return e.map((n,r)=>r===e.length-1?n.pathname:n.pathnameBase)}function Ih(t,e,n,r=!1){let s;typeof t=="string"?s=Zi(t):(s={...t},Ae(!s.pathname||!s.pathname.includes("?"),df("?","pathname","search",s)),Ae(!s.pathname||!s.pathname.includes("#"),df("#","pathname","hash",s)),Ae(!s.search||!s.search.includes("#"),df("#","search","hash",s)));let i=t===""||s.pathname==="",a=i?"/":s.pathname,o;if(a==null)o=n;else{let u=e.length-1;if(!r&&a.startsWith("..")){let d=a.split("/");for(;d[0]==="..";)d.shift(),u-=1;s.pathname=d.join("/")}o=u>=0?e[u]:"/"}let l=f6(s,o),c=a&&a!=="/"&&a.endsWith("/"),f=(i||a===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(c||f)&&(l.pathname+="/"),l}var nr=t=>t.join("/").replace(/\/\/+/g,"/"),h6=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),p6=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,m6=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,x6=class{constructor(t,e,n,r=!1){this.status=t,this.statusText=e||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function g6(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function y6(t){return t.map(e=>e.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var f1=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function d1(t,e){let n=t;if(typeof n!="string"||!u6.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,s=!1;if(f1)try{let i=new URL(window.location.href),a=n.startsWith("//")?new URL(i.protocol+n):new URL(n),o=ur(a.pathname,e);a.origin===i.origin&&o!=null?n=o+a.search+a.hash:s=!0}catch{An(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:s,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var h1=["POST","PUT","PATCH","DELETE"];new Set(h1);var b6=["GET",...h1];new Set(b6);var Xi=k.createContext(null);Xi.displayName="DataRouter";var fu=k.createContext(null);fu.displayName="DataRouterState";var w6=k.createContext(!1),p1=k.createContext({isTransitioning:!1});p1.displayName="ViewTransition";var v6=k.createContext(new Map);v6.displayName="Fetchers";var E6=k.createContext(null);E6.displayName="Await";var Gt=k.createContext(null);Gt.displayName="Navigation";var No=k.createContext(null);No.displayName="Location";var Gn=k.createContext({outlet:null,matches:[],isDataRoute:!1});Gn.displayName="Route";var Oh=k.createContext(null);Oh.displayName="RouteError";var m1="REACT_ROUTER_ERROR",A6="REDIRECT",k6="ROUTE_ERROR_RESPONSE";function S6(t){if(t.startsWith(`${m1}:${A6}:{`))try{let e=JSON.parse(t.slice(28));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.location=="string"&&typeof e.reloadDocument=="boolean"&&typeof e.replace=="boolean")return e}catch{}}function C6(t){if(t.startsWith(`${m1}:${k6}:{`))try{let e=JSON.parse(t.slice(40));if(typeof e=="object"&&e&&typeof e.status=="number"&&typeof e.statusText=="string")return new x6(e.status,e.statusText,e.data)}catch{}}function P6(t,{relative:e}={}){Ae(ea(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=k.useContext(Gt),{hash:s,pathname:i,search:a}=Ro(t,{relative:e}),o=i;return n!=="/"&&(o=i==="/"?n:nr([n,i])),r.createHref({pathname:o,search:a,hash:s})}function ea(){return k.useContext(No)!=null}function ns(){return Ae(ea(),"useLocation() may be used only in the context of a component."),k.useContext(No).location}var x1="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function g1(t){k.useContext(Gt).static||k.useLayoutEffect(t)}function _h(){let{isDataRoute:t}=k.useContext(Gn);return t?j6():N6()}function N6(){Ae(ea(),"useNavigate() may be used only in the context of a component.");let t=k.useContext(Xi),{basename:e,navigator:n}=k.useContext(Gt),{matches:r}=k.useContext(Gn),{pathname:s}=ns(),i=JSON.stringify(Th(r)),a=k.useRef(!1);return g1(()=>{a.current=!0}),k.useCallback((l,c={})=>{if(An(a.current,x1),!a.current)return;if(typeof l=="number"){n.go(l);return}let f=Ih(l,JSON.parse(i),s,c.relative==="path");t==null&&e!=="/"&&(f.pathname=f.pathname==="/"?e:nr([e,f.pathname])),(c.replace?n.replace:n.push)(f,c.state,c)},[e,n,i,s,t])}k.createContext(null);function Ro(t,{relative:e}={}){let{matches:n}=k.useContext(Gn),{pathname:r}=ns(),s=JSON.stringify(Th(n));return k.useMemo(()=>Ih(t,JSON.parse(s),r,e==="path"),[t,s,r,e])}function R6(t,e){return y1(t,e)}function y1(t,e,n,r,s){Ae(ea(),"useRoutes() may be used only in the context of a component.");let{navigator:i}=k.useContext(Gt),{matches:a}=k.useContext(Gn),o=a[a.length-1],l=o?o.params:{},c=o?o.pathname:"/",f=o?o.pathnameBase:"/",u=o&&o.route;{let p=u&&u.path||"";w1(c,!u||p.endsWith("*")||p.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${c}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let d=ns(),m;if(e){let p=typeof e=="string"?Zi(e):e;Ae(f==="/"||p.pathname?.startsWith(f),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${f}" but pathname "${p.pathname}" was given in the \`location\` prop.`),m=p}else m=d;let b=m.pathname||"/",x=b;if(f!=="/"){let p=f.replace(/^\//,"").split("/");x="/"+b.replace(/^\//,"").split("/").slice(p.length).join("/")}let v=l1(t,{pathname:x});An(u||v!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),An(v==null||v[v.length-1].route.element!==void 0||v[v.length-1].route.Component!==void 0||v[v.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let h=L6(v&&v.map(p=>Object.assign({},p,{params:Object.assign({},l,p.params),pathname:nr([f,i.encodeLocation?i.encodeLocation(p.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:p.pathname]),pathnameBase:p.pathnameBase==="/"?f:nr([f,i.encodeLocation?i.encodeLocation(p.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:p.pathnameBase])})),a,n,r,s);return e&&h?k.createElement(No.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...m},navigationType:"POP"}},h):h}function T6(){let t=D6(),e=g6(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,r="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:r},i={padding:"2px 4px",backgroundColor:r},a=null;return console.error("Error handled by React Router default ErrorBoundary:",t),a=k.createElement(k.Fragment,null,k.createElement("p",null,"💿 Hey developer 👋"),k.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",k.createElement("code",{style:i},"ErrorBoundary")," or"," ",k.createElement("code",{style:i},"errorElement")," prop on your route.")),k.createElement(k.Fragment,null,k.createElement("h2",null,"Unexpected Application Error!"),k.createElement("h3",{style:{fontStyle:"italic"}},e),n?k.createElement("pre",{style:s},n):null,a)}var I6=k.createElement(T6,null),b1=class extends k.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const n=C6(t.digest);n&&(t=n)}let e=t!==void 0?k.createElement(Gn.Provider,{value:this.props.routeContext},k.createElement(Oh.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?k.createElement(O6,{error:t},e):e}};b1.contextType=w6;var hf=new WeakMap;function O6({children:t,error:e}){let{basename:n}=k.useContext(Gt);if(typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){let r=S6(e.digest);if(r){let s=hf.get(e);if(s)throw s;let i=d1(r.location,n);if(f1&&!hf.get(e))if(i.isExternal||r.reloadDocument)window.location.href=i.absoluteURL||i.to;else{const a=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:r.replace}));throw hf.set(e,a),a}return k.createElement("meta",{httpEquiv:"refresh",content:`0;url=${i.absoluteURL||i.to}`})}}return t}function _6({routeContext:t,match:e,children:n}){let r=k.useContext(Xi);return r&&r.static&&r.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=e.route.id),k.createElement(Gn.Provider,{value:t},n)}function L6(t,e=[],n=null,r=null,s=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let i=t,a=n?.errors;if(a!=null){let f=i.findIndex(u=>u.route.id&&a?.[u.route.id]!==void 0);Ae(f>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(",")}`),i=i.slice(0,Math.min(i.length,f+1))}let o=!1,l=-1;if(n)for(let f=0;f=0?i=i.slice(0,l+1):i=[i[0]];break}}}let c=n&&r?(f,u)=>{r(f,{location:n.location,params:n.matches?.[0]?.params??{},unstable_pattern:y6(n.matches),errorInfo:u})}:void 0;return i.reduceRight((f,u,d)=>{let m,b=!1,x=null,v=null;n&&(m=a&&u.route.id?a[u.route.id]:void 0,x=u.route.errorElement||I6,o&&(l<0&&d===0?(w1("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),b=!0,v=null):l===d&&(b=!0,v=u.route.hydrateFallbackElement||null)));let h=e.concat(i.slice(0,d+1)),p=()=>{let y;return m?y=x:b?y=v:u.route.Component?y=k.createElement(u.route.Component,null):u.route.element?y=u.route.element:y=f,k.createElement(_6,{match:u,routeContext:{outlet:f,matches:h,isDataRoute:n!=null},children:y})};return n&&(u.route.ErrorBoundary||u.route.errorElement||d===0)?k.createElement(b1,{location:n.location,revalidation:n.revalidation,component:x,error:m,children:p(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:c}):p()},null)}function Lh(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function U6(t){let e=k.useContext(Xi);return Ae(e,Lh(t)),e}function B6(t){let e=k.useContext(fu);return Ae(e,Lh(t)),e}function M6(t){let e=k.useContext(Gn);return Ae(e,Lh(t)),e}function Uh(t){let e=M6(t),n=e.matches[e.matches.length-1];return Ae(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function F6(){return Uh("useRouteId")}function D6(){let t=k.useContext(Oh),e=B6("useRouteError"),n=Uh("useRouteError");return t!==void 0?t:e.errors?.[n]}function j6(){let{router:t}=U6("useNavigate"),e=Uh("useNavigate"),n=k.useRef(!1);return g1(()=>{n.current=!0}),k.useCallback(async(s,i={})=>{An(n.current,x1),n.current&&(typeof s=="number"?await t.navigate(s):await t.navigate(s,{fromRouteId:e,...i}))},[t,e])}var rx={};function w1(t,e,n){!e&&!rx[t]&&(rx[t]=!0,An(!1,n))}k.memo(z6);function z6({routes:t,future:e,state:n,onError:r}){return y1(t,void 0,n,r,e)}function H6({to:t,replace:e,state:n,relative:r}){Ae(ea()," may be used only in the context of a component.");let{static:s}=k.useContext(Gt);An(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:i}=k.useContext(Gn),{pathname:a}=ns(),o=_h(),l=Ih(t,Th(i),a,r==="path"),c=JSON.stringify(l);return k.useEffect(()=>{o(JSON.parse(c),{replace:e,state:n,relative:r})},[o,c,r,e,n]),null}function Wn(t){Ae(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function G6({basename:t="/",children:e=null,location:n,navigationType:r="POP",navigator:s,static:i=!1,unstable_useTransitions:a}){Ae(!ea(),"You cannot render a inside another . You should never have more than one in your app.");let o=t.replace(/^\/*/,"/"),l=k.useMemo(()=>({basename:o,navigator:s,static:i,unstable_useTransitions:a,future:{}}),[o,s,i,a]);typeof n=="string"&&(n=Zi(n));let{pathname:c="/",search:f="",hash:u="",state:d=null,key:m="default"}=n,b=k.useMemo(()=>{let x=ur(c,o);return x==null?null:{location:{pathname:x,search:f,hash:u,state:d,key:m},navigationType:r}},[o,c,f,u,d,m,r]);return An(b!=null,` is not able to match the URL "${c}${f}${u}" because it does not start with the basename, so the won't render anything.`),b==null?null:k.createElement(Gt.Provider,{value:l},k.createElement(No.Provider,{children:e,value:b}))}function V6({children:t,location:e}){return R6(Kd(t),e)}function Kd(t,e=[]){let n=[];return k.Children.forEach(t,(r,s)=>{if(!k.isValidElement(r))return;let i=[...e,s];if(r.type===k.Fragment){n.push.apply(n,Kd(r.props.children,i));return}Ae(r.type===Wn,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Ae(!r.props.index||!r.props.children,"An index route cannot have child routes.");let a={id:r.props.id||i.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(a.children=Kd(r.props.children,i)),n.push(a)}),n}var Kl="get",Ql="application/x-www-form-urlencoded";function du(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function W6(t){return du(t)&&t.tagName.toLowerCase()==="button"}function $6(t){return du(t)&&t.tagName.toLowerCase()==="form"}function K6(t){return du(t)&&t.tagName.toLowerCase()==="input"}function Q6(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function J6(t,e){return t.button===0&&(!e||e==="_self")&&!Q6(t)}var ul=null;function Y6(){if(ul===null)try{new FormData(document.createElement("form"),0),ul=!1}catch{ul=!0}return ul}var q6=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function pf(t){return t!=null&&!q6.has(t)?(An(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Ql}"`),null):t}function Z6(t,e){let n,r,s,i,a;if($6(t)){let o=t.getAttribute("action");r=o?ur(o,e):null,n=t.getAttribute("method")||Kl,s=pf(t.getAttribute("enctype"))||Ql,i=new FormData(t)}else if(W6(t)||K6(t)&&(t.type==="submit"||t.type==="image")){let o=t.form;if(o==null)throw new Error('Cannot submit a + + + + {stream.active && ( + + )} + + + ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/components/employee/EmployeeDashboard.jsx b/Nexus/paystream-main/frontend/paystream-app/src/components/employee/EmployeeDashboard.jsx new file mode 100644 index 000000000..1c30bd04a --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/components/employee/EmployeeDashboard.jsx @@ -0,0 +1,363 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + connectWallet, + getEmployeeStreams, + withdraw, + getTokenBalance, + formatAddress, + formatRate, + ethers, + requestStreamStart, + getMyPendingRequests, + pauseStream, +} from '../../services/contractService'; +import EarningsDisplay from './EarningsDisplay'; + +export default function EmployeeDashboard() { + const [account, setAccount] = useState(null); + const [streams, setStreams] = useState([]); + const [selectedStream, setSelectedStream] = useState(null); + const [balance, setBalance] = useState('0'); + const [loading, setLoading] = useState(false); + const [withdrawLoading, setWithdrawLoading] = useState({}); + const [pendingRequests, setPendingRequests] = useState([]); + const [showRequestForm, setShowRequestForm] = useState(false); + const [requestRate, setRequestRate] = useState(''); + const [requestLoading, setRequestLoading] = useState(false); + + + const loadData = useCallback(async (address, isBackground = false) => { + try { + if (!isBackground) setLoading(true); + const [myStreams, tokenBalance, myRequests] = await Promise.all([ + getEmployeeStreams(address), + getTokenBalance(address), + getMyPendingRequests(address), + ]); + setStreams(myStreams); + setBalance(tokenBalance); + setPendingRequests(myRequests); + + // Sort streams: Active/Paused first, then by ID desc + const sortedStreams = [...myStreams].sort((a, b) => { + const aAlive = a.active || a.isPaused; + const bAlive = b.active || b.isPaused; + if (aAlive === bAlive) return b.id - a.id; + return bAlive ? 1 : -1; + }); + setStreams(sortedStreams); + + // Auto-select first active stream for earnings display + const active = sortedStreams.find((s) => s.active); + if (active && !selectedStream) { + setSelectedStream(active); + } + } catch (err) { + console.error('Failed to load employee data:', err); + } finally { + if (!isBackground) setLoading(false); + } + }, [selectedStream]); + + useEffect(() => { + if (account) { + loadData(account); + const interval = setInterval(() => { + // Pass true for background refresh + loadData(account, true); + }, 10000); // reduced to 10s for better responsiveness + return () => clearInterval(interval); + } + }, [account, loadData]); + + const handleConnect = async () => { + try { + const addr = await connectWallet(); + setAccount(addr); + } catch (err) { + alert(err.message); + } + }; + + const handleWithdraw = async (streamId) => { + setWithdrawLoading((p) => ({ ...p, [streamId]: true })); + try { + await withdraw(streamId); + if (account) await loadData(account); + } catch (err) { + console.error('Withdraw failed:', err); + alert(err.reason || err.message || 'Withdrawal failed'); + } finally { + setWithdrawLoading((p) => ({ ...p, [streamId]: false })); + } + }; + + const handlePause = async (streamId) => { + if (!confirm("Pause this stream? You will stop receiving funds until HR resumes it.")) return; + setWithdrawLoading((p) => ({ ...p, [streamId]: true })); // reuse loading state + try { + await pauseStream(streamId); + if (account) await loadData(account); + alert("Stream Paused for security."); + } catch (err) { + console.error('Pause failed:', err); + alert(err.reason || err.message || 'Pause failed'); + } finally { + setWithdrawLoading((p) => ({ ...p, [streamId]: false })); + } + }; + + const handleRequestStream = async () => { + if (!requestRate || Number(requestRate) <= 0) { + alert('Please enter a valid rate'); + return; + } + setRequestLoading(true); + try { + await requestStreamStart(requestRate); + setRequestRate(''); + setShowRequestForm(false); + if (account) await loadData(account); + alert('Stream request submitted! Wait for HR approval.'); + } catch (err) { + console.error('Request failed:', err); + alert(err.reason || err.message || 'Request failed'); + } finally { + setRequestLoading(false); + } + }; + + + if (!account) { + return ( +
+
+
+
P
+
+

PayStream

+

Employee Portal

+
+
+
+
+
Locked
+

Connect Your Wallet

+

Connect MetaMask to view your salary streams and withdraw earnings.

+ +
+
+ ); + } + + return ( +
+ {/* Header */} +
+
+
P
+
+

PayStream

+

Employee Portal

+
+
+ +
+ + {/* Wallet Balance */} +
+ + Wallet Balance + +
+ {Number(balance).toLocaleString(undefined, { maximumFractionDigits: 4 })} + HLUSD +
+
+ + {/* Middle Section: My Salary Streams */} +
+
+

+ My Salary Streams +

+
+ + {loading && streams.length === 0 ? ( +
+
+

Loading your streams…

+
+ ) : streams.length === 0 ? ( +
+
Streams
+

No streams found

+

+ Ask your employer to create a salary stream for your address. +

+
+ ) : ( +
+ {streams.map((stream) => ( +
stream.active && setSelectedStream(stream)} + style={{ + padding: '1.25rem', + background: (stream.active || stream.isPaused) ? 'rgba(99, 102, 241, 0.05)' : 'transparent', + border: (stream.active || stream.isPaused) ? '1px solid var(--border)' : '1px solid transparent', // Changed to var(--border) for better visibility + borderRadius: 'var(--radius-lg)', + cursor: stream.active ? 'pointer' : 'default', + transition: 'all 0.2s ease', + boxShadow: stream.id === selectedStream?.id ? '0 0 0 2px var(--primary)' : 'none' + }} + > +
+ Stream #{stream.id} + {stream.active ? ( + Active + ) : stream.isPaused ? ( + Paused + ) : ( + Ended + )} +
+
+
+
Rate
+
{formatRate(stream.ratePerSecond)}/s
+
+
+
Daily
+
{(Number(formatRate(stream.ratePerSecond)) * 86400).toFixed(2)}
+
+
+ {stream.active && ( +
+ Click to view earnings +
+ )} +
+ ))} +
+ )} +
+ + {/* Current Earnings Detail View */} + {selectedStream && ( +
+ handleWithdraw(selectedStream.id)} + onPause={() => handlePause(selectedStream.id)} + loading={withdrawLoading[selectedStream.id]} + /> +
+ )} + + {/* Bottom Actions Grid */} +
+ {/* Request Stream Section */} +
+
+

+ Request New Stream +

+
+ {!showRequestForm ? ( +
+

+ Need a new salary stream? Submit a request to HR. +

+ +
+ ) : ( +
+
+ + setRequestRate(e.target.value)} + disabled={requestLoading} + /> +

+ Daily: {requestRate ? (Number(requestRate) * 86400).toFixed(2) : '0.00'} HLUSD +

+
+
+ + +
+
+ )} +
+ + {/* Pending Requests */} +
+
+

+ Pending Requests +

+
+ {pendingRequests.length === 0 ? ( +
+
Done
+

No pending requests

+
+ ) : ( +
+ {pendingRequests.map((req) => ( +
+
+ Request #{req.id} + Pending +
+
+ {formatRate(req.ratePerSecond)} HLUSD/sec +
+
+ ))} +
+ )} +
+
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/components/hr/CreateStreamForm.jsx b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/CreateStreamForm.jsx new file mode 100644 index 000000000..3d8fba45f --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/CreateStreamForm.jsx @@ -0,0 +1,102 @@ +import { useState } from 'react'; +import { createStream } from '../../services/contractService'; + +export default function CreateStreamForm({ onStreamCreated }) { + const [employee, setEmployee] = useState(''); + const [rate, setRate] = useState(''); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(''); + + if (!employee || !rate) { + setError('Please fill in all fields.'); + return; + } + + if (!/^0x[a-fA-F0-9]{40}$/.test(employee)) { + setError('Invalid Ethereum address format.'); + return; + } + + if (Number(rate) <= 0) { + setError('Rate must be greater than zero.'); + return; + } + + try { + setLoading(true); + await createStream(employee, rate); + setEmployee(''); + setRate(''); + if (onStreamCreated) onStreamCreated(); + } catch (err) { + console.error('Create stream failed:', err); + setError(err.reason || err.message || 'Transaction failed'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+

+ Create Stream +

+
+ +
+ + setEmployee(e.target.value)} + disabled={loading} + /> +
+
+ + setRate(e.target.value)} + disabled={loading} + /> +

+ Tokens streamed to employee every second. 0.01 ≈ 864 PST/day. +

+
+ {error && ( +

+ Error: {error} +

+ )} + + +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/components/hr/Dashboard.jsx b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/Dashboard.jsx new file mode 100644 index 000000000..46a70b187 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/Dashboard.jsx @@ -0,0 +1,224 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + connectWallet, + getTreasuryBalance, + getTaxRate, + getTaxVaultBalance, + getAllStreams, + fundContract, + formatAddress, +} from '../../services/contractService'; +import CreateStreamForm from './CreateStreamForm'; +import StreamTable from './StreamTable'; +import PendingRequests from './PendingRequests'; + +export default function Dashboard() { + const [account, setAccount] = useState(null); + const [stats, setStats] = useState({ + treasury: '0', + taxRate: 0, + taxVault: '0', + streamCount: 0, + }); + const [streams, setStreams] = useState([]); + const [refreshTrigger, setRefreshTrigger] = useState(0); + const [fundAmount, setFundAmount] = useState(''); + const [fundLoading, setFundLoading] = useState(false); + + const loadStats = useCallback(async (isBackground = false) => { + try { + const [treasury, taxRate, taxVault, allStreams] = await Promise.all([ + getTreasuryBalance(), + getTaxRate(), + getTaxVaultBalance(), + getAllStreams(), + ]); + + setStreams(allStreams); + + // Calculate active streams + const activeCount = allStreams.filter(s => s.active).length; + + setStats({ + treasury, + taxRate, + taxVault, + streamCount: activeCount // Use calculated active count + }); + } catch (err) { + console.error('Failed to load stats:', err); + } + }, []); + + useEffect(() => { + if (account) { + loadStats(); + // Poll every 5 seconds for real-time updates + const interval = setInterval(() => { + loadStats(true); // Background refresh + setRefreshTrigger(prev => prev + 1); + }, 5000); + return () => clearInterval(interval); + } + }, [account, loadStats]); // Removed refreshTrigger from dependency to avoid loop (though setRefreshTrigger is stable) + + const handleConnect = async () => { + try { + const addr = await connectWallet(); + setAccount(addr); + } catch (err) { + alert(err.message); + } + }; + + const handleFund = async () => { + if (!fundAmount || Number(fundAmount) <= 0) return; + try { + setFundLoading(true); + await fundContract(fundAmount); + setFundAmount(''); + loadStats(); + } catch (err) { + console.error('Fund failed:', err); + alert(err.reason || err.message); + } finally { + setFundLoading(false); + } + }; + + const handleStreamCreated = () => { + setRefreshTrigger((t) => t + 1); + loadStats(); + }; + + const handleRequestProcessed = () => { + setRefreshTrigger((t) => t + 1); + loadStats(); + }; + + if (!account) { + return ( +
+
+
+
P
+
+

PayStream

+

HR Dashboard

+
+
+
+
+
Locked
+

Connect Your Wallet

+

Connect MetaMask to manage payroll streams and fund the treasury.

+ +
+
+ ); + } + + return ( +
+ {/* Header */} +
+
+
P
+
+

PayStream

+

HR Dashboard

+
+
+ +
+ + {/* Stats */} +
+
+
Treasury Balance
+
{Number(stats.treasury).toLocaleString(undefined, { maximumFractionDigits: 2 })}
+
HLUSD Tokens
+
+
+
Active Streams
+
{stats.streamCount}
+
Total created
+
+
+
Tax Rate
+
{(stats.taxRate / 100).toFixed(1)}%
+
{stats.taxRate} basis points
+
+
+
Tax Vault
+
{Number(stats.taxVault).toLocaleString(undefined, { maximumFractionDigits: 2 })}
+
HLUSD Collected
+
+
+ + {/* Content Grid */} +
+ {/* Left — Create + Fund */} +
+ + + {/* Fund Treasury */} +
+
+

+ Fund Treasury +

+
+
+ + setFundAmount(e.target.value)} + disabled={fundLoading} + /> +
+ +
+
+ + {/* Right — Pending Requests + Stream Table */} +
+ + loadStats(true)} + /> +
+
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/components/hr/PendingRequests.jsx b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/PendingRequests.jsx new file mode 100644 index 000000000..678a2eedd --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/PendingRequests.jsx @@ -0,0 +1,170 @@ +import { useState, useEffect } from 'react'; +import { + getPendingRequests, + approveStreamRequest, + rejectStreamRequest, + formatAddress, + formatRate, +} from '../../services/contractService'; + +export default function PendingRequests({ refreshTrigger, onRequestProcessed }) { + const [requests, setRequests] = useState([]); + const [loading, setLoading] = useState(false); + const [actionLoading, setActionLoading] = useState({}); + + useEffect(() => { + // If we already have loaded once (loading is false and we might have data or empty array), try background. + // But initially requests is empty array. relying on a separate 'initialized' ref is better but let's use a simple check + // If loading is false, it's a background refresh (unless it's the very first render) + // Actually, just checking if we've loaded before. + // Let's pass true if refreshTrigger > 0 + const isBackground = refreshTrigger > 0; + loadRequests(isBackground); + }, [refreshTrigger]); + + const loadRequests = async (isBackground = false) => { + try { + if (!isBackground) setLoading(true); + const pending = await getPendingRequests(); + setRequests(pending); + } catch (err) { + console.error('Failed to load pending requests:', err); + } finally { + if (!isBackground) setLoading(false); + } + }; + + const handleApprove = async (requestId) => { + setActionLoading((p) => ({ ...p, [requestId]: 'approve' })); + try { + await approveStreamRequest(requestId); + await loadRequests(); + if (onRequestProcessed) onRequestProcessed(); + } catch (err) { + console.error('Approve failed:', err); + alert(err.reason || err.message || 'Approval failed'); + } finally { + setActionLoading((p) => ({ ...p, [requestId]: null })); + } + }; + + const handleReject = async (requestId) => { + if (!confirm('Are you sure you want to reject this request?')) return; + + setActionLoading((p) => ({ ...p, [requestId]: 'reject' })); + try { + await rejectStreamRequest(requestId); + await loadRequests(); + if (onRequestProcessed) onRequestProcessed(); + } catch (err) { + console.error('Reject failed:', err); + alert(err.reason || err.message || 'Rejection failed'); + } finally { + setActionLoading((p) => ({ ...p, [requestId]: null })); + } + }; + + if (loading && requests.length === 0) { + return ( +
+
+

+ Pending Stream Requests +

+
+
+
+

Loading requests…

+
+
+ ); + } + + if (requests.length === 0) { + return ( +
+
+

+ Pending Stream Requests +

+
+
+
Done
+

No pending requests

+
+
+ ); + } + + return ( +
+
+

+ Pending Stream Requests ({requests.length}) +

+
+
+ {requests.map((req) => ( +
+
+ Request #{req.id} + + Pending + +
+
+
+
Employee
+
{formatAddress(req.employee)}
+
+
+
Requested Rate
+
+ {formatRate(req.ratePerSecond)} HLUSD/sec +
+
+
+
Daily
+
+ ~{(Number(formatRate(req.ratePerSecond)) * 86400).toFixed(2)} PST +
+
+
+
+ + +
+
+ ))} +
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/components/hr/StreamTable.jsx b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/StreamTable.jsx new file mode 100644 index 000000000..f5faea2d7 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/components/hr/StreamTable.jsx @@ -0,0 +1,203 @@ +import { useState, useEffect, useCallback } from 'react'; +import { + getAllStreams, + calculateAccrued, + pauseStream, + resumeStream, + cancelStream, + formatAddress, + formatRate, + ethers, +} from '../../services/contractService'; + +export default function StreamTable({ streams = [], onRefresh }) { + const [accrued, setAccrued] = useState({}); + const [actionLoading, setActionLoading] = useState({}); + + // Separate active and inactive streams + // Separate active/paused and inactive streams + const activeStreams = streams.filter(s => s.active || s.isPaused); + const inactiveStreams = streams.filter(s => !s.active && !s.isPaused); + + // Update accrued values every 2 seconds + useEffect(() => { + if (streams.length === 0) return; + + const updateAccrued = async () => { + const newAccrued = {}; + for (const s of streams) { + if (s.active) { + try { + const val = await calculateAccrued(s.id); + newAccrued[s.id] = ethers.formatEther(val); + } catch { + newAccrued[s.id] = '0'; + } + } else { + newAccrued[s.id] = '0'; // Or keep last known? Contract doesn't store "final accrued" easily active false usually means 0 pending + } + } + setAccrued(newAccrued); + }; + + updateAccrued(); + const interval = setInterval(updateAccrued, 2000); + return () => clearInterval(interval); + }, [streams]); + + const handleAction = async (id, actionName, actionFn) => { + setActionLoading((prev) => ({ ...prev, [id]: actionName })); + try { + await actionFn(id); + if (onRefresh) await onRefresh(); + alert(`Stream ${actionName} successful!`); + } catch (err) { + console.error(`${actionName} failed:`, err); + alert(`Failed to ${actionName} stream:\n${err.reason || err.message || 'Unknown error'}`); + } finally { + setActionLoading((prev) => ({ ...prev, [id]: null })); + } + }; + + const handleAudit = (id) => { + // Placeholder for future history details if needed + alert(`Audit History for Stream #${id} coming soon.`); + }; + + const renderTable = (data, isHistory = false) => ( +
+ + + + + + + {!isHistory && } + + + + + + {data.map((stream) => ( + + + + + {!isHistory && ( + + )} + + + + ))} + +
IDEmployeeRate (HLUSD/s)AccruedStatusActions
#{stream.id}{formatAddress(stream.employee)}{formatRate(stream.ratePerSecond)} + {accrued[stream.id] ? Number(accrued[stream.id]).toFixed(4) : '0.000'} + + {stream.active ? ( + Active + ) : stream.isPaused ? ( + Paused + ) : ( + Ended + )} + +
+ {stream.active ? ( + <> + + + + + ) : stream.isPaused ? ( + <> + + + + ) : ( + // History actions + - + )} +
+
+
+ ); + + return ( +
+ {/* Active Streams */} +
+
+

+ Active Streams ({activeStreams.length}) +

+ +
+ + {activeStreams.length === 0 ? ( +
+
Stream
+

No active streams

+

Create a new stream to get started.

+
+ ) : renderTable(activeStreams)} +
+ + {/* History Panel */} + {inactiveStreams.length > 0 && ( +
+
+

+ Stream History +

+
+ {renderTable(inactiveStreams, true)} +
+ )} +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/index.css b/Nexus/paystream-main/frontend/paystream-app/src/index.css new file mode 100644 index 000000000..d0f698d05 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/index.css @@ -0,0 +1,680 @@ +/* ───────────────────────────────────────── + PayStream HR Dashboard — Cinematic Dark Theme + Deep charcoal, purple luminous accents, grain texture + ───────────────────────────────────────── */ + +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800&display=swap'); + +/* ── Reset ── */ +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + /* Core Palette */ + --bg-deep: #050507; + --bg-charcoal: #0e0e12; + --bg-surface: rgba(20, 20, 25, 0.7); + --bg-surface-hover: rgba(30, 30, 35, 0.8); + + /* Accents */ + --primary: #9333ea; + /* Purple 600 */ + --primary-glow: rgba(147, 51, 234, 0.5); + --accent: #c084fc; + /* Purple 400 */ + --accent-glow: rgba(192, 132, 252, 0.4); + + /* Status */ + --success: #10b981; + --warning: #f59e0b; + --danger: #ef4444; + + /* Gradients */ + --gradient-primary: linear-gradient(135deg, #7e22ce, #a855f7); + /* Deep Purple -> Purple */ + --gradient-secondary: linear-gradient(135deg, #4c1d95, #be185d); + /* Indigo -> Magenta */ + --gradient-text: linear-gradient(to right, #e9d5ff, #c084fc); + --gradient-surface: linear-gradient(145deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.01) 100%); + + /* Glass / Materials */ + --glass-border: rgba(255, 255, 255, 0.08); + --glass-highlight: rgba(255, 255, 255, 0.12); + --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); + --glass-blur: 24px; + + /* Noise Texture (SVG) */ + --bg-noise: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.07'/%3E%3C/svg%3E"); + + /* Typography */ + --font-sans: 'Inter', sans-serif; + --font-heading: 'Outfit', sans-serif; + + --text-primary: #f8fafc; + --text-secondary: #94a3b8; + --text-muted: #64748b; + + /* Sizes */ + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 20px; + --radius-xl: 32px; + --radius-full: 9999px; + + /* Spacing */ + --spacing-xs: 0.5rem; + --spacing-sm: 1rem; + --spacing-md: 2rem; + --spacing-lg: 3rem; + --spacing-xl: 5rem; + + /* Transitions */ + --ease-out: cubic-bezier(0.215, 0.61, 0.355, 1); +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: var(--font-sans); + background-color: var(--bg-deep); + color: var(--text-primary); + min-height: 100vh; + overflow-x: hidden; + position: relative; + line-height: 1.8; + /* Increased line-height */ +} + +/* ── Background System ── */ +#root { + position: relative; + min-height: 100vh; + /* Layer 1: Deep Radial */ + background: radial-gradient(circle at center, #1a1a24 0%, #050507 80%); + z-index: 1; +} + +/* Layer 2: Color Blooms */ +#root::before { + content: ''; + position: absolute; + top: -20%; + left: -10%; + width: 60%; + height: 60%; + background: radial-gradient(circle, rgba(126, 34, 206, 0.15) 0%, transparent 60%); + filter: blur(80px); + /* Soft bloom */ + z-index: -1; + pointer-events: none; + animation: bloomFloat 20s infinite alternate ease-in-out; +} + +#root::after { + content: ''; + position: absolute; + bottom: -10%; + right: -10%; + width: 60%; + height: 60%; + background: radial-gradient(circle, rgba(168, 85, 247, 0.1) 0%, transparent 60%); + filter: blur(100px); + /* Soft bloom */ + z-index: -1; + pointer-events: none; + animation: bloomFloat 25s infinite alternate-reverse ease-in-out; +} + +/* Layer 3: Grain Overlay */ +body::after { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: var(--bg-noise); + opacity: 0.8; + /* Visible but subtle */ + pointer-events: none; + z-index: 9999; + mix-blend-mode: overlay; +} + +/* Layer 4: Vignette */ +body::before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: radial-gradient(circle at center, transparent 40%, #000 120%); + opacity: 0.6; + pointer-events: none; + z-index: 900; +} + +@keyframes bloomFloat { + 0% { + transform: translate(0, 0) scale(1); + } + + 100% { + transform: translate(30px, -30px) scale(1.1); + } +} + +/* ── Scrollbar ── */ +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.1); + border-radius: 3px; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.2); +} + +/* ── Layout ── */ +.app-container { + max-width: 1440px; + /* Wider container */ + margin: 0 auto; + padding: var(--spacing-lg) var(--spacing-lg); + position: relative; + z-index: 10; +} + +h1, +h2, +h3, +h4 { + font-family: var(--font-heading); + letter-spacing: -0.02em; + margin-bottom: var(--spacing-sm); +} + +/* ── Header ── */ +.header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--spacing-xl); + padding-bottom: var(--spacing-md); + border-bottom: 1px solid var(--glass-border); + position: relative; +} + +.header-brand { + display: flex; + align-items: center; + gap: 1.5rem; +} + +.header-logo { + width: 56px; + height: 56px; + background: var(--gradient-primary); + border-radius: var(--radius-md); + display: flex; + align-items: center; + justify-content: center; + font-size: 1.75rem; + font-weight: 800; + position: relative; + box-shadow: 0 0 25px rgba(168, 85, 247, 0.4); + /* Glow */ +} + +.header-logo::after { + content: ''; + position: absolute; + inset: -2px; + background: linear-gradient(135deg, rgba(255, 255, 255, 0.4), transparent); + border-radius: inherit; + z-index: -1; + opacity: 0.5; +} + +.header-title-group { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.header-title { + font-size: 2rem; + font-weight: 700; + background: var(--gradient-text); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + text-shadow: 0 0 30px rgba(192, 132, 252, 0.15); + margin-bottom: 0; +} + +.header-subtitle { + font-size: 0.85rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.15em; + font-weight: 600; +} + +/* ── Connect Button ── */ +.btn-connect { + display: flex; + align-items: center; + gap: 0.8rem; + padding: 1rem 2rem; + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--glass-border); + border-radius: var(--radius-full); + color: var(--text-primary); + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s var(--ease-out); + backdrop-filter: blur(10px); + position: relative; + overflow: hidden; +} + +.btn-connect:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.2); + transform: translateY(-2px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); +} + +.btn-connect.connected { + background: rgba(16, 185, 129, 0.05); + border-color: rgba(16, 185, 129, 0.2); + color: #34d399; +} + +.wallet-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: #34d399; + box-shadow: 0 0 10px #34d399; + animation: pulse-dot 2s infinite; +} + +@keyframes pulse-dot { + + 0%, + 100% { + opacity: 1; + transform: scale(1); + } + + 50% { + opacity: 0.6; + transform: scale(1.3); + } +} + +/* ── Stats Cards ── */ +.stats-row { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: var(--spacing-md); + margin-bottom: var(--spacing-xl); +} + +.stat-card { + background: var(--bg-surface); + backdrop-filter: blur(var(--glass-blur)); + -webkit-backdrop-filter: blur(var(--glass-blur)); + /* Safari */ + border: 1px solid var(--glass-border); + border-top: 1px solid var(--glass-highlight); + /* Rim light top */ + border-radius: var(--radius-lg); + padding: 2rem; + position: relative; + transition: all 0.4s var(--ease-out); + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4); + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.stat-card:hover { + transform: translateY(-5px) scale(1.01); + background: var(--bg-surface-hover); + border-color: rgba(255, 255, 255, 0.15); + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5), 0 0 30px rgba(147, 51, 234, 0.1); +} + +.stat-label { + font-size: 0.8rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.12em; + font-weight: 600; +} + +.stat-value { + font-family: var(--font-heading); + font-size: 2.5rem; + font-weight: 700; + color: var(--text-primary); + /* Subtle gradient text */ + background: linear-gradient(to bottom right, #fff, #cbd5e1); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 1.1; + margin: 0.5rem 0; +} + +.stat-sub { + font-size: 0.85rem; + color: var(--text-secondary); + font-weight: 500; +} + +/* ── Glass Containers ── */ +.glass-card { + background: var(--bg-surface); + backdrop-filter: blur(var(--glass-blur)); + border: 1px solid var(--glass-border); + border-top: 1px solid var(--glass-highlight); + border-radius: var(--radius-xl); + padding: 2.5rem; + box-shadow: var(--glass-shadow); + margin-bottom: var(--spacing-lg); + position: relative; + overflow: hidden; +} + +/* Cinematic Glow behind card active state */ +.glass-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: radial-gradient(800px circle at top center, rgba(147, 51, 234, 0.05), transparent 40%); + pointer-events: none; + z-index: 0; +} + +.card-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--spacing-md); + position: relative; + z-index: 2; +} + +.card-title { + font-size: 1.5rem; + font-weight: 600; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 1rem; +} + +/* ── Form Elements ── */ +.form-group { + margin-bottom: 2rem; + position: relative; + z-index: 2; +} + +.form-label { + display: block; + font-size: 0.8rem; + font-weight: 600; + color: var(--text-secondary); + margin-bottom: 1rem; + text-transform: uppercase; + letter-spacing: 0.1em; +} + +.form-input { + width: 100%; + padding: 1.25rem 1.5rem; + background: rgba(0, 0, 0, 0.4); + border: 1px solid var(--glass-border); + border-radius: var(--radius-md); + color: #fff; + font-family: inherit; + font-size: 1rem; + transition: all 0.3s ease; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4); +} + +.form-input::placeholder { + color: rgba(255, 255, 255, 0.2); +} + +.form-input:focus { + outline: none; + border-color: var(--primary); + background: rgba(0, 0, 0, 0.6); + box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.15), inset 0 2px 4px rgba(0, 0, 0, 0.4); +} + +.form-row { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 2rem; +} + +/* ── Buttons ── */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.75rem; + padding: 1rem 2rem; + border: none; + border-radius: var(--radius-md); + font-family: inherit; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s var(--ease-out); + text-decoration: none; + position: relative; + overflow: hidden; + z-index: 10; + line-height: 1; +} + +.btn-primary { + background: var(--gradient-primary); + color: white; + /* Subtle inner glow */ + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 4px 20px rgba(126, 34, 206, 0.4); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} + +.btn-primary:hover:not(:disabled) { + transform: translateY(-2px) scale(1.02); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0 8px 30px rgba(126, 34, 206, 0.6); +} + +.btn-primary:active:not(:disabled) { + transform: translateY(0); +} + +.btn-danger { + background: rgba(239, 68, 68, 0.1); + color: #fca5a5; + border: 1px solid rgba(239, 68, 68, 0.3); +} + +.btn-danger:hover:not(:disabled) { + background: rgba(239, 68, 68, 0.2); + box-shadow: 0 0 15px rgba(239, 68, 68, 0.2); + color: #fff; +} + +.btn-ghost { + background: transparent; + color: var(--text-secondary); + border: 1px solid transparent; +} + +.btn-ghost:hover { + color: #fff; + background: rgba(255, 255, 255, 0.05); +} + +.btn-sm { + padding: 0.6rem 1rem; + font-size: 0.85rem; + border-radius: 8px; +} + +/* ── Tables ── */ +.stream-table { + width: 100%; + border-collapse: separate; + border-spacing: 0; + margin-top: 1.5rem; + position: relative; + z-index: 2; +} + +.stream-table thead th { + padding: 1.25rem 1.5rem; + font-size: 0.75rem; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.12em; + text-align: left; + border-bottom: 1px solid var(--glass-border); +} + +.stream-table tbody tr { + transition: background 0.2s ease; +} + +.stream-table tbody tr:hover { + background: rgba(255, 255, 255, 0.03); +} + +.stream-table tbody td { + padding: 1.5rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); + color: var(--text-secondary); + font-size: 0.95rem; +} + +.address-cell { + font-family: 'SF Mono', monospace; + color: #a5b4fc; +} + +.accrued-cell { + font-family: var(--font-heading); + color: #fff; + font-weight: 600; + text-shadow: 0 0 10px rgba(255, 255, 255, 0.2); + font-size: 1.1rem; +} + +/* ── Badges ── */ +.badge { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + border-radius: var(--radius-full); + font-size: 0.75rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + line-height: 1; +} + +.badge-active { + background: rgba(16, 185, 129, 0.1); + color: #34d399; + border: 1px solid rgba(16, 185, 129, 0.2); + box-shadow: 0 0 15px rgba(16, 185, 129, 0.1); +} + +.badge-paused { + background: rgba(245, 158, 11, 0.1); + color: #fbbf24; + border: 1px solid rgba(245, 158, 11, 0.2); +} + +.badge-cancelled { + background: rgba(255, 255, 255, 0.05); + /* Grayed out */ + color: var(--text-muted); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +/* ── Actions ── */ +.actions-group { + display: flex; + gap: 1rem; +} + +/* ── Grid ── */ +.content-grid { + display: grid; + grid-template-columns: 1fr; + gap: 3rem; +} + +@media (min-width: 1024px) { + .content-grid { + grid-template-columns: 420px 1fr; + /* Fixed sidebar width */ + } +} + +/* ── Empty State ── */ +.empty-state { + text-align: center; + padding: 6rem 2rem; + color: var(--text-muted); + display: flex; + flex-direction: column; + align-items: center; + background: radial-gradient(circle, rgba(255, 255, 255, 0.03) 0%, transparent 60%); + border-radius: var(--radius-lg); +} + +.empty-state-icon { + font-size: 4rem; + margin-bottom: 2rem; + background: var(--gradient-text); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + opacity: 0.5; +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/paystream-app/src/main.jsx b/Nexus/paystream-main/frontend/paystream-app/src/main.jsx new file mode 100644 index 000000000..9ad5624eb --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/main.jsx @@ -0,0 +1,20 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' +import { ClerkProvider } from '@clerk/clerk-react' + +// Check for the key +const PUBLISHABLE_KEY = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY + +if (!PUBLISHABLE_KEY) { + throw new Error("Missing Publishable Key") +} + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + + , +); diff --git a/Nexus/paystream-main/frontend/paystream-app/src/pages/EmployeeSignIn.jsx b/Nexus/paystream-main/frontend/paystream-app/src/pages/EmployeeSignIn.jsx new file mode 100644 index 000000000..a7d82fd46 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/pages/EmployeeSignIn.jsx @@ -0,0 +1,15 @@ +import { SignIn } from "@clerk/clerk-react"; + +export default function EmployeeSignIn() { + return ( +
+

Employee Access

+ +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/pages/HRSignIn.jsx b/Nexus/paystream-main/frontend/paystream-app/src/pages/HRSignIn.jsx new file mode 100644 index 000000000..f67041615 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/pages/HRSignIn.jsx @@ -0,0 +1,15 @@ +import { SignIn } from "@clerk/clerk-react"; + +export default function HRSignIn() { + return ( +
+

HR Access

+ +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/pages/LandingPage.jsx b/Nexus/paystream-main/frontend/paystream-app/src/pages/LandingPage.jsx new file mode 100644 index 000000000..1ad268802 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/pages/LandingPage.jsx @@ -0,0 +1,112 @@ +import { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useUser, SignOutButton } from "@clerk/clerk-react"; + +export default function LandingPage() { + const navigate = useNavigate(); + const { isSignedIn, user, isLoaded } = useUser(); + + if (!isLoaded) { + return
Loading...
; + } + + return ( +
+
+
+ P +
+

+ PayStream +

+

+ The decentralized payroll streaming protocol. +
+ Real-time earnings • Instant withdrawals • Automated tax compliance +

+
+ +
+
+

Account Portal

+

Select your role to continue

+
+ + {isSignedIn && ( +
+ Signed in as {user.primaryEmailAddress?.emailAddress} +
+ )} + +
+ + + + + {isSignedIn && ( + + + + )} +
+
+ +
+ HeLa Testnet • Secure • Decentralized +
+
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/pages/SignInPage.jsx b/Nexus/paystream-main/frontend/paystream-app/src/pages/SignInPage.jsx new file mode 100644 index 000000000..9a9361324 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/pages/SignInPage.jsx @@ -0,0 +1,9 @@ +import { SignIn } from "@clerk/clerk-react"; + +export default function SignInPage() { + return ( +
+ +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/pages/SignUpPage.jsx b/Nexus/paystream-main/frontend/paystream-app/src/pages/SignUpPage.jsx new file mode 100644 index 000000000..a2f01c8a1 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/pages/SignUpPage.jsx @@ -0,0 +1,9 @@ +import { SignUp } from "@clerk/clerk-react"; + +export default function SignUpPage() { + return ( +
+ +
+ ); +} diff --git a/Nexus/paystream-main/frontend/paystream-app/src/services/contractService.js b/Nexus/paystream-main/frontend/paystream-app/src/services/contractService.js new file mode 100644 index 000000000..84b0ad664 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/src/services/contractService.js @@ -0,0 +1,386 @@ +import { ethers } from 'ethers'; +import PayStreamABI from '../../../../shared/abi/PayStream.json'; +import TaxVaultABI from '../../../../shared/abi/TaxVault.json'; + +// Addresses will be loaded dynamically based on Chain ID +let ALL_ADDRESSES = {}; + +// Try to load addresses from deployment +try { + // Note: This relies on the new structure { "666888": {...}, "8668": {...} } + const loaded = await import('../../../../shared/abi/addresses.json'); + // Handle ES module default export if necessary + ALL_ADDRESSES = loaded.default || loaded; + console.log('Loaded deployment addresses:', ALL_ADDRESSES); +} catch (e) { + console.warn('No deployment addresses found.'); +} + +export function getProvider() { + if (window.ethereum) { + return new ethers.BrowserProvider(window.ethereum); + } + // Default to Testnet as it's safer for dev/demos if no wallet + return new ethers.JsonRpcProvider('https://testnet-rpc.helachain.com'); +} + +export async function getSigner() { + const provider = getProvider(); + return provider.getSigner(); +} + +/** + * Helper to get addresses for the current connected network + */ +async function getAddresses() { + const provider = getProvider(); + let chainId; + try { + const network = await provider.getNetwork(); + chainId = network.chainId.toString(); + } catch (e) { + console.warn("Could not determine chain ID, defaulting to Testnet (666888)"); + chainId = "666888"; + } + + // fallback for old structure compatibility (if user hasn't redeployed yet) + // If the JSON is flat (no chainID keys but has "payStream"), wrap it effectively + if (ALL_ADDRESSES.payStream && !ALL_ADDRESSES[chainId]) { + return ALL_ADDRESSES; + } + + const deployment = ALL_ADDRESSES[chainId]; + if (!deployment) { + console.warn(`No deployment found for Chain ID ${chainId}.`); + return { payStream: '', taxVault: '' }; + } + return deployment; +} + +export async function switchToHeLaNetwork(isTestnet = true) { + if (typeof window.ethereum === 'undefined') { + throw new Error('MetaMask is not installed'); + } + + const config = isTestnet ? { + chainId: '0xA2D08', // 666888 + chainName: 'HeLa Testnet', + rpcUrl: 'https://testnet-rpc.helachain.com', + blockExplorer: 'https://testnet-blockexplorer.helachain.com' + } : { + chainId: '0x21DC', // 8668 + chainName: 'HeLa Mainnet', + rpcUrl: 'https://mainnet-rpc.helachain.com', + blockExplorer: 'https://mainnet-blockexplorer.helachain.com' + }; + + try { + await window.ethereum.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: config.chainId }], + }); + } catch (switchError) { + // If the network doesn't exist, add it + if (switchError.code === 4902) { + try { + await window.ethereum.request({ + method: 'wallet_addEthereumChain', + params: [{ + chainId: config.chainId, + chainName: config.chainName, + nativeCurrency: { + name: 'HLUSD', + symbol: 'HLUSD', + decimals: 18 + }, + rpcUrls: [config.rpcUrl], + blockExplorerUrls: [config.blockExplorer] + }], + }); + } catch (addError) { + console.error('Add chain error:', addError); + throw new Error(`Failed to add ${config.chainName} to MetaMask`); + } + } else { + throw switchError; + } + } +} + +export async function connectWallet() { + console.log('Attempting to connect wallet...'); + + if (typeof window.ethereum === 'undefined') { + throw new Error('MetaMask is not installed.'); + } + + // Request accounts + const accounts = await window.ethereum.request({ + method: 'eth_requestAccounts', + }); + + // Check network and log + const provider = new ethers.BrowserProvider(window.ethereum); + const network = await provider.getNetwork(); + console.log(`Connected to chain: ${network.chainId}`); + + return accounts[0]; +} + +export async function getPayStreamContract(signerOrProvider) { + const addresses = await getAddresses(); + if (!addresses.payStream) throw new Error("PayStream address not found for this network"); + return new ethers.Contract(addresses.payStream, PayStreamABI.abi, signerOrProvider); +} + +export async function getTaxVaultContract(signerOrProvider) { + const addresses = await getAddresses(); + if (!addresses.taxVault) throw new Error("TaxVault address not found for this network"); + return new ethers.Contract(addresses.taxVault, TaxVaultABI.abi, signerOrProvider); +} + +// ── Write Functions ── + +export async function createStream(employeeAddress, ratePerSecond) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const rateWei = ethers.parseEther(ratePerSecond.toString()); + const tx = await contract.createStream(employeeAddress, rateWei); + await tx.wait(); + return tx; +} + +export async function pauseStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.pauseStream(streamId); + await tx.wait(); + return tx; +} + +export async function resumeStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.resumeStream(streamId); + await tx.wait(); + return tx; +} + +export async function cancelStream(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.cancelStream(streamId); + await tx.wait(); + return tx; +} + +export async function fundContract(amount) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const amountWei = ethers.parseEther(amount.toString()); + + // 1. Check Native Balance + const userAddress = await signer.getAddress(); + const provider = signer.provider; + const balance = await provider.getBalance(userAddress); + + console.log(`Current Native Balance: ${ethers.formatEther(balance)} HLUSD`); + + if (balance < amountWei) { + alert(`❌ Insufficient Funds! You have ${ethers.formatEther(balance)} HLUSD but need ${amount}.`); + throw new Error('Insufficient funds'); + } + + // 2. Fund Contract (Native Transfer) + console.log(`Funding contract with ${amount} HLUSD...`); + const fundTx = await contract.fundContract({ value: amountWei, gasLimit: 500000 }); + await fundTx.wait(); + return fundTx; +} + +export async function setTaxRate(basisPoints) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.setTaxRate(basisPoints); + await tx.wait(); + return tx; +} + +export async function approveStreamRequest(requestId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.approveStreamRequest(requestId); + await tx.wait(); + return tx; +} + +export async function rejectStreamRequest(requestId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const tx = await contract.rejectStreamRequest(requestId); + await tx.wait(); + return tx; +} + +export async function awardBonus(employeeAddress, amount) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const amountWei = ethers.parseEther(amount.toString()); + const tx = await contract.awardBonus(employeeAddress, amountWei); + await tx.wait(); + return tx; +} + +// ── Read Functions ── + +export async function getStreamCount() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const count = await contract.getStreamCount(); + return Number(count); +} + +export async function getStream(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.getStream(streamId); +} + +export async function getAllStreams() { + const count = await getStreamCount(); + const streams = []; + for (let i = 0; i < count; i++) { + const s = await getStream(i); + streams.push({ + id: i, + employer: s.employer, + employee: s.employee, + ratePerSecond: s.ratePerSecond, + lastClaimTime: Number(s.lastClaimTime), + active: s.active, + isPaused: s.isPaused, // New field + }); + } + return streams; +} + +export async function calculateAccrued(streamId) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + return contract.calculateAccrued(streamId); +} + +export async function getEmployeeStreams(employeeAddress) { + const count = await getStreamCount(); + const streams = []; + for (let i = 0; i < count; i++) { + const s = await getStream(i); + if (s.employee.toLowerCase() === employeeAddress.toLowerCase()) { + streams.push({ + id: i, + employer: s.employer, + employee: s.employee, + ratePerSecond: s.ratePerSecond, + lastClaimTime: Number(s.lastClaimTime), + active: s.active, + isPaused: s.isPaused, // New field + }); + } + } + return streams; +} + +export async function withdraw(streamId) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + // Explicit gas limit for safety + const tx = await contract.withdraw(streamId, { gasLimit: 500000 }); + await tx.wait(); + return tx; +} + +export async function requestStreamStart(ratePerSecond) { + const signer = await getSigner(); + const contract = await getPayStreamContract(signer); + const rateWei = ethers.parseEther(ratePerSecond.toString()); + const tx = await contract.requestStreamStart(rateWei); + await tx.wait(); + return tx; +} + +export async function getMyPendingRequests(employeeAddress) { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const { requestIds, requests } = await contract.getPendingRequests(); + + // Filter + const myRequests = []; + for (let i = 0; i < requests.length; i++) { + if (requests[i].employee.toLowerCase() === employeeAddress.toLowerCase()) { + myRequests.push({ + id: Number(requestIds[i]), + employee: requests[i].employee, + ratePerSecond: requests[i].ratePerSecond, + timestamp: Number(requests[i].timestamp), + processed: requests[i].processed, + }); + } + } + return myRequests; +} + +export async function getTokenBalance(address) { + const provider = getProvider(); + const balance = await provider.getBalance(address); + return ethers.formatEther(balance); +} + +export async function getTreasuryBalance() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const balance = await contract.getTreasuryBalance(); + return ethers.formatEther(balance); +} + +export async function getTaxRate() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const rate = await contract.taxBasisPoints(); + return Number(rate); +} + +export async function getTaxVaultBalance() { + const provider = getProvider(); + const vault = await getTaxVaultContract(provider); + const balance = await vault.getBalance(); + return ethers.formatEther(balance); +} + +export async function getPendingRequests() { + const provider = getProvider(); + const contract = await getPayStreamContract(provider); + const { requestIds, requests } = await contract.getPendingRequests(); + + const pendingRequests = []; + for (let i = 0; i < requests.length; i++) { + pendingRequests.push({ + id: Number(requestIds[i]), + employee: requests[i].employee, + ratePerSecond: requests[i].ratePerSecond, + timestamp: Number(requests[i].timestamp), + processed: requests[i].processed, + }); + } + return pendingRequests; +} + +export function formatAddress(address) { + if (!address) return ''; + return `${address.slice(0, 6)}…${address.slice(-4)}`; +} + +export function formatRate(rateWei) { + return ethers.formatEther(rateWei); +} + +export { ethers }; diff --git a/Nexus/paystream-main/frontend/paystream-app/vercel.json b/Nexus/paystream-main/frontend/paystream-app/vercel.json new file mode 100644 index 000000000..70bff2f8e --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/vercel.json @@ -0,0 +1,8 @@ +{ + "rewrites": [ + { + "source": "/(.*)", + "destination": "/index.html" + } + ] +} \ No newline at end of file diff --git a/Nexus/paystream-main/frontend/paystream-app/vite.config.js b/Nexus/paystream-main/frontend/paystream-app/vite.config.js new file mode 100644 index 000000000..92eb97257 --- /dev/null +++ b/Nexus/paystream-main/frontend/paystream-app/vite.config.js @@ -0,0 +1,25 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + server: { + port: 3000, + fs: { + allow: ['../../..'], + }, + }, + build: { + target: 'esnext', + chunkSizeWarningLimit: 1000, // Increase limit slightly + rollupOptions: { + output: { + manualChunks: { + vendor: ['react', 'react-dom', 'react-router-dom'], + ethers: ['ethers'], + clerk: ['@clerk/clerk-react'], + }, + }, + }, + }, +}); diff --git a/Nexus/paystream-main/hardhat.config.js b/Nexus/paystream-main/hardhat.config.js new file mode 100644 index 000000000..aa0ae473e --- /dev/null +++ b/Nexus/paystream-main/hardhat.config.js @@ -0,0 +1,35 @@ +require("@nomicfoundation/hardhat-toolbox"); +require("dotenv").config(); + +/** @type import('hardhat/config').HardhatUserConfig */ +module.exports = { + solidity: { + version: "0.8.20", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + // Force JS/WASM compiler — fixes HH505 on macOS Apple Silicon + solcjs: true, + paths: { + tests: "./contracts/test", + }, + networks: { + localhost: { + url: "http://127.0.0.1:8545", + }, + hela: { + url: process.env.HELA_RPC_URL || "https://testnet-rpc.helachain.com", + chainId: 666888, + accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [], + }, + hela_mainnet: { + url: "https://mainnet-rpc.helachain.com", + chainId: 8668, + accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [], + }, + }, +}; diff --git a/Nexus/paystream-main/package-lock.json b/Nexus/paystream-main/package-lock.json new file mode 100644 index 000000000..56eb84de0 --- /dev/null +++ b/Nexus/paystream-main/package-lock.json @@ -0,0 +1,7900 @@ +{ + "name": "paystream", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "paystream", + "version": "1.0.0", + "dependencies": { + "@openzeppelin/contracts": "^5.0.0", + "dotenv": "^16.3.1" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "hardhat": "^2.19.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", + "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "chai": "^4.2.0", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.14.0", + "hardhat": "^2.28.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-4.0.0.tgz", + "integrity": "sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.4.0.tgz", + "integrity": "sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==", + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "license": "WTFPL", + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hardhat": { + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.23", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true, + "peer": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "peer": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.20.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true, + "license": "WTFPL OR MIT", + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD", + "peer": true + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/Nexus/paystream-main/package.json b/Nexus/paystream-main/package.json new file mode 100644 index 000000000..6c717d298 --- /dev/null +++ b/Nexus/paystream-main/package.json @@ -0,0 +1,20 @@ +{ + "name": "paystream", + "version": "1.0.0", + "description": "Decentralized payroll streaming system — stream salaries per second with automatic tax deductions", + "scripts": { + "compile": "hardhat compile", + "test": "hardhat test", + "deploy:local": "hardhat run scripts/deploy.js --network localhost", + "deploy:hela": "hardhat run scripts/deploy.js --network hela", + "node": "hardhat node" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "hardhat": "^2.19.0" + }, + "dependencies": { + "@openzeppelin/contracts": "^5.0.0", + "dotenv": "^16.3.1" + } +} diff --git a/Nexus/paystream-main/shared/PayStreamABI.json b/Nexus/paystream-main/shared/PayStreamABI.json new file mode 100644 index 000000000..e220a8e00 --- /dev/null +++ b/Nexus/paystream-main/shared/PayStreamABI.json @@ -0,0 +1,938 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PayStream", + "sourceName": "contracts/PayStream.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "_token", + "type": "address" + }, + { + "internalType": "contract TaxVault", + "name": "_taxVault", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_taxBasisPoints", + "type": "uint256" + } + ], + "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": "ReentrancyGuardReentrantCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "funder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ContractFunded", + "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": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "StreamCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "employer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + } + ], + "name": "StreamCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "StreamPaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "employee", + "type": "address" + } + ], + "name": "StreamRequestApproved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "StreamRequestRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + } + ], + "name": "StreamRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "StreamResumed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRate", + "type": "uint256" + } + ], + "name": "TaxRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "employeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "taxAmount", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "approveStreamRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "calculateAccrued", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "cancelStream", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + } + ], + "name": "createStream", + "outputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "fundContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPendingRequests", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "processed", + "type": "bool" + } + ], + "internalType": "struct PayStream.StreamRequest[]", + "name": "requests", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "getRequest", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "processed", + "type": "bool" + } + ], + "internalType": "struct PayStream.StreamRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRequestCount", + "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": "streamId", + "type": "uint256" + } + ], + "name": "getStream", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "employer", + "type": "address" + }, + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastClaimTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + } + ], + "internalType": "struct PayStream.Stream", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStreamCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTreasuryBalance", + "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": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "pauseStream", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "rejectStreamRequest", + "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": "uint256", + "name": "ratePerSecond", + "type": "uint256" + } + ], + "name": "requestStreamStart", + "outputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "resumeStream", + "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": "newTaxBasisPoints", + "type": "uint256" + } + ], + "name": "setTaxRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "streamRequests", + "outputs": [ + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "processed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "streams", + "outputs": [ + { + "internalType": "address", + "name": "employer", + "type": "address" + }, + { + "internalType": "address", + "name": "employee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "ratePerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastClaimTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + } + ], + "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": "taxBasisPoints", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "taxVault", + "outputs": [ + { + "internalType": "contract TaxVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "streamId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c06040523480156200001157600080fd5b50604051620023a9380380620023a9833981016040819052620000349162000264565b600180556001600160a01b038316620000945760405162461bcd60e51b815260206004820152601560248201527f50617953747265616d3a207a65726f20746f6b656e000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620000ec5760405162461bcd60e51b815260206004820152601560248201527f50617953747265616d3a207a65726f207661756c74000000000000000000000060448201526064016200008b565b612710811115620001405760405162461bcd60e51b815260206004820152601560248201527f50617953747265616d3a20746178203e2031303025000000000000000000000060448201526064016200008b565b6001600160a01b03808416608052821660a0526002819055620001656000336200019c565b50620001927ffd70517941c75212b0f9013e45c47a37d6d983c5304288c7af285f2ea40cbba7336200019c565b50505050620002ac565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000241576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001f83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000245565b5060005b92915050565b6001600160a01b03811681146200026157600080fd5b50565b6000806000606084860312156200027a57600080fd5b835162000287816200024b565b60208501519093506200029a816200024b565b80925050604084015190509250925092565b60805160a0516120ad620002fc6000396000818161048f015281816118b801526118f30152600081816104f601528181610a1c015281816112510152818161185a015261189601526120ad6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806380a1f71211610104578063c58343ef116100a2578063e2ad37b011610071578063e2ad37b01461048a578063f3c6a198146104c9578063fb6a984e146104de578063fc0c546a146104f157600080fd5b8063c58343ef14610431578063c6d69a3014610451578063d547741f14610464578063dfe579db1461047757600080fd5b80639b5655dc116100de5780639b5655dc14610406578063a217fddf1461040e578063ac5a656b14610416578063c0f220841461042957600080fd5b806380a1f7121461037d578063894e9a0d1461039357806391d14854146103f357600080fd5b80633519a2f81161017c57806364d60d911161014b57806364d60d91146103065780636db9241b1461034e578063746ff13d146103615780637a210a2b1461037457600080fd5b80633519a2f8146102c557806336568abe146102d85780633df7fb8c146102eb5780633fad1834146102fe57600080fd5b80631f1b32d4116101b85780631f1b32d41461023b578063248a9ca31461027a5780632e1a7d4d1461029d5780632f2ff15d146102b257600080fd5b806301ffc9a7146101df578063071569fc146102075780631594ae4114610228575b600080fd5b6101f26101ed366004611d44565b610518565b60405190151581526020015b60405180910390f35b61021a610215366004611d6e565b61054f565b6040519081526020016101fe565b61021a610236366004611d6e565b6105e9565b61024e610249366004611d6e565b61083a565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016101fe565b61021a610288366004611d6e565b60009081526020819052604090206001015490565b6102b06102ab366004611d6e565b610881565b005b6102b06102c0366004611da3565b61099b565b6102b06102d3366004611d6e565b6109c6565b6102b06102e6366004611da3565b610a7c565b61021a6102f9366004611dcf565b610ab4565b60045461021a565b610319610314366004611d6e565b610cea565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a0016101fe565b6102b061035c366004611d6e565b610d3a565b6102b061036f366004611d6e565b610e37565b61021a60025481565b610385610f34565b6040516101fe929190611df9565b6103a66103a1366004611d6e565b61114b565b6040516101fe919081516001600160a01b03908116825260208084015190911690820152604080830151908201526060808301519082015260809182015115159181019190915260a00190565b6101f2610401366004611da3565b611210565b61021a611239565b61021a600081565b61021a610424366004611d6e565b6112c9565b60035461021a565b61044461043f366004611d6e565b611447565b6040516101fe9190611ea7565b6102b061045f366004611d6e565b6114f4565b6102b0610472366004611da3565b61158f565b6102b0610485366004611d6e565b6115b4565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101fe565b61021a60008051602061205883398151915281565b6102b06104ec366004611d6e565b611679565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216637965db0b60e01b148061054957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546000908290811061057e5760405162461bcd60e51b815260040161057590611edd565b60405180910390fd5b60006003848154811061059357610593611f12565b60009182526020909120600590910201600481015490915060ff166105bc5760009250506105e3565b60008160030154426105ce9190611f3e565b90506105de826002015482611777565b935050505b50919050565b60006000805160206120588339815191526106038161178a565b60045483106106245760405162461bcd60e51b815260040161057590611f51565b60006004848154811061063957610639611f12565b60009182526020909120600490910201600381015490915060ff16156106715760405162461bcd60e51b815260040161057590611f92565b6003808201805460ff19908116600190811790925582546040805160a08101825233815286546001600160a01b0390811660208301908152888701548385019081524260608501908152608085018981529887018a556000998a529351600587027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549286166001600160a01b031993841617905592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c8401805491861691909216179055517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d82015591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e83015594517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f9091018054911515919094161790925584549151909650911691859187917f722e3b1efc8e1913fd437c5d1f8919afd088bbe6b0f4a9c3f55291aa7949675991a4805460018201546040519081526001600160a01b0390911690339085907f4396d7c3edc1447dac8dd2b7143af95840c926a210524a0d3198012c7fdf37c79060200160405180910390a45050919050565b6004818154811061084a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919060ff1684565b610889611794565b600354819081106108ac5760405162461bcd60e51b815260040161057590611edd565b6000600383815481106108c1576108c1611f12565b6000918252602090912060059091020160018101549091506001600160a01b031633146109305760405162461bcd60e51b815260206004820152601a60248201527f50617953747265616d3a206e6f7420796f75722073747265616d0000000000006044820152606401610575565b600481015460ff166109845760405162461bcd60e51b815260206004820152601a60248201527f50617953747265616d3a2073747265616d20696e6163746976650000000000006044820152606401610575565b61098d836117be565b505061099860018055565b50565b6000828152602081905260409020600101546109b68161178a565b6109c083836119ac565b50505050565b60008111610a0f5760405162461bcd60e51b815260206004820152601660248201527514185e54dd1c99585b4e881e995c9bc8185b5bdd5b9d60521b6044820152606401610575565b610a446001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611a3e565b60405181815233907f0939f6f4877faf071412e527bc4c6d0bd65ad077e52b57334f7765265647a7f19060200160405180910390a250565b6001600160a01b0381163314610aa55760405163334bd91960e11b815260040160405180910390fd5b610aaf8282611aa5565b505050565b6000600080516020612058833981519152610ace8161178a565b6001600160a01b038416610b245760405162461bcd60e51b815260206004820152601860248201527f50617953747265616d3a207a65726f20656d706c6f79656500000000000000006044820152606401610575565b60008311610b6b5760405162461bcd60e51b815260206004820152601460248201527350617953747265616d3a207a65726f207261746560601b6044820152606401610575565b600380546040805160a081018252338082526001600160a01b03898116602084018181528486018b81524260608701908152600160808801818152908a018b5560009a909a529551600589027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549287166001600160a01b031993841617905592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c840180549190961691161790935591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d83015592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e82015594517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f909501805495151560ff19909616959095179094559051919450919084907f4396d7c3edc1447dac8dd2b7143af95840c926a210524a0d3198012c7fdf37c790610cdb9088815260200190565b60405180910390a45092915050565b60038181548110610cfa57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091909216929060ff1685565b600080516020612058833981519152610d528161178a565b60035482908110610d755760405162461bcd60e51b815260040161057590611edd565b600060038481548110610d8a57610d8a611f12565b60009182526020909120600590910201600481015490915060ff16610df15760405162461bcd60e51b815260206004820152601b60248201527f50617953747265616d3a20616c726561647920696e61637469766500000000006044820152606401610575565b610dfa846117be565b60048101805460ff1916905560405184907f75b8c91e46f219f2164d6bce576e7cebd2d3ff8749726009fcafdf04e2e1eb7b90600090a250505050565b600080516020612058833981519152610e4f8161178a565b60035482908110610e725760405162461bcd60e51b815260040161057590611edd565b600060038481548110610e8757610e87611f12565b60009182526020909120600590910201600481015490915060ff16610eee5760405162461bcd60e51b815260206004820152601960248201527f50617953747265616d3a20616c726561647920706175736564000000000000006044820152606401610575565b610ef7846117be565b60048101805460ff1916905560405184907fc1e14ec692cfc1a89cae539cb884be8d7cc39fd7a129fd73e0d59895fe48d2b890600090a250505050565b6060806000805b600454811015610f935760048181548110610f5857610f58611f12565b600091825260209091206003600490920201015460ff16610f815781610f7d81611fd6565b9250505b80610f8b81611fd6565b915050610f3b565b508067ffffffffffffffff811115610fad57610fad611fef565b604051908082528060200260200182016040528015610fd6578160200160208202803683370190505b5092508067ffffffffffffffff811115610ff257610ff2611fef565b60405190808252806020026020018201604052801561104457816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816110105790505b5091506000805b600454811015611144576004818154811061106857611068611f12565b600091825260209091206003600490920201015460ff16611132578085838151811061109657611096611f12565b602002602001018181525050600481815481106110b5576110b5611f12565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff1615156060820152845185908490811061111857611118611f12565b6020026020010181905250818061112e90611fd6565b9250505b8061113c81611fd6565b91505061104b565b5050509091565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152600354829081106111995760405162461bcd60e51b815260040161057590611edd565b600383815481106111ac576111ac611f12565b60009182526020918290206040805160a081018252600590930290910180546001600160a01b039081168452600182015416938301939093526002830154908201526003820154606082015260049091015460ff1615156080820152915050919050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190612005565b905090565b60008082116113115760405162461bcd60e51b815260206004820152601460248201527350617953747265616d3a207a65726f207261746560601b6044820152606401610575565b50600480546040805160808101825233808252602080830187815242848601908152600060608601818152600189018a559089905294517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b98880298890180546001600160a01b0319166001600160a01b0390921691909117905590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c880155517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d87015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e909501805460ff191695151595909517909455905184815291929183917f4d168c0d57406651a5fa34927c54a31dfee0e5fffd58fc4a7713827eb5386e43910160405180910390a3919050565b604080516080810182526000808252602082018190529181018290526060810191909152600454821061148c5760405162461bcd60e51b815260040161057590611f51565b6004828154811061149f5761149f611f12565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff161515606082015292915050565b60006114ff8161178a565b6127108211156115495760405162461bcd60e51b815260206004820152601560248201527450617953747265616d3a20746178203e203130302560581b6044820152606401610575565b600280549083905560408051828152602081018590527fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda910160405180910390a1505050565b6000828152602081905260409020600101546115aa8161178a565b6109c08383611aa5565b6000805160206120588339815191526115cc8161178a565b60045482106115ed5760405162461bcd60e51b815260040161057590611f51565b60006004838154811061160257611602611f12565b60009182526020909120600490910201600381015490915060ff161561163a5760405162461bcd60e51b815260040161057590611f92565b60038101805460ff1916600117905560405183907f58995aa2d514aea4da03afdc1eaefba7d487ef5d974be983a686732a264aac3490600090a2505050565b6000805160206120588339815191526116918161178a565b600354829081106116b45760405162461bcd60e51b815260040161057590611edd565b6000600384815481106116c9576116c9611f12565b60009182526020909120600590910201600481015490915060ff16156117315760405162461bcd60e51b815260206004820152601960248201527f50617953747265616d3a20616c726561647920616374697665000000000000006044820152606401610575565b42600382015560048101805460ff1916600117905560405184907fa5667ab2e05e1400eb0f467aa916600d98f5a2a45a69f02eb41da7469c51ce7090600090a250505050565b6000611783828461201e565b9392505050565b6109988133611b10565b6002600154036117b757604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000600382815481106117d3576117d3611f12565b9060005260206000209060050201905060008160030154426117f59190611f3e565b90508060000361180457505050565b6000611814836002015483611777565b9050806000036118245750505050565b42836003018190555060008061183c83600254611b4d565b90925090508115611883576001850154611883906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911684611bc7565b8015611958576118dd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611bf8565b60405163b6b55f2560e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561193f57600080fd5b505af1158015611953573d6000803e3d6000fd5b505050505b600185015460408051848152602081018490526001600160a01b039092169188917f13d23b66b80073e6fb9522c31eac92141f2ba60d122edde49609d5cb9383aae2910160405180910390a3505050505050565b60006119b88383611210565b611a36576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556119ee3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610549565b506000610549565b6040516001600160a01b0384811660248301528381166044830152606482018390526109c09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611c84565b6000611ab18383611210565b15611a36576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610549565b611b1a8282611210565b611b495760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610575565b5050565b600080612710831115611b9b5760405162461bcd60e51b815260206004820152601660248201527553747265616d4d6174683a20746178203e203130302560501b6044820152606401610575565b612710611ba8848661201e565b611bb29190612035565b9050611bbe8185611f3e565b91509250929050565b6040516001600160a01b03838116602483015260448201839052610aaf91859182169063a9059cbb90606401611a73565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611c498482611cf5565b6109c0576040516001600160a01b03848116602483015260006044830152611c7e91869182169063095ea7b390606401611a73565b6109c084825b600080602060008451602086016000885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b156109c057604051635274afe760e01b81526001600160a01b0385166004820152602401610575565b6000806000806020600086516020880160008a5af192503d91506000519050828015611d3a57508115611d2b5780600114611d3a565b6000866001600160a01b03163b115b9695505050505050565b600060208284031215611d5657600080fd5b81356001600160e01b03198116811461178357600080fd5b600060208284031215611d8057600080fd5b5035919050565b80356001600160a01b0381168114611d9e57600080fd5b919050565b60008060408385031215611db657600080fd5b82359150611dc660208401611d87565b90509250929050565b60008060408385031215611de257600080fd5b611deb83611d87565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015611e3257815184529284019290840190600101611e16565b5050508381038285015284518082528583019183019060005b81811015611e9a57611e8783855180516001600160a01b0316825260208082015190830152604080820151908301526060908101511515910152565b9284019260809290920191600101611e4b565b5090979650505050505050565b81516001600160a01b03168152602080830151908201526040808301519082015260608083015115159082015260808101610549565b6020808252818101527f50617953747265616d3a2073747265616d20646f6573206e6f74206578697374604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561054957610549611f28565b60208082526021908201527f50617953747265616d3a207265717565737420646f6573206e6f7420657869736040820152601d60fa1b606082015260800190565b60208082526024908201527f50617953747265616d3a207265717565737420616c72656164792070726f63656040820152631cdcd95960e21b606082015260800190565b600060018201611fe857611fe8611f28565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561201757600080fd5b5051919050565b808202811582820484141761054957610549611f28565b60008261205257634e487b7160e01b600052601260045260246000fd5b50049056fefd70517941c75212b0f9013e45c47a37d6d983c5304288c7af285f2ea40cbba7a2646970667358221220663ee15e2d62b8334015ab7f90e2fed56ad12248528924adfbda071973f7eab464736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806380a1f71211610104578063c58343ef116100a2578063e2ad37b011610071578063e2ad37b01461048a578063f3c6a198146104c9578063fb6a984e146104de578063fc0c546a146104f157600080fd5b8063c58343ef14610431578063c6d69a3014610451578063d547741f14610464578063dfe579db1461047757600080fd5b80639b5655dc116100de5780639b5655dc14610406578063a217fddf1461040e578063ac5a656b14610416578063c0f220841461042957600080fd5b806380a1f7121461037d578063894e9a0d1461039357806391d14854146103f357600080fd5b80633519a2f81161017c57806364d60d911161014b57806364d60d91146103065780636db9241b1461034e578063746ff13d146103615780637a210a2b1461037457600080fd5b80633519a2f8146102c557806336568abe146102d85780633df7fb8c146102eb5780633fad1834146102fe57600080fd5b80631f1b32d4116101b85780631f1b32d41461023b578063248a9ca31461027a5780632e1a7d4d1461029d5780632f2ff15d146102b257600080fd5b806301ffc9a7146101df578063071569fc146102075780631594ae4114610228575b600080fd5b6101f26101ed366004611d44565b610518565b60405190151581526020015b60405180910390f35b61021a610215366004611d6e565b61054f565b6040519081526020016101fe565b61021a610236366004611d6e565b6105e9565b61024e610249366004611d6e565b61083a565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016101fe565b61021a610288366004611d6e565b60009081526020819052604090206001015490565b6102b06102ab366004611d6e565b610881565b005b6102b06102c0366004611da3565b61099b565b6102b06102d3366004611d6e565b6109c6565b6102b06102e6366004611da3565b610a7c565b61021a6102f9366004611dcf565b610ab4565b60045461021a565b610319610314366004611d6e565b610cea565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a0016101fe565b6102b061035c366004611d6e565b610d3a565b6102b061036f366004611d6e565b610e37565b61021a60025481565b610385610f34565b6040516101fe929190611df9565b6103a66103a1366004611d6e565b61114b565b6040516101fe919081516001600160a01b03908116825260208084015190911690820152604080830151908201526060808301519082015260809182015115159181019190915260a00190565b6101f2610401366004611da3565b611210565b61021a611239565b61021a600081565b61021a610424366004611d6e565b6112c9565b60035461021a565b61044461043f366004611d6e565b611447565b6040516101fe9190611ea7565b6102b061045f366004611d6e565b6114f4565b6102b0610472366004611da3565b61158f565b6102b0610485366004611d6e565b6115b4565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101fe565b61021a60008051602061205883398151915281565b6102b06104ec366004611d6e565b611679565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216637965db0b60e01b148061054957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546000908290811061057e5760405162461bcd60e51b815260040161057590611edd565b60405180910390fd5b60006003848154811061059357610593611f12565b60009182526020909120600590910201600481015490915060ff166105bc5760009250506105e3565b60008160030154426105ce9190611f3e565b90506105de826002015482611777565b935050505b50919050565b60006000805160206120588339815191526106038161178a565b60045483106106245760405162461bcd60e51b815260040161057590611f51565b60006004848154811061063957610639611f12565b60009182526020909120600490910201600381015490915060ff16156106715760405162461bcd60e51b815260040161057590611f92565b6003808201805460ff19908116600190811790925582546040805160a08101825233815286546001600160a01b0390811660208301908152888701548385019081524260608501908152608085018981529887018a556000998a529351600587027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549286166001600160a01b031993841617905592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c8401805491861691909216179055517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d82015591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e83015594517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f9091018054911515919094161790925584549151909650911691859187917f722e3b1efc8e1913fd437c5d1f8919afd088bbe6b0f4a9c3f55291aa7949675991a4805460018201546040519081526001600160a01b0390911690339085907f4396d7c3edc1447dac8dd2b7143af95840c926a210524a0d3198012c7fdf37c79060200160405180910390a45050919050565b6004818154811061084a57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919060ff1684565b610889611794565b600354819081106108ac5760405162461bcd60e51b815260040161057590611edd565b6000600383815481106108c1576108c1611f12565b6000918252602090912060059091020160018101549091506001600160a01b031633146109305760405162461bcd60e51b815260206004820152601a60248201527f50617953747265616d3a206e6f7420796f75722073747265616d0000000000006044820152606401610575565b600481015460ff166109845760405162461bcd60e51b815260206004820152601a60248201527f50617953747265616d3a2073747265616d20696e6163746976650000000000006044820152606401610575565b61098d836117be565b505061099860018055565b50565b6000828152602081905260409020600101546109b68161178a565b6109c083836119ac565b50505050565b60008111610a0f5760405162461bcd60e51b815260206004820152601660248201527514185e54dd1c99585b4e881e995c9bc8185b5bdd5b9d60521b6044820152606401610575565b610a446001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611a3e565b60405181815233907f0939f6f4877faf071412e527bc4c6d0bd65ad077e52b57334f7765265647a7f19060200160405180910390a250565b6001600160a01b0381163314610aa55760405163334bd91960e11b815260040160405180910390fd5b610aaf8282611aa5565b505050565b6000600080516020612058833981519152610ace8161178a565b6001600160a01b038416610b245760405162461bcd60e51b815260206004820152601860248201527f50617953747265616d3a207a65726f20656d706c6f79656500000000000000006044820152606401610575565b60008311610b6b5760405162461bcd60e51b815260206004820152601460248201527350617953747265616d3a207a65726f207261746560601b6044820152606401610575565b600380546040805160a081018252338082526001600160a01b03898116602084018181528486018b81524260608701908152600160808801818152908a018b5560009a909a529551600589027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549287166001600160a01b031993841617905592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c840180549190961691161790935591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d83015592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e82015594517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f909501805495151560ff19909616959095179094559051919450919084907f4396d7c3edc1447dac8dd2b7143af95840c926a210524a0d3198012c7fdf37c790610cdb9088815260200190565b60405180910390a45092915050565b60038181548110610cfa57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091909216929060ff1685565b600080516020612058833981519152610d528161178a565b60035482908110610d755760405162461bcd60e51b815260040161057590611edd565b600060038481548110610d8a57610d8a611f12565b60009182526020909120600590910201600481015490915060ff16610df15760405162461bcd60e51b815260206004820152601b60248201527f50617953747265616d3a20616c726561647920696e61637469766500000000006044820152606401610575565b610dfa846117be565b60048101805460ff1916905560405184907f75b8c91e46f219f2164d6bce576e7cebd2d3ff8749726009fcafdf04e2e1eb7b90600090a250505050565b600080516020612058833981519152610e4f8161178a565b60035482908110610e725760405162461bcd60e51b815260040161057590611edd565b600060038481548110610e8757610e87611f12565b60009182526020909120600590910201600481015490915060ff16610eee5760405162461bcd60e51b815260206004820152601960248201527f50617953747265616d3a20616c726561647920706175736564000000000000006044820152606401610575565b610ef7846117be565b60048101805460ff1916905560405184907fc1e14ec692cfc1a89cae539cb884be8d7cc39fd7a129fd73e0d59895fe48d2b890600090a250505050565b6060806000805b600454811015610f935760048181548110610f5857610f58611f12565b600091825260209091206003600490920201015460ff16610f815781610f7d81611fd6565b9250505b80610f8b81611fd6565b915050610f3b565b508067ffffffffffffffff811115610fad57610fad611fef565b604051908082528060200260200182016040528015610fd6578160200160208202803683370190505b5092508067ffffffffffffffff811115610ff257610ff2611fef565b60405190808252806020026020018201604052801561104457816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816110105790505b5091506000805b600454811015611144576004818154811061106857611068611f12565b600091825260209091206003600490920201015460ff16611132578085838151811061109657611096611f12565b602002602001018181525050600481815481106110b5576110b5611f12565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff1615156060820152845185908490811061111857611118611f12565b6020026020010181905250818061112e90611fd6565b9250505b8061113c81611fd6565b91505061104b565b5050509091565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152600354829081106111995760405162461bcd60e51b815260040161057590611edd565b600383815481106111ac576111ac611f12565b60009182526020918290206040805160a081018252600590930290910180546001600160a01b039081168452600182015416938301939093526002830154908201526003820154606082015260049091015460ff1615156080820152915050919050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190612005565b905090565b60008082116113115760405162461bcd60e51b815260206004820152601460248201527350617953747265616d3a207a65726f207261746560601b6044820152606401610575565b50600480546040805160808101825233808252602080830187815242848601908152600060608601818152600189018a559089905294517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b98880298890180546001600160a01b0319166001600160a01b0390921691909117905590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c880155517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d87015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e909501805460ff191695151595909517909455905184815291929183917f4d168c0d57406651a5fa34927c54a31dfee0e5fffd58fc4a7713827eb5386e43910160405180910390a3919050565b604080516080810182526000808252602082018190529181018290526060810191909152600454821061148c5760405162461bcd60e51b815260040161057590611f51565b6004828154811061149f5761149f611f12565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff161515606082015292915050565b60006114ff8161178a565b6127108211156115495760405162461bcd60e51b815260206004820152601560248201527450617953747265616d3a20746178203e203130302560581b6044820152606401610575565b600280549083905560408051828152602081018590527fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda910160405180910390a1505050565b6000828152602081905260409020600101546115aa8161178a565b6109c08383611aa5565b6000805160206120588339815191526115cc8161178a565b60045482106115ed5760405162461bcd60e51b815260040161057590611f51565b60006004838154811061160257611602611f12565b60009182526020909120600490910201600381015490915060ff161561163a5760405162461bcd60e51b815260040161057590611f92565b60038101805460ff1916600117905560405183907f58995aa2d514aea4da03afdc1eaefba7d487ef5d974be983a686732a264aac3490600090a2505050565b6000805160206120588339815191526116918161178a565b600354829081106116b45760405162461bcd60e51b815260040161057590611edd565b6000600384815481106116c9576116c9611f12565b60009182526020909120600590910201600481015490915060ff16156117315760405162461bcd60e51b815260206004820152601960248201527f50617953747265616d3a20616c726561647920616374697665000000000000006044820152606401610575565b42600382015560048101805460ff1916600117905560405184907fa5667ab2e05e1400eb0f467aa916600d98f5a2a45a69f02eb41da7469c51ce7090600090a250505050565b6000611783828461201e565b9392505050565b6109988133611b10565b6002600154036117b757604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000600382815481106117d3576117d3611f12565b9060005260206000209060050201905060008160030154426117f59190611f3e565b90508060000361180457505050565b6000611814836002015483611777565b9050806000036118245750505050565b42836003018190555060008061183c83600254611b4d565b90925090508115611883576001850154611883906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911684611bc7565b8015611958576118dd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611bf8565b60405163b6b55f2560e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561193f57600080fd5b505af1158015611953573d6000803e3d6000fd5b505050505b600185015460408051848152602081018490526001600160a01b039092169188917f13d23b66b80073e6fb9522c31eac92141f2ba60d122edde49609d5cb9383aae2910160405180910390a3505050505050565b60006119b88383611210565b611a36576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556119ee3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610549565b506000610549565b6040516001600160a01b0384811660248301528381166044830152606482018390526109c09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611c84565b6000611ab18383611210565b15611a36576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610549565b611b1a8282611210565b611b495760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610575565b5050565b600080612710831115611b9b5760405162461bcd60e51b815260206004820152601660248201527553747265616d4d6174683a20746178203e203130302560501b6044820152606401610575565b612710611ba8848661201e565b611bb29190612035565b9050611bbe8185611f3e565b91509250929050565b6040516001600160a01b03838116602483015260448201839052610aaf91859182169063a9059cbb90606401611a73565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611c498482611cf5565b6109c0576040516001600160a01b03848116602483015260006044830152611c7e91869182169063095ea7b390606401611a73565b6109c084825b600080602060008451602086016000885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b156109c057604051635274afe760e01b81526001600160a01b0385166004820152602401610575565b6000806000806020600086516020880160008a5af192503d91506000519050828015611d3a57508115611d2b5780600114611d3a565b6000866001600160a01b03163b115b9695505050505050565b600060208284031215611d5657600080fd5b81356001600160e01b03198116811461178357600080fd5b600060208284031215611d8057600080fd5b5035919050565b80356001600160a01b0381168114611d9e57600080fd5b919050565b60008060408385031215611db657600080fd5b82359150611dc660208401611d87565b90509250929050565b60008060408385031215611de257600080fd5b611deb83611d87565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015611e3257815184529284019290840190600101611e16565b5050508381038285015284518082528583019183019060005b81811015611e9a57611e8783855180516001600160a01b0316825260208082015190830152604080820151908301526060908101511515910152565b9284019260809290920191600101611e4b565b5090979650505050505050565b81516001600160a01b03168152602080830151908201526040808301519082015260608083015115159082015260808101610549565b6020808252818101527f50617953747265616d3a2073747265616d20646f6573206e6f74206578697374604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561054957610549611f28565b60208082526021908201527f50617953747265616d3a207265717565737420646f6573206e6f7420657869736040820152601d60fa1b606082015260800190565b60208082526024908201527f50617953747265616d3a207265717565737420616c72656164792070726f63656040820152631cdcd95960e21b606082015260800190565b600060018201611fe857611fe8611f28565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561201757600080fd5b5051919050565b808202811582820484141761054957610549611f28565b60008261205257634e487b7160e01b600052601260045260246000fd5b50049056fefd70517941c75212b0f9013e45c47a37d6d983c5304288c7af285f2ea40cbba7a2646970667358221220663ee15e2d62b8334015ab7f90e2fed56ad12248528924adfbda071973f7eab464736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/Nexus/paystream-main/submission_txs.json b/Nexus/paystream-main/submission_txs.json new file mode 100644 index 000000000..795546f64 --- /dev/null +++ b/Nexus/paystream-main/submission_txs.json @@ -0,0 +1,5 @@ +{ + "fund": "0x304302f35055e42cd8525fe5d2ce8d88481edf8323ccc6253273086a952f58ee", + "createStream": "0xa6beec83a9266ac6d75de47eb8d6a54ead949b6e546a619722dab4dd4e82d46b", + "withdraw": "0x97a390d24068f66eb406ab9ab5eb733e4f9a092c7f6e41240c691728aa98ae4b" +} \ No newline at end of file