```\nfunction _validateAccountPrepayment(uint256 opIndex, UserOperation calldata op, UserOpInfo memory opInfo, uint256 requiredPrefund)\ninternal returns (uint256 gasUsedByValidateAccountPrepayment, uint256 validationData) {\nunchecked {\n    uint256 preGas = gasleft();\n    MemoryUserOp memory mUserOp = opInfo.mUserOp;\n    address sender = mUserOp.sender;\n    _createSenderIfNeeded(opIndex, opInfo, op.initCode);\n    address paymaster = mUserOp.paymaster;\n    numberMarker();\n    uint256 missingAccountFunds = 0;\n    if (paymaster == address(0)) {\n        uint256 bal = balanceOf(sender);\n        missingAccountFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal;\n    }\n    try IAccount(sender).validateUserOp{gas : mUserOp.verificationGasLimit}(op, opInfo.userOpHash, missingAccountFunds)\n    returns (uint256 _validationData) {\n        validationData = _validationData;\n    } catch Error(string memory revertReason) {\n        revert FailedOp(opIndex, string.concat("AA23 reverted: ", revertReason));\n    } catch {\n        revert FailedOp(opIndex, "AA23 reverted (or OOG)");\n    }\n    if (paymaster == address(0)) {\n        DepositInfo storage senderInfo = deposits[sender];\n        uint256 deposit = senderInfo.deposit;\n        if (requiredPrefund > deposit) {\n            revert FailedOp(opIndex, "AA21 didn't pay prefund");\n        }\n        senderInfo.deposit = uint112(deposit - requiredPrefund);\n    }\n    gasUsedByValidateAccountPrepayment = preGas - gasleft();\n}\n}\n```\n