* Sync to trunk HEAD (r53473).
[reactos.git] / subsystems / win32 / win32k / ntuser / ntstubs.c
index f916880..d4d3fd1 100644 (file)
@@ -9,8 +9,7 @@
  */
 #include <win32k.h>
 
-#define NDEBUG
-#include <debug.h>
+DBG_DEFAULT_CHANNEL(UserMisc);
 
 DWORD
 APIENTRY
@@ -19,7 +18,7 @@ NtUserAssociateInputContext(
     DWORD dwUnknown2,
     DWORD dwUnknown3)
 {
-    UNIMPLEMENTED
+    STUB
     return 0;
 }
 
@@ -105,7 +104,7 @@ NtUserBuildHimcList(
     DWORD dwUnknown3,
     DWORD dwUnknown4)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -115,7 +114,7 @@ NtUserConvertMemHandle(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -128,7 +127,7 @@ NtUserCreateLocalMemHandle(
    DWORD Unknown2,
    DWORD Unknown3)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -140,7 +139,7 @@ NtUserDdeGetQualityOfService(
    IN HWND hWndServer,
    OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -154,7 +153,7 @@ NtUserDdeInitialize(
    DWORD Unknown3,
    DWORD Unknown4)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -166,7 +165,7 @@ NtUserDdeSetQualityOfService(
    IN  PSECURITY_QUALITY_OF_SERVICE pqosNew,
    OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -181,7 +180,7 @@ NtUserDragObject(
    HCURSOR hc1
 )
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -194,7 +193,7 @@ NtUserDrawAnimatedRects(
    RECT *lprcFrom,
    RECT *lprcTo)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -204,7 +203,7 @@ APIENTRY
 NtUserEvent(
    DWORD Unknown0)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -215,7 +214,7 @@ NtUserExcludeUpdateRgn(
   HDC hDC,
   HWND hWnd)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -230,7 +229,7 @@ NtUserGetAltTabInfo(
    UINT   cchItemText,
    BOOL   Ansi)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -242,7 +241,7 @@ NtUserGetControlBrush(
    HDC  hdc,
    UINT ctlType)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -259,7 +258,7 @@ NtUserGetControlColor(
    HDC hdc,
    UINT CtlMsg) // Wine PaintRect: WM_CTLCOLORMSGBOX + hbrush
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -272,7 +271,7 @@ NtUserGetImeHotKey(
    DWORD Unknown2,
    DWORD Unknown3)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -283,7 +282,7 @@ NtUserImpersonateDdeClientWindow(
    HWND hWndClient,
    HWND hWndServer)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -297,7 +296,7 @@ NtUserInitializeClientPfnArrays(
   HINSTANCE hmodUser)
 {
    NTSTATUS Status = STATUS_SUCCESS;
-   DPRINT("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
+   TRACE("Enter NtUserInitializeClientPfnArrays User32 0x%x\n",hmodUser);
 
    if (ClientPfnInit) return Status;
 
@@ -327,7 +326,7 @@ NtUserInitializeClientPfnArrays(
 
    if (!NT_SUCCESS(Status))
    {
-      DPRINT1("Failed reading Client Pfns from user space.\n");
+      ERR("Failed reading Client Pfns from user space.\n");
       SetLastNtError(Status);
    }
 
@@ -351,7 +350,7 @@ NtUserInitTask(
    DWORD Unknown10,
    DWORD Unknown11)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -360,7 +359,7 @@ BOOL
 APIENTRY
 NtUserLockWorkStation(VOID)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -369,7 +368,7 @@ DWORD
 APIENTRY
 NtUserMNDragLeave(VOID)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -380,7 +379,7 @@ NtUserMNDragOver(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -391,7 +390,7 @@ NtUserModifyUserStartupInfoFlags(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -403,7 +402,7 @@ NtUserNotifyIMEStatus(
    DWORD Unknown1,
    DWORD Unknown2)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -417,7 +416,7 @@ NtUserQueryUserCounters(
    DWORD Unknown3,
    DWORD Unknown4)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -427,7 +426,7 @@ APIENTRY
 NtUserRegisterTasklist(
    DWORD Unknown0)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -438,7 +437,7 @@ NtUserSetConsoleReserveKeys(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -449,7 +448,7 @@ NtUserSetDbgTag(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -463,7 +462,7 @@ NtUserSetImeHotKey(
    DWORD Unknown3,
    DWORD Unknown4)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -475,7 +474,7 @@ NtUserSetRipFlags(
    DWORD Unknown0,
    DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -534,7 +533,7 @@ NtUserUpdateInputContext(
    DWORD Unknown1,
    DWORD Unknown2)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -546,7 +545,7 @@ NtUserUpdateInstance(
    DWORD Unknown1,
    DWORD Unknown2)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -558,7 +557,7 @@ NtUserUserHandleGrantAccess(
    IN HANDLE hJob,
    IN BOOL bGrant)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -568,7 +567,7 @@ APIENTRY
 NtUserWaitForMsgAndEvent(
    DWORD Unknown0)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -583,7 +582,7 @@ NtUserWin32PoolAllocationStats(
    DWORD Unknown4,
    DWORD Unknown5)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -592,7 +591,7 @@ DWORD
 APIENTRY
 NtUserYieldTask(VOID)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -604,7 +603,7 @@ NtUserCheckImeHotKey(
     DWORD dwUnknown1,
     DWORD dwUnknown2)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -615,7 +614,7 @@ NtUserConsoleControl(
     DWORD dwUnknown2,
     DWORD dwUnknown3)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -624,7 +623,7 @@ APIENTRY
 NtUserCreateInputContext(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -633,7 +632,7 @@ APIENTRY
 NtUserDestroyInputContext(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -642,7 +641,7 @@ APIENTRY
 NtUserDisableThreadIme(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -651,7 +650,7 @@ APIENTRY
 NtUserGetAppImeLevel(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -661,7 +660,7 @@ NtUserGetAtomName(
     ATOM nAtom,
     LPWSTR lpBuffer)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -671,7 +670,7 @@ NtUserGetImeInfoEx(
     DWORD dwUnknown1,
     DWORD dwUnknown2)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -682,7 +681,7 @@ NtUserGetRawInputBuffer(
     PUINT pcbSize,
     UINT cbSizeHeader)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -695,7 +694,7 @@ NtUserGetRawInputData(
     PUINT pcbSize,
     UINT cbSizeHeader)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -708,7 +707,7 @@ NtUserGetRawInputDeviceInfo(
     PUINT pcbSize
 )
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -719,7 +718,7 @@ NtUserGetRawInputDeviceList(
     PUINT puiNumDevices,
     UINT cbSize)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -730,7 +729,7 @@ NtUserGetRegisteredRawInputDevices(
     PUINT puiNumDevices,
     UINT cbSize)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -741,58 +740,10 @@ NtUserHardErrorControl(
     DWORD dwUnknown2,
     DWORD dwUnknown3)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
-DWORD
-APIENTRY
-NtUserMinMaximize(
-    HWND hWnd,
-    UINT cmd, // Wine SW_ commands
-    BOOL Hide)
-{
-  RECTL NewPos;
-  UINT SwFlags;
-  PWND pWnd;
-
-  DPRINT("Enter NtUserMinMaximize\n");
-  UserEnterExclusive();
-
-  pWnd = UserGetWindowObject(hWnd);
-  if ( !pWnd ||                          // FIXME:
-        pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP
-        pWnd == IntGetMessageWindow() )  // pWnd->fnid == FNID_MESSAGEWND
-  {
-     goto Exit;
-  }
-
-  if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY)
-  {
-     EngSetLastError(ERROR_INVALID_PARAMETER);
-     goto Exit;
-  }
-
-  co_WinPosMinMaximize(pWnd, cmd, &NewPos);
-
-  SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED;
-
-  co_WinPosSetWindowPos( pWnd,
-                         NULL,
-                         NewPos.left,
-                         NewPos.top,
-                         NewPos.right,
-                         NewPos.bottom,
-                         SwFlags);
-
-  co_WinPosShowWindow(pWnd, cmd);
-
-Exit:
-  DPRINT("Leave NtUserMinMaximize\n");
-  UserLeave();
-  return 0; // Always NULL?
-}
-
 DWORD
 APIENTRY
 NtUserNotifyProcessCreate(
@@ -801,7 +752,7 @@ NtUserNotifyProcessCreate(
     DWORD dwUnknown3,
     DWORD dwUnknown4)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -813,7 +764,7 @@ NtUserProcessConnect(
     DWORD Size)
 {
   NTSTATUS Status = STATUS_SUCCESS;
-  DPRINT("NtUserProcessConnect\n");
+  TRACE("NtUserProcessConnect\n");
   if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
   {
      PPROCESSINFO W32Process;
@@ -851,7 +802,7 @@ NtUserQueryInformationThread(
     DWORD dwUnknown4,
     DWORD dwUnknown5)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -861,7 +812,7 @@ NtUserQueryInputContext(
     DWORD dwUnknown1,
     DWORD dwUnknown2)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -875,7 +826,7 @@ NtUserRealInternalGetMessage(
     UINT wRemoveMsg,
     BOOL bGMSG)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -885,7 +836,7 @@ NtUserRealWaitMessageEx(
     DWORD dwWakeMask,
     UINT uTimeout)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -898,7 +849,7 @@ NtUserRegisterUserApiHook(
     DWORD dwUnknown4)
 {
     UserEnterExclusive();
-    UNIMPLEMENTED;
+    STUB;
     UserLeave();
     return 0;
 }
@@ -910,7 +861,7 @@ NtUserRegisterRawInputDevices(
     IN UINT uiNumDevices,
     IN UINT cbSize)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -922,7 +873,7 @@ NtUserResolveDesktop(
     DWORD dwUnknown3,
     DWORD dwUnknown4)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -932,7 +883,7 @@ NtUserSetAppImeLevel(
     DWORD dwUnknown1,
     DWORD dwUnknown2)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -941,7 +892,7 @@ APIENTRY
 NtUserSetImeInfoEx(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -953,7 +904,7 @@ NtUserSetInformationProcess(
     DWORD dwUnknown3,
     DWORD dwUnknown4)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -967,15 +918,15 @@ NtUserSetInformationThread(IN HANDLE ThreadHandle,
 {
     if (ThreadInformationClass == UserThreadInitiateShutdown)
     {
-        DPRINT1("Shutdown initiated\n");
+        ERR("Shutdown initiated\n");
     }
     else if (ThreadInformationClass == UserThreadEndShutdown)
     {
-        DPRINT1("Shutdown ended\n");
+        ERR("Shutdown ended\n");
     }
     else
     {
-        UNIMPLEMENTED;
+        STUB;
     }
 
     return STATUS_SUCCESS;
@@ -987,7 +938,7 @@ NtUserSetThreadLayoutHandles(
     DWORD dwUnknown1,
     DWORD dwUnknown2)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -995,7 +946,7 @@ BOOL
 APIENTRY
 NtUserSoundSentry(VOID)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1004,7 +955,7 @@ APIENTRY
 NtUserTestForInteractiveUser(
     DWORD dwUnknown1)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1018,7 +969,7 @@ NtUserCalcMenuBar(
     DWORD dwUnknown4,
     DWORD dwUnknown5)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1032,7 +983,7 @@ NtUserPaintMenuBar(
     DWORD dwUnknown5,
     DWORD dwUnknown6)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1040,7 +991,7 @@ BOOL
 APIENTRY
 NtUserUnregisterUserApiHook(VOID)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1052,27 +1003,10 @@ NtUserGetLayeredWindowAttributes(
     BYTE *pbAlpha,
     DWORD *pdwFlags)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
-BOOL
-APIENTRY
-NtUserValidateTimerCallback(
-    HWND hWnd,
-    WPARAM wParam,
-    LPARAM lParam)
-{
-  BOOL Ret = FALSE;
-
-  UserEnterShared();
-
-  Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam);
-
-  UserLeave();
-  return Ret;
-}
-
 DWORD
 APIENTRY
 NtUserRemoteConnect(
@@ -1080,7 +1014,7 @@ NtUserRemoteConnect(
     DWORD dwUnknown2,
     DWORD dwUnknown3)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1092,7 +1026,7 @@ NtUserRemoteRedrawRectangle(
     DWORD dwUnknown3,
     DWORD dwUnknown4)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1100,7 +1034,7 @@ DWORD
 APIENTRY
 NtUserRemoteRedrawScreen(VOID)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1108,7 +1042,7 @@ DWORD
 APIENTRY
 NtUserRemoteStopScreenUpdates(VOID)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1119,7 +1053,7 @@ NtUserCtxDisplayIOCtl(
     DWORD dwUnknown2,
     DWORD dwUnknown3)
 {
-    UNIMPLEMENTED;
+    STUB;
     return 0;
 }
 
@@ -1136,7 +1070,7 @@ NtUserDrawMenuBarTemp(
    HFONT hFont)
 {
    /* we'll use this function just for caching the menu bar */
-   UNIMPLEMENTED
+   STUB
    return 0;
 }
 
@@ -1152,29 +1086,18 @@ NtUserFillWindow(HWND hWndPaint,
                  HDC  hDC,
                  HBRUSH hBrush)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
 
-/*
- * @unimplemented
- */
-BOOL APIENTRY
-NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
-{
-   UNIMPLEMENTED
-
-   return 1;
-}
-
 /*
  * @unimplemented
  */
 BOOL APIENTRY
 NtUserLockWindowUpdate(HWND hWnd)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1187,7 +1110,7 @@ NtUserRealChildWindowFromPoint(HWND Parent,
                                LONG x,
                                LONG y)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1199,7 +1122,7 @@ DWORD APIENTRY
 NtUserSetImeOwnerWindow(DWORD Unknown0,
                         DWORD Unknown1)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1214,7 +1137,7 @@ NtUserSetInternalWindowPos(
    LPRECT  rect,
    LPPOINT pt)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1228,7 +1151,7 @@ NtUserSetLayeredWindowAttributes(HWND hwnd,
                           BYTE bAlpha,
                           DWORD dwFlags)
 {
-  UNIMPLEMENTED;
+  STUB;
   return FALSE;
 }
 
@@ -1249,7 +1172,7 @@ NtUserUpdateLayeredWindow(
    DWORD dwFlags,
    RECT *prcDirty)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1260,7 +1183,7 @@ NtUserUpdateLayeredWindow(
 HWND APIENTRY
 NtUserWindowFromPhysicalPoint(POINT Point)
 {
-   UNIMPLEMENTED
+   STUB
 
    return NULL;
 }
@@ -1275,7 +1198,7 @@ NtUserWindowFromPhysicalPoint(POINT Point)
 DWORD APIENTRY
 NtUserResolveDesktopForWOW(DWORD Unknown0)
 {
-   UNIMPLEMENTED
+   STUB
    return 0;
 }
 
@@ -1285,7 +1208,7 @@ NtUserResolveDesktopForWOW(DWORD Unknown0)
 BOOL APIENTRY
 NtUserEndMenu(VOID)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1303,7 +1226,7 @@ NtUserTrackPopupMenuEx(
    HWND hWnd,
    LPTPMPARAMS lptpm)
 {
-   UNIMPLEMENTED
+   STUB
 
    return FALSE;
 }
@@ -1311,7 +1234,7 @@ NtUserTrackPopupMenuEx(
 DWORD APIENTRY
 NtUserQuerySendMessage(DWORD Unknown0)
 {
-    UNIMPLEMENTED;
+    STUB;
 
     return 0;
 }
@@ -1324,7 +1247,7 @@ NtUserAlterWindowStyle(DWORD Unknown0,
                        DWORD Unknown1,
                        DWORD Unknown2)
 {
-   UNIMPLEMENTED
+   STUB
 
    return(0);
 }
@@ -1343,7 +1266,7 @@ NtUserSetWindowStationUser(
    DWORD Unknown2,
    DWORD Unknown3)
 {
-   UNIMPLEMENTED
+   STUB
 
    return 0;
 }
@@ -1352,7 +1275,7 @@ BOOL APIENTRY NtUserAddClipboardFormatListener(
     HWND hwnd
 )
 {
-    UNIMPLEMENTED;
+    STUB;
     return FALSE;
 }
 
@@ -1360,7 +1283,7 @@ BOOL APIENTRY NtUserRemoveClipboardFormatListener(
     HWND hwnd
 )
 {
-    UNIMPLEMENTED;
+    STUB;
     return FALSE;
 }
 
@@ -1370,7 +1293,7 @@ BOOL APIENTRY NtUserGetUpdatedClipboardFormats(
     PUINT pcFormatsOut
 )
 {
-    UNIMPLEMENTED;
+    STUB;
     return FALSE;
 }
 
@@ -1385,7 +1308,7 @@ NtUserGetCursorFrameInfo(
     DWORD Unknown2,
     DWORD Unknown3)
 {
-    UNIMPLEMENTED
+    STUB
 
     return 0;
 }