NuMaker emWin HMI

Files at this revision

API Documentation at this revision

Comitter:
csyang2
Date:
Wed Feb 27 14:34:09 2019 +0800
Parent:
0:9d0785906425
Child:
2:fd584a732a41
Commit message:
Add emWin related materials

Changed in this revision

Application/FramewinDLG.cpp Show annotated file Show diff for this revision Revisions of this file
emWin/Config/GUIConf.c Show annotated file Show diff for this revision Revisions of this file
emWin/Config/GUIConf.h Show annotated file Show diff for this revision Revisions of this file
emWin/Config/GUI_X.c Show annotated file Show diff for this revision Revisions of this file
emWin/Config/LCDConf.c Show annotated file Show diff for this revision Revisions of this file
emWin/Config/LCDConf.h Show annotated file Show diff for this revision Revisions of this file
emWin/Doc/AN03002_Custom_Widget_Type.pdf Show annotated file Show diff for this revision Revisions of this file
emWin/Doc/M480 emWin Quick Start Guide.pdf Show annotated file Show diff for this revision Revisions of this file
emWin/Doc/UM_Font_Architect_EN_Rev1.02.pdf Show annotated file Show diff for this revision Revisions of this file
emWin/Doc/UM_Font_Architect_TC_Rev1.02.pdf Show annotated file Show diff for this revision Revisions of this file
emWin/Include/BUTTON.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/BUTTON_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/CALENDAR.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/CHECKBOX.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/CHECKBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/CHOOSECOLOR.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/CHOOSEFILE.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/DIALOG.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/DIALOG_Intern.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/DROPDOWN.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/DROPDOWN_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/EDIT.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/EDIT_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/FRAMEWIN.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/FRAMEWIN_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GRAPH.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GRAPH_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_FlexColor.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_IST3088.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_Lin.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_S1D13748.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_S1D13781.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_S1D15G00.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_SLin.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_SPage.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUIDRV_SSD1926.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_ARRAY.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_ARRAY_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_BMP_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_ConfDefaults.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_Debug.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_FontIntern.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_GCache_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_GIF_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_HOOK.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_JPEG_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_SPRITE_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_SetOrientation.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_SetOrientationCX.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_Type.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_VNC.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI_Version.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI__BiDi2_Brackets_800.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/GUI__BiDi2_Types_800.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/Global.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/HEADER.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/HEADER_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/ICONVIEW.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/ICONVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/IMAGE.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/IMAGE_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/IP_FS.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/KNOB.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/KNOB_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LCD.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LCD_ConfDefaults.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LCD_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LCD_Protected.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LCD_SIM.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTBOX.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTVIEW.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTWHEEL.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/LISTWHEEL_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MENU.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MENU_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MESSAGEBOX.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MULTIEDIT.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MULTIPAGE.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/MULTIPAGE_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/PROGBAR.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/PROGBAR_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/RADIO.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/RADIO_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SCROLLBAR.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SCROLLBAR_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SEGGER.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SLIDER.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SLIDER_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SPINBOX.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SPINBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SWIPELIST.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/SWIPELIST_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/TEXT.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/TEXT_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/TREEVIEW.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/TREEVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/WIDGET.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/WINDOW_Private.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/WM.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/WM_GUI.h Show annotated file Show diff for this revision Revisions of this file
emWin/Include/WM_Intern.h Show annotated file Show diff for this revision Revisions of this file
emWin/Lib/TOOLCHAIN_ARM/NUemWin_CM4_Keil.ar Show annotated file Show diff for this revision Revisions of this file
emWin/Lib/TOOLCHAIN_GCC/libNUemWin_CM4_GNU.a Show annotated file Show diff for this revision Revisions of this file
emWin/Tool/BmpCvtNuvoton.exe Show annotated file Show diff for this revision Revisions of this file
emWin/Tool/FontArchitect.exe Show annotated file Show diff for this revision Revisions of this file
emWin/Tool/GUIBuilder.exe Show annotated file Show diff for this revision Revisions of this file
emWin/Tool/JPEG2Movie.exe Show annotated file Show diff for this revision Revisions of this file
emWin/Tool/emWinPlayer.exe Show annotated file Show diff for this revision Revisions of this file
tslib/M48XTouchPanel.c Show annotated file Show diff for this revision Revisions of this file
tslib/M48XTouchPanel.h Show annotated file Show diff for this revision Revisions of this file
tslib/fbutils.c Show annotated file Show diff for this revision Revisions of this file
tslib/fbutils.h Show annotated file Show diff for this revision Revisions of this file
tslib/testutils.c Show annotated file Show diff for this revision Revisions of this file
tslib/testutils.h Show annotated file Show diff for this revision Revisions of this file
tslib/ts_calibrate.c Show annotated file Show diff for this revision Revisions of this file
tslib/tslib-filter.h Show annotated file Show diff for this revision Revisions of this file
tslib/tslib-private.h Show annotated file Show diff for this revision Revisions of this file
tslib/tslib.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Application/FramewinDLG.cpp	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,249 @@
+/*********************************************************************
+*                                                                    *
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+*                                                                    *
+**********************************************************************
+*                                                                    *
+* C-file generated by:                                               *
+*                                                                    *
+*        GUI_Builder for emWin version 5.46                          *
+*        Compiled Dec 12 2017, 16:38:40                              *
+*        (c) 2017 Segger Microcontroller GmbH & Co. KG               *
+*                                                                    *
+**********************************************************************
+*                                                                    *
+*        Internet: www.segger.com  Support: support@segger.com       *
+*                                                                    *
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional includes)
+// USER END
+#include "stdio.h"
+#include "DIALOG.h"
+
+#include "M480.h"
+/* Scheduler include files. */
+//#include "FreeRTOS.h"
+//#include "task.h"
+//#include "semphr.h"
+
+//extern xSemaphoreHandle psGUISemaphore;
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define ID_FRAMEWIN_0  (GUI_ID_USER + 0x00)
+#define ID_BUTTON_0  (GUI_ID_USER + 0x05)
+#define ID_BUTTON_1  (GUI_ID_USER + 0x06)
+#define ID_BUTTON_2  (GUI_ID_USER + 0x07)
+#define ID_BUTTON_3  (GUI_ID_USER + 0x08)
+#define ID_EDIT_0  (GUI_ID_USER + 0x09)
+#define ID_TEXT_0  (GUI_ID_USER + 0x0B)
+
+
+// USER START (Optionally insert additional defines)
+// USER END
+
+/*********************************************************************
+*
+*       Static data
+*
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional static data)
+// USER END
+
+/*********************************************************************
+*
+*       _aDialogCreate
+*/
+static const GUI_WIDGET_CREATE_INFO _aDialogCreate[7] =
+{
+    { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x0  },
+    { BUTTON_CreateIndirect, "+ 1", ID_BUTTON_0, 43, 38, 80, 20, 0, 0x0  },
+    { BUTTON_CreateIndirect, "+ 10", ID_BUTTON_1, 43, 77, 80, 20, 0, 0x0 },
+    { BUTTON_CreateIndirect, "- 1", ID_BUTTON_2, 45, 116, 80, 20, 0, 0x0 },
+    { BUTTON_CreateIndirect, "- 10", ID_BUTTON_3, 46, 158, 80, 20, 0, 0x0 },
+    { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 204, 72, 80, 20, 0, 0x64 },
+    { TEXT_CreateIndirect, "Result :", ID_TEXT_0, 151, 74, 50, 20, 0, 0x0 },
+    // USER START (Optionally insert additional widgets)
+    // USER END
+};
+
+/*********************************************************************
+*
+*       Static code
+*
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional static code)
+// USER END
+
+int value;
+char sBuf[20];
+/*********************************************************************
+*
+*       _cbDialog
+*/
+static void _cbDialog(WM_MESSAGE * pMsg)
+{
+    WM_HWIN hItem;
+    int     NCode;
+    int     Id;
+    // USER START (Optionally insert additional variables)
+    // USER END
+
+    switch (pMsg->MsgId)
+    {
+    case WM_INIT_DIALOG:
+        //
+        // Initialization of 'Edit'
+        //
+        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+        EDIT_SetText(hItem, "123");
+        value = 123;
+        // USER START (Optionally insert additional code for further widget initialization)
+        // USER END
+        break;
+    case WM_NOTIFY_PARENT:
+        Id    = WM_GetId(pMsg->hWinSrc);
+        NCode = pMsg->Data.v;
+        switch(Id)
+        {
+        case ID_BUTTON_0: // Notifications sent by '+ 1'
+            switch(NCode)
+            {
+            case WM_NOTIFICATION_CLICKED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                value += 1;
+                sprintf(sBuf,"%d    ", value);
+                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+                EDIT_SetText(hItem, sBuf);
+                break;
+            case WM_NOTIFICATION_RELEASED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+                // USER START (Optionally insert additional code for further notification handling)
+                // USER END
+            }
+            break;
+        case ID_BUTTON_1: // Notifications sent by '+ 10'
+            switch(NCode)
+            {
+            case WM_NOTIFICATION_CLICKED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                value += 10;
+                sprintf(sBuf,"%d    ", value);
+                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+                EDIT_SetText(hItem, sBuf);
+                break;
+            case WM_NOTIFICATION_RELEASED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+                // USER START (Optionally insert additional code for further notification handling)
+                // USER END
+            }
+            break;
+        case ID_BUTTON_2: // Notifications sent by '- 1'
+            switch(NCode)
+            {
+            case WM_NOTIFICATION_CLICKED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                value -= 1;
+                sprintf(sBuf,"%d    ", value);
+                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+                EDIT_SetText(hItem, sBuf);
+                break;
+            case WM_NOTIFICATION_RELEASED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+                // USER START (Optionally insert additional code for further notification handling)
+                // USER END
+            }
+            break;
+        case ID_BUTTON_3: // Notifications sent by '- 10'
+            switch(NCode)
+            {
+            case WM_NOTIFICATION_CLICKED:
+                // USER START (Optionally insert code for reacting on notification message)
+                value -= 10;
+                sprintf(sBuf,"%d    ", value);
+                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+                EDIT_SetText(hItem, sBuf);
+                // USER END
+                break;
+            case WM_NOTIFICATION_RELEASED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+                // USER START (Optionally insert additional code for further notification handling)
+                // USER END
+            }
+            break;
+        case ID_EDIT_0: // Notifications sent by 'Edit'
+            switch(NCode)
+            {
+            case WM_NOTIFICATION_CLICKED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+            case WM_NOTIFICATION_RELEASED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+            case WM_NOTIFICATION_VALUE_CHANGED:
+                // USER START (Optionally insert code for reacting on notification message)
+                // USER END
+                break;
+                // USER START (Optionally insert additional code for further notification handling)
+                // USER END
+            }
+            break;
+            // USER START (Optionally insert additional code for further Ids)
+            // USER END
+        }
+        break;
+    // USER START (Optionally insert additional message handling)
+    // USER END
+    default:
+        WM_DefaultProc(pMsg);
+        //  xSemaphoreTake(psGUISemaphore, 10/portTICK_RATE_MS);
+        break;
+    }
+}
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       CreateFramewin
+*/
+WM_HWIN CreateFramewin(void);
+WM_HWIN CreateFramewin(void)
+{
+    WM_HWIN hWin;
+
+    hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
+    return hWin;
+}
+
+// USER START (Optionally insert additional public code)
+// USER END
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/GUIConf.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,86 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIConf.c
+Purpose     : Display controller initialization
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Define the available number of bytes available for the GUI
+//
+#define GUI_NUMBYTES  10*1024
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       GUI_X_Config
+*
+* Purpose:
+*   Called during the initialization process in order to set up the
+*   available memory for the GUI.
+*/
+void GUI_X_Config(void) {
+  //
+  // 32 bit aligned memory area
+  //
+  static U32 aMemory[GUI_NUMBYTES / 4];
+  //
+  // Assign memory to emWin
+  //
+  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
+  //
+  // Set default font
+  //
+  GUI_SetDefaultFont(GUI_FONT_6X8);
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/GUIConf.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,82 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIConf.h
+Purpose     : Configures emWins abilities, fonts etc.
+----------------------------------------------------------------------
+*/
+
+#ifndef GUICONF_H
+#define GUICONF_H
+
+/*********************************************************************
+*
+*       Multi layer/display support
+*/
+#define GUI_NUM_LAYERS            1    // Maximum number of available layers
+
+/*********************************************************************
+*
+*       Multi tasking support
+*/
+#define GUI_OS                    (0)  // Compile with multitasking support
+
+/*********************************************************************
+*
+*       Configuration of touch support
+*/
+#define GUI_SUPPORT_TOUCH         (1)  // Support a touch screen (req. win-manager)
+
+/*********************************************************************
+*
+*       Default font
+*/
+#define GUI_DEFAULT_FONT          &GUI_Font6x8
+
+/*********************************************************************
+*
+*         Configuration of available packages
+*/
+#define GUI_SUPPORT_MOUSE    0    // Mouse support
+#define GUI_WINSUPPORT       1    // Use Window Manager
+#define GUI_SUPPORT_MEMDEV   1    // Use Memory Devices
+#define GUI_SUPPORT_DEVICES  1    // Enable use of device pointers
+
+#endif  // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/GUI_X.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,150 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_X.C
+Purpose     : Config / System dependent externals for GUI
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI.h"
+
+/*********************************************************************
+*
+*       Global data
+*/
+volatile GUI_TIMER_TIME OS_TimeMS;
+
+/*********************************************************************
+*
+*      Timing:
+*                 GUI_X_GetTime()
+*                 GUI_X_Delay(int)
+
+  Some timing dependent routines require a GetTime
+  and delay function. Default time unit (tick), normally is
+  1 ms.
+*/
+
+GUI_TIMER_TIME GUI_X_GetTime(void) { 
+  return OS_TimeMS; 
+}
+
+void GUI_X_Delay(int ms) { 
+  int tEnd = OS_TimeMS + ms;
+  while ((tEnd - OS_TimeMS) > 0);
+}
+
+/*********************************************************************
+*
+*       GUI_X_Init()
+*
+* Note:
+*     GUI_X_Init() is called from GUI_Init is a possibility to init
+*     some hardware which needs to be up and running before the GUI.
+*     If not required, leave this routine blank.
+*/
+
+void GUI_X_Init(void) {}
+
+
+/*********************************************************************
+*
+*       GUI_X_ExecIdle
+*
+* Note:
+*  Called if WM is in idle state
+*/
+
+void GUI_X_ExecIdle(void) {}
+
+/*********************************************************************
+*
+*      Logging: OS dependent
+
+Note:
+  Logging is used in higher debug levels only. The typical target
+  build does not use logging and does therefor not require any of
+  the logging routines below. For a release build without logging
+  the routines below may be eliminated to save some space.
+  (If the linker is not function aware and eliminates unreferenced
+  functions automatically)
+
+*/
+
+void GUI_X_Log     (const char *s) { GUI_USE_PARA(s); }
+void GUI_X_Warn    (const char *s) { GUI_USE_PARA(s); }
+void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
+
+/*********************************************************************
+*
+*      Multitasking:
+*
+*                 GUI_X_InitOS()
+*                 GUI_X_GetTaskId()
+*                 GUI_X_Lock()
+*                 GUI_X_Unlock()
+*
+* Note:
+*   The following routines are required only if emWin is used in a
+*   true multi task environment, which means you have more than one
+*   thread using the emWin API.
+*   In this case the
+*                       #define GUI_OS 1
+*  needs to be in GUIConf.h
+*/
+
+void GUI_X_InitOS(void)    {  }
+void GUI_X_Unlock(void)    {  }
+void GUI_X_Lock(void)      {  }
+U32  GUI_X_GetTaskId(void) { return 1; }
+
+
+/*********************************************************************
+*
+*      Event driving (optional with multitasking)
+*
+*                 GUI_X_WaitEvent()
+*                 GUI_X_WaitEventTimed()
+*                 GUI_X_SignalEvent()
+*/
+
+void GUI_X_WaitEvent(void)            {  }
+void GUI_X_SignalEvent(void)          {  }
+void GUI_X_WaitEventTimed(int Period) {  }
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/LCDConf.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,618 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCDConf.c
+Purpose     : Display controller configuration (single layer)
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include <stddef.h>
+#include <stdio.h>
+
+#include "GUI.h"
+#include "GUIDRV_FlexColor.h"
+
+#include "M480.h"
+
+#include "M48XTouchPanel.h"
+
+/*********************************************************************
+*
+*       Layer configuration
+*
+**********************************************************************
+*/
+//
+// Physical display size
+//
+#define XSIZE_PHYS 240
+#define YSIZE_PHYS 320
+
+//
+// Color conversion
+//
+#define COLOR_CONVERSION GUICC_565
+
+//
+// Display driver
+//
+#define DISPLAY_DRIVER GUIDRV_FLEXCOLOR
+
+//
+// Orientation
+//
+#define DISPLAY_ORIENTATION (0)
+
+//
+// Hardware related
+//
+/* LCD Module "RS" */
+#define PH_CTRL_RS  1
+#if PH_CTRL_RS
+#define SET_RS  PH3 = 1;
+#define CLR_RS  PH3 = 0;
+#endif
+
+/* LCD Module "RESET" */
+#define SET_RST PB6 = 1;
+#define CLR_RST PB6 = 0;
+
+/*********************************************************************
+*
+*       Configuration checking
+*
+**********************************************************************
+*/
+#ifndef   VXSIZE_PHYS
+#define VXSIZE_PHYS XSIZE_PHYS
+#endif
+#ifndef   VYSIZE_PHYS
+#define VYSIZE_PHYS YSIZE_PHYS
+#endif
+#ifndef   XSIZE_PHYS
+#error Physical X size of display is not defined!
+#endif
+#ifndef   YSIZE_PHYS
+#error Physical Y size of display is not defined!
+#endif
+#ifndef   COLOR_CONVERSION
+#error Color conversion not defined!
+#endif
+#ifndef   DISPLAY_DRIVER
+#error No display driver defined!
+#endif
+#ifndef   DISPLAY_ORIENTATION
+#define DISPLAY_ORIENTATION 0
+#endif
+
+/*********************************************************************
+*
+*       Static code
+*
+**********************************************************************/
+/*-----------------------------------------------*/
+// Write control registers of LCD module  
+// 
+/*-----------------------------------------------*/
+#if PH_CTRL_RS
+void LCD_WR_REG(uint16_t cmd)
+{
+    CLR_RS
+    EBI0_WRITE_DATA16(0x00000000, cmd);
+    SET_RS
+
+}
+
+#else
+void LCD_WR_REG(uint16_t cmd)
+{
+    EBI0_WRITE_DATA16(0x00000000, cmd);
+}
+
+#endif
+
+
+/*-----------------------------------------------*/
+// Write data to SRAM of LCD module  
+// 
+/*-----------------------------------------------*/
+void LCD_WR_DATA(uint16_t dat)
+{
+    EBI0_WRITE_DATA16(0x00030000, dat);
+
+}
+
+
+/*-----------------------------------------------*/
+// Read data from SRAM of LCD module 
+// 
+/*-----------------------------------------------*/
+uint16_t LCD_RD_DATA(void)
+{
+    return EBI0_READ_DATA16(0x00030000);
+
+}
+
+/********************************************************************
+*
+*       LcdWriteDataMultiple
+*
+*   Function description:
+*   Writes multiple values to a display register.
+*/
+static void LcdWriteDataMultiple(uint16_t * pData, int NumItems)
+{
+    while (NumItems--) {
+        EBI0_WRITE_DATA16(0x00030000,*pData++);
+    }
+}
+
+/********************************************************************
+*
+*       LcdReadDataMultiple
+*
+*   Function description:
+*   Reads multiple values from a display register.
+*/
+static void LcdReadDataMultiple(uint16_t * pData, int NumItems)
+{
+    while (NumItems--) {
+        *pData++ = EBI0_READ_DATA16(0x00030000);
+    }
+}
+
+/*-----------------------------------------------*/
+// Set cursor positon on the LCD screen 
+// 
+/*-----------------------------------------------*/
+#if 0
+void LCD_SetCursor(uint16_t x_s, uint16_t y_s)
+{ 
+    uint16_t x_e = x_s+1;
+    uint16_t y_e = y_s+1;
+        
+    /* X range */
+    LCD_WR_REG(0x2A);
+    LCD_WR_DATA(x_s>>8);
+    LCD_WR_DATA(x_s);
+    LCD_WR_DATA(x_e>>8);
+    LCD_WR_DATA(x_e);
+
+    /* Y range */
+    LCD_WR_REG(0x2B);
+    LCD_WR_DATA(y_s>>8);
+    LCD_WR_DATA(y_s);
+    LCD_WR_DATA(y_e>>8);
+    LCD_WR_DATA(y_e);
+        
+    /* Memory write */
+    LCD_WR_REG(0x2C);
+    
+}
+#endif
+
+/*-----------------------------------------------*/
+// Initial LIL9341 LCD driver chip 
+// 
+/*-----------------------------------------------*/
+void ILI9341_Initial(void)
+{
+    uint16_t Reg = 0;
+    
+    /* Hardware reset */
+    SET_RST;
+    GUI_X_Delay(5);    // Delay 5ms
+    
+    CLR_RST;
+    GUI_X_Delay(20);    // Delay 20ms
+    
+    SET_RST;
+    GUI_X_Delay(40);    // Delay 40ms
+
+    /* Initial control registers */
+    LCD_WR_REG(0xCB);
+    LCD_WR_DATA(0x39);
+    LCD_WR_DATA(0x2C);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0x34);
+    LCD_WR_DATA(0x02);
+
+    LCD_WR_REG(0xCF);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0xC1);
+    LCD_WR_DATA(0x30);
+
+    LCD_WR_REG(0xE8);
+    LCD_WR_DATA(0x85);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0x78);
+
+    LCD_WR_REG(0xEA);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0x00);
+
+    LCD_WR_REG(0xED);
+    LCD_WR_DATA(0x64);
+    LCD_WR_DATA(0x03);
+    LCD_WR_DATA(0x12);
+    LCD_WR_DATA(0x81);
+
+    LCD_WR_REG(0xF7);
+    LCD_WR_DATA(0x20);
+
+    LCD_WR_REG(0xC0);
+    LCD_WR_DATA(0x23);
+
+    LCD_WR_REG(0xC1);
+    LCD_WR_DATA(0x10);
+
+    LCD_WR_REG(0xC5);
+    LCD_WR_DATA(0x3e);
+    LCD_WR_DATA(0x28);
+
+    LCD_WR_REG(0xC7);
+    LCD_WR_DATA(0x86);
+
+    LCD_WR_REG(0x36);
+    LCD_WR_DATA(0x48);
+
+    LCD_WR_REG(0x3A);
+    LCD_WR_DATA(0x55);
+        
+    LCD_WR_REG(0xB1);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0x18);
+
+    LCD_WR_REG(0xB6);
+    LCD_WR_DATA(0x08);
+    LCD_WR_DATA(0x82);
+    LCD_WR_DATA(0x27);
+
+    LCD_WR_REG(0xF2);
+    LCD_WR_DATA(0x00);
+
+    LCD_WR_REG(0x26);
+    LCD_WR_DATA(0x01);
+
+    LCD_WR_REG(0xE0);
+    LCD_WR_DATA(0x0F);
+    LCD_WR_DATA(0x31);
+    LCD_WR_DATA(0x2B);
+    LCD_WR_DATA(0x0C);
+    LCD_WR_DATA(0x0E);
+    LCD_WR_DATA(0x08);
+    LCD_WR_DATA(0x4E);
+    LCD_WR_DATA(0xF1);
+    LCD_WR_DATA(0x37);
+    LCD_WR_DATA(0x07);
+    LCD_WR_DATA(0x10);
+    LCD_WR_DATA(0x03);
+    LCD_WR_DATA(0x0E);
+    LCD_WR_DATA(0x09);
+    LCD_WR_DATA(0x00);
+
+    LCD_WR_REG(0xE1);
+    LCD_WR_DATA(0x00);
+    LCD_WR_DATA(0x0E);
+    LCD_WR_DATA(0x14);
+    LCD_WR_DATA(0x03);
+    LCD_WR_DATA(0x11);
+    LCD_WR_DATA(0x07);
+    LCD_WR_DATA(0x31);
+    LCD_WR_DATA(0xC1);
+    LCD_WR_DATA(0x48);
+    LCD_WR_DATA(0x08);
+    LCD_WR_DATA(0x0F);
+    LCD_WR_DATA(0x0C);
+    LCD_WR_DATA(0x31);
+    LCD_WR_DATA(0x36);
+    LCD_WR_DATA(0x0F);
+
+    LCD_WR_REG(0x11);
+    GUI_X_Delay(200);    // Delay 200ms
+    
+    LCD_WR_REG(0x29);           //Display on
+
+    LCD_WR_REG(0x0A);
+    Reg = LCD_RD_DATA();
+    Reg = LCD_RD_DATA();
+    printf("0Ah = %02x.\n", Reg);
+    
+    LCD_WR_REG(0x0B);
+    Reg = LCD_RD_DATA();
+    Reg = LCD_RD_DATA();
+    printf("0Bh = %02x.\n", Reg);
+    
+    LCD_WR_REG(0x0C);
+    Reg = LCD_RD_DATA();
+    Reg = LCD_RD_DATA();
+    printf("0Ch = %02x.\n", Reg);
+
+    printf("Initial ILI9341 LCD Module done.\n\n");
+
+}
+
+//void I2C2_Init(void)
+//{
+    /* Open I2C2 and set clock to 100k */
+    //I2C_Open(I2C2, 100000);
+//}
+
+//void EINT7_IRQHandler(void)
+//{
+//    /* To check if PB.9 external interrupt occurred */
+//    if(GPIO_GET_INT_FLAG(PB, BIT9)) {
+//        GPIO_CLR_INT_FLAG(PB, BIT9);
+//        printf("PB.9 EINT7 occurred.\n");
+//    }
+
+//}
+
+
+void EBI_FuncPinInit(void)
+{
+/*=== EBI (LCD module) mult-function pins ===*/ 	
+    /* EBI AD0~5 pins on PG.9~14 */
+    SYS->GPG_MFPH &= ~(SYS_GPG_MFPH_PG9MFP_Msk  | SYS_GPG_MFPH_PG10MFP_Msk |
+                       SYS_GPG_MFPH_PG11MFP_Msk | SYS_GPG_MFPH_PG12MFP_Msk |
+                       SYS_GPG_MFPH_PG13MFP_Msk | SYS_GPG_MFPH_PG14MFP_Msk);
+    SYS->GPG_MFPH |= (SYS_GPG_MFPH_PG9MFP_EBI_AD0  | SYS_GPG_MFPH_PG10MFP_EBI_AD1 |
+                      SYS_GPG_MFPH_PG11MFP_EBI_AD2 | SYS_GPG_MFPH_PG12MFP_EBI_AD3 |
+                      SYS_GPG_MFPH_PG13MFP_EBI_AD4 | SYS_GPG_MFPH_PG14MFP_EBI_AD5);
+
+    /* EBI AD6, AD7 pins on PD.8, PD.9 */
+    SYS->GPD_MFPH &= ~(SYS_GPD_MFPH_PD8MFP_Msk | SYS_GPD_MFPH_PD9MFP_Msk);
+    SYS->GPD_MFPH |= (SYS_GPD_MFPH_PD8MFP_EBI_AD6 | SYS_GPD_MFPH_PD9MFP_EBI_AD7);
+
+    /* EBI AD8, AD9 pins on PE.14, PE.15 */
+    SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE14MFP_Msk | SYS_GPE_MFPH_PE15MFP_Msk);
+    SYS->GPE_MFPH |= (SYS_GPE_MFPH_PE14MFP_EBI_AD8 | SYS_GPE_MFPH_PE15MFP_EBI_AD9);
+
+    /* EBI AD10, AD11 pins on PE.1, PE.0 */
+    SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE1MFP_Msk | SYS_GPE_MFPL_PE0MFP_Msk);
+    SYS->GPE_MFPL |= (SYS_GPE_MFPL_PE1MFP_EBI_AD10 | SYS_GPE_MFPL_PE0MFP_EBI_AD11);
+
+    /* EBI AD12~15 pins on PH.8~11 */
+    SYS->GPH_MFPH &= ~(SYS_GPH_MFPH_PH8MFP_Msk  | SYS_GPH_MFPH_PH9MFP_Msk |
+    SYS_GPH_MFPH_PH10MFP_Msk | SYS_GPH_MFPH_PH11MFP_Msk);
+    SYS->GPH_MFPH |= (SYS_GPH_MFPH_PH8MFP_EBI_AD12  | SYS_GPH_MFPH_PH9MFP_EBI_AD13 |
+                      SYS_GPH_MFPH_PH10MFP_EBI_AD14 | SYS_GPH_MFPH_PH11MFP_EBI_AD15);
+
+    /* Configure PH.3 as Output mode for LCD_RS (use GPIO PH.3 to control LCD_RS) */
+    GPIO_SetMode(PH, BIT3, GPIO_MODE_OUTPUT);
+    PH3 = 1;
+
+    /* EBI RD and WR pins on PE.4 and PE.5 */
+    SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE4MFP_Msk | SYS_GPE_MFPL_PE5MFP_Msk);
+    SYS->GPE_MFPL |= (SYS_GPE_MFPL_PE4MFP_EBI_nWR | SYS_GPE_MFPL_PE5MFP_EBI_nRD);
+
+    /* EBI CS0 pin on PD.14 */
+    SYS->GPD_MFPH &= ~SYS_GPD_MFPH_PD14MFP_Msk;
+    SYS->GPD_MFPH |= SYS_GPD_MFPH_PD14MFP_EBI_nCS0;
+
+    /* Configure PB.6 and PB.7 as Output mode for LCD_RST and LCD_Backlight */
+    GPIO_SetMode(PB, BIT6, GPIO_MODE_OUTPUT);
+    GPIO_SetMode(PB, BIT7, GPIO_MODE_OUTPUT);
+    PB6 = 1;
+    PB7 = 0;
+    
+    //GPIO_SetMode(PH, BIT5, GPIO_MODE_INPUT);
+    //GPIO_SetMode(PH, BIT6, GPIO_MODE_INPUT);
+    //GPIO_SetMode(PH, BIT7, GPIO_MODE_INPUT);
+
+}
+
+/*********************************************************************
+*
+*       _InitController
+*
+* Purpose:
+*   Initializes the display controller
+*/
+static void _InitController(void)
+{
+    static uint8_t s_InitOnce = 0;
+
+    if (s_InitOnce == 0)
+        s_InitOnce = 1;
+    else
+        return;
+
+    CLK_EnableModuleClock(EBI_MODULE);
+
+    /* Configure DC/RESET/LED pins */
+    EBI_FuncPinInit();
+
+    /* Initialize EBI bank0 to access external LCD Module */
+    EBI_Open(EBI_BANK0, EBI_BUSWIDTH_16BIT, EBI_TIMING_NORMAL, 0, EBI_CS_ACTIVE_LOW);
+    EBI->CTL0 |= EBI_CTL0_CACCESS_Msk;
+    EBI->TCTL0 |= (EBI_TCTL0_WAHDOFF_Msk | EBI_TCTL0_RAHDOFF_Msk);
+    printf("\n[EBI CTL0:0x%08X, TCLT0:0x%08X]\n\n", EBI->CTL0, EBI->TCTL0);
+
+    /* Init LCD Module */
+    ILI9341_Initial();
+    
+    /* PB.7 BL_CTRL pin */
+    PB7 = 1;
+
+    /* Init I2C2 to TP of LCD module */
+    //I2C2_Init();
+
+//		/* Configure PB.9 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
+//    GPIO_SetMode(PB, BIT9, GPIO_MODE_QUASI);
+//    GPIO_EnableInt(PB, 9, GPIO_INT_FALLING);
+//    NVIC_EnableIRQ(EINT7_IRQn);
+}
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+#if GUI_SUPPORT_TOUCH
+extern int ts_phy2log(int *sumx, int *sumy);
+
+void GUI_TOUCH_X_ActivateX(void) {
+}
+
+void GUI_TOUCH_X_ActivateY(void) {
+}
+
+
+ 
+int  GUI_TOUCH_X_MeasureX(void) {
+  int sumx;
+  int sumy;
+	if (Read_TouchPanel(&sumx, &sumy))
+	{
+//		sysprintf("X = %d\n", sumx);
+		ts_phy2log(&sumx, &sumy);		
+    return sumx;
+	}
+	return -1;
+}
+
+int  GUI_TOUCH_X_MeasureY(void) {
+  int sumx;
+  int sumy;
+	if ( Read_TouchPanel(&sumx, &sumy) )
+	{
+//		sysprintf("Y = %d\n", sumy);
+		ts_phy2log(&sumx, &sumy);				
+    return sumy;
+	}
+	return -1;
+}
+#endif
+/*********************************************************************
+*
+*       LCD_X_Config
+*
+* Purpose:
+*   Called during the initialization process in order to set up the
+*   display driver configuration.
+*
+*/
+void LCD_X_Config(void)
+{
+    GUI_DEVICE * pDevice;
+    CONFIG_FLEXCOLOR Config = {0};
+    GUI_PORT_API PortAPI = {0};
+    //
+    // Set display driver and color conversion
+    //
+    pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
+
+    //
+    // Display driver configuration
+    //
+    LCD_SetSizeEx (0, XSIZE_PHYS,   YSIZE_PHYS);
+    LCD_SetVSizeEx(0, VXSIZE_PHYS,  VYSIZE_PHYS);
+    //
+    // Orientation
+    //
+    Config.Orientation = GUI_MIRROR_X | GUI_MIRROR_Y | GUI_SWAP_XY;
+    GUIDRV_FlexColor_Config(pDevice, &Config);
+    //
+    // Set controller and operation mode
+    //
+    PortAPI.pfWrite16_A0  = LCD_WR_REG;
+    PortAPI.pfWrite16_A1  = LCD_WR_DATA;
+    PortAPI.pfWriteM16_A0 = LcdWriteDataMultiple;
+    PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
+    PortAPI.pfRead16_A0   = LCD_RD_DATA;
+    PortAPI.pfRead16_A1   = LCD_RD_DATA;
+    PortAPI.pfReadM16_A0  = LcdReadDataMultiple;
+    PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
+    GUIDRV_FlexColor_SetReadFunc66709_B16(pDevice, GUIDRV_FLEXCOLOR_READ_FUNC_III);
+    GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);
+
+#if GUI_SUPPORT_TOUCH
+// LCD calibration
+//
+// Calibrate touch screen
+//
+    GUI_TOUCH_Calibrate(GUI_COORD_X, 0, (__DEMO_TS_WIDTH__ - 1), 0, (__DEMO_TS_WIDTH__ - 1));
+    GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, (__DEMO_TS_HEIGHT__-  1), 0, (__DEMO_TS_HEIGHT__-  1));
+#endif
+}
+/*********************************************************************
+*
+*       LCD_X_DisplayDriver
+*
+* Purpose:
+*   This function is called by the display driver for several purposes.
+*   To support the according task the routine needs to be adapted to
+*   the display controller. Please note that the commands marked with
+*   'optional' are not cogently required and should only be adapted if
+*   the display controller supports these features.
+*
+* Parameter:
+*   LayerIndex - Index of layer to be configured
+*   Cmd        - Please refer to the details in the switch statement below
+*   pData      - Pointer to a LCD_X_DATA structure
+*/
+int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
+{
+    int r;
+
+    GUI_USE_PARA(LayerIndex);
+    GUI_USE_PARA(pData);
+    switch (Cmd) {
+        //
+        // Required
+        //
+    case LCD_X_INITCONTROLLER: {
+        //
+        // Called during the initialization process in order to set up the
+        // display controller and put it into operation. If the display
+        // controller is not initialized by any external routine this needs
+        // to be adapted by the customer...
+        //
+        _InitController();
+            //printf("\n************ _InitController \n\n");
+        return 0;
+    }
+    default:
+        r = -1;
+    }
+    return r;
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/LCDConf.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,49 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCDConf.h
+Purpose     : Display driver configuration file
+----------------------------------------------------------------------
+*/
+
+#ifndef LCDCONF_H
+#define LCDCONF_H
+
+#endif /* LCDCONF_H */
+
+/*************************** End of file ****************************/
Binary file emWin/Doc/AN03002_Custom_Widget_Type.pdf has changed
Binary file emWin/Doc/M480 emWin Quick Start Guide.pdf has changed
Binary file emWin/Doc/UM_Font_Architect_EN_Rev1.02.pdf has changed
Binary file emWin/Doc/UM_Font_Architect_TC_Rev1.02.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/BUTTON.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,218 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : BUTTON.h
+Purpose     : BUTTON public header file (API)
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef BUTTON_H
+#define BUTTON_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Create flags
+*/
+/* For compatibility only ! */
+#define BUTTON_CF_HIDE   WM_CF_HIDE
+#define BUTTON_CF_SHOW   WM_CF_SHOW
+#define BUTTON_CF_MEMDEV WM_CF_MEMDEV
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define BUTTON_CI_UNPRESSED 0
+#define BUTTON_CI_PRESSED   1
+#define BUTTON_CI_DISABLED  2
+
+/*********************************************************************
+*
+*       Bitmap indices
+*/
+#define BUTTON_BI_UNPRESSED 0
+#define BUTTON_BI_PRESSED   1
+#define BUTTON_BI_DISABLED  2
+
+/*********************************************************************
+*
+*       States
+*/
+#define BUTTON_STATE_FOCUS      WIDGET_STATE_FOCUS
+#define BUTTON_STATE_PRESSED    WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define BUTTON_SKINFLEX_PI_PRESSED     0
+#define BUTTON_SKINFLEX_PI_FOCUSED     1
+#define BUTTON_SKINFLEX_PI_ENABLED     2
+#define BUTTON_SKINFLEX_PI_DISABLED    3
+
+#define BUTTON_SKINFLEX_PI_FOCUSSED BUTTON_SKINFLEX_PI_FOCUSED
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM BUTTON_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[3];
+  GUI_COLOR aColorUpper[2];
+  GUI_COLOR aColorLower[2];
+  int Radius;
+} BUTTON_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create function(s)
+
+  Note: the parameters to a create function may vary.
+         Some widgets may have multiple create functions
+*/
+
+BUTTON_Handle BUTTON_Create        (int x0, int y0, int xSize, int ySize, int ID, int Flags);
+BUTTON_Handle BUTTON_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+BUTTON_Handle BUTTON_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+BUTTON_Handle BUTTON_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+BUTTON_Handle BUTTON_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR        BUTTON_GetDefaultBkColor   (unsigned Index);
+const GUI_FONT * BUTTON_GetDefaultFont      (void);
+int              BUTTON_GetDefaultTextAlign (void);
+GUI_COLOR        BUTTON_GetDefaultTextColor (unsigned Index);
+void             BUTTON_SetDefaultBkColor   (GUI_COLOR Color, unsigned Index);
+GUI_COLOR        BUTTON_SetDefaultFocusColor(GUI_COLOR Color);
+void             BUTTON_SetDefaultFont      (const GUI_FONT * pFont);
+void             BUTTON_SetDefaultTextAlign (int Align);
+void             BUTTON_SetDefaultTextColor (GUI_COLOR Color, unsigned Index);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void BUTTON_Callback(WM_MESSAGE *pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+GUI_COLOR          BUTTON_GetBkColor         (BUTTON_Handle hObj, unsigned int Index);
+const GUI_BITMAP * BUTTON_GetBitmap          (BUTTON_Handle hObj,unsigned int Index);
+const GUI_FONT   * BUTTON_GetFont            (BUTTON_Handle hObj);
+GUI_COLOR          BUTTON_GetFrameColor      (BUTTON_Handle hObj);
+WIDGET           * BUTTON_GetpWidget         (BUTTON_Handle hObj);
+void               BUTTON_GetText            (BUTTON_Handle hObj, char * pBuffer, int MaxLen);
+GUI_COLOR          BUTTON_GetTextColor       (BUTTON_Handle hObj, unsigned int Index);
+int                BUTTON_GetTextAlign       (BUTTON_Handle hObj);
+int                BUTTON_GetUserData        (BUTTON_Handle hObj, void * pDest, int NumBytes);
+unsigned           BUTTON_IsPressed          (BUTTON_Handle hObj);
+void               BUTTON_SetBitmap          (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);
+void               BUTTON_SetBitmapEx        (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
+void               BUTTON_SetBkColor         (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void               BUTTON_SetBMP             (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap);
+void               BUTTON_SetBMPEx           (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);
+void               BUTTON_SetFont            (BUTTON_Handle hObj, const GUI_FONT * pfont);
+void               BUTTON_SetFrameColor      (BUTTON_Handle hObj, GUI_COLOR Color);
+void               BUTTON_SetState           (BUTTON_Handle hObj, int State);                                    /* Not to be doc. */
+void               BUTTON_SetPressed         (BUTTON_Handle hObj, int State);
+GUI_COLOR          BUTTON_SetFocusColor      (BUTTON_Handle hObj, GUI_COLOR Color);
+void               BUTTON_SetStreamedBitmap  (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
+void               BUTTON_SetStreamedBitmapEx(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+int                BUTTON_SetText            (BUTTON_Handle hObj, const char* s);
+void               BUTTON_SetTextAlign       (BUTTON_Handle hObj, int Align);
+void               BUTTON_SetTextColor       (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void               BUTTON_SetTextOffset      (BUTTON_Handle hObj, int xPos, int yPos);
+void               BUTTON_SetSelfDrawEx      (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw, int x, int y); /* Not to be doc. */
+void               BUTTON_SetSelfDraw        (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw);               /* Not to be doc. */
+void               BUTTON_SetReactOnLevel    (void);
+void               BUTTON_SetReactOnTouch    (void);
+int                BUTTON_SetUserData        (BUTTON_Handle hObj, const void * pSrc, int NumBytes);
+
+#define BUTTON_SetFocussable BUTTON_SetFocusable
+#define BUTTON_SetFocusable  WIDGET_SetFocusable
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void BUTTON_GetSkinFlexProps     (BUTTON_SKINFLEX_PROPS * pProps, int Index);
+void BUTTON_SetSkinClassic       (BUTTON_Handle hObj);
+void BUTTON_SetSkin              (BUTTON_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  BUTTON_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void BUTTON_SetSkinFlexProps     (const BUTTON_SKINFLEX_PROPS * pProps, int Index);
+void BUTTON_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * BUTTON_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define BUTTON_SKIN_FLEX    BUTTON_DrawSkinFlex
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif   // GUI_WINSUPPORT
+#endif   // BUTTON_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/BUTTON_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,138 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : BUTTON_Private.h
+Purpose     : BUTTON private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef BUTTON_PRIVATE_H
+#define BUTTON_PRIVATE_H
+
+#include "WM.h"
+#include "BUTTON.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#ifndef   BUTTON_3D_MOVE_X
+  #define BUTTON_3D_MOVE_X 1
+#endif
+#ifndef   BUTTON_3D_MOVE_Y
+  #define BUTTON_3D_MOVE_Y 1
+#endif
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} BUTTON_SKIN_PRIVATE;
+
+typedef struct {
+  GUI_COLOR aBkColor[3];
+  GUI_COLOR aTextColor[3];
+  GUI_COLOR FocusColor;
+  GUI_COLOR FrameColor;
+  const GUI_FONT * pFont;
+  BUTTON_SKIN_PRIVATE SkinPrivate;
+  I16 Align;
+  I16 xPosText, yPosText;
+} BUTTON_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  BUTTON_PROPS Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  WM_HMEM hpText;
+  WM_HMEM ahDrawObj[3];
+} BUTTON_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define BUTTON_INIT_ID(p) (p->Widget.DebugId = BUTTON_ID)
+#else
+  #define BUTTON_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  BUTTON_Obj * BUTTON_LockH(BUTTON_Handle h);
+  #define BUTTON_LOCK_H(h)   BUTTON_LockH(h)
+#else
+  #define BUTTON_LOCK_H(h)   (BUTTON_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern BUTTON_PROPS BUTTON__DefaultProps;
+
+extern const WIDGET_SKIN BUTTON__SkinClassic;
+extern       WIDGET_SKIN BUTTON__Skin;
+
+extern WIDGET_SKIN const * BUTTON__pSkinDefault;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void BUTTON__SetDrawObj(BUTTON_Handle hObj, int Index, GUI_DRAW_HANDLE hDrawObj);
+
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* BUTTON_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CALENDAR.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,164 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : CALENDAR.h
+Purpose     : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CALENDAR_H
+#define CALENDAR_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define CALENDAR_CI_WEEKEND 0
+#define CALENDAR_CI_WEEKDAY 1
+#define CALENDAR_CI_SEL     2
+
+#define CALENDAR_CI_HEADER  3
+#define CALENDAR_CI_MONTH   4
+#define CALENDAR_CI_LABEL   5
+#define CALENDAR_CI_FRAME   6
+
+#define CALENDAR_FI_CONTENT 0
+#define CALENDAR_FI_HEADER  1
+
+#define CALENDAR_SI_HEADER  0
+#define CALENDAR_SI_CELL_X  1
+#define CALENDAR_SI_CELL_Y  2
+
+/*********************************************************************
+*
+*       Notification codes
+*
+* The following is the list of notification codes specific to this widget,
+* Send with the WM_NOTIFY_PARENT message
+*/
+#define CALENDAR_NOTIFICATION_MONTH_CLICKED  (WM_NOTIFICATION_WIDGET + 0)
+#define CALENDAR_NOTIFICATION_MONTH_RELEASED (WM_NOTIFICATION_WIDGET + 1)
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       CALENDAR_DATE
+*/
+typedef struct {
+  int Year;
+  int Month;
+  int Day;
+} CALENDAR_DATE;
+
+/*********************************************************************
+*
+*       CALENDAR_SKINFLEX_PROPS
+*/
+typedef struct {
+  GUI_COLOR aColorFrame[3]; // Frame colors of buttons
+  GUI_COLOR aColorUpper[2]; // Upper gradient colors of buttons
+  GUI_COLOR aColorLower[2]; // Lower gradient colors of buttons
+  GUI_COLOR ColorArrow;     // Arrow colors
+} CALENDAR_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+WM_HWIN CALENDAR_Create           (WM_HWIN hParent, int xPos, int yPos, unsigned Year, unsigned Month, unsigned Day, unsigned FirstDayOfWeek, int Id, int Flags);
+void    CALENDAR_GetDate          (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int     CALENDAR_GetDaysOfMonth   (CALENDAR_DATE * pDate);
+void    CALENDAR_GetSel           (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int     CALENDAR_GetWeekday       (CALENDAR_DATE * pDate);
+void    CALENDAR_SetDate          (WM_HWIN hWin, CALENDAR_DATE * pDate);
+void    CALENDAR_SetSel           (WM_HWIN hWin, CALENDAR_DATE * pDate);
+void    CALENDAR_ShowDate         (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int     CALENDAR_AddKey           (WM_HWIN hWin, int Key);
+
+/*********************************************************************
+*
+*       Default related
+*/
+void    CALENDAR_SetDefaultBkColor(unsigned Index, GUI_COLOR Color);
+void    CALENDAR_SetDefaultColor  (unsigned Index, GUI_COLOR Color);
+void    CALENDAR_SetDefaultDays   (const char ** apDays);
+void    CALENDAR_SetDefaultFont   (unsigned Index, const GUI_FONT * pFont);
+void    CALENDAR_SetDefaultMonths (const char ** apMonths);
+void    CALENDAR_SetDefaultSize   (unsigned Index, unsigned Size);
+
+/*********************************************************************
+*
+*       Skinning related
+*/
+void    CALENDAR_GetSkinFlexProps (CALENDAR_SKINFLEX_PROPS * pProps, int Index);
+void    CALENDAR_SetSkinFlexProps (const CALENDAR_SKINFLEX_PROPS * pProps, int Index);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CALENDAR_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // CALENDAR_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHECKBOX.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,214 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : CHECKBOX.h
+Purpose     : CHECKBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHECKBOX_H
+#define CHECKBOX_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define CHECKBOX_CI_DISABLED 0
+#define CHECKBOX_CI_ENABLED  1
+
+/*********************************************************************
+*
+*       Bitmap indices
+*/
+#define CHECKBOX_BI_INACTIV_UNCHECKED 0
+#define CHECKBOX_BI_ACTIV_UNCHECKED   1
+#define CHECKBOX_BI_INACTIV_CHECKED   2
+#define CHECKBOX_BI_ACTIV_CHECKED     3
+#define CHECKBOX_BI_INACTIV_3STATE    4
+#define CHECKBOX_BI_ACTIV_3STATE      5
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define CHECKBOX_SKINFLEX_PI_ENABLED     0
+#define CHECKBOX_SKINFLEX_PI_DISABLED    1
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM CHECKBOX_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[3];
+  GUI_COLOR aColorInner[2];
+  GUI_COLOR ColorCheck;
+  int       ButtonSize;
+} CHECKBOX_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+CHECKBOX_Handle CHECKBOX_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+CHECKBOX_Handle CHECKBOX_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+CHECKBOX_Handle CHECKBOX_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+CHECKBOX_Handle CHECKBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CHECKBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+
+int              CHECKBOX_GetDefaultAlign     (void);
+GUI_COLOR        CHECKBOX_GetDefaultBkColor   (void);
+const GUI_FONT * CHECKBOX_GetDefaultFont      (void);
+int              CHECKBOX_GetDefaultSpacing   (void);
+int              CHECKBOX_GetDefaultTextAlign (void);
+GUI_COLOR        CHECKBOX_GetDefaultTextColor (void);
+int              CHECKBOX_GetUserData         (CHECKBOX_Handle hObj, void * pDest, int NumBytes);
+void             CHECKBOX_SetDefaultAlign     (int Align);
+void             CHECKBOX_SetDefaultBkColor   (GUI_COLOR Color);
+GUI_COLOR        CHECKBOX_SetDefaultFocusColor(GUI_COLOR Color);
+void             CHECKBOX_SetDefaultFont      (const GUI_FONT * pFont);
+void             CHECKBOX_SetDefaultImage     (const GUI_BITMAP * pBitmap, unsigned int Index);
+void             CHECKBOX_SetDefaultSpacing   (int Spacing);
+void             CHECKBOX_SetDefaultTextAlign (int Align);
+void             CHECKBOX_SetDefaultTextColor (GUI_COLOR Color);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+GUI_COLOR          CHECKBOX_GetBkColor   (CHECKBOX_Handle hObj);
+GUI_COLOR          CHECKBOX_GetBoxBkColor(CHECKBOX_Handle hObj, int Index);
+GUI_COLOR          CHECKBOX_GetFocusColor(CHECKBOX_Handle hObj);
+const GUI_FONT   * CHECKBOX_GetFont      (CHECKBOX_Handle hObj);
+const GUI_BITMAP * CHECKBOX_GetImage     (CHECKBOX_Handle hObj, unsigned int Index);
+int                CHECKBOX_GetState     (CHECKBOX_Handle hObj);
+int                CHECKBOX_GetText      (CHECKBOX_Handle hObj, char * pBuffer, int MaxLen);
+int                CHECKBOX_GetTextAlign (CHECKBOX_Handle hObj);
+GUI_COLOR          CHECKBOX_GetTextColor (CHECKBOX_Handle hObj);
+int                CHECKBOX_IsChecked    (CHECKBOX_Handle hObj);
+void               CHECKBOX_SetBkColor   (CHECKBOX_Handle hObj, GUI_COLOR Color);
+GUI_COLOR          CHECKBOX_SetBoxBkColor(CHECKBOX_Handle hObj, GUI_COLOR Color, int Index);
+GUI_COLOR          CHECKBOX_SetFocusColor(CHECKBOX_Handle hObj, GUI_COLOR Color);
+void               CHECKBOX_SetFont      (CHECKBOX_Handle hObj, const GUI_FONT * pFont);
+void               CHECKBOX_SetImage     (CHECKBOX_Handle hObj, const GUI_BITMAP * pBitmap, unsigned int Index);
+void               CHECKBOX_SetNumStates (CHECKBOX_Handle hObj, unsigned NumStates);
+void               CHECKBOX_SetSpacing   (CHECKBOX_Handle hObj, unsigned Spacing);
+void               CHECKBOX_SetState     (CHECKBOX_Handle hObj, unsigned State);
+void               CHECKBOX_SetText      (CHECKBOX_Handle hObj, const char * pText);
+void               CHECKBOX_SetTextAlign (CHECKBOX_Handle hObj, int Align);
+void               CHECKBOX_SetTextColor (CHECKBOX_Handle hObj, GUI_COLOR Color);
+int                CHECKBOX_SetUserData  (CHECKBOX_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void CHECKBOX_GetSkinFlexProps      (CHECKBOX_SKINFLEX_PROPS * pProps, int Index);
+void CHECKBOX_SetSkinClassic        (CHECKBOX_Handle hObj);
+void CHECKBOX_SetSkin               (CHECKBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  CHECKBOX_DrawSkinFlex          (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void CHECKBOX_SetSkinFlexProps      (const CHECKBOX_SKINFLEX_PROPS * pProps, int Index);
+void CHECKBOX_SetDefaultSkinClassic (void);
+int  CHECKBOX_GetSkinFlexButtonSize (CHECKBOX_Handle hObj);
+void CHECKBOX_SetSkinFlexButtonSize (CHECKBOX_Handle hObj, int ButtonSize);
+WIDGET_DRAW_ITEM_FUNC * CHECKBOX_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define CHECKBOX_SKIN_FLEX    CHECKBOX_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Macros for compatibility
+*
+**********************************************************************
+*/
+
+#define CHECKBOX_Check(hObj)   CHECKBOX_SetState(hObj, 1)
+#define CHECKBOX_Uncheck(hObj) CHECKBOX_SetState(hObj, 0)
+
+#define CHECKBOX_BI_INACTIV    CHECKBOX_BI_INACTIV_CHECKED
+#define CHECKBOX_BI_ACTIV      CHECKBOX_BI_ACTIV_CHECKED
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // CHECKBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHECKBOX_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,163 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : CHECKBOX_Private.h
+Purpose     : CHECKBOX private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHECKBOX_PRIVATE_H
+#define CHECKBOX_PRIVATE_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "CHECKBOX.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#ifndef   CHECKBOX_BKCOLOR0_DEFAULT
+  #define CHECKBOX_BKCOLOR0_DEFAULT 0x808080           /* Inactive color */
+#endif
+
+#ifndef   CHECKBOX_BKCOLOR1_DEFAULT
+  #define CHECKBOX_BKCOLOR1_DEFAULT GUI_WHITE          /* Active color */
+#endif
+
+#ifndef   CHECKBOX_FGCOLOR0_DEFAULT
+  #define CHECKBOX_FGCOLOR0_DEFAULT 0x101010
+#endif
+
+#ifndef   CHECKBOX_FGCOLOR1_DEFAULT
+  #define CHECKBOX_FGCOLOR1_DEFAULT GUI_BLACK
+#endif
+
+#ifndef   CHECKBOX_DEFAULT_SIZE
+  #define CHECKBOX_DEFAULT_SIZE          15
+#endif
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  unsigned              (* pfGetButtonSize)(void);
+  WIDGET_DRAW_ITEM_FUNC  * pfDrawSkin;
+} CHECKBOX_SKIN_PRIVATE;
+
+typedef struct {
+  const GUI_FONT      * pFont;
+  GUI_COLOR             aBkColorBox[2]; /* Colors used to draw the box background */
+  GUI_COLOR             BkColor;        /* Widget background color */
+  GUI_COLOR             TextColor;
+  GUI_COLOR             FocusColor;
+  CHECKBOX_SKIN_PRIVATE SkinPrivate;
+  I16                   Align;
+  U8                    Spacing;
+  const GUI_BITMAP    * apBm[6];
+} CHECKBOX_PROPS;
+
+typedef struct {
+  WIDGET              Widget;
+  CHECKBOX_PROPS      Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  U8                  NumStates;
+  U8                  CurrentState;
+  WM_HMEM             hpText;
+  U32                 ButtonSize;
+} CHECKBOX_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define CHECKBOX_INIT_ID(p) (p->Widget.DebugId = CHECKBOX_ID)
+#else
+  #define CHECKBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  CHECKBOX_Obj * CHECKBOX_LockH(CHECKBOX_Handle h);
+  #define CHECKBOX_LOCK_H(h)   CHECKBOX_LockH(h)
+#else
+  #define CHECKBOX_LOCK_H(h)   (CHECKBOX_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+unsigned CHECKBOX__GetButtonSize(void);
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern CHECKBOX_PROPS      CHECKBOX__DefaultProps;
+
+extern const WIDGET_SKIN   CHECKBOX__SkinClassic;
+extern       WIDGET_SKIN   CHECKBOX__Skin;
+
+extern WIDGET_SKIN const * CHECKBOX__pSkinDefault;
+
+/*********************************************************************
+*
+*       Extern data
+*
+**********************************************************************
+*/
+extern const GUI_BITMAP    CHECKBOX__abmCheck[2];
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* CHECKBOX_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHOOSECOLOR.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,141 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : CHOOSECOLOR.h
+Purpose     : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHOOSECOLOR_H
+#define CHOOSECOLOR_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define CHOOSECOLOR_CF_MOVEABLE FRAMEWIN_CF_MOVEABLE
+
+#define CHOOSECOLOR_CI_FRAME 0
+#define CHOOSECOLOR_CI_FOCUS 1
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       CHOOSECOLOR_PROPS
+*/
+typedef struct {
+  unsigned  aBorder[2];
+  unsigned  aSpace[2];
+  unsigned  aButtonSize[2];
+  GUI_COLOR aColor[2];
+} CHOOSECOLOR_PROPS;
+
+/*********************************************************************
+*
+*       CHOOSECOLOR_CONTEXT
+*/
+typedef struct {
+  U32               LastColor;
+  const GUI_COLOR * pColor;
+  unsigned          NumColors;
+  unsigned          NumColorsPerLine;
+  int               SelOld;
+  int               Sel;
+  WM_HWIN           hParent;
+  CHOOSECOLOR_PROPS Props;
+} CHOOSECOLOR_CONTEXT;
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+WM_HWIN CHOOSECOLOR_Create(WM_HWIN           hParent,
+                           int               xPos,
+                           int               yPos,
+                           int               xSize,
+                           int               ySize,
+                           const GUI_COLOR * pColor,
+                           unsigned          NumColors,
+                           unsigned          NumColorsPerLine,
+                           int               Sel,
+                           const char      * sCaption,
+                           int               Flags);
+
+int  CHOOSECOLOR_GetSel(WM_HWIN hObj);
+void CHOOSECOLOR_SetSel(WM_HWIN hObj, int Sel);
+
+void CHOOSECOLOR_SetDefaultColor     (unsigned Index, GUI_COLOR Color);
+void CHOOSECOLOR_SetDefaultSpace     (unsigned Index, unsigned Space);
+void CHOOSECOLOR_SetDefaultBorder    (unsigned Index, unsigned Border);
+void CHOOSECOLOR_SetDefaultButtonSize(unsigned Index, unsigned ButtonSize);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CHOOSECOLOR_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* CHOOSECOLOR_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHOOSEFILE.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,136 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : CHOOSEFILE.h
+Purpose     : File dialog interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHOOSEFILE_H
+#define CHOOSEFILE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define CHOOSEFILE_FINDFIRST 0
+#define CHOOSEFILE_FINDNEXT  1
+
+#define CHOOSEFILE_FLAG_DIRECTORY (1 << 0)
+
+#ifndef   CHOOSEFILE_MAXLEN
+  #define CHOOSEFILE_MAXLEN 256
+#endif
+
+#define CHOOSEFILE_BI_CANCEL 0
+#define CHOOSEFILE_BI_OK     1
+#define CHOOSEFILE_BI_UP     2
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       CHOOSEFILE_INFO
+*/
+typedef struct CHOOSEFILE_INFO CHOOSEFILE_INFO;
+
+struct CHOOSEFILE_INFO {
+  int               Cmd;                                 // Command for GetData() function
+  int               Id;                                  // Id of pressed button (for internal use only)
+  const char      * pMask;                               // Mask to be used for searching files
+  char            * pName;                               // (for internal use only)
+  char            * pExt;                                // (for internal use only)
+  char            * pAttrib;                             // (for internal use only)
+  WM_TOOLTIP_HANDLE hToolTip;                            // (for internal use only)
+  U32               SizeL;                               // FileSize low word
+  U32               SizeH;                               // FileSize high word
+  U32               Flags;                               // File flags
+  char              pRoot[CHOOSEFILE_MAXLEN];            // Buffer used internally and for passing result
+  int            (* pfGetData)(CHOOSEFILE_INFO * pInfo); // Pointer to GetData() function
+};
+
+/*********************************************************************
+*
+*       Functions
+*
+**********************************************************************
+*/
+WM_HWIN CHOOSEFILE_Create(WM_HWIN           hParent,  // Parent window
+                          int               xPos,     // xPosition in window coordinates
+                          int               yPos,     // yPosition in window coordinates
+                          int               xSize,    // xSize in pixels
+                          int               ySize,    // ySize in pixels
+                          const char      * apRoot[], // Pointers to root strings
+                          int               NumRoot,  // Number of roots
+                          int               SelRoot,  // Root to be selected at first
+                          const char      * sCaption, // Shown in title bar
+                          int               Flags,    // Flags for FRAMEWINDOW
+                          CHOOSEFILE_INFO * pInfo     // Pointer to CHOOSEFILE_INFO structure
+                          );
+
+void    CHOOSEFILE_Callback            (WM_MESSAGE * pMsg);
+void    CHOOSEFILE_EnableToolTips      (void);
+void    CHOOSEFILE_SetButtonText       (WM_HWIN hWin, unsigned ButtonIndex, const char * pText);
+void    CHOOSEFILE_SetDefaultButtonText(unsigned ButtonIndex, const char * pText);
+void    CHOOSEFILE_SetDelim            (char Delim);
+void    CHOOSEFILE_SetToolTips         (const TOOLTIP_INFO * pInfo, int NumItems);
+void    CHOOSEFILE_SetTopMode          (unsigned OnOff);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* CHOOSEFILE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DIALOG.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,105 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : Dialog.h
+Purpose     : Dialog box include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include "WM.h"
+
+#include "BUTTON.h"
+#include "CALENDAR.h"
+#include "CHECKBOX.h"
+#include "CHOOSECOLOR.h"
+#include "CHOOSEFILE.h"
+#include "DROPDOWN.h"
+#include "EDIT.h"
+#include "FRAMEWIN.h"
+#include "GRAPH.h"
+#include "HEADER.h"
+#include "ICONVIEW.h"
+#include "IMAGE.h"
+#include "KNOB.h"
+#include "LISTBOX.h"
+#include "LISTVIEW.h"
+#include "LISTWHEEL.h"
+#include "MENU.h"
+#include "MULTIEDIT.h"
+#include "MULTIPAGE.h"
+#include "PROGBAR.h"
+#include "RADIO.h"
+#include "SCROLLBAR.h"
+#include "SLIDER.h"
+#include "SPINBOX.h"
+#include "SWIPELIST.h"
+#include "TEXT.h"
+#include "TREEVIEW.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       WINDOW API
+*/
+WM_HWIN   WINDOW_CreateEx         (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, WM_CALLBACK * cb);
+WM_HWIN   WINDOW_CreateUser       (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, WM_CALLBACK * cb, int NumExtraBytes);
+WM_HWIN   WINDOW_CreateIndirect   (const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+GUI_COLOR WINDOW_GetDefaultBkColor(void);
+int       WINDOW_GetUserData      (WM_HWIN hObj, void * pDest, int NumBytes);
+void      WINDOW_SetBkColor       (WM_HWIN hObj, GUI_COLOR Color);
+void      WINDOW_SetDefaultBkColor(GUI_COLOR Color);
+int       WINDOW_SetUserData      (WM_HWIN hObj, const void * pSrc, int NumBytes);
+
+void WINDOW_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // DIALOG_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DIALOG_Intern.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,110 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : Dialog.h
+Purpose     : Dialog box include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DIALOG_INTERN_H
+#define DIALOG_INTERN_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {        // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct  GUI_WIDGET_CREATE_INFO_struct GUI_WIDGET_CREATE_INFO;
+typedef WM_HWIN GUI_WIDGET_CREATE_FUNC        (const GUI_WIDGET_CREATE_INFO * pCreate, WM_HWIN hWin, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       Structures
+*
+**********************************************************************
+*/
+struct GUI_WIDGET_CREATE_INFO_struct {
+  GUI_WIDGET_CREATE_FUNC * pfCreateIndirect;
+  const char             * pName;            // Text ... Not used on all widgets
+  I16                      Id;               // ID ... should be unique in a dialog
+  I16                      x0;               // x position
+  I16                      y0;               // y position
+  I16                      xSize;            // x size
+  I16                      ySize;            // y size
+  U16                      Flags;            // Widget specific create flags (opt.)
+  I32                      Para;             // Widget specific parameter (opt.)
+  U32                      NumExtraBytes;    // Number of extra bytes usable with <WIDGET>_SetUserData & <WIDGET>_GetUserData
+};
+
+/*********************************************************************
+*
+*       Public API functions
+*
+**********************************************************************
+*/
+WM_HWIN            GUI_CreateDialogBox   (const GUI_WIDGET_CREATE_INFO * paWidget, int NumWidgets, WM_CALLBACK * cb, WM_HWIN hParent, int x0, int y0);
+void               GUI_EndDialog         (WM_HWIN hWin, int r);
+int                GUI_ExecDialogBox     (const GUI_WIDGET_CREATE_INFO * paWidget, int NumWidgets, WM_CALLBACK * cb, WM_HWIN hParent, int x0, int y0);
+int                GUI_ExecCreatedDialog (WM_HWIN hDialog);
+WM_DIALOG_STATUS * GUI_GetDialogStatusPtr(WM_HWIN hDialog);                                    // Not to be documented
+void               GUI_SetDialogStatusPtr(WM_HWIN hDialog, WM_DIALOG_STATUS * pDialogStatus);  // Not to be documented
+
+/*********************************************************************
+*
+*       Obsolete
+*/
+LCD_COLOR          DIALOG_GetBkColor(void);
+LCD_COLOR          DIALOG_SetBkColor(LCD_COLOR BkColor);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // DIALOG_INTERN_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DROPDOWN.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,205 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : DROPDOWN.h
+Purpose     : Multiple choice object include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DROPDOWN_H
+#define DROPDOWN_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "LISTBOX.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+*       Create flags
+*/
+#define DROPDOWN_CF_AUTOSCROLLBAR   (1 << 0)
+#define DROPDOWN_CF_UP              (1 << 1)
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define DROPDOWN_CI_UNSEL    0
+#define DROPDOWN_CI_SEL      1
+#define DROPDOWN_CI_SELFOCUS 2
+
+#define DROPDOWN_CI_ARROW    0
+#define DROPDOWN_CI_BUTTON   1
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define DROPDOWN_SKINFLEX_PI_EXPANDED 0
+#define DROPDOWN_SKINFLEX_PI_FOCUSED  1
+#define DROPDOWN_SKINFLEX_PI_ENABLED  2
+#define DROPDOWN_SKINFLEX_PI_DISABLED 3
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM DROPDOWN_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[3];
+  GUI_COLOR aColorUpper[2];
+  GUI_COLOR aColorLower[2];
+  GUI_COLOR ColorArrow;
+  GUI_COLOR ColorText;
+  GUI_COLOR ColorSep;
+  int Radius;
+} DROPDOWN_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+DROPDOWN_Handle DROPDOWN_Create        (WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+DROPDOWN_Handle DROPDOWN_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+DROPDOWN_Handle DROPDOWN_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+DROPDOWN_Handle DROPDOWN_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void DROPDOWN_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void             DROPDOWN_AddKey           (DROPDOWN_Handle hObj, int Key);
+void             DROPDOWN_AddString        (DROPDOWN_Handle hObj, const char* s);
+void             DROPDOWN_Collapse         (DROPDOWN_Handle hObj);
+void             DROPDOWN_DecSel           (DROPDOWN_Handle hObj);
+void             DROPDOWN_DecSelExp        (DROPDOWN_Handle hObj);
+void             DROPDOWN_DeleteItem       (DROPDOWN_Handle hObj, unsigned int Index);
+void             DROPDOWN_Expand           (DROPDOWN_Handle hObj);
+GUI_COLOR        DROPDOWN_GetBkColor       (DROPDOWN_Handle hObj, unsigned int Index);
+GUI_COLOR        DROPDOWN_GetColor         (DROPDOWN_Handle hObj, unsigned int Index);
+const GUI_FONT * DROPDOWN_GetFont          (DROPDOWN_Handle hObj);
+unsigned         DROPDOWN_GetItemDisabled  (DROPDOWN_Handle hObj, unsigned Index);
+unsigned         DROPDOWN_GetItemSpacing   (DROPDOWN_Handle hObj);
+int              DROPDOWN_GetItemText      (DROPDOWN_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+LISTBOX_Handle   DROPDOWN_GetListbox       (DROPDOWN_Handle hObj);
+int              DROPDOWN_GetNumItems      (DROPDOWN_Handle hObj);
+int              DROPDOWN_GetSel           (DROPDOWN_Handle hObj);
+int              DROPDOWN_GetSelExp        (DROPDOWN_Handle hObj);
+GUI_COLOR        DROPDOWN_GetTextColor     (DROPDOWN_Handle hObj, unsigned int Index);
+int              DROPDOWN_GetUserData      (DROPDOWN_Handle hObj, void * pDest, int NumBytes);
+void             DROPDOWN_IncSel           (DROPDOWN_Handle hObj);
+void             DROPDOWN_IncSelExp        (DROPDOWN_Handle hObj);
+void             DROPDOWN_InsertString     (DROPDOWN_Handle hObj, const char* s, unsigned int Index);
+void             DROPDOWN_SetAutoScroll    (DROPDOWN_Handle hObj, int OnOff);
+void             DROPDOWN_SetBkColor       (DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR color);
+void             DROPDOWN_SetColor         (DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void             DROPDOWN_SetFont          (DROPDOWN_Handle hObj, const GUI_FONT * pfont);
+void             DROPDOWN_SetItemDisabled  (DROPDOWN_Handle hObj, unsigned Index, int OnOff);
+void             DROPDOWN_SetItemSpacing   (DROPDOWN_Handle hObj, unsigned Value);
+int              DROPDOWN_SetListHeight    (DROPDOWN_Handle hObj, unsigned Height);
+void             DROPDOWN_SetScrollbarColor(DROPDOWN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void             DROPDOWN_SetScrollbarWidth(DROPDOWN_Handle hObj, unsigned Width);
+void             DROPDOWN_SetSel           (DROPDOWN_Handle hObj, int Sel);
+void             DROPDOWN_SetSelExp        (DROPDOWN_Handle hObj, int Sel);
+void             DROPDOWN_SetTextAlign     (DROPDOWN_Handle hObj, int Align);
+void             DROPDOWN_SetTextColor     (DROPDOWN_Handle hObj, unsigned int index, GUI_COLOR color);
+void             DROPDOWN_SetTextHeight    (DROPDOWN_Handle hObj, unsigned TextHeight);
+int              DROPDOWN_SetUpMode        (DROPDOWN_Handle hObj, int OnOff);
+int              DROPDOWN_SetUserData      (DROPDOWN_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void DROPDOWN_GetSkinFlexProps     (DROPDOWN_SKINFLEX_PROPS * pProps, int Index);
+void DROPDOWN_SetSkinClassic       (DROPDOWN_Handle hObj);
+void DROPDOWN_SetSkin              (DROPDOWN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  DROPDOWN_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void DROPDOWN_SetSkinFlexProps     (const DROPDOWN_SKINFLEX_PROPS * pProps, int Index);
+void DROPDOWN_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * DROPDOWN_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define DROPDOWN_SKIN_FLEX    DROPDOWN_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR        DROPDOWN_GetDefaultBkColor       (int Index);
+GUI_COLOR        DROPDOWN_GetDefaultColor         (int Index);
+const GUI_FONT * DROPDOWN_GetDefaultFont          (void);
+GUI_COLOR        DROPDOWN_GetDefaultScrollbarColor(int Index);
+void             DROPDOWN_SetDefaultFont          (const GUI_FONT * pFont);
+GUI_COLOR        DROPDOWN_SetDefaultBkColor       (int Index, GUI_COLOR Color);
+GUI_COLOR        DROPDOWN_SetDefaultColor         (int Index, GUI_COLOR Color);
+GUI_COLOR        DROPDOWN_SetDefaultScrollbarColor(int Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // DROPDOWN_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DROPDOWN_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,146 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : DROPDOWN_Private.h
+Purpose     : DROPDOWN private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DROPDOWN_PRIVATE_H
+#define DROPDOWN_PRIVATE_H
+
+#include "DROPDOWN.h"
+#include "WIDGET.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define DROPDOWN_SF_AUTOSCROLLBAR DROPDOWN_CF_AUTOSCROLLBAR
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} DROPDOWN_SKIN_PRIVATE;
+
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR aBackColor[3];
+  GUI_COLOR aTextColor[3];
+  GUI_COLOR aColor[2];
+  GUI_COLOR aScrollbarColor[3];
+  DROPDOWN_SKIN_PRIVATE SkinPrivate;
+  I16       TextBorderSize;
+  I16       Align;
+} DROPDOWN_PROPS;
+
+typedef struct {
+  WIDGET  Widget;
+  I16     Sel;        // Current selection
+  I16     ySizeLB;    // ySize of assigned LISTBOX in expanded state
+  I16     TextHeight;
+  GUI_ARRAY Handles;
+  WM_SCROLL_STATE ScrollState;
+  DROPDOWN_PROPS Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  WM_HWIN hListWin;
+  U8      Flags;
+  U16     ItemSpacing;
+  U8      ScrollbarWidth;
+  char  IsPressed;
+  WM_HMEM hDisabled;
+} DROPDOWN_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define DROPDOWN_INIT_ID(p) (p->Widget.DebugId = DROPDOWN_ID)
+#else
+  #define DROPDOWN_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  DROPDOWN_Obj * DROPDOWN_LockH(DROPDOWN_Handle h);
+  #define DROPDOWN_LOCK_H(h)   DROPDOWN_LockH(h)
+#else
+  #define DROPDOWN_LOCK_H(h)   (DROPDOWN_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern DROPDOWN_PROPS DROPDOWN__DefaultProps;
+
+extern const WIDGET_SKIN DROPDOWN__SkinClassic;
+extern       WIDGET_SKIN DROPDOWN__Skin;
+
+extern WIDGET_SKIN const * DROPDOWN__pSkinDefault;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+
+void DROPDOWN__AdjustHeight(DROPDOWN_Handle hObj);
+int  DROPDOWN__GetNumItems (DROPDOWN_Obj * pObj);
+const char * DROPDOWN__GetpItemLocked(DROPDOWN_Handle hObj, int Index);
+
+#endif // GUI_WINSUPPORT
+#endif // DROPDOWN_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/EDIT.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,230 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : EDIT.h
+Purpose     : EDIT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef EDIT_H
+#define EDIT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {             // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defaults for configuration switches
+*
+*  The following are defaults for config switches which affect the
+*  interface specified in this module
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Create / Status flags
+//
+#define EDIT_CF_LEFT    GUI_TA_LEFT
+#define EDIT_CF_RIGHT   GUI_TA_RIGHT
+#define EDIT_CF_HCENTER GUI_TA_HCENTER
+#define EDIT_CF_VCENTER GUI_TA_VCENTER
+#define EDIT_CF_TOP     GUI_TA_TOP
+#define EDIT_CF_BOTTOM  GUI_TA_BOTTOM
+
+//
+// Color indices
+//
+#define EDIT_CI_DISABLED 0
+#define EDIT_CI_ENABLED  1
+#define EDIT_CI_CURSOR   2
+
+//
+// Signed or normal mode
+//
+#define GUI_EDIT_NORMAL                  (0 << 0)
+#define GUI_EDIT_SIGNED                  (1 << 0)
+#define GUI_EDIT_SUPPRESS_LEADING_ZEROES (1 << 1)
+
+//
+// Cursor coloring
+//
+#define GUI_EDIT_SHOWCURSOR              (1 << 2)
+#define GUI_EDIT_CUSTCOLORMODE           (1 << 3)
+#define GUI_EDIT_CURSORBLINK             (1 << 4)
+
+//
+// Edit modes
+//
+#define GUI_EDIT_MODE_INSERT    0
+#define GUI_EDIT_MODE_OVERWRITE 1
+
+//
+// Compatibility macros
+//
+#define EDIT_CI_DISABELD EDIT_CI_DISABLED
+#define EDIT_CI_ENABELD  EDIT_CI_ENABLED
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM EDIT_Handle;
+typedef void tEDIT_AddKeyEx    (EDIT_Handle hObj, int Key);
+typedef void tEDIT_UpdateBuffer(EDIT_Handle hObj);
+
+/*********************************************************************
+*
+*             Create functions
+*/
+EDIT_Handle EDIT_Create        (int x0, int y0, int xSize, int ySize, int Id, int MaxLen, int Flags);
+EDIT_Handle EDIT_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int MaxLen);
+EDIT_Handle EDIT_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int MaxLen);
+EDIT_Handle EDIT_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int MaxLen, int NumExtraBytes);
+EDIT_Handle EDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void EDIT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+void EDIT_SetDefaultBkColor  (unsigned int Index, GUI_COLOR Color);
+void EDIT_SetDefaultFont     (const GUI_FONT * pFont);
+void EDIT_SetDefaultTextAlign(int Align);
+void EDIT_SetDefaultTextColor(unsigned int Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+*             Individual member functions
+*/
+//
+// Query preferences
+//
+GUI_COLOR        EDIT_GetDefaultBkColor(unsigned int Index);
+const GUI_FONT * EDIT_GetDefaultFont(void);
+int              EDIT_GetDefaultTextAlign(void);
+GUI_COLOR        EDIT_GetDefaultTextColor(unsigned int Index);
+//
+// Methods changing properties
+//
+void EDIT_AddKey           (EDIT_Handle hObj, int Key);
+void EDIT_EnableBlink      (EDIT_Handle hObj, int Period, int OnOff);
+GUI_COLOR EDIT_GetBkColor  (EDIT_Handle hObj, unsigned int Index);
+void EDIT_SetBkColor       (EDIT_Handle hObj, unsigned int Index, GUI_COLOR color);
+void EDIT_SetCursorAtChar  (EDIT_Handle hObj, int Pos);
+void EDIT_SetCursorAtPixel (EDIT_Handle hObj, int xPos);
+void EDIT_SetFont          (EDIT_Handle hObj, const GUI_FONT * pFont);
+int  EDIT_SetInsertMode    (EDIT_Handle hObj, int OnOff);
+void EDIT_SetMaxLen        (EDIT_Handle hObj, int MaxLen);
+void EDIT_SetpfAddKeyEx    (EDIT_Handle hObj, tEDIT_AddKeyEx * pfAddKeyEx);
+void EDIT_SetpfUpdateBuffer(EDIT_Handle hObj, tEDIT_UpdateBuffer * pfUpdateBuffer);
+void EDIT_SetText          (EDIT_Handle hObj, const char * s);
+void EDIT_SetTextAlign     (EDIT_Handle hObj, int Align);
+GUI_COLOR EDIT_GetTextColor(EDIT_Handle hObj, unsigned int Index);
+void EDIT_SetTextColor     (EDIT_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void EDIT_SetSel           (EDIT_Handle hObj, int FirstChar, int LastChar);
+int  EDIT_SetUserData      (EDIT_Handle hObj, const void * pSrc, int NumBytes);
+int  EDIT_EnableInversion  (EDIT_Handle hObj, int OnOff);
+//
+// Get/Set user input
+//
+int   EDIT_GetCursorCharPos  (EDIT_Handle hObj);
+void  EDIT_GetCursorPixelPos (EDIT_Handle hObj, int * pxPos, int * pyPos);
+float EDIT_GetFloatValue     (EDIT_Handle hObj);
+const GUI_FONT * EDIT_GetFont(EDIT_Handle hObj);
+int   EDIT_GetNumChars       (EDIT_Handle hObj);
+void  EDIT_GetText           (EDIT_Handle hObj, char * sDest, int MaxLen);
+int   EDIT_GetTextAlign      (EDIT_Handle hObj);
+I32   EDIT_GetValue          (EDIT_Handle hObj);
+void  EDIT_SetFloatValue     (EDIT_Handle hObj, float Value);
+int   EDIT_GetUserData       (EDIT_Handle hObj, void * pDest, int NumBytes);
+void  EDIT_SetValue          (EDIT_Handle hObj, I32 Value);
+
+#define EDIT_SetFocussable EDIT_SetFocusable
+#define EDIT_SetFocusable  WIDGET_SetFocusable
+
+/*********************************************************************
+*
+*             Routines for editing values
+*
+**********************************************************************
+*/
+void  EDIT_SetHexMode  (EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+void  EDIT_SetBinMode  (EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+void  EDIT_SetDecMode  (EDIT_Handle hEdit, I32 Value, I32 Min, I32 Max, int Shift, U8 Flags);
+void  EDIT_SetFloatMode(EDIT_Handle hEdit, float Value, float Min, float Max, int Shift, U8 Flags);
+void  EDIT_SetTextMode (EDIT_Handle hEdit);
+void  EDIT_SetUlongMode(EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+
+U32   GUI_EditHex      (U32 Value, U32 Min, U32 Max, int Len, int xSize);
+U32   GUI_EditBin      (U32 Value, U32 Min, U32 Max, int Len, int xSize);
+I32   GUI_EditDec      (I32 Value, I32 Min, I32 Max, int Len, int xSize, int Shift, U8 Flags);
+float GUI_EditFloat    (float Value, float Min, float Max, int Len, int xSize, int Shift, U8 Flags);
+void  GUI_EditString   (char * pString, int Len, int xSize);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // EDIT_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/EDIT_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,143 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : EDIT_Private.h
+Purpose     : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef EDIT_PRIVATE_H
+#define EDIT_PRIVATE_H
+
+#include "EDIT.h"
+
+#if GUI_WINSUPPORT
+
+#include "WIDGET.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define EDIT_REALLOC_SIZE  16
+
+#ifndef EDIT_XOFF
+  #define EDIT_XOFF        1
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct EDIT_Obj_struct EDIT_Obj;
+
+typedef struct {
+  int              Align;
+  int              Border;
+  const GUI_FONT * pFont;
+  GUI_COLOR        aTextColor[3];
+  GUI_COLOR        aBkColor[3];
+} EDIT_PROPS;
+
+struct EDIT_Obj_struct {
+  WIDGET               Widget;
+  WM_HMEM              hpText;
+  I16                  MaxLen;
+  U16                  BufferSize;
+  I32                  Min, Max;        // Min max values as normalized floats (integers)
+  U8                   NumDecs;         // Number of decimals
+  I32                  CurrentValue;    // Current value
+  int                  CursorPos;       // Cursor position. 0 means left most
+  unsigned             SelSize;         // Number of selected characters
+  U8                   EditMode;        // Insert or overwrite mode
+  U8                   XSizeCursor;     // Size of cursor when working in insert mode
+  U8                   Flags;
+  tEDIT_AddKeyEx     * pfAddKeyEx;      // Handle key input
+  tEDIT_UpdateBuffer * pfUpdateBuffer;  // Update textbuffer
+  EDIT_PROPS           Props;
+  WM_HTIMER            hTimer;
+  U8                   MinMaxMode;
+  int                  TimerPeriod;
+};
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define EDIT_INIT_ID(p) (p->Widget.DebugId = EDIT_ID)
+#else
+  #define EDIT_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  EDIT_Obj * EDIT_LockH(EDIT_Handle h);
+  #define EDIT_LOCK_H(h)   EDIT_LockH(h)
+#else
+  #define EDIT_LOCK_H(h)   (EDIT_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern EDIT_PROPS EDIT__DefaultProps;
+
+/*********************************************************************
+*
+*       Public functions (internal)
+*
+**********************************************************************
+*/
+U16  EDIT__GetCurrentChar  (EDIT_Obj * pObj);
+void EDIT__SetCursorPos    (EDIT_Handle hObj, int CursorPos);
+void EDIT__SetValueUnsigned(EDIT_Handle hObj, I32 Value);
+
+#endif // GUI_WINSUPPORT
+
+#endif // EDIT_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/FRAMEWIN.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,264 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : FRAMEWIN.h
+Purpose     : Frame window include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef FRAMEWIN_H
+#define FRAMEWIN_H
+
+#include "WM.h"
+#include "WIDGET.h"             /* Req. for WIDGET_DRAW_ITEM_FUNC */
+#if GUI_WINSUPPORT
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Configuration
+*/
+#ifndef   FRAMEWIN_ALLOW_DRAG_ON_FRAME
+  #define FRAMEWIN_ALLOW_DRAG_ON_FRAME 1
+#endif
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define FRAMEWIN_CI_INACTIVE 0
+#define FRAMEWIN_CI_ACTIVE   1
+
+/*********************************************************************
+*
+*       Create / Status flags
+*/
+#define FRAMEWIN_CF_ACTIVE     (1<<3)
+#define FRAMEWIN_CF_MOVEABLE   (1<<4)
+#define FRAMEWIN_CF_TITLEVIS   (1<<5)
+#define FRAMEWIN_CF_MINIMIZED  (1<<6)
+#define FRAMEWIN_CF_MAXIMIZED  (1<<7)
+#define FRAMEWIN_CF_DRAGGING   (1<<8)
+
+#define FRAMEWIN_SF_ACTIVE     FRAMEWIN_CF_ACTIVE
+#define FRAMEWIN_SF_MOVEABLE   FRAMEWIN_CF_MOVEABLE
+#define FRAMEWIN_SF_TITLEVIS   FRAMEWIN_CF_TITLEVIS
+#define FRAMEWIN_SF_MINIMIZED  FRAMEWIN_CF_MINIMIZED
+#define FRAMEWIN_SF_MAXIMIZED  FRAMEWIN_CF_MAXIMIZED
+#define FRAMEWIN_SF_DRAGGING   FRAMEWIN_CF_DRAGGING
+
+/*********************************************************************
+*
+*       BUTTON Flags
+*/
+#define FRAMEWIN_BUTTON_RIGHT   (1<<0)
+#define FRAMEWIN_BUTTON_LEFT    (1<<1)
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define FRAMEWIN_SKINFLEX_PI_ACTIVE   0
+#define FRAMEWIN_SKINFLEX_PI_INACTIVE 1
+
+/*********************************************************************
+*
+*       Getting border size
+*/
+#define FRAMEWIN_BORDERSIZE_T 0
+#define FRAMEWIN_BORDERSIZE_L 1
+#define FRAMEWIN_BORDERSIZE_B 2
+#define FRAMEWIN_BORDERSIZE_R 3
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM FRAMEWIN_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[3];
+  GUI_COLOR aColorTitle[2];
+  int Radius;
+  int SpaceX;
+  int BorderSizeL;
+  int BorderSizeR;
+  int BorderSizeT;
+  int BorderSizeB;
+} FRAMEWIN_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+FRAMEWIN_Handle FRAMEWIN_Create        (const char * pTitle, WM_CALLBACK * cb, int Flags, int x0, int y0, int xSize, int ySize);
+FRAMEWIN_Handle FRAMEWIN_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, const char * pText, WM_CALLBACK * cb, int Flags);
+FRAMEWIN_Handle FRAMEWIN_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pTitle, WM_CALLBACK * cb);
+FRAMEWIN_Handle FRAMEWIN_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pTitle, WM_CALLBACK * cb, int NumExtraBytes);
+FRAMEWIN_Handle FRAMEWIN_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void FRAMEWIN_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions: Set Properties
+*
+**********************************************************************
+*/
+WM_HWIN FRAMEWIN_AddButton     (FRAMEWIN_Handle hObj, int Flags, int Off, int Id);
+WM_HWIN FRAMEWIN_AddCloseButton(FRAMEWIN_Handle hObj, int Flags, int Off);
+WM_HWIN FRAMEWIN_AddMaxButton  (FRAMEWIN_Handle hObj, int Flags, int Off);
+void    FRAMEWIN_AddMenu       (FRAMEWIN_Handle hObj, WM_HWIN hMenu);
+WM_HWIN FRAMEWIN_AddMinButton  (FRAMEWIN_Handle hObj, int Flags, int Off);
+void    FRAMEWIN_Minimize      (FRAMEWIN_Handle hObj);
+void    FRAMEWIN_Maximize      (FRAMEWIN_Handle hObj);
+void    FRAMEWIN_Restore       (FRAMEWIN_Handle hObj);
+void    FRAMEWIN_SetActive     (FRAMEWIN_Handle hObj, int State);
+void    FRAMEWIN_SetBarColor   (FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void    FRAMEWIN_SetBorderSize (FRAMEWIN_Handle hObj, unsigned Size);
+void    FRAMEWIN_SetClientColor(FRAMEWIN_Handle hObj, GUI_COLOR Color);
+void    FRAMEWIN_SetFont       (FRAMEWIN_Handle hObj, const GUI_FONT * pFont);
+void    FRAMEWIN_SetMoveable   (FRAMEWIN_Handle hObj, int State);
+void    FRAMEWIN_SetOwnerDraw  (FRAMEWIN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void    FRAMEWIN_SetResizeable (FRAMEWIN_Handle hObj, int State);
+void    FRAMEWIN_SetText       (FRAMEWIN_Handle hObj, const char* s);
+void    FRAMEWIN_SetTextAlign  (FRAMEWIN_Handle hObj, int Align);
+void    FRAMEWIN_SetTextColor  (FRAMEWIN_Handle hObj, GUI_COLOR Color);
+void    FRAMEWIN_SetTextColorEx(FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void    FRAMEWIN_SetTitleVis   (FRAMEWIN_Handle hObj, int Show);
+int     FRAMEWIN_SetTitleHeight(FRAMEWIN_Handle hObj, int Height);
+int     FRAMEWIN_SetUserData   (FRAMEWIN_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void FRAMEWIN_GetSkinFlexProps     (FRAMEWIN_SKINFLEX_PROPS * pProps, int Index);
+void FRAMEWIN_SetSkinClassic       (FRAMEWIN_Handle hObj);
+void FRAMEWIN_SetSkin              (FRAMEWIN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  FRAMEWIN_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void FRAMEWIN_SetSkinFlexProps     (const FRAMEWIN_SKINFLEX_PROPS * pProps, int Index);
+void FRAMEWIN_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * FRAMEWIN_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define FRAMEWIN_SKIN_FLEX    FRAMEWIN_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Member functions: Get Properties
+*
+**********************************************************************
+*/
+const GUI_FONT * FRAMEWIN_GetFont(FRAMEWIN_Handle hObj);
+
+int       FRAMEWIN_GetActive      (FRAMEWIN_Handle hObj);
+int       FRAMEWIN_GetTitleHeight (FRAMEWIN_Handle hObj);
+GUI_COLOR FRAMEWIN_GetBarColor    (FRAMEWIN_Handle hObj, unsigned Index);
+int       FRAMEWIN_GetBorderSize  (FRAMEWIN_Handle hObj);
+int       FRAMEWIN_GetBorderSizeEx(FRAMEWIN_Handle hObj, unsigned Edge);
+void      FRAMEWIN_GetText        (FRAMEWIN_Handle hObj, char * pBuffer, int MaxLen);
+int       FRAMEWIN_GetTextAlign   (FRAMEWIN_Handle hObj);
+int       FRAMEWIN_GetUserData    (FRAMEWIN_Handle hObj, void * pDest, int NumBytes);
+int       FRAMEWIN_IsMinimized    (FRAMEWIN_Handle hObj);
+int       FRAMEWIN_IsMaximized    (FRAMEWIN_Handle hObj);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR        FRAMEWIN_GetDefaultBarColor   (unsigned Index);
+int              FRAMEWIN_GetDefaultBorderSize (void);
+int              FRAMEWIN_GetDefaultTitleHeight(void);
+GUI_COLOR        FRAMEWIN_GetDefaultClientColor(void);
+const GUI_FONT * FRAMEWIN_GetDefaultFont       (void);
+GUI_COLOR        FRAMEWIN_GetDefaultTextColor  (unsigned Index);
+int              FRAMEWIN_OwnerDraw            (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void             FRAMEWIN_SetDefaultBarColor   (unsigned Index, GUI_COLOR Color);
+void             FRAMEWIN_SetDefaultBorderSize (int DefaultBorderSize);
+void             FRAMEWIN_SetDefaultTitleHeight(int DefaultTitleHeight);
+void             FRAMEWIN_SetDefaultClientColor(GUI_COLOR Color);
+void             FRAMEWIN_SetDefaultFont       (const GUI_FONT * pFont);
+int              FRAMEWIN_SetDefaultTextAlign  (int TextAlign);
+void             FRAMEWIN_SetDefaultTextColor  (unsigned Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+*       Macros for compatibility
+*
+**********************************************************************
+*/
+#define         FRAMEWIN_SetDefaultCaptionSize(Height)       FRAMEWIN_SetDefaultTitleHeight(Height)
+#define         FRAMEWIN_GetDefaultCaptionSize()             FRAMEWIN_GetDefaultTitleHeight()
+#define         FRAMEWIN_CreateButton(hObj, Flags, Off, Id)  FRAMEWIN_AddButton(hObj, Flags, Off, Id) 
+#define         FRAMEWIN_CreateCloseButton(hObj, Flags, Off) FRAMEWIN_AddCloseButton(hObj, Flags, Off)
+#define         FRAMEWIN_CreateMaxButton(hObj, Flags, Off)   FRAMEWIN_AddMaxButton(hObj, Flags, Off)  
+#define         FRAMEWIN_CreateMinButton(hObj, Flags, Off)   FRAMEWIN_AddMinButton(hObj, Flags, Off)  
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // FRAMEWIN_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/FRAMEWIN_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,259 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : FRAMEWIN_Private.h
+Purpose     : FRAMEWIN private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef FRAMEWIN_PRIVATE_H
+#define FRAMEWIN_PRIVATE_H
+
+#include "WM.h"
+#include "FRAMEWIN.h"
+#include "WIDGET.h"
+#include "GUI_HOOK.h"
+
+#if GUI_WINSUPPORT
+
+/******************************************************************
+*
+*       Config defaults
+*
+*******************************************************************
+*/
+//
+//Support for 3D effects
+//
+#ifndef FRAMEWIN_CLIENTCOLOR_DEFAULT
+  #if WIDGET_USE_FLEX_SKIN
+    #define FRAMEWIN_CLIENTCOLOR_DEFAULT GUI_WHITE
+  #else
+    #define FRAMEWIN_CLIENTCOLOR_DEFAULT GUI_GRAY_C0
+  #endif
+#endif
+
+//
+// Default for top frame size
+//
+#ifndef FRAMEWIN_TITLEHEIGHT_DEFAULT
+  #define FRAMEWIN_TITLEHEIGHT_DEFAULT 0
+#endif
+
+//
+// Default for left/right/top/bottom frame size
+//
+#ifndef FRAMEWIN_BORDER_DEFAULT
+  #define FRAMEWIN_BORDER_DEFAULT 3
+#endif
+
+//
+// Default for inner frame size
+//
+#ifndef FRAMEWIN_IBORDER_DEFAULT
+  #define FRAMEWIN_IBORDER_DEFAULT 1
+#endif
+
+//
+// Default font
+//
+#ifndef FRAMEWIN_DEFAULT_FONT
+  #if WIDGET_USE_FLEX_SKIN
+    #if   WIDGET_USE_SCHEME_SMALL
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font13_1
+    #elif WIDGET_USE_SCHEME_MEDIUM
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font16_1
+    #elif WIDGET_USE_SCHEME_LARGE
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font24_1
+    #endif
+  #else
+    #if   WIDGET_USE_SCHEME_SMALL
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font8_1
+    #elif WIDGET_USE_SCHEME_MEDIUM
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font13_1
+    #elif WIDGET_USE_SCHEME_LARGE
+      #define FRAMEWIN_DEFAULT_FONT &GUI_Font16_1
+    #endif
+  #endif
+#endif
+
+//
+// Default bar color when framewin is active
+//
+#ifndef FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT
+  #define FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT GUI_BLUE
+#endif
+
+//
+// Default bar color when framewin is inactive
+//
+#ifndef FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT
+  #define FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT GUI_DARKGRAY
+#endif
+
+//
+// Default frame color
+//
+#ifndef FRAMEWIN_FRAMECOLOR_DEFAULT
+  #define FRAMEWIN_FRAMECOLOR_DEFAULT GUI_GRAY_AA
+#endif
+
+//
+// Default text color when framewin is active
+//
+#ifndef FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT
+  #if WIDGET_USE_FLEX_SKIN
+    #define FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT GUI_BLACK
+  #else
+    #define FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT GUI_WHITE
+  #endif
+#endif
+
+//
+// Default text color when framewin is inactive
+//
+#ifndef FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT
+  #if WIDGET_USE_FLEX_SKIN
+    #define FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT GUI_BLACK
+  #else
+    #define FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT GUI_WHITE
+  #endif
+#endif
+
+//
+// Default text alignment
+//
+#ifndef FRAMEWIN_TEXTALIGN_DEFAULT
+  #define FRAMEWIN_TEXTALIGN_DEFAULT GUI_TA_LEFT
+#endif
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  unsigned              (* pfGetBordersize)(FRAMEWIN_Handle hObj, unsigned Index);
+  WIDGET_DRAW_ITEM_FUNC  * pfDrawSkin;
+} FRAMEWIN_SKIN_PRIVATE;
+
+typedef struct {
+  const GUI_FONT      * pFont;
+  GUI_COLOR             aBarColor[2];
+  GUI_COLOR             aTextColor[2];
+  GUI_COLOR             ClientColor;
+  FRAMEWIN_SKIN_PRIVATE SkinPrivate;
+  I16                   TitleHeight;
+  I16                   BorderSize;
+  I16                   IBorderSize;
+  I16                   TextAlign;
+} FRAMEWIN_PROPS;
+
+typedef struct {
+  WIDGET                  Widget;
+  FRAMEWIN_PROPS          Props;
+  WIDGET_SKIN const     * pWidgetSkin;
+  WIDGET_DRAW_ITEM_FUNC * pfDrawItem;      // Only for drawing the title bar...
+  WM_CALLBACK           * cb;
+  WM_HWIN                 hClient;
+  WM_HWIN                 hMenu;
+  WM_HWIN                 hText;
+  GUI_RECT                rRestore;
+  U16                     Flags;
+  WM_HWIN                 hFocusedChild;   // Handle to focused child .. default none (0)
+  WM_DIALOG_STATUS      * pDialogStatus;
+  GUI_HOOK              * pFirstHook;
+} FRAMEWIN_Obj;
+
+typedef struct {
+  I16      TitleHeight;
+  I16      MenuHeight;
+  GUI_RECT rClient;
+  GUI_RECT rTitleText;
+} FRAMEWIN_POSITIONS;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define FRAMEWIN_INIT_ID(p) (p->Widget.DebugId = FRAMEWIN_ID)
+#else
+  #define FRAMEWIN_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  FRAMEWIN_Obj * FRAMEWIN_LockH(FRAMEWIN_Handle h);
+  #define FRAMEWIN_LOCK_H(h)   FRAMEWIN_LockH(h)
+#else
+  #define FRAMEWIN_LOCK_H(h)   (FRAMEWIN_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern FRAMEWIN_PROPS      FRAMEWIN__DefaultProps;
+
+extern const WIDGET_SKIN   FRAMEWIN__SkinClassic;
+extern       WIDGET_SKIN   FRAMEWIN__Skin;
+
+extern const WIDGET_SKIN * FRAMEWIN__pSkinDefault;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void     FRAMEWIN__CalcPositions  (FRAMEWIN_Handle hObj, FRAMEWIN_POSITIONS * pPos);
+int      FRAMEWIN__CalcTitleHeight(FRAMEWIN_Obj * pObj);
+void     FRAMEWIN__UpdatePositions(FRAMEWIN_Handle hObj);
+void     FRAMEWIN__UpdateButtons  (FRAMEWIN_Handle hObj, int OldHeight, int OldBorderSizeL, int OldBorderSizeR, int OldBorderSizeT);
+void     FRAMEWIN__GetTitleLimits (FRAMEWIN_Handle hObj, int * pxMin, int * pxMax);
+unsigned FRAMEWIN__GetBorderSize  (FRAMEWIN_Handle hObj, unsigned Index);
+
+#endif   // GUI_WINSUPPORT
+#endif   // FRAMEWIN_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GRAPH.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,199 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GRAPH.h
+Purpose     : GRAPH include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GRAPH_H
+#define GRAPH_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define GRAPH_CI_BK                  0
+#define GRAPH_CI_BORDER              1
+#define GRAPH_CI_FRAME               2
+#define GRAPH_CI_GRID                3
+
+#define GRAPH_SCALE_CF_HORIZONTAL    (0 << 0)
+#define GRAPH_SCALE_CF_VERTICAL      (1 << 0)
+
+#define GRAPH_SCALE_SF_HORIZONTAL    GRAPH_SCALE_CF_HORIZONTAL
+#define GRAPH_SCALE_SF_VERTICAL      GRAPH_SCALE_CF_VERTICAL
+
+#define GRAPH_DRAW_FIRST             0
+#define GRAPH_DRAW_AFTER_BORDER      1
+#define GRAPH_DRAW_LAST              2
+
+#define GRAPH_ALIGN_RIGHT            (0 << 0)
+#define GRAPH_ALIGN_LEFT             (1 << 0)
+
+//
+// Creation flags (ExFlags)
+//
+#define GRAPH_CF_GRID_FIXED_X        (1 << 0)
+#define GRAPH_CF_AVOID_SCROLLBAR_H   (1 << 1)
+#define GRAPH_CF_AVOID_SCROLLBAR_V   (1 << 2)
+
+//
+// Status flags
+//
+#define GRAPH_SF_AVOID_SCROLLBAR_H   GRAPH_CF_AVOID_SCROLLBAR_H
+#define GRAPH_SF_AVOID_SCROLLBAR_V   GRAPH_CF_AVOID_SCROLLBAR_V
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM GRAPH_Handle;
+typedef WM_HMEM GRAPH_DATA_Handle;
+typedef WM_HMEM GRAPH_SCALE_Handle;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+
+GRAPH_Handle GRAPH_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+GRAPH_Handle GRAPH_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+GRAPH_Handle GRAPH_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+GRAPH_DATA_Handle  GRAPH_DATA_XY_Create(GUI_COLOR Color, unsigned MaxNumItems, const GUI_POINT * pData, unsigned NumItems);
+GRAPH_DATA_Handle  GRAPH_DATA_YT_Create(GUI_COLOR Color, unsigned MaxNumItems, const I16 * pData, unsigned NumItems);
+GRAPH_SCALE_Handle GRAPH_SCALE_Create  (int Pos, int TextAlign, unsigned Flags, unsigned TickDist);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void GRAPH_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void      GRAPH_AttachData             (GRAPH_Handle hObj, GRAPH_DATA_Handle hData);
+void      GRAPH_AttachScale            (GRAPH_Handle hObj, GRAPH_SCALE_Handle hScale);
+void      GRAPH_DetachData             (GRAPH_Handle hObj, GRAPH_DATA_Handle hData);
+void      GRAPH_DetachScale            (GRAPH_Handle hObj, GRAPH_SCALE_Handle hScale);
+GUI_COLOR GRAPH_GetColor               (GRAPH_Handle hObj, unsigned Index);
+I32       GRAPH_GetScrollValue         (GRAPH_Handle hObj, U8 Coord);
+int       GRAPH_GetUserData            (GRAPH_Handle hObj, void * pDest, int NumBytes);
+void      GRAPH_SetAutoScrollbar       (GRAPH_Handle hObj, U8 Coord, U8 OnOff);
+void      GRAPH_SetBorder              (GRAPH_Handle hObj, unsigned BorderL, unsigned BorderT, unsigned BorderR, unsigned BorderB);
+GUI_COLOR GRAPH_SetColor               (GRAPH_Handle hObj, GUI_COLOR Color, unsigned Index);
+unsigned  GRAPH_SetGridFixedX          (GRAPH_Handle hObj, unsigned OnOff);
+unsigned  GRAPH_SetGridOffX            (GRAPH_Handle hObj, unsigned Value);
+unsigned  GRAPH_SetGridOffY            (GRAPH_Handle hObj, unsigned Value);
+unsigned  GRAPH_SetGridVis             (GRAPH_Handle hObj, unsigned OnOff);
+unsigned  GRAPH_SetGridDistX           (GRAPH_Handle hObj, unsigned Value);
+unsigned  GRAPH_SetGridDistY           (GRAPH_Handle hObj, unsigned Value);
+U8        GRAPH_SetLineStyleH          (GRAPH_Handle hObj, U8 Value);
+U8        GRAPH_SetLineStyleV          (GRAPH_Handle hObj, U8 Value);
+void      GRAPH_SetLineStyle           (GRAPH_Handle hObj, U8 Value);
+void      GRAPH_SetScrollValue         (GRAPH_Handle hObj, U8 Coord, U32 Value);
+unsigned  GRAPH_SetVSizeX              (GRAPH_Handle hObj, unsigned Value);
+unsigned  GRAPH_SetVSizeY              (GRAPH_Handle hObj, unsigned Value);
+int       GRAPH_SetUserData            (GRAPH_Handle hObj, const void * pSrc, int NumBytes);
+void      GRAPH_SetUserDraw            (GRAPH_Handle hObj, void (* pOwnerDraw)(WM_HWIN, int));
+
+void      GRAPH_DATA_YT_AddValue       (GRAPH_DATA_Handle hDataObj, I16 Value);
+void      GRAPH_DATA_YT_Clear          (GRAPH_DATA_Handle hDataObj);
+void      GRAPH_DATA_YT_Delete         (GRAPH_DATA_Handle hDataObj);
+int       GRAPH_DATA_YT_GetValue       (GRAPH_DATA_Handle hDataObj, I16 * pValue, U32 Index);
+
+void      GRAPH_DATA_YT_SetAlign       (GRAPH_DATA_Handle hDataObj, int Align);
+void      GRAPH_DATA_YT_SetOffY        (GRAPH_DATA_Handle hDataObj, int Off);
+void      GRAPH_DATA_YT_MirrorX        (GRAPH_DATA_Handle hDataObj, int OnOff);
+
+void      GRAPH_DATA_XY_AddPoint       (GRAPH_DATA_Handle hDataObj, GUI_POINT * pPoint);
+void      GRAPH_DATA_XY_Clear          (GRAPH_DATA_Handle hDataObj);
+void      GRAPH_DATA_XY_Delete         (GRAPH_DATA_Handle hDataObj);
+unsigned  GRAPH_DATA_XY_GetLineVis     (GRAPH_DATA_Handle hDataObj);
+int       GRAPH_DATA_XY_GetPoint       (GRAPH_DATA_Handle hDataObj, GUI_POINT * pPoint, U32 Index);
+unsigned  GRAPH_DATA_XY_GetPointVis    (GRAPH_DATA_Handle hDataObj);
+void      GRAPH_DATA_XY_SetLineStyle   (GRAPH_DATA_Handle hDataObj, U8 LineStyle);
+unsigned  GRAPH_DATA_XY_SetLineVis     (GRAPH_DATA_Handle hDataObj, unsigned OnOff);
+void      GRAPH_DATA_XY_SetOffX        (GRAPH_DATA_Handle hDataObj, int Off);
+void      GRAPH_DATA_XY_SetOffY        (GRAPH_DATA_Handle hDataObj, int Off);
+void      GRAPH_DATA_XY_SetPenSize     (GRAPH_DATA_Handle hDataObj, U8 PenSize);
+void      GRAPH_DATA_XY_SetPointSize   (GRAPH_DATA_Handle hDataObj, unsigned PointSize);
+unsigned  GRAPH_DATA_XY_SetPointVis    (GRAPH_DATA_Handle hDataObj, unsigned OnOff);
+void      GRAPH_DATA_XY_SetOwnerDraw   (GRAPH_DATA_Handle hDataObj, WIDGET_DRAW_ITEM_FUNC * pOwnerDraw);
+
+void             GRAPH_SCALE_Delete      (GRAPH_SCALE_Handle hScaleObj);
+float            GRAPH_SCALE_SetFactor   (GRAPH_SCALE_Handle hScaleObj, float Factor);
+const GUI_FONT * GRAPH_SCALE_SetFont     (GRAPH_SCALE_Handle hScaleObj, const GUI_FONT * pFont);
+int              GRAPH_SCALE_SetNumDecs  (GRAPH_SCALE_Handle hScaleObj, int NumDecs);
+int              GRAPH_SCALE_SetOff      (GRAPH_SCALE_Handle hScaleObj, int Off);
+int              GRAPH_SCALE_SetPos      (GRAPH_SCALE_Handle hScaleObj, int Pos);
+GUI_COLOR        GRAPH_SCALE_SetTextColor(GRAPH_SCALE_Handle hScaleObj, GUI_COLOR Color);
+unsigned         GRAPH_SCALE_SetTickDist (GRAPH_SCALE_Handle hScaleObj, unsigned Value);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // GRAPH_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GRAPH_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,163 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GRAPH_Private.h
+Purpose     : GRAPH private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GRAPH_PRIVATE_H
+#define GRAPH_PRIVATE_H
+
+#include "GRAPH.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct GRAPH_OBJ        GRAPH_OBJ;
+typedef struct GRAPH_DATA_OBJ   GRAPH_DATA_OBJ;
+typedef struct GRAPH_SCALE_OBJ  GRAPH_SCALE_OBJ;
+typedef struct GRAPH_PAINT_OBJ  GRAPH_PAINT_OBJ;
+
+struct GRAPH_PAINT_OBJ {
+  void    (* pfOnPaint)  (WM_HMEM hObj, GUI_RECT * pRectInvalid); /* Pointer to paint function */ 
+  void    (* pfOnDelete) (WM_HMEM hObj);                          /* Pointer to delete function */
+  WM_HWIN hGraph;                                                 /* Handle of graph widget */    
+};
+
+typedef struct {
+  GUI_COLOR        TextColor;
+  const GUI_FONT * pFont;
+} GRAPH_SCALE_PROPS;
+
+struct GRAPH_SCALE_OBJ {
+  GRAPH_PAINT_OBJ   PaintObj;
+  GRAPH_SCALE_PROPS Props;
+  int               Pos;
+  int               TextAlign;
+  unsigned          TickDist;
+  int               Off;
+  U16               Flags;
+  float             Factor;
+  int               NumDecs;
+};
+
+struct GRAPH_DATA_OBJ {
+  GRAPH_PAINT_OBJ PaintObj;
+  void         (* pfInvalidateNewItem)(GRAPH_DATA_OBJ * pDataObj); /* Pointer to a function which can be used for invalidating the required area */
+  unsigned        NumItems;
+  unsigned        MaxNumItems;
+  GUI_COLOR       Color;
+  int             OffX, OffY;
+};
+
+typedef struct {
+  GUI_COLOR aColor[4];
+  unsigned  GridSpacingX;
+  unsigned  GridSpacingY;
+  unsigned  GridOffX;
+  unsigned  GridOffY;
+  unsigned  BorderL;
+  unsigned  BorderT;
+  unsigned  BorderR;
+  unsigned  BorderB;
+} GRAPH_PROPS;
+
+struct GRAPH_OBJ {
+  WIDGET          Widget;
+  GRAPH_PROPS     Props;
+  GUI_ARRAY       GraphArray;
+  GUI_ARRAY       ScaleArray;
+  U8              ShowGrid;
+  unsigned        RangeX, RangeY;
+  U16             Flags;
+  U8              LineStyleV;
+  U8              LineStyleH;
+  WM_SCROLL_STATE ScrollStateV;
+  WM_SCROLL_STATE ScrollStateH;
+  void            (* pUserDraw)(WM_HWIN hObj, int Stage);
+};
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define GRAPH_INIT_ID(p) (p->Widget.DebugId = GRAPH_ID)
+#else
+  #define GRAPH_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  GRAPH_OBJ * GRAPH_LockH(GRAPH_Handle h);
+  #define GRAPH_LOCK_H(h)   GRAPH_LockH(h)
+#else
+  #define GRAPH_LOCK_H(h)   (GRAPH_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern GRAPH_PROPS GRAPH__DefaultProps;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void GRAPH__AddValue       (GRAPH_DATA_OBJ * pDataObj, void * pData, void * pValue, int Size);
+int  GRAPH__GetValue       (GRAPH_DATA_OBJ * pDataObj, void * pData, void * pValue, int Size, U32 Index);
+void GRAPH__InvalidateGraph(GRAPH_Handle hObj);
+
+#endif /* GUI_WINSUPPORT */
+#endif /* GRAPH_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,2506 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI.h
+Purpose     : GUI API include file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef  GUI_H
+#define  GUI_H
+
+#include <stddef.h>
+
+#include "GUI_ConfDefaults.h"
+#include "GUI_Type.h"
+#include "GUI_Version.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Disable string function warning with newer MSVC versions
+*/
+#if defined (_MSC_VER)
+  #if (_MSC_VER > 1200)
+    #pragma warning( disable : 4996)
+  #endif
+#endif
+
+/*********************************************************************
+*
+*       Macros, function replacement
+*/
+#define GUI_COUNTOF(a)          (sizeof(a) / sizeof(a[0]))
+#define GUI_MIN(a,b)            (((a) < (b)) ? (a) : (b))
+#define GUI_MAX(a,b)            (((a) > (b)) ? (a) : (b))
+#define GUI_ZEROFILL(p, Size)   (memset(p, 0, Size)) /**/
+
+/*********************************************************************
+*
+*       Support for multitasking systems (locking)
+*/
+typedef struct GUI_CONTEXT GUI_CONTEXT;
+
+#if !GUI_OS
+  #define GUI_LOCK()
+  #define GUI_UNLOCK()
+  #define GUITASK_INIT()
+  #define GUITASK_COPY_CONTEXT()
+#else
+  void GUI_Lock(void);
+  void GUI_Unlock(void);
+  void GUITASK_Init(void);
+  void GUITASK_CopyContext(void);
+  void GUITASK_SetMaxTask(int MaxTask);
+  int  GUITASK_GetMaxTask(void);
+  GUI_CONTEXT * GUITASK_GetpContext(int Index);
+  #define GUI_LOCK()             GUI_Lock()
+  #define GUI_UNLOCK()           GUI_Unlock()
+  #define GUITASK_INIT()         GUITASK_Init()
+  #define GUITASK_COPY_CONTEXT() GUITASK_CopyContext()
+#endif
+
+/*********************************************************************
+*
+*       API table of a display driver
+*/
+struct GUI_DEVICE_API {
+  //
+  // Data
+  //
+  int DeviceClassIndex;
+  //
+  // Drawing functions
+  //
+  void           (* pfDrawBitmap   )(GUI_DEVICE *  pDevice,  int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+  void           (* pfDrawHLine    )(GUI_DEVICE *  pDevice,  int x0, int y0,  int x1);
+  void           (* pfDrawVLine    )(GUI_DEVICE *  pDevice,  int x , int y0,  int y1);
+  void           (* pfFillRect     )(GUI_DEVICE *  pDevice,  int x0, int y0, int x1, int y1);
+  LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE *  pDevice,  int x, int y);
+  void           (* pfSetPixelIndex)(GUI_DEVICE *  pDevice,  int x, int y, LCD_PIXELINDEX ColorIndex);
+  void           (* pfXorPixel     )(GUI_DEVICE *  pDevice,  int x, int y);
+  //
+  // Set origin
+  //
+  void           (* pfSetOrg       )(GUI_DEVICE *  pDevice,  int x, int y);
+  //
+  // Request information
+  //
+  void         (*(* pfGetDevFunc)   (GUI_DEVICE ** ppDevice, int Index))(void);
+  I32            (* pfGetDevProp   )(GUI_DEVICE *  pDevice,  int Index);
+  void          *(* pfGetDevData   )(GUI_DEVICE *  pDevice,  int Index);
+  void           (* pfGetRect      )(GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+};
+
+/*********************************************************************
+*
+*       Device classes
+*/
+typedef enum {
+  DEVICE_CLASS_DRIVER = 0,
+  DEVICE_CLASS_DRIVER_MODIFIER,   // Zoom or delta-pixel modifier
+  DEVICE_CLASS_VNC,
+  DEVICE_CLASS_SPRITE,
+  DEVICE_CLASS_MEMDEV,
+  DEVICE_CLASS_ALPHA,
+  DEVICE_CLASS_AUTOALPHA,
+  DEVICE_CLASS_MEASDEV
+} DEVICE_CLASS;
+
+#define GUI_DEVICE_STAYONTOP 1
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+extern const GUI_DEVICE_API GUIDRV_Template_API;
+
+//
+// Macros to be used in configuration files
+//
+#define GUIDRV_WIN32       &GUIDRV_Win_API
+
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+  #define GUIDRV_TEMPLATE         &GUIDRV_Win_API
+#else
+  #define GUIDRV_TEMPLATE         &GUIDRV_Template_API
+#endif
+
+/*********************************************************************
+*
+*       Definition of GUI_DEVICE structure
+*/
+struct GUI_DEVICE {
+  //
+  // Linking
+  //
+  GUI_DEVICE * pNext;
+  GUI_DEVICE * pPrev;
+  //
+  // Data
+  //
+  union {
+    GUI_HMEM hContext; // Handle of payload data like sprite- or memory device context
+    void   * pContext; // Pointer for context data in a fixed block
+  } u;
+  //
+  // API pointers
+  //
+  const GUI_DEVICE_API     * pDeviceAPI;
+  const LCD_API_COLOR_CONV * pColorConvAPI;
+  U16 Flags;
+  int LayerIndex;
+};
+
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_1;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_8;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_16;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_32;
+
+/*********************************************************************
+*
+*       GUI_CONTEXT
+*
+*  This structure is public for one reason only:
+*  To allow the application to save and restore the context.
+*/
+typedef union {
+  U8  aColorIndex8[2];
+  U16 aColorIndex16[2];
+  U32 aColorIndex32[2];
+} LCD_COLORINDEX_UNION;
+
+struct GUI_CONTEXT {
+  //
+  // Variables in LCD module
+  //
+  LCD_COLORINDEX_UNION uLCD;
+  LCD_RECT       ClipRect;
+  U8             DrawMode;
+  U8             SelLayer;
+  U8             TextStyle;
+  //
+  // Variables in GL module
+  //
+  GUI_RECT * pClipRect_HL;                 // High level clip rectangle ... Speed optimization so drawing routines can optimize
+  U8         PenSize;
+  U8         PenShape;
+  U8         LineStyle;
+  U8         StrikeWidth;
+  //
+  // Variables in GUICHAR module
+  //
+  const GUI_FONT * pAFont;
+  I16P LBorder;
+  I16P DispPosX, DispPosY;
+  I16P DrawPosX, DrawPosY;
+  I16P TextMode, TextAlign;
+  GUI_COLOR Color, BkColor;                // Required only when changing devices and for speed opt (caching)
+  //
+  // Pointer to  color indices
+  //
+  LCD_PIXELINDEX * LCD_pBkColorIndex;
+  LCD_PIXELINDEX * LCD_pColorIndex;
+  //
+  // Variables in WM module
+  //
+  #if GUI_WINSUPPORT
+    const GUI_RECT * WM__pUserClipRect;
+    GUI_HWIN hAWin;
+    int xOff, yOff;
+    U8 WM_IsActive;
+  #endif
+  //
+  // Array of pointers to device chains
+  //
+  GUI_DEVICE * apDriver[GUI_NUM_LAYERS];
+  //
+  // Variables in MEMDEV module (with memory devices only)
+  //
+  GUI_HMEM    hDevData;
+  //
+  // Variables in Anitaliasing module
+  //
+  const tLCD_HL_APIList * pLCD_HL;       // Required to reroute drawing (HLine & Pixel) to the AA module
+  U8 AA_Factor;
+  U8 AA_HiResEnable;
+  void (* AA_pfSetPixelAA)(int x, int y, U8 Intens); // Function to be used for drawing a single pixel
+  //
+  // Used to reference and link in the copyright string for libraries.
+  //
+  const char * sCopyright;
+};
+
+/* Rename GUI_SaveContext in order to avoid crashes if wrong GUIConf is used */
+#if (GUI_WINSUPPORT == 1)
+  #define GUI_SaveContext GUI_SaveContext_W
+#else
+  #define GUI_SaveContext GUI_SaveContext_
+#endif
+
+/*********************************************************************
+*
+*       Device management
+*/
+GUI_DEVICE * GUI_DEVICE_Create       (const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+GUI_DEVICE * GUI_DEVICE_CreateAndLink(const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+void         GUI_DEVICE_Delete       (GUI_DEVICE * pDevice);
+int          GUI_DEVICE_Link         (GUI_DEVICE * pDevice);
+void         GUI_DEVICE_Unlink       (GUI_DEVICE * pDevice);
+GUI_DEVICE * GUI_DEVICE__GetpDriver  (int LayerIndex);
+GUI_DEVICE * GUI_DEVICE__GetpDevice  (int LayerIndex, int DeviceClass);
+
+GUI_DEVICE * GUI_DEVICE_UnlinkTaskDevices(void);
+void         GUI_DEVICE_LinkDevices      (GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+*       GUI_DIRTYDEVICE
+*/
+typedef struct {
+  void * pData;         // Pointer to first pixel
+  int    x0, y0;        // Coordinates of the upper left pixel
+  int    xSize, ySize;  // Size of dirty rectangle
+  int    LineOff;       // Virtual xSize in pixels
+  int    BytesPerPixel; // Number of bytes required per pixel
+  int    IsDirty;       // Indicates if dirty pixels exist
+} GUI_DIRTYDEVICE_INFO;
+
+int GUI_DIRTYDEVICE_Create      (void);
+int GUI_DIRTYDEVICE_CreateEx    (int LayerIndex);
+int GUI_DIRTYDEVICE_CreateExInfo(GUI_DIRTYDEVICE_INFO * pInfo, int LayerIndex);
+int GUI_DIRTYDEVICE_Delete      (void);
+int GUI_DIRTYDEVICE_DeleteEx    (int LayerIndex);
+int GUI_DIRTYDEVICE_Fetch       (GUI_DIRTYDEVICE_INFO * pInfo);
+int GUI_DIRTYDEVICE_FetchEx     (GUI_DIRTYDEVICE_INFO * pInfo, int LayerIndex);
+
+/*********************************************************************
+*
+*       GUI_GCACHE
+*/
+int GUI_GCACHE_4_Create(const LCD_API_COLOR_CONV * pColorConvAPI);
+int GUI_GCACHE_4_CreateEx(int LayerIndex, const LCD_API_COLOR_CONV * pColorConvAPI);
+
+/*********************************************************************
+*
+*       GUI_DCACHE
+*/
+void GUI_DCACHE_SetClearCacheHook(void (* pFunc)(U32 LayerMask));
+void GUI_DCACHE_Clear            (U32 LayerMask);
+
+extern void (* GUI_DCACHE__pfClearCacheHook)(U32 LayerMask);
+
+/*********************************************************************
+*
+*       GUI_SOFTLAYER
+*/
+typedef struct {
+  int xPos;
+  int yPos;
+  int xSize;
+  int ySize;
+  int Visible;
+} GUI_SOFTLAYER_CONFIG;
+
+int  GUI_SOFTLAYER_Enable           (GUI_SOFTLAYER_CONFIG * pConfig, int NumLayers, GUI_COLOR CompositeColor);
+int  GUI_SOFTLAYER_Refresh          (void);
+void GUI_SOFTLAYER_SetCompositeColor(U32 Color);
+int  GUI_SOFTLAYER_MULTIBUF_Enable  (int OnOff);
+
+/*********************************************************************
+*
+*       General routines
+*/
+void             GUI_Exit                 (void);
+GUI_COLOR        GUI_GetDefaultBkColor    (void);
+GUI_COLOR        GUI_GetDefaultColor      (void);
+const GUI_FONT * GUI_GetDefaultFont       (void);
+int              GUI_GetScreenSizeX       (void);
+int              GUI_GetScreenSizeY       (void);
+const char *     GUI_GetVersionString     (void);
+int              GUI_Init                 (void);
+int              GUI_IsInitialized        (void);
+void             GUI_SetAfterInitHook     (void (* pFunc)(void));
+void             GUI_RegisterAfterInitHook(void (* pFunc)(void), GUI_REGISTER_INIT * pRegisterInit);
+void             GUI_RestoreContext       (const GUI_CONTEXT * pContext);
+void             GUI_SaveContext          (GUI_CONTEXT * pContext);
+const GUI_RECT * GUI_SetClipRect          (const GUI_RECT * pRect);
+void             GUI_SetControlHook       (void (* pFunc)(int LayerIndex, int Cmd));
+void             GUI_SetDefault           (void);
+void             GUI_SetDefaultBkColor    (GUI_COLOR Color);
+void             GUI_SetDefaultColor      (GUI_COLOR Color);
+void             GUI_SetDefaultFont       (const GUI_FONT * pFont);
+GUI_DRAWMODE     GUI_SetDrawMode          (GUI_DRAWMODE dm);
+void             GUI_SetScreenSizeX       (int xSize);
+void             GUI_SetScreenSizeY       (int ySize);
+void             GUI_SetRefreshHook       (void (* pFunc)(void));
+void             MainTask                 (void);
+
+#define GUI_PID_SetInitFunc(x) GUI_SetAfterInitHook(x)  // Compatibility
+
+/*********************************************************************
+*
+*       Function replacement
+*/
+void GUI_SetpfMemset(void * (* pFunc)(void * pDest, int c, size_t Cnt));
+void GUI_SetpfMemcpy(void * (* pFunc)(void * pDest, const void * pSrc, size_t Cnt));
+void GUI_SetpfStrcmp(int    (* pFunc)(const char *, const char *));
+void GUI_SetpfStrlen(size_t (* pFunc)(const char *));
+void GUI_SetpfStrcpy(char * (* pFunc)(char *, const char *));
+
+/*********************************************************************
+*
+*       Rectangle helper functions
+*/
+void GUI_AddRect        (GUI_RECT * pDest, const GUI_RECT * pRect, int Dist);
+int  GUI_RectsIntersect(const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI_MoveRect       (GUI_RECT * pRect, int x, int y);
+void GUI_MergeRect      (GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+int  GUI__IntersectRects(GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI__IntersectRect (GUI_RECT * pDest, const GUI_RECT * pr0);
+void GUI__ReduceRect    (GUI_RECT * pDest, const GUI_RECT * pRect, int Dist);
+
+/*********************************************************************
+*
+*       Misc helper functions
+*/
+I32  GUI__ATan2(I32 x, I32 y, I32 * ph);
+I32  GUI__ASinHQ(I32 SinHQ);
+int  GUI__CompactPixelIndices  (LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel);
+int  GUI__CompactPixelIndicesEx(LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+int  GUI__ConvertColor2Index   (LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI, void * pResult);
+void GUI__Config(void);
+I32  GUI__CosHQ(I32 Ang1000);
+int  GUI__DivideRound     (int a, int b);
+I32  GUI__DivideRound32   (I32 a, I32 b);
+void GUI__ExpandPixelIndices   (void * pBuffer, int NumPixels, int BitsPerPixel);
+void GUI__ExpandPixelIndicesEx (void * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+int  GUI__SetText(GUI_HMEM * phText, const char * s);
+I32  GUI__SinHQ(I32 Ang1000);
+I32  GUI__sqrt32(I32 Square);
+void GUI__DrawTwinArc2(int xl, int xr, int y0,         int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__DrawTwinArc4(int x0, int y0, int x1, int y1, int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__FillTrippleArc(int x0, int y0, int Size, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorR2, GUI_COLOR ColorFill);
+void GUI__RegisterExit(GUI_REGISTER_EXIT * pRegisterExit);
+void GUI__RegisterInit(GUI_REGISTER_INIT * pRegisterInit);
+
+/*********************************************************************
+*
+*       Optional function replacement
+*/
+void * GUI__memcpy(void * pDest, const void * pSrc, size_t NumBytes);
+void * GUI__memset(void * pDest, int c, size_t Cnt);
+
+/*********************************************************************
+*
+*       Get / Set Attributes
+*/
+GUI_COLOR GUI_GetBkColor     (void);
+int       GUI_GetBkColorIndex(void);
+GUI_COLOR GUI_GetColor       (void);
+int       GUI_GetColorIndex  (void);
+U8        GUI_GetLineStyle   (void);
+U8        GUI_GetPenSize     (void);
+U8        GUI_GetPenShape    (void);
+unsigned  GUI_GetPixelIndex  (int x, int y);
+
+void      GUI_SetBkColor   (GUI_COLOR);
+void      GUI_SetColor     (GUI_COLOR);
+void      GUI_SetBkColorIndex(int Index);
+void      GUI_SetColorIndex(int Index);
+
+U8        GUI_SetPenSize   (U8 Size);
+U8        GUI_SetPenShape  (U8 Shape);
+U8        GUI_SetLineStyle (U8 Style);
+
+/* Get/Set Character used as decimal point (usually '.' or ',') */
+char      GUI_GetDecChar(void);
+char      GUI_SetDecChar(char c);
+
+/*********************************************************************
+*
+*       Color / Index related functions
+*/
+int       GUI_Color2Index(GUI_COLOR color);
+GUI_COLOR GUI_Color2VisColor(GUI_COLOR color);
+char      GUI_ColorIsAvailable(GUI_COLOR color);
+GUI_COLOR GUI_Index2Color(int Index);
+U32       GUI_CalcColorDist (GUI_COLOR Color0, GUI_COLOR  Color1);
+U32       GUI_CalcVisColorError(GUI_COLOR color);
+
+/*********************************************************************
+*
+*       Error handler
+*/
+void GUI_SetOnErrorFunc(void (* pFunc)(const char * s));
+
+/*********************************************************************
+*
+*       Logging (for debugging primarily)
+*/
+void GUI_Log      (const char * s);
+void GUI_Log1     (const char * s, I32 p0);
+void GUI_Log2     (const char * s, I32 p0, I32 p1);
+void GUI_Log3     (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Log4     (const char * s, I32 p0, I32 p1, I32 p2,I32 p3);
+void GUI_Warn     (const char * s);
+void GUI_Warn1    (const char * s, I32 p0);
+void GUI_Warn2    (const char * s, I32 p0, I32 p1);
+void GUI_Warn3    (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Warn4    (const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+void GUI_ErrorOut (const char * s);
+void GUI_ErrorOut1(const char * s, I32 p0);
+void GUI_ErrorOut2(const char * s, I32 p0, I32 p1);
+void GUI_ErrorOut3(const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_ErrorOut4(const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+
+/*********************************************************************
+*
+*       2d - GL
+*/
+void GUI_Clear            (void);
+void GUI_ClearRect        (int x0, int y0, int x1, int y1);
+void GUI_ClearRectEx      (const GUI_RECT * pRect);
+void GUI_CopyRect         (int x0, int y0, int x1, int y1, int dx, int dy);
+void GUI_DrawArc          (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_DrawBitmap       (const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawBitmapMag    (const GUI_BITMAP * pBM, int x0, int y0, int XMul, int YMul);
+void GUI_DrawBitmapEx     (const GUI_BITMAP * pBM, int x0, int y0, int xCenter, int yCenter, int xMag, int yMag);
+void GUI_DrawBitmapExp    (int x0, int y0, int XSize, int YSize, int XMul,  int YMul, int BitsPerPixel, int BytesPerLine, const U8 * pData, const GUI_LOGPALETTE * pPal);
+void GUI_DrawBitmapHWAlpha(const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawCircle       (int x0, int y0, int r);
+void GUI_DrawEllipse      (int x0, int y0, int rx, int ry);
+void GUI_DrawGradientH    (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientV    (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedH(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedV(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGraph        (I16 * pay, int NumPoints, int x0, int y0);
+void GUI_DrawGraphEx      (I16 * pay, int NumPoints, int x0, int y0, int Numerator, int Denominator, int MirrorX);
+void GUI_DrawHLine        (int y0, int x0, int x1);
+void GUI_DrawLine         (int x0, int y0, int x1, int y1);
+void GUI_DrawLineRel      (int dx, int dy);
+void GUI_DrawLineTo       (int x, int y);
+void GUI_DrawPie          (int x0, int y0, int r, int a0, int a1, int Type);
+void GUI_DrawPixel        (int x, int y);
+void GUI_DrawPoint        (int x, int y);
+void GUI_DrawPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawPolyLine     (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawFocusRect    (const GUI_RECT  * pRect, int Dist);
+void GUI_DrawRect         (int x0, int y0, int x1, int y1);
+void GUI_DrawRectEx       (const GUI_RECT * pRect);
+void GUI_DrawRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_DrawRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_DrawVLine        (int x0, int y0, int y1);
+void GUI_FillCircle       (int x0, int y0, int r);
+void GUI_FillEllipse      (int x0, int y0, int rx, int ry);
+void GUI_FillPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_FillRect         (int x0, int y0, int x1, int y1);
+void GUI_FillRectEx       (const GUI_RECT * pRect);
+void GUI_FillRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_FillRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectB (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectT (int x0, int y0, int x1, int y1, int r);
+void GUI_GetClientRect    (GUI_RECT * pRect);
+void GUI_InvertRect       (int x0, int y0, int x1, int y1);
+void GUI_MoveRel          (int dx, int dy);
+void GUI_MoveTo           (int x, int y);
+void GUI_SetAlphaMask8888 (U32 OrMask, U32 AndMask);
+
+/*********************************************************************
+*
+*       IMAGE file support
+*/
+typedef int GUI_GET_DATA_FUNC(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off);
+
+/*********************************************************************
+*
+*       GIF file support
+*/
+int GUI_GIF_Draw           (const void * pGIF, U32 NumBytes,         int x0, int y0);
+int GUI_GIF_DrawEx         (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_GIF_DrawSub        (const void * pGIF, U32 NumBytes,         int x0, int y0, int Index);
+int GUI_GIF_DrawSubEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index);
+int GUI_GIF_DrawSubScaled  (const void * pGIF, U32 NumBytes,         int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_DrawSubScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_GetComment     (const void * pGIF, U32 NumBytes,         U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetCommentEx   (GUI_GET_DATA_FUNC * pfGetData, void * p, U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetImageInfo   (const void * pGIF, U32 NumBytes,         GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetImageInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetInfo        (const void * pGIF, U32 NumBytes,         GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetInfoEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetXSize       (const void * pGIF);
+int GUI_GIF_GetXSizeEx     (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_GetYSize       (const void * pGIF);
+int GUI_GIF_GetYSizeEx     (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_SetFillTrans   (int OnOff);
+
+/*********************************************************************
+*
+*       BMP file support
+*/
+int  GUI_BMP_Draw        (const void * pFileData,                  int x0, int y0);
+int  GUI_BMP_DrawEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int  GUI_BMP_DrawScaled  (const void * pFileData,                  int x0, int y0, int Num, int Denom);
+int  GUI_BMP_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int  GUI_BMP_GetXSize    (const void * pFileData);
+int  GUI_BMP_GetXSizeEx  (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int  GUI_BMP_GetYSize    (const void * pFileData);
+int  GUI_BMP_GetYSizeEx  (GUI_GET_DATA_FUNC * pfGetData, void * p);
+void GUI_BMP_EnableAlpha (void);
+void GUI_BMP_DisableAlpha(void);
+
+/*********************************************************************
+*
+*       PNG file support
+*/
+int GUI_PNG_Draw      (const void * pFileData, int DataSize, int x0, int y0);
+int GUI_PNG_DrawEx    (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_PNG_GetXSize  (const void * pFileData, int FileSize);
+int GUI_PNG_GetXSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_PNG_GetYSize  (const void * pFileData, int FileSize);
+int GUI_PNG_GetYSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+
+/*********************************************************************
+*
+*       JPEG file support
+*/
+typedef struct {
+  int XSize;
+  int YSize;
+} GUI_JPEG_INFO;
+
+int GUI_JPEG_Draw        (const void * pFileData, int DataSize,    int x0, int y0);
+int GUI_JPEG_DrawEx      (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_JPEG_DrawScaled  (const void * pFileData, int DataSize,    int x0, int y0, int Num, int Denom);
+int GUI_JPEG_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int GUI_JPEG_GetInfo     (const void * pFileData, int DataSize,    GUI_JPEG_INFO * pInfo);
+int GUI_JPEG_GetInfoEx   (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_JPEG_INFO * pInfo);
+
+void GUI_JPEG_SetpfDrawEx(int (* pfDrawEx)(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0));
+
+/*********************************************************************
+*
+*       MOVIE file support
+*/
+#define GUI_MOVIE_NOTIFICATION_PREDRAW  0 // Immediately before frame is drawn
+#define GUI_MOVIE_NOTIFICATION_POSTDRAW 1 // Immediately after a frame is drawn
+#define GUI_MOVIE_NOTIFICATION_START    2 // Send when start playing a movie
+#define GUI_MOVIE_NOTIFICATION_STOP     3 // Movie has stopped
+#define GUI_MOVIE_NOTIFICATION_DELETE   4 // Movie has been deleted
+
+typedef GUI_HMEM GUI_MOVIE_HANDLE;
+
+typedef void GUI_MOVIE_FUNC(GUI_MOVIE_HANDLE hMovie, int Notification, U32 CurrentFrame);
+
+typedef struct {
+  int xSize;         // X-size of images
+  int ySize;         // Y-size of images
+  int msPerFrame;    // Default duration of 1 frame
+  U32 NumFrames;     // Number of frames
+} GUI_MOVIE_INFO;
+
+GUI_MOVIE_HANDLE GUI_MOVIE_Create       (const void * pFileData, U32 FileSize, GUI_MOVIE_FUNC * pfNotify);
+GUI_MOVIE_HANDLE GUI_MOVIE_CreateEx     (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_FUNC * pfNotify);
+int              GUI_MOVIE_Delete       (GUI_MOVIE_HANDLE hMovie);
+void             GUI_MOVIE_DrawFrame    (GUI_MOVIE_HANDLE hMovie, int Index, int x, int y);
+U32              GUI_MOVIE_GetFrameIndex(GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_GetInfo      (const void * pFileData, U32 FileSize, GUI_MOVIE_INFO * pInfo);
+int              GUI_MOVIE_GetInfoEx    (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_INFO * pInfo);
+int              GUI_MOVIE_GetNumFrames (GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_GetPos       (GUI_MOVIE_HANDLE hMovie, int * pxPos, int * pyPos, int * pxSize, int * pySize);
+int              GUI_MOVIE_GotoFrame    (GUI_MOVIE_HANDLE hMovie, U32 Frame);
+int              GUI_MOVIE_Pause        (GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_Play         (GUI_MOVIE_HANDLE hMovie);
+int              GUI_MOVIE_SetPeriod    (GUI_MOVIE_HANDLE hMovie, unsigned Period);
+void             GUI_MOVIE_SetpfNotify  (GUI_MOVIE_FUNC * pfNotify);
+int              GUI_MOVIE_SetPos       (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos);
+int              GUI_MOVIE_Show         (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos, int DoLoop);
+
+/*********************************************************************
+*
+*       Splines
+*/
+GUI_HMEM GUI_SPLINE_Create  (const int * px, const int * py, unsigned NumPoints);
+void     GUI_SPLINE_Draw    (GUI_HMEM hSpline, int x, int y);
+void     GUI_SPLINE_Delete  (GUI_HMEM hSpline);
+I16      GUI_SPLINE_GetY    (GUI_HMEM hSpline, unsigned Index, float * py);
+unsigned GUI_SPLINE_GetXSize(GUI_HMEM hSpline);
+void     GUI_SPLINE_DrawAA  (GUI_HMEM hSpline, int x, int y, unsigned Width);
+
+/*********************************************************************
+*
+*       Cursor routines
+*/
+#define GUI_CURSOR_SHOW 0
+#define GUI_CURSOR_HIDE 1
+
+typedef struct {
+  const GUI_BITMAP  * pBitmap;
+  int                 xHot;
+  int                 yHot;
+} GUI_CURSOR;
+
+typedef struct {
+  const GUI_BITMAP ** ppBm;
+  int                 xHot;
+  int                 yHot;
+  unsigned            Period;
+  const unsigned    * pPeriod;
+  int                 NumItems;
+} GUI_CURSOR_ANIM;
+
+#if GUI_SUPPORT_CURSOR
+  int                GUI_CURSOR_GetState     (void);
+  int                GUI_CURSOR_GetStateEx   (int Layer);
+  void               GUI_CURSOR_Hide         (void);
+  void               GUI_CURSOR_HideEx       (int Layer);
+  const GUI_CURSOR * GUI_CURSOR_Select       (const GUI_CURSOR * pCursor);
+  const GUI_CURSOR * GUI_CURSOR_SelectEx     (const GUI_CURSOR * pCursor, int Layer);
+  int                GUI_CURSOR_SelectAnim   (const GUI_CURSOR_ANIM * pCursorAnim);
+  int                GUI_CURSOR_SelectAnimEx (const GUI_CURSOR_ANIM * pCursorAnim, int LayerIndex);
+  int                GUI_CURSOR_SetBitmap    (const GUI_BITMAP * pBM);
+  int                GUI_CURSOR_SetBitmapEx  (const GUI_BITMAP * pBM, int Layer);
+  void               GUI_CURSOR_SetPosition  (int x, int y);
+  void               GUI_CURSOR_SetPositionEx(int xNewPos, int yNewPos, int Layer);
+  void               GUI_CURSOR_Show         (void);
+  void               GUI_CURSOR_ShowEx       (int Layer);
+  GUI_HSPRITE        GUI_CURSOR__GetSpriteEx (int LayerIndex, int * pxPos, int * pyPos);
+  void               GUI_CURSOR__SetSpriteEx (GUI_HSPRITE hSprite, const GUI_CURSOR * pCursor, int LayerIndex);
+#else
+  #define GUI_CURSOR_Show();
+  #define GUI_CURSOR_Clear();
+#endif
+
+/*********************************************************************
+*
+*       Sprite support
+*/
+#define GUI_SPRITE_CF_STAYONTOP (1 << 0)
+#define GUI_SPRITE_CF_SHOW      (1 << 1)
+
+#define GUI_SPRITE_SHOW 0
+#define GUI_SPRITE_HIDE 1
+
+GUI_HSPRITE GUI_SPRITE__CreateEx           (const GUI_BITMAP * pBM, int x, int y, int Layer, U16 Flags); /* Not to be documented, only used by cursor modul */
+void        GUI_SPRITE__SetCallback        (GUI_HSPRITE hSprite, GUI_HMEM hContext, void (* pCB)(GUI_HSPRITE, int));
+GUI_HSPRITE GUI_SPRITE_Create              (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateAnim          (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems);
+GUI_HSPRITE GUI_SPRITE_CreateEx            (const GUI_BITMAP * pBM, int x, int y, int Layer);
+GUI_HSPRITE GUI_SPRITE_CreateExAnim        (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems, int LayerIndex);
+GUI_HSPRITE GUI_SPRITE_CreateHidden        (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateHiddenEx      (const GUI_BITMAP * pBM, int x, int y, int Layer);
+void        GUI_SPRITE_Delete              (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_GetState            (GUI_HSPRITE hSprite);
+void        GUI_SPRITE_Hide                (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_SetBitmap           (GUI_HSPRITE hSprite, const GUI_BITMAP * pBM);
+int         GUI_SPRITE_SetBitmapAndPosition(GUI_HSPRITE hSprite, const GUI_BITMAP * pBM, int x, int y);
+int         GUI_SPRITE_SetLoop             (GUI_HSPRITE hSprite, int OnOff);
+void        GUI_SPRITE_SetPosition         (GUI_HSPRITE hSprite, int x, int y);
+int         GUI_SPRITE_StartAnim           (GUI_HSPRITE hSprite);
+int         GUI_SPRITE_StopAnim            (GUI_HSPRITE hSprite);
+void        GUI_SPRITE_Show                (GUI_HSPRITE hSprite);
+
+/*********************************************************************
+*
+*       Cursors and their bitmaps
+*/
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowS,  GUI_CursorArrowSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowM,  GUI_CursorArrowMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowL,  GUI_CursorArrowLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossS,  GUI_CursorCrossSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossM,  GUI_CursorCrossMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossL,  GUI_CursorCrossLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorHeaderM, GUI_CursorHeaderMI;
+extern GUI_CONST_STORAGE GUI_CURSOR_ANIM GUI_CursorAnimHourglassM;
+
+/*********************************************************************
+*
+*       Wrap modes
+*/
+typedef enum { GUI_WRAPMODE_NONE, GUI_WRAPMODE_WORD, GUI_WRAPMODE_CHAR } GUI_WRAPMODE;
+
+/*********************************************************************
+*
+*       Text related routines
+*/
+void  GUI_DispCEOL              (void);
+void  GUI_DispChar              (U16 c);
+void  GUI_DispCharAt            (U16 c, I16P x, I16P y);
+void  GUI_DispChars             (U16 c, int Cnt);
+void  GUI_DispNextLine          (void);
+void  GUI_DispString            (const char * s);
+void  GUI_DispStringAt          (const char * s, int x, int y);
+void  GUI_DispStringAtCEOL      (const char * s, int x, int y);
+void  GUI_DispStringHCenterAt   (const char * s, int x, int y);
+void  GUI__DispStringInRect     (const char * s, GUI_RECT * pRect, int TextAlign, int MaxNumChars);
+void  GUI_DispStringInRect      (const char * s, GUI_RECT * pRect, int TextAlign);
+#if GUI_SUPPORT_ROTATION
+void  GUI_DispStringInRectEx    (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen, const GUI_ROTATION * pLCD_Api);
+#endif
+void  GUI_DispStringInRectMax   (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen); /* Not to be doc. */
+void  GUI_DispStringInRectWrap  (const char * s, GUI_RECT * pRect, int TextAlign, GUI_WRAPMODE WrapMode); /* Not to be doc. */
+#if GUI_SUPPORT_ROTATION
+void  GUI_DispStringInRectWrapEx(const char * s, GUI_RECT * pRect, int TextAlign, GUI_WRAPMODE WrapMode, const GUI_ROTATION * pLCD_Api);
+#endif
+void  GUI_DispStringLen         (const char * s, int Len);
+void  GUI_GetTextExtend         (GUI_RECT* pRect, const char * s, int Len);
+int   GUI_GetYAdjust            (void);
+int   GUI_GetDispPosX           (void);
+int   GUI_GetDispPosY           (void);
+const GUI_FONT * GUI_GetFont    (void);
+int   GUI_GetCharDistX          (U16 c);
+int   GUI_GetCharDistXEx        (U16 c, int * pSizeX);
+int   GUI_GetStringDistX        (const char * s);
+GUI_DRAWMODE GUI_GetDrawMode    (void);
+int   GUI_GetFontDistY          (void);
+int   GUI_GetFontSizeY          (void);
+void  GUI_GetFontInfo           (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+void  GUI_GetOrg                (int * px, int * py);
+int   GUI_GetYSizeOfFont        (const GUI_FONT * pFont);
+int   GUI_GetYDistOfFont        (const GUI_FONT * pFont);
+int   GUI_GetTextAlign          (void);
+int   GUI_GetTextMode           (void);
+char  GUI_IsInFont              (const GUI_FONT * pFont, U16 c);
+U8    GUI_SetClearTextRectMode  (unsigned OnOff);
+int   GUI_SetTextAlign          (int Align);
+int   GUI_SetTextMode           (int Mode);
+char  GUI_SetTextStyle          (char Style);
+int   GUI_SetLBorder            (int x);
+U8    GUI_SetStrikeWidth        (U8 StrikeWidth);
+const GUI_FONT * GUI_SetFont    (const GUI_FONT * pNewFont);
+char  GUI_GotoXY                (int x, int y);
+char  GUI_GotoX                 (int x);
+char  GUI_GotoY                 (int y);
+int   GUI_WrapGetNumLines       (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int   GUI_WrapGetPositions      (const char * pText, int xSize, GUI_WRAPMODE WrapMode, int * aPos, int NumItems);
+void  GUI_WrapSetSeparators     (const U16 * pSep, int NumSeps);
+
+int   GUI_GetLeadingBlankCols (U16 c);
+int   GUI_GetTrailingBlankCols(U16 c);
+
+
+/*********************************************************************
+*
+*       System independent fonts (SIF)
+*/
+void GUI_SIF_CreateFont(const void * pFontData, GUI_FONT * pFont, const GUI_SIF_TYPE * pFontType);
+void GUI_SIF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+*       External binary fonts (XBF)
+*/
+int  GUI_XBF_CreateFont(GUI_FONT * pFont, GUI_XBF_DATA * pXBF, const GUI_XBF_TYPE * pFontType, GUI_XBF_GET_DATA_FUNC * pfGetData, void * pVoid);
+void GUI_XBF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+*       TrueType support (TTF)
+*/
+int  GUI_TTF_CreateFont   (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+int  GUI_TTF_CreateFontAA (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+void GUI_TTF_DestroyCache (void);
+void GUI_TTF_Done         (void);
+int  GUI_TTF_GetFamilyName(GUI_FONT * pFont, char * pBuffer, int NumBytes);
+int  GUI_TTF_GetStyleName (GUI_FONT * pFont, char * pBuffer, int NumBytes);
+void GUI_TTF_SetCacheSize (unsigned MaxFaces, unsigned MaxSizes, U32 MaxBytes);
+
+/*********************************************************************
+*
+*       Resource file support
+*/
+int          GUI_LANG_GetLang          (void);
+int          GUI_LANG_GetNumItems      (int IndexLang);
+const char * GUI_LANG_GetText          (int IndexText);
+int          GUI_LANG_GetTextBuffered  (int IndexText, char * pBuffer, int SizeOfBuffer);
+int          GUI_LANG_GetTextBufferedEx(int IndexText, int IndexLang, char * pBuffer, int SizeOfBuffer);
+const char * GUI_LANG_GetTextEx        (int IndexText, int IndexLang);
+int          GUI_LANG_LoadCSV          (U8 * pFileData, U32 FileSize);
+int          GUI_LANG_LoadCSVEx        (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int          GUI_LANG_LoadText         (U8 * pFileData, U32 FileSize, int IndexLang);
+int          GUI_LANG_LoadTextEx       (GUI_GET_DATA_FUNC * pfGetData, void * p, int IndexLang);
+int          GUI_LANG_SetLang          (int IndexLang);
+unsigned     GUI_LANG_SetMaxNumLang    (unsigned MaxNumLang);
+U16          GUI_LANG_SetSep           (U16 Sep);
+
+/*********************************************************************
+*
+*       Unicode support
+*/
+int  GUI_UC_ConvertUC2UTF8(const U16 * s, int Len, char * pBuffer, int BufferSize);
+int  GUI_UC_ConvertUTF82UC(const char * s, int Len, U16 * pBuffer, int BufferSize);
+int  GUI_UC_EnableBIDI    (int OnOff);
+int  GUI_UC_Encode        (char * s, U16 Char);
+int  GUI_UC_GetCharSize   (const char * s);
+U16  GUI_UC_GetCharCode   (const char * s);
+void GUI_UC_SetEncodeNone (void);
+void GUI_UC_SetEncodeSJIS (void);
+void GUI_UC_SetEncodeUTF8 (void);
+void GUI_UC_SetBaseDir    (int Dir);  // Only available with new version of BIDI algorithm (GUI_USE_BIDI2 == 1)
+int  GUI_UC_GetBaseDir    (void);     // Only available with new version of BIDI algorithm (GUI_USE_BIDI2 == 1)
+
+void GUI_UC_DispString(const U16 * s);
+void GUI_UC2DB (U16 Code, U8 * pOut);
+U16  GUI_DB2UC (U8 Byte0, U8 Byte1);
+
+/*********************************************************************
+*
+*       Bidi support
+*/
+#define GUI_BIDI_BASEDIR_LTR  0
+#define GUI_BIDI_BASEDIR_RTL  1
+#define GUI_BIDI_BASEDIR_AUTO 2
+
+#define GUI_BIDI_LOG2VIS_CALC     0
+#define GUI_BIDI_LOG2VIS_GETCACHE 1
+
+/*********************************************************************
+*
+*       Drawing of binary, decimal and hexadecimal values
+*/
+void GUI_DispBin  (U32  v, U8 Len);
+void GUI_DispBinAt(U32  v, I16P x, I16P y, U8 Len);
+void GUI_DispDec  (I32 v, U8 Len);
+void GUI_DispDecAt (I32 v, I16P x, I16P y, U8 Len);
+void GUI_DispDecMin(I32 v);
+void GUI_DispDecShift(I32 v, U8 Len, U8 Shift);
+void GUI_DispDecSpace(I32 v, U8 MaxDigits);
+void GUI_DispHex  (U32 v, U8 Len);
+void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len);
+void GUI_DispSDec(I32 v, U8 Len);
+void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift);
+
+/*********************************************************************
+*
+*       Drawing of floating point values
+*/
+void GUI_DispFloat    (float v, char Len);
+void GUI_DispFloatFix (float v, char Len, char Fract);
+void GUI_DispFloatMin (float v, char Fract);
+void GUI_DispSFloatFix(float v, char Len, char Fract);
+void GUI_DispSFloatMin(float v, char Fract);
+
+/*********************************************************************
+*
+*       Dynamic memory management
+*/
+typedef struct {
+  U32 TotalBytes;
+  U32 FreeBytes;
+  U32 UsedBytes;
+  U32 AllocSize;
+  U32 NumFixedBytes;
+  U32 MaxUsedBytes;
+} GUI_ALLOC_INFO;
+
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBlocks(void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBytes (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBlocks(void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBytes (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxUsedBytes (void);
+
+void GUI_ALLOC_GetMemInfo  (GUI_ALLOC_INFO * pInfo);
+void GUI_ALLOC_SuppressPeak(int OnOff);
+
+GUI_HMEM           GUI_ALLOC_AllocInit       (const void * pInitData, GUI_ALLOC_DATATYPE Size);
+GUI_HMEM           GUI_ALLOC_AllocNoInit     (GUI_ALLOC_DATATYPE size);
+GUI_HMEM           GUI_ALLOC_AllocZero       (GUI_ALLOC_DATATYPE size);
+void               GUI_ALLOC_AssignMemory    (void * p, U32 NumBytes);
+void               GUI_ALLOC_Free            (GUI_HMEM  hMem);
+void               GUI_ALLOC_FreeFixedBlock  (void * p);
+void               GUI_ALLOC_FreePtrArray    (GUI_HMEM * pArray, int NumElems);
+void               GUI_ALLOC_FreePtr         (GUI_HMEM * phMem);
+void *             GUI_ALLOC_GetFixedBlock   (GUI_ALLOC_DATATYPE Size);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxSize      (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetSize         (GUI_HMEM  hMem);
+void *             GUI_ALLOC_h2p             (GUI_HMEM  hMem);
+GUI_HMEM           GUI_ALLOC_p2h             (void * p);
+void               GUI_ALLOC_Init            (void);
+void               GUI_ALLOC_Lock            (void);
+void *             GUI_ALLOC_LockH           (GUI_HMEM  hMem);
+GUI_HMEM           GUI_ALLOC_Realloc         (GUI_HMEM hOld, int NewSize);
+GUI_ALLOC_DATATYPE GUI_ALLOC_RequestSize     (void);
+void               GUI_ALLOC_SetAvBlockSize  (U32 BlockSize);
+void               GUI_ALLOC_Unlock          (void);
+void *             GUI_ALLOC_UnlockH         (void ** pp);
+int                GUI_ALLOC_SetMaxPercentage(int MaxPercentage);
+void               GUI_ALLOC_Exit            (void);
+
+/*********************************************************************
+*
+*       Memory devices: GUI_MEMDEV
+*/
+#define GUI_MEMDEV_HASTRANS       0
+#define GUI_MEMDEV_NOTRANS  (1 << 0)
+
+typedef GUI_HMEM GUI_MEMDEV_Handle;
+typedef void     GUI_CALLBACK_VOID_P        (void * p);
+typedef int      GUI_ANIMATION_CALLBACK_FUNC(int TimeRem, void * pVoid);
+typedef void     GUI_DRAWMEMDEV_16BPP_FUNC  (void * pDst, const void * pSrc, int xSize, int ySize, int BytesPerLineDst, int BytesPerLineSrc);
+
+#define GUI_DRAWMEMDEV_FUNC GUI_DRAWMEMDEV_16BPP_FUNC
+
+typedef void GUI_DRAWBITMAP_FUNC (int LayerIndex, int x, int y, const void * p, int xSize, int ySize, int BytesPerLine);
+
+int GUI_SetFuncDrawAlpha(GUI_DRAWMEMDEV_FUNC * pfDrawMemdevFunc, GUI_DRAWBITMAP_FUNC * pfDrawBitmapFunc);
+int GUI_SetFuncDrawM565 (GUI_DRAWMEMDEV_FUNC * pfDrawMemdevFunc, GUI_DRAWBITMAP_FUNC * pfDrawBitmapFunc);
+
+extern GUI_ANIMATION_CALLBACK_FUNC * GUI_MEMDEV__pCbAnimation;
+extern void                        * GUI_MEMDEV__pVoid;
+
+extern void (* GUI_MEMDEV__pfMEMDEV_Write)    (GUI_MEMDEV_Handle hMem);
+extern void (* GUI_MEMDEV__pfMEMDEV_CopyToLCD)(GUI_MEMDEV_Handle hMem);
+
+typedef struct {
+  GUI_RECT rView, rPrev;
+  char FirstCall;
+} GUI_AUTODEV;
+
+typedef struct {
+  char DrawFixed;
+  char IsMeasurement;
+} GUI_AUTODEV_INFO;
+
+int  GUI_MEMDEV_CreateAuto(GUI_AUTODEV * pAutoDev);
+void GUI_MEMDEV_DeleteAuto(GUI_AUTODEV * pAutoDev);
+int  GUI_MEMDEV_DrawAuto  (GUI_AUTODEV * pAutoDev, GUI_AUTODEV_INFO * pAutoDevInfo, GUI_CALLBACK_VOID_P * pfDraw, void * pData);
+
+/* Create a memory device which is compatible to the selected LCD */
+GUI_MEMDEV_Handle GUI_MEMDEV_Create       (int x0, int y0, int xSize, int ySize);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateEx     (int x0, int y0, int xSize, int ySize, int Flags);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed  (int x0, int y0, int xSize, int ySize, int Flags,
+                                           const GUI_DEVICE_API     * pDeviceAPI,
+                                           const LCD_API_COLOR_CONV * pColorConvAPI);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed32(int x0, int y0, int xSize, int ySize);
+
+void GUI_MEMDEV_Clear                (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_ClearAlpha           (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void GUI_MEMDEV_CopyFromLCD          (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyFromLCDAA        (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCD            (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAA          (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAt          (GUI_MEMDEV_Handle hMem, int x, int y);
+int  GUI_MEMDEV_CompareWithLCD       (GUI_MEMDEV_Handle hMem, int * px, int * py, int * pExp, int * pAct);
+void GUI_MEMDEV_Delete               (GUI_MEMDEV_Handle MemDev);
+void GUI_MEMDEV_DrawPerspectiveX     (GUI_MEMDEV_Handle hMem, int x, int y, int h0, int h1, int dx, int dy);
+int  GUI_MEMDEV_GetXPos              (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetXSize             (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetYPos              (GUI_MEMDEV_Handle hMem);
+int  GUI_MEMDEV_GetYSize             (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_MarkDirty            (GUI_MEMDEV_Handle hMem, int x0, int y0, int x1, int y1);
+void GUI_MEMDEV_ReduceYSize          (GUI_MEMDEV_Handle hMem, int YSize);
+void GUI_MEMDEV_Rotate               (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateAlpha          (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U8 Alpha);
+void GUI_MEMDEV_RotateHR             (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV__Rotate              (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U32 Mask);
+void GUI_MEMDEV__RotateHR            (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag, U32 Mask);
+void GUI_MEMDEV_RotateHQ             (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQAlpha        (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U8 Alpha);
+void GUI_MEMDEV_RotateHQHR           (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQT            (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQTI           (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+GUI_MEMDEV_Handle GUI_MEMDEV_Select  (GUI_MEMDEV_Handle hMem);  /* Select (activate) a particular memory device. */
+void  GUI_MEMDEV_SetOrg              (GUI_MEMDEV_Handle hMem, int x0, int y0);
+void  GUI_MEMDEV_WriteAt             (GUI_MEMDEV_Handle hMem, int x, int y);
+void  GUI_MEMDEV_Write               (GUI_MEMDEV_Handle hMem);
+void  GUI_MEMDEV_WriteAlphaAt        (GUI_MEMDEV_Handle hMem, int Alpha, int x, int y);
+void  GUI_MEMDEV_WriteAlpha          (GUI_MEMDEV_Handle hMem, int Alpha);
+void  GUI_MEMDEV_WriteExAt           (GUI_MEMDEV_Handle hMem, int x, int y, int xMag, int yMag, int Alpha);
+void  GUI_MEMDEV_WriteEx             (GUI_MEMDEV_Handle hMem, int xMag, int yMag, int Alpha);
+void  GUI_MEMDEV_WriteOpaque         (GUI_MEMDEV_Handle hMem);
+void  GUI_MEMDEV_WriteOpaqueAt       (GUI_MEMDEV_Handle hMem, int x, int y);
+int   GUI_MEMDEV_Draw                (GUI_RECT * pRect, GUI_CALLBACK_VOID_P * pfDraw, void * pData, int NumLines, int Flags);
+void* GUI_MEMDEV_GetDataPtr          (GUI_MEMDEV_Handle hMem);
+void  GUI_MEMDEV_SetColorConv        (GUI_MEMDEV_Handle hMem, const LCD_API_COLOR_CONV * pColorConvAPI);
+const LCD_API_COLOR_CONV * GUI_MEMDEV_GetColorConv(GUI_MEMDEV_Handle hMemDev);
+int   GUI_MEMDEV_GetBitsPerPixel     (GUI_MEMDEV_Handle hMemDev);
+int   GUI_MEMDEV_FadeInDevices       (GUI_MEMDEV_Handle hMem0, GUI_MEMDEV_Handle hMem1, int Period);
+int   GUI_MEMDEV_FadeOutDevices      (GUI_MEMDEV_Handle hMem0, GUI_MEMDEV_Handle hMem1, int Period);
+void  GUI_MEMDEV_SerializeBMP        (GUI_MEMDEV_Handle hDev, GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void  GUI_MEMDEV_SetAnimationCallback(GUI_ANIMATION_CALLBACK_FUNC * pCbAnimation, void * pVoid);
+void  GUI_MEMDEV__FadeDevice         (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens);
+void  GUI_MEMDEV__FadeDeviceEx       (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens, int xPosWin, int yPosWin);
+int   GUI_MEMDEV_PunchOutDevice      (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void  GUI_MEMDEV_SetTimePerFrame     (unsigned TimePerFrame);
+int   GUI_MEMDEV_MULTIBUF_Enable     (int OnOff);
+
+void  GUI_SelectLCD(void);
+
+/* Blurring, dithering and blending */
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32  (GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32HQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32LQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+void              GUI_MEMDEV_SetBlurHQ              (void);
+void              GUI_MEMDEV_SetBlurLQ              (void);
+int               GUI_MEMDEV_BlendColor32           (GUI_MEMDEV_Handle hMem, U32 BlendColor, U8 BlendIntens);
+int               GUI_MEMDEV_Dither32               (GUI_MEMDEV_Handle hMem, const LCD_API_COLOR_CONV * pColorConvAPI);
+
+/* Optional custom drawing of 16bpp memory devices */
+void GUI_MEMDEV_SetDrawMemdev16bppFunc(GUI_DRAWMEMDEV_16BPP_FUNC * pfDrawMemdev16bppFunc);
+
+/*********************************************************************
+*
+*       Alpha blending
+*/
+typedef struct {
+  U32 UserAlpha;
+} GUI_ALPHA_STATE;
+
+#define GUI_MAKE_ALPHA(Alpha, Color) ((U32)(((U32)Alpha << 24) | (Color & 0xFFFFFF)))
+
+unsigned     GUI_EnableAlpha         (unsigned OnOff);
+U32          GUI_RestoreUserAlpha    (GUI_ALPHA_STATE * pAlphaState);
+unsigned     GUI_SetAlpha            (U8 Alpha);
+U32          GUI_SetUserAlpha        (GUI_ALPHA_STATE * pAlphaState, U32 UserAlpha);
+void      (* GUI_SetFuncAlphaBlending(void (* pfAlphaBlending)(LCD_COLOR *, LCD_COLOR *, LCD_COLOR *, U32)))
+                                                              (LCD_COLOR *, LCD_COLOR *, LCD_COLOR *, U32);
+LCD_COLOR (* GUI_SetFuncMixColors    (LCD_COLOR (* pFunc)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens)))
+                                                         (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+void      (* GUI_SetFuncMixColorsBulk(void (* pFunc)(U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens)))
+                                                    (U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+unsigned     GUI_PreserveTrans       (unsigned OnOff);
+
+/*********************************************************************
+*
+*       Multi layer support
+*/
+unsigned GUI_SelectLayer(unsigned Index);
+unsigned GUI_GetSelLayer(void);
+
+int  GUI_SetLayerPosEx  (unsigned Index, int xPos, int yPos);
+int  GUI_SetLayerSizeEx (unsigned Index, int xSize, int ySize);
+int  GUI_SetLayerVisEx  (unsigned Index, int OnOff);
+int  GUI_SetLayerAlphaEx(unsigned Index, int Alpha);
+int  GUI_GetLayerPosEx  (unsigned Index, int * pxPos, int * pyPos);
+
+void     GUI_AssignCursorLayer(unsigned Index, unsigned CursorLayer);
+unsigned GUI_GetCursorLayer   (unsigned Index);
+
+/*********************************************************************
+*
+*       Multiple buffers and display origin
+*/
+void GUI_SetOrg(int x, int y);
+
+void GUI_MULTIBUF_Begin          (void);
+void GUI_MULTIBUF_BeginEx        (int LayerIndex);
+void GUI_MULTIBUF_End            (void);
+void GUI_MULTIBUF_EndEx          (int LayerIndex);
+void GUI_MULTIBUF_Config         (int NumBuffers);
+void GUI_MULTIBUF_ConfigEx       (int LayerIndex, int NumBuffers);
+void GUI_MULTIBUF_Confirm        (int Index);
+void GUI_MULTIBUF_ConfirmEx      (int LayerIndex, int BufferIndex);
+int  GUI_MULTIBUF_GetNumBuffers  (void);
+int  GUI_MULTIBUF_GetNumBuffersEx(int LayerIndex);
+void GUI_MULTIBUF_SetLayerMask   (U32 LayerMask);
+void GUI_MULTIBUF_UseSingleBuffer(void);
+
+/*********************************************************************
+*
+*       emWinSPY
+*/
+int  GUI_SPY_Process      (GUI_tSend pfSend, GUI_tRecv pfRecv, void * pConnectInfo);
+void GUI_SPY_SetMemHandler(GUI_tMalloc pMalloc, GUI_tFree pFree);
+int  GUI_SPY_StartServer  (void);
+int  GUI_SPY_StartServerEx(int (* pGUI_SPY_X_StartServer)(void));
+int  GUI_SPY_X_StartServer(void);
+
+/*********************************************************************
+*
+*       QR-Codes
+*/
+#define GUI_QR_ECLEVEL_L 0
+#define GUI_QR_ECLEVEL_M 1
+#define GUI_QR_ECLEVEL_Q 2
+#define GUI_QR_ECLEVEL_H 3
+
+typedef struct {
+  int Version;  // Version according to QR code documentation
+  int Width;    // Number of 'Modules'
+  int Size;     // Size of bitmap in pixels
+} GUI_QR_INFO;
+
+GUI_HMEM GUI_QR_Create (const char * pText, int PixelSize, int EccLevel, int Version);
+void     GUI_QR_Draw   (GUI_HMEM hQR, int xPos, int yPos);
+void     GUI_QR_GetInfo(GUI_HMEM hQR, GUI_QR_INFO * pInfo);
+void     GUI_QR_Delete (GUI_HMEM hQR);
+
+/*********************************************************************
+*
+*       Basics for animations
+*/
+#define ANIM_LINEAR     GUI_ANIM__Linear
+#define ANIM_ACCEL      GUI_ANIM__Accel
+#define ANIM_DECEL      GUI_ANIM__Decel
+#define ANIM_ACCELDECEL GUI_ANIM__AccelDecel
+
+#define GUI_ANIM_START   0
+#define GUI_ANIM_RUNNING 1
+#define GUI_ANIM_END     2
+
+#ifndef   GUI_ANIM_RANGE
+  #define GUI_ANIM_RANGE 32767L
+#endif
+
+typedef GUI_HMEM GUI_ANIM_HANDLE;
+
+typedef I32 (* GUI_ANIM_GETPOS_FUNC)(GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+
+typedef struct {
+  int Pos;
+  int State;
+  GUI_ANIM_HANDLE hAnim;
+  GUI_TIMER_TIME Period;
+} GUI_ANIM_INFO;
+
+typedef void GUI_ANIMATION_FUNC(GUI_ANIM_INFO * pInfo, void * pVoid);
+
+I32 GUI_ANIM__Linear    (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__Decel     (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__Accel     (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__AccelDecel(GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+
+int             GUI_ANIM_AddItem(GUI_ANIM_HANDLE hAnim, GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_ANIM_GETPOS_FUNC pfGetPos, void * pVoid, GUI_ANIMATION_FUNC * pfAnim);
+GUI_ANIM_HANDLE GUI_ANIM_Create (GUI_TIMER_TIME Period, unsigned MinTimePerFrame, void * pVoid, void (* pfSliceInfo)(int State, void * _pVoid));
+void            GUI_ANIM_Delete (GUI_ANIM_HANDLE hAnim);
+int             GUI_ANIM_Exec   (GUI_ANIM_HANDLE hAnim);
+void            GUI_ANIM_Start  (GUI_ANIM_HANDLE hAnim);
+void            GUI_ANIM_StartEx(GUI_ANIM_HANDLE hAnim, int NumLoops, void (* pfOnDelete)(void * pVoid));
+void            GUI_ANIM_Stop   (GUI_ANIM_HANDLE hAnim);
+
+/*********************************************************************
+*
+*       Display orientation
+*/
+/*********************************************************************
+*
+*       GUI_ORIENTATION_API
+*/
+typedef struct {
+  void           (* pfDrawBitmap   )(GUI_DEVICE * pDevice, int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+  void           (* pfDrawHLine    )(GUI_DEVICE * pDevice, int x0, int y0,  int x1);
+  void           (* pfDrawVLine    )(GUI_DEVICE * pDevice, int x , int y0,  int y1);
+  void           (* pfFillRect     )(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+  LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE * pDevice, int x, int y);
+  void           (* pfSetPixelIndex)(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX ColorIndex);
+  void           (* pfXorPixel     )(GUI_DEVICE * pDevice, int x, int y);
+  int            BytesPerPixel;
+} GUI_ORIENTATION_API;
+
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C0;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C8;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C16;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C32;
+
+#define GUI_ORIENTATION_C0  &GUI_OrientationAPI_C0
+#define GUI_ORIENTATION_C8  &GUI_OrientationAPI_C8
+#define GUI_ORIENTATION_C16 &GUI_OrientationAPI_C16
+#define GUI_ORIENTATION_C32 &GUI_OrientationAPI_C32
+
+int GUI_SetOrientation        (int Orientation);
+int GUI_SetOrientationEx      (int Orientation, int LayerIndex);
+int GUI_SetOrientationExCached(int Orientation, int LayerIndex, const GUI_ORIENTATION_API * pAPI);
+
+/*********************************************************************
+*
+*       Measure device: GUI_MEASDEV
+*/
+typedef GUI_HMEM GUI_MEASDEV_Handle;
+
+GUI_MEASDEV_Handle GUI_MEASDEV_Create (void);
+void               GUI_MEASDEV_Delete (GUI_MEASDEV_Handle hMemDev);
+void               GUI_MEASDEV_Select (GUI_MEASDEV_Handle hMem);
+void               GUI_MEASDEV_GetRect(GUI_MEASDEV_Handle hMem, GUI_RECT * pRect);
+void               GUI_MEASDEV_ClearRect(GUI_MEASDEV_Handle hMem);
+
+/*********************************************************************
+*
+*       Polygon helpers
+*/
+void GUI_RotatePolygon (GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, float Angle);
+void GUI_MagnifyPolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Mag);
+void GUI_EnlargePolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Len);
+
+/*********************************************************************
+*
+*       Streamed bitmaps
+*/
+#define GUI_BITMAPSTREAM_GET_BUFFER     1
+#define GUI_BITMAPSTREAM_RELEASE_BUFFER 2
+#define GUI_BITMAPSTREAM_MODIFY_PALETTE 3
+
+#define DECLARE_CREATE_FROM_STREAM(ID) int GUI_CreateBitmapFromStream##ID(GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+
+DECLARE_CREATE_FROM_STREAM(IDX)
+DECLARE_CREATE_FROM_STREAM(RLE4)
+DECLARE_CREATE_FROM_STREAM(RLE8)
+DECLARE_CREATE_FROM_STREAM(565)
+DECLARE_CREATE_FROM_STREAM(M565)
+DECLARE_CREATE_FROM_STREAM(555)
+DECLARE_CREATE_FROM_STREAM(M555)
+DECLARE_CREATE_FROM_STREAM(A565)
+DECLARE_CREATE_FROM_STREAM(AM565)
+DECLARE_CREATE_FROM_STREAM(A555)
+DECLARE_CREATE_FROM_STREAM(AM555)
+DECLARE_CREATE_FROM_STREAM(RLE16)
+DECLARE_CREATE_FROM_STREAM(RLEM16)
+DECLARE_CREATE_FROM_STREAM(24)
+DECLARE_CREATE_FROM_STREAM(Alpha)
+DECLARE_CREATE_FROM_STREAM(M8888I)
+DECLARE_CREATE_FROM_STREAM(RLEAlpha)
+DECLARE_CREATE_FROM_STREAM(RLE32)
+DECLARE_CREATE_FROM_STREAM(444_12)
+DECLARE_CREATE_FROM_STREAM(M444_12)
+DECLARE_CREATE_FROM_STREAM(444_12_1)
+DECLARE_CREATE_FROM_STREAM(M444_12_1)
+DECLARE_CREATE_FROM_STREAM(444_16)
+DECLARE_CREATE_FROM_STREAM(M444_16)
+
+int  GUI_CreateBitmapFromStream   (GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+void GUI_DrawStreamedBitmap       (const void * p, int x, int y);
+void GUI_DrawStreamedBitmapAuto   (const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapEx     (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapExAuto (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap555Ex  (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapM555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap565Ex  (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapM565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapA555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapAM555Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapA565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmapAM565Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int  GUI_DrawStreamedBitmap24Ex   (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+void GUI_GetStreamedBitmapInfo    (const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+int  GUI_GetStreamedBitmapInfoEx  (GUI_GET_DATA_FUNC * pfGetData, const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+void GUI_SetStreamedBitmapHook    (GUI_BITMAPSTREAM_CALLBACK pfStreamedBitmapHook);
+
+void LCD__RLE4_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE8_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE16_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+void LCD__RLE32_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+
+/*********************************************************************
+*
+*       BMP-export
+*/
+void GUI_BMP_Serialize     (GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void GUI_BMP_SerializeEx   (GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p);
+void GUI_BMP_SerializeExBpp(GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p, int BitsPerPixel);
+
+void GUI_BMP__WriteBitmapHeader(GUI_CALLBACK_VOID_U8_P * pfSerialize, int xSize, int ySize, void * p, int BitsPerPixel, int BytesPerLine, int BytesPerPixel, int NumColors, int Padding);
+
+/*********************************************************************
+*
+*       Time / execution related routines
+*/
+void           GUI_Delay       (int Period);
+GUI_TIMER_TIME GUI_GetTime     (void);
+int            GUI_GetTimeSlice(void);
+int            GUI_Exec        (void);        /* Execute all jobs ... Return 0 if nothing was done. */
+int            GUI_Exec1       (void);        /* Execute one job  ... Return 0 if nothing was done. */
+void           GUI_SetTimeSlice(int TimeSlice);
+
+/*********************************************************************
+*
+*       MessageBox
+*/
+int     GUI_MessageBox   (const char * sMessage, const char * sCaption, int Flags);
+#define GUI_MESSAGEBOX_CF_MOVEABLE (1 << 0)
+#define GUI_MESSAGEBOX_CF_MODAL    (1 << 1)
+
+#define GUI_MB_OK                20
+#define GUI_MB_WARNING           21
+
+/*********************************************************************
+*
+*       GUI_TIMER module
+*/
+#define GUI_TIMER_CF_WINDOW (1 << 0)
+#define GUI_TIMER_CF_CURSOR (1 << 1)
+
+typedef GUI_HMEM GUI_TIMER_HANDLE;
+
+typedef struct {
+  GUI_TIMER_TIME   Time;
+  PTR_ADDR         Context;
+  GUI_TIMER_HANDLE hTimer;
+} GUI_TIMER_MESSAGE;
+
+typedef void GUI_TIMER_CALLBACK(/*const*/ GUI_TIMER_MESSAGE* pTM);
+
+GUI_TIMER_HANDLE GUI_TIMER_Create   (GUI_TIMER_CALLBACK * cb, GUI_TIMER_TIME Time, PTR_ADDR Context, U16 Flags);
+void             GUI_TIMER_Delete   (GUI_TIMER_HANDLE hObj);
+
+/* Methods changing properties */
+GUI_TIMER_TIME GUI_TIMER_GetPeriod(GUI_TIMER_HANDLE hObj);
+void           GUI_TIMER_SetPeriod(GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void           GUI_TIMER_SetTime  (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void           GUI_TIMER_SetDelay (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Delay);
+void           GUI_TIMER_Restart  (GUI_TIMER_HANDLE hObj);
+int            GUI_TIMER_GetFlag  (GUI_TIMER_HANDLE hObj, int Flag); /* Not to be documented */
+int            GUI_TIMER_Exec     (void);
+
+/*********************************************************************
+*
+*       Anti Aliasing
+*/
+#define GUI_AA_TRANS   0 // Foreground color mixed up with current content of framebuffer
+#define GUI_AA_NOTRANS 1 // Foreground color mixed up with current background color
+
+void GUI_AA_DisableHiRes     (void);
+void GUI_AA_EnableHiRes      (void);
+int  GUI_AA_GetFactor        (void);
+void GUI_AA_SetFactor        (int Factor);
+void GUI_AA_DrawArc          (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_AA_DrawCircle       (int x0, int y0, int r);  // Currently not implemented, only for Dave2D
+void GUI_AA_DrawLine         (int x0, int y0, int x1, int y1);
+void GUI_AA_DrawPolyOutline  (const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y);
+void GUI_AA_DrawPolyOutlineEx(const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y, GUI_POINT * pBuffer);
+void GUI_AA_DrawRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_DrawRoundedRectEx(GUI_RECT * pRect, int r);
+void GUI_AA_FillCircle       (int x0, int y0, int r);
+void GUI_AA_FillEllipse      (int x0, int y0, int rx, int ry);
+void GUI_AA_FillPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_AA_FillRoundedRect  (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_FillRoundedRectEx(GUI_RECT * pRect, int r);
+int  GUI_AA_SetDrawMode      (int Mode);
+void GUI_AA_SetpfDrawCharAA4 (int (* pfDrawChar)(int LayerIndex, int x, int y, U8 const * p, int xSize, int ySize, int BytesPerLine));
+void GUI_AA_SetGammaAA4      (U8 * pGamma);
+void GUI_AA_GetGammaAA4      (U8 * pGamma);
+void GUI_AA_EnableGammaAA4   (int OnOff);
+
+#define GUI_AA_PreserveTrans(OnOff) GUI_PreserveTrans(OnOff)  // For compatibility only
+
+void GUI_AA_SetFuncDrawArc        (int (* pfDrawArc)    (int x0, int y0, int rx, int ry, int a0, int a1));
+void GUI_AA_SetFuncDrawCircle     (int (* pfDrawCircle) (int x0, int y0, int r));
+void GUI_AA_SetFuncDrawLine       (int (* pfDrawLine)   (int x0, int y0, int x1, int y1));
+void GUI_AA_SetFuncDrawPolyOutline(int (* pfDrawPolyOutline)(const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y));
+void GUI_AA_SetFuncFillCircle     (int (* pfFillCircle) (int x0, int y0, int r));
+void GUI_AA_SetFuncFillPolygon    (int (* pfFillPolygon)(const GUI_POINT * pPoints, int NumPoints, int x0, int y0));
+
+/*********************************************************************
+*
+*       Keyboard
+*/
+/* Message layer */
+void GUI_StoreKeyMsg(int Key, int Pressed);
+void GUI_SendKeyMsg (int Key, int Pressed);
+int  GUI_PollKeyMsg (void);
+void GUI_GetKeyState(GUI_KEY_STATE * pState);
+
+void GUI_KEY__SetHook(void (* pfHook)(const GUI_KEY_STATE *));
+
+/* Application layer */
+int  GUI_GetKey(void);
+int  GUI_WaitKey(void);
+void GUI_StoreKey(int c);
+void GUI_ClearKeyBuffer(void);
+
+/*********************************************************************
+*
+*       Task synchronization
+*/
+void GUI_WaitEvent            (void);
+void GUI_SignalEvent          (void);
+void GUI_SetSignalEventFunc   (GUI_SIGNAL_EVENT_FUNC     pfSignalEvent);
+void GUI_SetWaitEventFunc     (GUI_WAIT_EVENT_FUNC       pfWaitEvent);
+void GUI_SetWaitEventTimedFunc(GUI_WAIT_EVENT_TIMED_FUNC pfWaitEventTimed);
+
+/*********************************************************************
+*
+*       Joystick, generic
+*/
+void GUI_JOYSTICK_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+*       PID  (Pointer input device ... mouse/touch)
+*/
+void GUI_PID_StoreState     (const GUI_PID_STATE * pState);
+int  GUI_PID_GetState       (      GUI_PID_STATE * pState);
+void GUI_PID_GetCurrentState(      GUI_PID_STATE * pState);
+int  GUI_PID_IsEmpty        (void);
+int  GUI_PID_IsPressed      (void);
+void GUI_PID_RegisterHook   (GUI_REGISTER_HOOK * pRegisterHook);
+void GUI_PID_SetHook        (void (* pfHook)(      GUI_PID_STATE *));  // Public
+void GUI_PID__SetHook       (void (* pfHook)(const GUI_PID_STATE *));  // Private
+
+/*********************************************************************
+*
+*       Mouse, generic
+*/
+int  GUI_MOUSE_GetState  (      GUI_PID_STATE * pState);
+void GUI_MOUSE_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+*       TOUCH screen, generic
+*/
+int  GUI_TOUCH_GetLayer     (void);
+int  GUI_TOUCH_GetState     (GUI_PID_STATE * pState);
+void GUI_TOUCH_GetUnstable  (int * px, int * py);  /* for diagnostics only */
+void GUI_TOUCH_SetLayer     (int Layer);
+void GUI_TOUCH_StoreState   (int x, int y);
+void GUI_TOUCH_StoreStateEx (const GUI_PID_STATE * pState);
+void GUI_TOUCH_StoreUnstable(int x, int y);
+
+/*********************************************************************
+*
+*       Mouse, PS2 driver
+*/
+void GUI_MOUSE_DRIVER_PS2_Init(void);               /* optional */
+void GUI_MOUSE_DRIVER_PS2_OnRx(unsigned char Data);
+
+/*********************************************************************
+*
+*       TOUCH screen, analog driver
+*/
+int  GUI_TOUCH_CalcCoefficients (int NumPoints, int * pxRef, int * pyRef, int * pxSample, int * pySample, int xSize, int ySize);
+int  GUI_TOUCH_Calibrate        (int Coord, int Log0, int Log1, int Phys0, int Phys1);
+int  GUI_TOUCH_CalibratePoint   (int * px, int * py);
+void GUI_TOUCH_EnableCalibration(int OnOff);
+void GUI_TOUCH_Exec             (void);
+int  GUI_TOUCH_GetxPhys         (void);    /* for diagnostics only */
+int  GUI_TOUCH_GetyPhys         (void);    /* for diagnostics only */
+void GUI_TOUCH_SetCalibration   (int (* pFunc)(int *, int *)); /* Not to be documented */
+void GUI_TOUCH_SetOrientation   (unsigned Orientation);
+int  GUI_TOUCH_TransformPoint   (int * px, int * py);          /* Not to be documented */
+
+/*********************************************************************
+*
+*       TOUCH: imports
+*
+* Please note: The following functions are required by the module.
+* They need to be part of your application software (or rather, part
+* of the hardware-layer of your software).
+*/
+void GUI_TOUCH_X_ActivateX(void);
+void GUI_TOUCH_X_ActivateY(void);
+void GUI_TOUCH_X_Disable  (void);
+int  GUI_TOUCH_X_MeasureX (void);
+int  GUI_TOUCH_X_MeasureY (void);
+
+/*********************************************************************
+*
+*       GUI_X_
+*
+* Externals, to be defined by application
+*
+* The externals defined below should be defined by the
+* application. They are per default contained in the module
+* GUI_X.c.
+* Note that a lot if not all of these are not required in most target
+* systems.
+* For this module, samples are available for configurations
+* with or without operating system.
+*/
+//
+// Configuration
+//
+void GUI_X_Config(void);
+void GUI_X_Init  (void);
+
+//
+// Timing routines
+//
+GUI_TIMER_TIME GUI_X_GetTime(void);
+void           GUI_X_Delay  (int Period);
+
+//
+// Multitask routines - required only if multitasking is used (#define GUI_OS 1)
+//
+void GUI_X_Unlock   (void);
+void GUI_X_Lock     (void);
+U32  GUI_X_GetTaskId(void);
+void GUI_X_InitOS   (void);
+
+//
+// Event driving (optional with multitasking)
+//
+void GUI_X_ExecIdle      (void);
+void GUI_X_WaitEvent     (void);
+void GUI_X_WaitEventTimed(int Period);
+void GUI_X_SignalEvent   (void);
+
+//
+// Recording (logs/warnings and errors) - required only for higher levels
+//
+void GUI_X_Log     (const char * s);
+void GUI_X_Warn    (const char * s);
+void GUI_X_ErrorOut(const char * s);
+
+/*********************************************************************
+*
+*       Constants for fonts and bitmaps
+*/
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEAlpha;
+
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods24;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods8888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM8888I;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM555;
+
+#define GUI_COMPRESS_RLE4 0
+#define GUI_COMPRESS_RLE8 0
+
+#define GUI_DRAW_RLE4         &GUI_BitmapMethodsRLE4       /* Method table ! */
+#define GUI_DRAW_RLE8         &GUI_BitmapMethodsRLE8       /* Method table ! */
+#define GUI_DRAW_RLE16        &GUI_BitmapMethodsRLE16      /* Method table ! */
+#define GUI_DRAW_RLEM16       &GUI_BitmapMethodsRLEM16     /* Method table ! */
+#define GUI_DRAW_RLE32        &GUI_BitmapMethodsRLE32      /* Method table ! */
+#define GUI_DRAW_RLEALPHA     &GUI_BitmapMethodsRLEAlpha   /* Method table ! */
+
+#define GUI_DRAW_BMP444_12    &GUI_BitmapMethods444_12     /* Method table ! */
+#define GUI_DRAW_BMPM444_12   &GUI_BitmapMethodsM444_12    /* Method table ! */
+#define GUI_DRAW_BMP444_12_1  &GUI_BitmapMethods444_12_1   /* Method table ! */
+#define GUI_DRAW_BMPM444_12_1 &GUI_BitmapMethodsM444_12_1  /* Method table ! */
+#define GUI_DRAW_BMP444_16    &GUI_BitmapMethods444_16     /* Method table ! */
+#define GUI_DRAW_BMPM444_16   &GUI_BitmapMethodsM444_16    /* Method table ! */
+#define GUI_DRAW_BMP555       &GUI_BitmapMethods555        /* Method table ! */
+#define GUI_DRAW_BMPM555      &GUI_BitmapMethodsM555       /* Method table ! */
+#define GUI_DRAW_BMP565       &GUI_BitmapMethods565        /* Method table ! */
+#define GUI_DRAW_BMPM565      &GUI_BitmapMethodsM565       /* Method table ! */
+#define GUI_DRAW_BMP24        &GUI_BitmapMethods24         /* Method table ! */
+#define GUI_DRAW_BMP888       &GUI_BitmapMethods888        /* Method table ! */
+#define GUI_DRAW_BMPM888      &GUI_BitmapMethodsM888       /* Method table ! */
+#define GUI_DRAW_BMP8888      &GUI_BitmapMethods8888       /* Method table ! */
+#define GUI_DRAW_BMPM8888I    &GUI_BitmapMethodsM8888I     /* Method table ! */
+#define GUI_DRAW_BMPA555      &GUI_BitmapMethodsA555       /* Method table ! */
+#define GUI_DRAW_BMPAM555     &GUI_BitmapMethodsAM555      /* Method table ! */
+#define GUI_DRAW_BMPA565      &GUI_BitmapMethodsA565       /* Method table ! */
+#define GUI_DRAW_BMPAM565     &GUI_BitmapMethodsAM565      /* Method table ! */
+
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Ext;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Frm;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2_EXT;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4_EXT;
+
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Frm;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA2_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA4_Ext;
+
+/*********************************************************************
+*
+*       GUI_KEY_...
+*
+* These ID values are basically meant to be used with widgets
+* Note that we have chosen the values to be close to existing
+* "standards", so do not change them unless forced to.
+*
+*/
+#define GUI_KEY_BACKSPACE         8         /* ASCII: BACKSPACE Crtl-H */
+#define GUI_KEY_TAB               9         /* ASCII: TAB       Crtl-I */
+#define GUI_KEY_BACKTAB           10
+#define GUI_KEY_ENTER             13        /* ASCII: ENTER     Crtl-M */
+#define GUI_KEY_LEFT              16
+#define GUI_KEY_UP                17
+#define GUI_KEY_RIGHT             18
+#define GUI_KEY_DOWN              19
+#define GUI_KEY_HOME              23
+#define GUI_KEY_END               24
+#define GUI_KEY_SHIFT             25
+#define GUI_KEY_CONTROL           26
+#define GUI_KEY_ESCAPE            27        /* ASCII: ESCAPE    0x1b   */
+#define GUI_KEY_INSERT            29
+#define GUI_KEY_DELETE            30
+#define GUI_KEY_SPACE             32
+#define GUI_KEY_PGUP              33
+#define GUI_KEY_PGDOWN            34
+
+#define GUI_KEY_F1                40
+#define GUI_KEY_F2                41
+
+/*********************************************************************
+*
+*       Dialog item IDs
+*
+*  The IDs below are arbitrary values. They just have to be unique
+*  within the dialog.
+*
+*  If you use your own Ids, we recommend to use values above GUI_ID_USER.
+*/
+#define GUI_ID_OK                1
+#define GUI_ID_CANCEL            2
+#define GUI_ID_YES               3
+#define GUI_ID_NO                4
+#define GUI_ID_CLOSE             5
+#define GUI_ID_HELP              6
+#define GUI_ID_MAXIMIZE          7
+#define GUI_ID_MINIMIZE          8
+
+#define GUI_ID_VSCROLL    0xFE
+#define GUI_ID_HSCROLL    0xFF
+
+#define GUI_ID_EDIT0      0x100
+#define GUI_ID_EDIT1      0x101
+#define GUI_ID_EDIT2      0x102
+#define GUI_ID_EDIT3      0x103
+#define GUI_ID_EDIT4      0x104
+#define GUI_ID_EDIT5      0x105
+#define GUI_ID_EDIT6      0x106
+#define GUI_ID_EDIT7      0x107
+#define GUI_ID_EDIT8      0x108
+#define GUI_ID_EDIT9      0x109
+
+#define GUI_ID_LISTBOX0   0x110
+#define GUI_ID_LISTBOX1   0x111
+#define GUI_ID_LISTBOX2   0x112
+#define GUI_ID_LISTBOX3   0x113
+#define GUI_ID_LISTBOX4   0x114
+#define GUI_ID_LISTBOX5   0x115
+#define GUI_ID_LISTBOX6   0x116
+#define GUI_ID_LISTBOX7   0x117
+#define GUI_ID_LISTBOX8   0x118
+#define GUI_ID_LISTBOX9   0x119
+
+#define GUI_ID_CHECK0     0x120
+#define GUI_ID_CHECK1     0x121
+#define GUI_ID_CHECK2     0x122
+#define GUI_ID_CHECK3     0x123
+#define GUI_ID_CHECK4     0x124
+#define GUI_ID_CHECK5     0x125
+#define GUI_ID_CHECK6     0x126
+#define GUI_ID_CHECK7     0x127
+#define GUI_ID_CHECK8     0x128
+#define GUI_ID_CHECK9     0x129
+
+#define GUI_ID_SLIDER0    0x130
+#define GUI_ID_SLIDER1    0x131
+#define GUI_ID_SLIDER2    0x132
+#define GUI_ID_SLIDER3    0x133
+#define GUI_ID_SLIDER4    0x134
+#define GUI_ID_SLIDER5    0x135
+#define GUI_ID_SLIDER6    0x136
+#define GUI_ID_SLIDER7    0x137
+#define GUI_ID_SLIDER8    0x138
+#define GUI_ID_SLIDER9    0x139
+
+#define GUI_ID_SCROLLBAR0 0x140
+#define GUI_ID_SCROLLBAR1 0x141
+#define GUI_ID_SCROLLBAR2 0x142
+#define GUI_ID_SCROLLBAR3 0x143
+
+#define GUI_ID_RADIO0     0x150
+#define GUI_ID_RADIO1     0x151
+#define GUI_ID_RADIO2     0x152
+#define GUI_ID_RADIO3     0x153
+#define GUI_ID_RADIO4     0x154
+#define GUI_ID_RADIO5     0x155
+#define GUI_ID_RADIO6     0x156
+#define GUI_ID_RADIO7     0x157
+
+#define GUI_ID_TEXT0      0x160
+#define GUI_ID_TEXT1      0x161
+#define GUI_ID_TEXT2      0x162
+#define GUI_ID_TEXT3      0x163
+#define GUI_ID_TEXT4      0x164
+#define GUI_ID_TEXT5      0x165
+#define GUI_ID_TEXT6      0x166
+#define GUI_ID_TEXT7      0x167
+#define GUI_ID_TEXT8      0x168
+#define GUI_ID_TEXT9      0x169
+
+#define GUI_ID_BUTTON0    0x170
+#define GUI_ID_BUTTON1    0x171
+#define GUI_ID_BUTTON2    0x172
+#define GUI_ID_BUTTON3    0x173
+#define GUI_ID_BUTTON4    0x174
+#define GUI_ID_BUTTON5    0x175
+#define GUI_ID_BUTTON6    0x176
+#define GUI_ID_BUTTON7    0x177
+#define GUI_ID_BUTTON8    0x178
+#define GUI_ID_BUTTON9    0x179
+
+#define GUI_ID_DROPDOWN0  0x180
+#define GUI_ID_DROPDOWN1  0x181
+#define GUI_ID_DROPDOWN2  0x182
+#define GUI_ID_DROPDOWN3  0x183
+
+#define GUI_ID_MULTIEDIT0 0x190
+#define GUI_ID_MULTIEDIT1 0x191
+#define GUI_ID_MULTIEDIT2 0x192
+#define GUI_ID_MULTIEDIT3 0x193
+
+#define GUI_ID_LISTVIEW0  0x200
+#define GUI_ID_LISTVIEW1  0x201
+#define GUI_ID_LISTVIEW2  0x202
+#define GUI_ID_LISTVIEW3  0x203
+
+#define GUI_ID_PROGBAR0   0x210
+#define GUI_ID_PROGBAR1   0x211
+#define GUI_ID_PROGBAR2   0x212
+#define GUI_ID_PROGBAR3   0x213
+
+#define GUI_ID_GRAPH0     0x220
+#define GUI_ID_GRAPH1     0x221
+#define GUI_ID_GRAPH2     0x222
+#define GUI_ID_GRAPH3     0x223
+
+#define GUI_ID_MULTIPAGE0 0x230
+#define GUI_ID_MULTIPAGE1 0x231
+#define GUI_ID_MULTIPAGE2 0x232
+#define GUI_ID_MULTIPAGE3 0x233
+
+#define GUI_ID_TREEVIEW0  0x240
+#define GUI_ID_TREEVIEW1  0x241
+#define GUI_ID_TREEVIEW2  0x242
+#define GUI_ID_TREEVIEW3  0x243
+
+#define GUI_ID_ICONVIEW0  0x250
+#define GUI_ID_ICONVIEW1  0x251
+#define GUI_ID_ICONVIEW2  0x252
+#define GUI_ID_ICONVIEW3  0x253
+
+#define GUI_ID_LISTWHEEL0 0x260
+#define GUI_ID_LISTWHEEL1 0x261
+#define GUI_ID_LISTWHEEL2 0x262
+#define GUI_ID_LISTWHEEL3 0x263
+
+#define GUI_ID_IMAGE0     0x270
+#define GUI_ID_IMAGE1     0x271
+#define GUI_ID_IMAGE2     0x272
+#define GUI_ID_IMAGE3     0x273
+#define GUI_ID_IMAGE4     0x274
+#define GUI_ID_IMAGE5     0x275
+#define GUI_ID_IMAGE6     0x276
+#define GUI_ID_IMAGE7     0x277
+#define GUI_ID_IMAGE8     0x278
+#define GUI_ID_IMAGE9     0x279
+
+#define GUI_ID_SPINBOX0   0x280
+#define GUI_ID_SPINBOX1   0x281
+#define GUI_ID_SPINBOX2   0x282
+#define GUI_ID_SPINBOX3   0x283
+#define GUI_ID_SPINBOX4   0x284
+#define GUI_ID_SPINBOX5   0x285
+#define GUI_ID_SPINBOX6   0x286
+#define GUI_ID_SPINBOX7   0x287
+#define GUI_ID_SPINBOX8   0x288
+#define GUI_ID_SPINBOX9   0x289
+
+#define GUI_ID_CALENDAR0  0x290
+
+#define GUI_ID_KNOB0      0x300
+#define GUI_ID_KNOB1      0x301
+#define GUI_ID_KNOB2      0x302
+#define GUI_ID_KNOB3      0x303
+#define GUI_ID_KNOB4      0x304
+#define GUI_ID_KNOB5      0x305
+#define GUI_ID_KNOB6      0x306
+#define GUI_ID_KNOB7      0x307
+#define GUI_ID_KNOB8      0x308
+#define GUI_ID_KNOB9      0x309
+
+#define GUI_ID_SWIPELIST0 0x320
+#define GUI_ID_SWIPELIST1 0x321
+#define GUI_ID_SWIPELIST2 0x322
+
+#define GUI_ID_USER       0x800
+
+/*********************************************************************
+*
+*       Mouse buttons
+*/
+#define GUI_LBUTTON (1 << 0) /* Left button */
+#define GUI_RBUTTON (1 << 1) /* Right button */
+#define GUI_MBUTTON (1 << 2) /* Middle button */
+#define GUI_DBUTTON (1 << 7) /* Double-click button */
+
+/*********************************************************************
+*
+*       Text styles
+*/
+#define GUI_TS_NORMAL           (0)
+#define GUI_TS_UNDERLINE        (1 << 0)
+#define GUI_TS_STRIKETHRU       (1 << 1)
+#define GUI_TS_OVERLINE         (1 << 2)
+
+/*********************************************************************
+*
+*       Line styles
+*/
+#define GUI_LS_SOLID        (0)
+#define GUI_LS_DASH         (1)
+#define GUI_LS_DOT          (2)
+#define GUI_LS_DASHDOT      (3)
+#define GUI_LS_DASHDOTDOT   (4)
+
+/*********************************************************************
+*
+*       Pen shapes
+*/
+#define GUI_PS_ROUND        (0)
+#define GUI_PS_FLAT         (1)
+#define GUI_PS_SQUARE       (2)
+
+/*********************************************************************
+*
+*       Standard colors
+*/
+#define GUI_INVALID_COLOR ((((U32)GUI_TRANS_BYTE) << 24) | 0x12345678ul)  /* Invalid color (transparency + determined color) */
+
+#if (GUI_USE_ARGB)
+  #define GUI_MAKE_COLOR(ABGR)  (((((U32)ABGR) & 0xFF000000ul) ^ 0xFF000000ul) | ((((U32)ABGR) & 0x00FF0000ul) >> 16) | (((U32)ABGR) & 0x0000FF00ul) | ((((U32)ABGR) & 0x000000FFul) << 16))
+  #define GUI_MAKE_TRANS(Alpha) (255 - (Alpha))
+#else
+  #define GUI_MAKE_COLOR(ABGR)  (ABGR)
+  #define GUI_MAKE_TRANS(Alpha) (Alpha)
+#endif
+
+#if (GUI_USE_ARGB)
+  #define GUI_TRANS_BYTE 0x00
+#else
+  #define GUI_TRANS_BYTE 0xFF
+#endif
+
+#define GUI_BLUE          GUI_MAKE_COLOR(0x00FF0000)
+#define GUI_GREEN         GUI_MAKE_COLOR(0x0000FF00)
+#define GUI_RED           GUI_MAKE_COLOR(0x000000FF)
+#define GUI_CYAN          GUI_MAKE_COLOR(0x00FFFF00)
+#define GUI_MAGENTA       GUI_MAKE_COLOR(0x00FF00FF)
+#define GUI_YELLOW        GUI_MAKE_COLOR(0x0000FFFF)
+#define GUI_LIGHTBLUE     GUI_MAKE_COLOR(0x00FF8080)
+#define GUI_LIGHTGREEN    GUI_MAKE_COLOR(0x0080FF80)
+#define GUI_LIGHTRED      GUI_MAKE_COLOR(0x008080FF)
+#define GUI_LIGHTCYAN     GUI_MAKE_COLOR(0x00FFFF80)
+#define GUI_LIGHTMAGENTA  GUI_MAKE_COLOR(0x00FF80FF)
+#define GUI_LIGHTYELLOW   GUI_MAKE_COLOR(0x0080FFFF)
+#define GUI_DARKBLUE      GUI_MAKE_COLOR(0x00800000)
+#define GUI_DARKGREEN     GUI_MAKE_COLOR(0x00008000)
+#define GUI_DARKRED       GUI_MAKE_COLOR(0x00000080)
+#define GUI_DARKCYAN      GUI_MAKE_COLOR(0x00808000)
+#define GUI_DARKMAGENTA   GUI_MAKE_COLOR(0x00800080)
+#define GUI_DARKYELLOW    GUI_MAKE_COLOR(0x00008080)
+#define GUI_WHITE         GUI_MAKE_COLOR(0x00FFFFFF)
+#define GUI_LIGHTGRAY     GUI_MAKE_COLOR(0x00D3D3D3)
+#define GUI_GRAY          GUI_MAKE_COLOR(0x00808080)
+#define GUI_DARKGRAY      GUI_MAKE_COLOR(0x00404040)
+#define GUI_BLACK         GUI_MAKE_COLOR(0x00000000)
+#define GUI_BROWN         GUI_MAKE_COLOR(0x002A2AA5)
+#define GUI_ORANGE        GUI_MAKE_COLOR(0x0000A5FF)
+#define GUI_TRANSPARENT   GUI_MAKE_COLOR(0xFF000000)
+
+#define GUI_GRAY_3F       GUI_MAKE_COLOR(0x003F3F3F)
+#define GUI_GRAY_50       GUI_MAKE_COLOR(0x00505050)
+#define GUI_GRAY_55       GUI_MAKE_COLOR(0x00555555)
+#define GUI_GRAY_60       GUI_MAKE_COLOR(0x00606060)
+#define GUI_GRAY_7C       GUI_MAKE_COLOR(0x007C7C7C)
+#define GUI_GRAY_9A       GUI_MAKE_COLOR(0x009A9A9A)
+#define GUI_GRAY_AA       GUI_MAKE_COLOR(0x00AAAAAA)
+#define GUI_GRAY_C0       GUI_MAKE_COLOR(0x00C0C0C0)
+#define GUI_GRAY_C8       GUI_MAKE_COLOR(0x00C8C8C8)
+#define GUI_GRAY_D0       GUI_MAKE_COLOR(0x00D0D0D0)
+#define GUI_GRAY_E7       GUI_MAKE_COLOR(0x00E7E7E7)
+#define GUI_BLUE_98       GUI_MAKE_COLOR(0x00980000)
+
+/*********************************************************************
+*
+*       MultiTouch-Support
+*/
+//
+// Defines
+//
+#define GUI_MTOUCH_FLAG_DOWN (1 << 0)
+#define GUI_MTOUCH_FLAG_MOVE (1 << 1)
+#define GUI_MTOUCH_FLAG_UP   (1 << 2)
+
+//
+// Variables
+//
+extern T_GUI_MTOUCH_STOREEVENT GUI_MTOUCH__pStoreEvent;
+
+//
+// Interface
+//
+void GUI_MTOUCH_Enable          (int OnOff);
+int  GUI_MTOUCH_GetEvent        (GUI_MTOUCH_EVENT * pEvent);
+int  GUI_MTOUCH_GetTouchInput   (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pBuffer, unsigned Index);
+int  GUI_MTOUCH_IsEmpty         (void);
+void GUI_MTOUCH_SetOrientation  (int Orientation);
+void GUI_MTOUCH_SetOrientationEx(int Orientation, int LayerIndex);
+void GUI_MTOUCH_StoreEvent      (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pInput);
+
+/*********************************************************************
+*
+*       Coordinates used in touch driver
+*/
+#define GUI_COORD_X 0
+#define GUI_COORD_Y 1
+
+/*********************************************************************
+*
+*       Addresses of standard fonts
+*/
+//
+// Proportional fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8_ASCII,        GUI_Font8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10S_ASCII,      GUI_Font10S_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10_ASCII,       GUI_Font10_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13_ASCII,       GUI_Font13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13B_ASCII,      GUI_Font13B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13H_ASCII,      GUI_Font13H_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13HB_ASCII,     GUI_Font13HB_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16_ASCII,       GUI_Font16_1,       GUI_Font16_HK,    GUI_Font16_1HK;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16B_ASCII,      GUI_Font16B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20_ASCII,       GUI_Font20_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20B_ASCII,      GUI_Font20B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24_ASCII,       GUI_Font24_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24B_ASCII,      GUI_Font24B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32_ASCII,       GUI_Font32_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32B_ASCII,      GUI_Font32B_1;
+
+//
+// Proportional fonts, framed
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20F_ASCII;
+
+//
+// Monospaced
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font4x6;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8,            GUI_Font6x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8_ASCII,      GUI_Font6x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8,            GUI_Font8x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8_ASCII,      GUI_Font8x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x10_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x12_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x13_ASCII,     GUI_Font8x13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x15B_ASCII,    GUI_Font8x15B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16,           GUI_Font8x17,       GUI_Font8x18;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16x1x2,       GUI_Font8x16x2x2,   GUI_Font8x16x3x3;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16_ASCII,     GUI_Font8x16_1;
+
+//
+// Digits
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD24x32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD36x48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48x64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD60x80;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD80;
+
+//
+// Comic fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic18B_ASCII, GUI_FontComic18B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic24B_ASCII, GUI_FontComic24B_1;
+
+/*********************************************************************
+*
+*       Macros to be used
+*/
+//
+// Proportional fonts
+//
+#define GUI_FONT_8_ASCII        &GUI_Font8_ASCII
+#define GUI_FONT_8_1            &GUI_Font8_1
+#define GUI_FONT_10S_ASCII      &GUI_Font10S_ASCII
+#define GUI_FONT_10S_1          &GUI_Font10S_1
+#define GUI_FONT_10_ASCII       &GUI_Font10_ASCII
+#define GUI_FONT_10_1           &GUI_Font10_1
+#define GUI_FONT_13_ASCII       &GUI_Font13_ASCII
+#define GUI_FONT_13_1           &GUI_Font13_1
+#define GUI_FONT_13B_ASCII      &GUI_Font13B_ASCII
+#define GUI_FONT_13B_1          &GUI_Font13B_1
+#define GUI_FONT_13H_ASCII      &GUI_Font13H_ASCII
+#define GUI_FONT_13H_1          &GUI_Font13H_1
+#define GUI_FONT_13HB_ASCII     &GUI_Font13HB_ASCII
+#define GUI_FONT_13HB_1         &GUI_Font13HB_1
+#define GUI_FONT_16_ASCII       &GUI_Font16_ASCII
+#define GUI_FONT_16_1           &GUI_Font16_1
+#define GUI_FONT_16_HK          &GUI_Font16_HK
+#define GUI_FONT_16_1HK         &GUI_Font16_1HK
+#define GUI_FONT_16B_ASCII      &GUI_Font16B_ASCII
+#define GUI_FONT_16B_1          &GUI_Font16B_1
+#define GUI_FONT_20_ASCII       &GUI_Font20_ASCII
+#define GUI_FONT_20_1           &GUI_Font20_1
+#define GUI_FONT_20B_ASCII      &GUI_Font20B_ASCII
+#define GUI_FONT_20B_1          &GUI_Font20B_1
+#define GUI_FONT_24_ASCII       &GUI_Font24_ASCII
+#define GUI_FONT_24_1           &GUI_Font24_1
+#define GUI_FONT_24B_ASCII      &GUI_Font24B_ASCII
+#define GUI_FONT_24B_1          &GUI_Font24B_1
+#define GUI_FONT_32_ASCII       &GUI_Font32_ASCII
+#define GUI_FONT_32_1           &GUI_Font32_1
+#define GUI_FONT_32B_ASCII      &GUI_Font32B_ASCII
+#define GUI_FONT_32B_1          &GUI_Font32B_1
+
+//
+// Proportional fonts, framed
+//
+#define GUI_FONT_20F_ASCII      &GUI_Font20F_ASCII
+
+//
+// Monospaced
+//
+#define GUI_FONT_4X6            &GUI_Font4x6
+#define GUI_FONT_6X8            &GUI_Font6x8
+#define GUI_FONT_6X8_ASCII      &GUI_Font6x8_ASCII
+#define GUI_FONT_6X8_1          &GUI_Font6x8_1
+#define GUI_FONT_6X9            &GUI_Font6x9
+#define GUI_FONT_8X8            &GUI_Font8x8
+#define GUI_FONT_8X8_ASCII      &GUI_Font8x8_ASCII
+#define GUI_FONT_8X8_1          &GUI_Font8x8_1
+#define GUI_FONT_8X9            &GUI_Font8x9
+#define GUI_FONT_8X10_ASCII     &GUI_Font8x10_ASCII
+#define GUI_FONT_8X12_ASCII     &GUI_Font8x12_ASCII
+#define GUI_FONT_8X13_ASCII     &GUI_Font8x13_ASCII
+#define GUI_FONT_8X13_1         &GUI_Font8x13_1
+#define GUI_FONT_8X15B_ASCII    &GUI_Font8x15B_ASCII
+#define GUI_FONT_8X15B_1        &GUI_Font8x15B_1
+#define GUI_FONT_8X16           &GUI_Font8x16
+#define GUI_FONT_8X17           &GUI_Font8x17
+#define GUI_FONT_8X18           &GUI_Font8x18
+#define GUI_FONT_8X16X1X2       &GUI_Font8x16x1x2
+#define GUI_FONT_8X16X2X2       &GUI_Font8x16x2x2
+#define GUI_FONT_8X16X3X3       &GUI_Font8x16x3x3
+#define GUI_FONT_8X16_ASCII     &GUI_Font8x16_ASCII
+#define GUI_FONT_8X16_1         &GUI_Font8x16_1
+
+//
+// Digits
+//
+#define GUI_FONT_D24X32         &GUI_FontD24x32
+#define GUI_FONT_D32            &GUI_FontD32
+#define GUI_FONT_D36X48         &GUI_FontD36x48
+#define GUI_FONT_D48            &GUI_FontD48
+#define GUI_FONT_D48X64         &GUI_FontD48x64
+#define GUI_FONT_D64            &GUI_FontD64
+#define GUI_FONT_D60X80         &GUI_FontD60x80
+#define GUI_FONT_D80            &GUI_FontD80
+
+//
+// Comic fonts
+//
+#define GUI_FONT_COMIC18B_ASCII &GUI_FontComic18B_ASCII
+#define GUI_FONT_COMIC18B_1     &GUI_FontComic18B_1
+#define GUI_FONT_COMIC24B_ASCII &GUI_FontComic24B_ASCII
+#define GUI_FONT_COMIC24B_1     &GUI_FontComic24B_1
+
+/*********************************************************************
+*
+*       Text and drawing modes
+*
+* These defines come in two flavors: the long version (.._DRAWMODE_..)
+* and the short ones (.._DM_..). They are identical, feel free to use
+* which ever one you like best.
+*/
+#define GUI_DRAWMODE_NORMAL  LCD_DRAWMODE_NORMAL
+#define GUI_DRAWMODE_XOR     LCD_DRAWMODE_XOR
+#define GUI_DRAWMODE_TRANS   LCD_DRAWMODE_TRANS
+#define GUI_DRAWMODE_REV     LCD_DRAWMODE_REV
+#define GUI_DM_NORMAL        LCD_DRAWMODE_NORMAL
+#define GUI_DM_XOR           LCD_DRAWMODE_XOR
+#define GUI_DM_TRANS         LCD_DRAWMODE_TRANS
+#define GUI_DM_REV           LCD_DRAWMODE_REV
+
+#define GUI_TEXTMODE_NORMAL  LCD_DRAWMODE_NORMAL
+#define GUI_TEXTMODE_XOR     LCD_DRAWMODE_XOR
+#define GUI_TEXTMODE_TRANS   LCD_DRAWMODE_TRANS
+#define GUI_TEXTMODE_REV     LCD_DRAWMODE_REV
+#define GUI_TM_NORMAL        LCD_DRAWMODE_NORMAL
+#define GUI_TM_XOR           LCD_DRAWMODE_XOR
+#define GUI_TM_TRANS         LCD_DRAWMODE_TRANS
+#define GUI_TM_REV           LCD_DRAWMODE_REV
+
+/* Text alignment flags, horizontal */
+#define GUI_TA_LEFT       (0)
+#define GUI_TA_HORIZONTAL (3 << 0)
+#define GUI_TA_RIGHT      (1 << 0)
+#define GUI_TA_CENTER     (2 << 0)
+#define GUI_TA_HCENTER    GUI_TA_CENTER  /* easier to remember :-)  */
+
+/* Text alignment flags, vertical */
+#define GUI_TA_TOP        (0)
+#define GUI_TA_VERTICAL   (3 << 2)
+#define GUI_TA_BOTTOM     (1 << 2)
+#define GUI_TA_BASELINE   (2 << 2)
+#define GUI_TA_VCENTER    (3 << 2)
+
+/* General alignment flags */
+#define GUI_ALIGN_LEFT       GUI_TA_LEFT
+#define GUI_ALIGN_HCENTER    GUI_TA_HCENTER
+#define GUI_ALIGN_RIGHT      GUI_TA_RIGHT
+#define GUI_ALIGN_TOP        GUI_TA_TOP
+#define GUI_ALIGN_VCENTER    GUI_TA_VCENTER
+#define GUI_ALIGN_BOTTOM     GUI_TA_BOTTOM
+#define GUI_ALIGN_HORIZONTAL GUI_TA_HORIZONTAL
+#define GUI_ALIGN_VERTICAL   GUI_TA_VERTICAL
+
+/* General orientation flags */
+#define GUI_MIRROR_X (1 << 0)
+#define GUI_MIRROR_Y (1 << 1)
+#define GUI_SWAP_XY  (1 << 2)
+
+#define GUI_ROTATION_0   (0)
+#define GUI_ROTATION_CW  (GUI_MIRROR_X | GUI_SWAP_XY)
+#define GUI_ROTATION_180 (GUI_MIRROR_X | GUI_MIRROR_Y)
+#define GUI_ROTATION_CCW (GUI_MIRROR_Y | GUI_SWAP_XY)
+
+/*********************************************************************
+*
+*       Min/Max coordinates
+*
+* Define minimum and maximum coordinates in x and y
+*/
+#define GUI_XMIN -16383
+#define GUI_XMAX  16383
+#define GUI_YMIN -16383
+#define GUI_YMAX  16383
+
+/*********************************************************************
+*
+*       Defines for constants
+*/
+#define	________	0x0
+#define	_______X	0x1
+#define	______X_	0x2
+#define	______XX	0x3
+#define	_____X__	0x4
+#define	_____X_X	0x5
+#define	_____XX_	0x6
+#define	_____XXX	0x7
+#define	____X___	0x8
+#define	____X__X	0x9
+#define	____X_X_	0xa
+#define	____X_XX	0xb
+#define	____XX__	0xc
+#define	____XX_X	0xd
+#define	____XXX_	0xe
+#define	____XXXX	0xf
+#define	___X____	0x10
+#define	___X___X	0x11
+#define	___X__X_	0x12
+#define	___X__XX	0x13
+#define	___X_X__	0x14
+#define	___X_X_X	0x15
+#define	___X_XX_	0x16
+#define	___X_XXX	0x17
+#define	___XX___	0x18
+#define	___XX__X	0x19
+#define	___XX_X_	0x1a
+#define	___XX_XX	0x1b
+#define	___XXX__	0x1c
+#define	___XXX_X	0x1d
+#define	___XXXX_	0x1e
+#define	___XXXXX	0x1f
+#define	__X_____	0x20
+#define	__X____X	0x21
+#define	__X___X_	0x22
+#define	__X___XX	0x23
+#define	__X__X__	0x24
+#define	__X__X_X	0x25
+#define	__X__XX_	0x26
+#define	__X__XXX	0x27
+#define	__X_X___	0x28
+#define	__X_X__X	0x29
+#define	__X_X_X_	0x2a
+#define	__X_X_XX	0x2b
+#define	__X_XX__	0x2c
+#define	__X_XX_X	0x2d
+#define	__X_XXX_	0x2e
+#define	__X_XXXX	0x2f
+#define	__XX____	0x30
+#define	__XX___X	0x31
+#define	__XX__X_	0x32
+#define	__XX__XX	0x33
+#define	__XX_X__	0x34
+#define	__XX_X_X	0x35
+#define	__XX_XX_	0x36
+#define	__XX_XXX	0x37
+#define	__XXX___	0x38
+#define	__XXX__X	0x39
+#define	__XXX_X_	0x3a
+#define	__XXX_XX	0x3b
+#define	__XXXX__	0x3c
+#define	__XXXX_X	0x3d
+#define	__XXXXX_	0x3e
+#define	__XXXXXX	0x3f
+#define	_X______	0x40
+#define	_X_____X	0x41
+#define	_X____X_	0x42
+#define	_X____XX	0x43
+#define	_X___X__	0x44
+#define	_X___X_X	0x45
+#define	_X___XX_	0x46
+#define	_X___XXX	0x47
+#define	_X__X___	0x48
+#define	_X__X__X	0x49
+#define	_X__X_X_	0x4a
+#define	_X__X_XX	0x4b
+#define	_X__XX__	0x4c
+#define	_X__XX_X	0x4d
+#define	_X__XXX_	0x4e
+#define	_X__XXXX	0x4f
+#define	_X_X____	0x50
+#define	_X_X___X	0x51
+#define	_X_X__X_	0x52
+#define	_X_X__XX	0x53
+#define	_X_X_X__	0x54
+#define	_X_X_X_X	0x55
+#define	_X_X_XX_	0x56
+#define	_X_X_XXX	0x57
+#define	_X_XX___	0x58
+#define	_X_XX__X	0x59
+#define	_X_XX_X_	0x5a
+#define	_X_XX_XX	0x5b
+#define	_X_XXX__	0x5c
+#define	_X_XXX_X	0x5d
+#define	_X_XXXX_	0x5e
+#define	_X_XXXXX	0x5f
+#define	_XX_____	0x60
+#define	_XX____X	0x61
+#define	_XX___X_	0x62
+#define	_XX___XX	0x63
+#define	_XX__X__	0x64
+#define	_XX__X_X	0x65
+#define	_XX__XX_	0x66
+#define	_XX__XXX	0x67
+#define	_XX_X___	0x68
+#define	_XX_X__X	0x69
+#define	_XX_X_X_	0x6a
+#define	_XX_X_XX	0x6b
+#define	_XX_XX__	0x6c
+#define	_XX_XX_X	0x6d
+#define	_XX_XXX_	0x6e
+#define	_XX_XXXX	0x6f
+#define	_XXX____	0x70
+#define	_XXX___X	0x71
+#define	_XXX__X_	0x72
+#define	_XXX__XX	0x73
+#define	_XXX_X__	0x74
+#define	_XXX_X_X	0x75
+#define	_XXX_XX_	0x76
+#define	_XXX_XXX	0x77
+#define	_XXXX___	0x78
+#define	_XXXX__X	0x79
+#define	_XXXX_X_	0x7a
+#define	_XXXX_XX	0x7b
+#define	_XXXXX__	0x7c
+#define	_XXXXX_X	0x7d
+#define	_XXXXXX_	0x7e
+#define	_XXXXXXX	0x7f
+#define	X_______	0x80
+#define	X______X	0x81
+#define	X_____X_	0x82
+#define	X_____XX	0x83
+#define	X____X__	0x84
+#define	X____X_X	0x85
+#define	X____XX_	0x86
+#define	X____XXX	0x87
+#define	X___X___	0x88
+#define	X___X__X	0x89
+#define	X___X_X_	0x8a
+#define	X___X_XX	0x8b
+#define	X___XX__	0x8c
+#define	X___XX_X	0x8d
+#define	X___XXX_	0x8e
+#define	X___XXXX	0x8f
+#define	X__X____	0x90
+#define	X__X___X	0x91
+#define	X__X__X_	0x92
+#define	X__X__XX	0x93
+#define	X__X_X__	0x94
+#define	X__X_X_X	0x95
+#define	X__X_XX_	0x96
+#define	X__X_XXX	0x97
+#define	X__XX___	0x98
+#define	X__XX__X	0x99
+#define	X__XX_X_	0x9a
+#define X__XX_XX	0x9b
+#define X__XXX__	0x9c
+#define X__XXX_X	0x9d
+#define	X__XXXX_	0x9e
+#define	X__XXXXX	0x9f
+#define	X_X_____	0xa0
+#define	X_X____X	0xa1
+#define	X_X___X_	0xa2
+#define	X_X___XX	0xa3
+#define	X_X__X__	0xa4
+#define	X_X__X_X	0xa5
+#define	X_X__XX_	0xa6
+#define	X_X__XXX	0xa7
+#define	X_X_X___	0xa8
+#define	X_X_X__X	0xa9
+#define	X_X_X_X_	0xaa
+#define	X_X_X_XX	0xab
+#define	X_X_XX__	0xac
+#define	X_X_XX_X	0xad
+#define	X_X_XXX_	0xae
+#define	X_X_XXXX	0xaf
+#define	X_XX____	0xb0
+#define X_XX___X	0xb1
+#define	X_XX__X_	0xb2
+#define	X_XX__XX	0xb3
+#define	X_XX_X__	0xb4
+#define	X_XX_X_X	0xb5
+#define	X_XX_XX_	0xb6
+#define	X_XX_XXX	0xb7
+#define	X_XXX___	0xb8
+#define	X_XXX__X	0xb9
+#define	X_XXX_X_	0xba
+#define	X_XXX_XX	0xbb
+#define	X_XXXX__	0xbc
+#define	X_XXXX_X	0xbd
+#define	X_XXXXX_	0xbe
+#define	X_XXXXXX	0xbf
+#define	XX______	0xc0
+#define	XX_____X	0xc1
+#define	XX____X_	0xc2
+#define	XX____XX	0xc3
+#define	XX___X__	0xc4
+#define	XX___X_X	0xc5
+#define	XX___XX_	0xc6
+#define	XX___XXX	0xc7
+#define	XX__X___	0xc8
+#define	XX__X__X	0xc9
+#define	XX__X_X_	0xca
+#define	XX__X_XX	0xcb
+#define	XX__XX__	0xcc
+#define	XX__XX_X	0xcd
+#define	XX__XXX_	0xce
+#define XX__XXXX	0xcf
+#define	XX_X____	0xd0
+#define	XX_X___X	0xd1
+#define	XX_X__X_	0xd2
+#define	XX_X__XX	0xd3
+#define	XX_X_X__	0xd4
+#define	XX_X_X_X	0xd5
+#define	XX_X_XX_	0xd6
+#define	XX_X_XXX	0xd7
+#define	XX_XX___	0xd8
+#define	XX_XX__X	0xd9
+#define	XX_XX_X_	0xda
+#define	XX_XX_XX	0xdb
+#define	XX_XXX__	0xdc
+#define	XX_XXX_X	0xdd
+#define	XX_XXXX_	0xde
+#define	XX_XXXXX	0xdf
+#define	XXX_____	0xe0
+#define	XXX____X	0xe1
+#define	XXX___X_	0xe2
+#define	XXX___XX	0xe3
+#define	XXX__X__	0xe4
+#define	XXX__X_X	0xe5
+#define	XXX__XX_	0xe6
+#define	XXX__XXX	0xe7
+#define	XXX_X___	0xe8
+#define	XXX_X__X	0xe9
+#define	XXX_X_X_	0xea
+#define	XXX_X_XX	0xeb
+#define	XXX_XX__	0xec
+#define	XXX_XX_X	0xed
+#define	XXX_XXX_	0xee
+#define	XXX_XXXX	0xef
+#define	XXXX____	0xf0
+#define	XXXX___X	0xf1
+#define	XXXX__X_	0xf2
+#define	XXXX__XX	0xf3
+#define	XXXX_X__	0xf4
+#define	XXXX_X_X	0xf5
+#define	XXXX_XX_	0xf6
+#define	XXXX_XXX	0xf7
+#define	XXXXX___	0xf8
+#define	XXXXX__X	0xf9
+#define	XXXXX_X_	0xfa
+#define	XXXXX_XX	0xfb
+#define	XXXXXX__	0xfc
+#define	XXXXXX_X	0xfd
+#define	XXXXXXX_	0xfe
+#define	XXXXXXXX	0xff
+
+/*********************************************************************
+*
+*       Compatibility with older versions
+*/
+#define GUI_DispString_UC      GUI_UC_DispString
+#define TOUCH_X_ActivateX      GUI_TOUCH_X_ActivateX
+#define TOUCH_X_ActivateY      GUI_TOUCH_X_ActivateY
+#define TOUCH_X_Disable        GUI_TOUCH_X_Disable
+#define TOUCH_X_MeasureX       GUI_TOUCH_X_MeasureX
+#define TOUCH_X_MeasureY       GUI_TOUCH_X_MeasureY
+#define GUI_SelLayer           GUI_SelectLayer
+#define GUI_MEMDEV_FadeDevices GUI_MEMDEV_FadeInDevices
+#if defined(__cplusplus)
+}
+#endif
+
+#endif   /* ifdef GUI_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_FlexColor.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,299 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_FlexColor.h
+Purpose     : Interface definition for GUIDRV_FlexColor driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_FLEXCOLOR_H
+#define GUIDRV_FLEXCOLOR_H
+
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration macros
+*/
+//
+// Operation modes (16bpp)
+//
+#define GUIDRV_FLEXCOLOR_M16C0B8  GUIDRV_FlexColor_SetMode16bppC0B8
+#define GUIDRV_FLEXCOLOR_M16C1B8  GUIDRV_FlexColor_SetMode16bppC1B8
+#define GUIDRV_FLEXCOLOR_M16C0B16 GUIDRV_FlexColor_SetMode16bppC0B16
+#define GUIDRV_FLEXCOLOR_M16C1B16 GUIDRV_FlexColor_SetMode16bppC1B16
+
+//
+// Operation modes (18bpp)
+//
+#define GUIDRV_FLEXCOLOR_M18C0B9  GUIDRV_FlexColor_SetMode18bppC0B9
+#define GUIDRV_FLEXCOLOR_M18C1B9  GUIDRV_FlexColor_SetMode18bppC1B9
+#define GUIDRV_FLEXCOLOR_M18C0B18 GUIDRV_FlexColor_SetMode18bppC0B18
+#define GUIDRV_FLEXCOLOR_M18C1B18 GUIDRV_FlexColor_SetMode18bppC1B18
+
+//
+// Operation mode (24bpp)
+//
+#define GUIDRV_FLEXCOLOR_M24C0B8  GUIDRV_FlexColor_SetMode24bppC0B8
+
+//
+// Controller selection
+//
+#define GUIDRV_FLEXCOLOR_F66702   GUIDRV_FlexColor_SetFunc66702
+#define GUIDRV_FLEXCOLOR_F66708   GUIDRV_FlexColor_SetFunc66708
+#define GUIDRV_FLEXCOLOR_F66709   GUIDRV_FlexColor_SetFunc66709
+#define GUIDRV_FLEXCOLOR_F66712   GUIDRV_FlexColor_SetFunc66712
+#define GUIDRV_FLEXCOLOR_F66714   GUIDRV_FlexColor_SetFunc66714
+#define GUIDRV_FLEXCOLOR_F66715   GUIDRV_FlexColor_SetFunc66715
+#define GUIDRV_FLEXCOLOR_F66718   GUIDRV_FlexColor_SetFunc66718
+#define GUIDRV_FLEXCOLOR_F66719   GUIDRV_FlexColor_SetFunc66719
+#define GUIDRV_FLEXCOLOR_F66720   GUIDRV_FlexColor_SetFunc66720
+#define GUIDRV_FLEXCOLOR_F66721   GUIDRV_FlexColor_SetFunc66721
+#define GUIDRV_FLEXCOLOR_F66722   GUIDRV_FlexColor_SetFunc66722
+#define GUIDRV_FLEXCOLOR_F66723   GUIDRV_FlexColor_SetFunc66723
+#define GUIDRV_FLEXCOLOR_F66724   GUIDRV_FlexColor_SetFunc66724
+#define GUIDRV_FLEXCOLOR_F66772   GUIDRV_FlexColor_SetFunc66772
+
+//
+// Hardware interfaces
+//
+#define GUIDRV_FLEXCOLOR_IF_TYPE_I  0
+#define GUIDRV_FLEXCOLOR_IF_TYPE_II 1
+
+//
+// Reading interface
+//
+#define GUIDRV_FLEXCOLOR_READ_FUNC_I   0
+#define GUIDRV_FLEXCOLOR_READ_FUNC_II  1
+#define GUIDRV_FLEXCOLOR_READ_FUNC_III 2
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  int FirstSEG;
+  int FirstCOM;
+  int Orientation;
+  U16 RegEntryMode;
+  int NumDummyReads;
+} CONFIG_FLEXCOLOR;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_FlexColor_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_FLEXCOLOR &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_FLEXCOLOR &GUIDRV_FlexColor_API
+
+#endif
+
+/*********************************************************************
+*
+*       Configuration interface
+*/
+#if !defined(WIN32) || defined(LCD_SIMCONTROLLER)
+
+  //
+  // Display controller configuration
+  //
+  void GUIDRV_FlexColor_SetFunc66702     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66708     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66709     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66712     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66714     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66715     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66718     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66719     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66720     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66721     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66722     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66723     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66724     (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetFunc66772     (GUI_DEVICE * pDevice);
+
+  //
+  // Operation mode configuration (16bpp)
+  //
+  void GUIDRV_FlexColor_SetMode16bppC0B8 (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode16bppC1B8 (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode16bppC0B16(GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode16bppC1B16(GUI_DEVICE * pDevice);
+
+  //
+  // Drawing mode configuration (18bpp)
+  //
+  void GUIDRV_FlexColor_SetMode18bppC0B9 (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode18bppC1B9 (GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode18bppC0B18(GUI_DEVICE * pDevice);
+  void GUIDRV_FlexColor_SetMode18bppC1B18(GUI_DEVICE * pDevice);
+
+  //
+  // Drawing mode configuration (24bpp)
+  //
+  void GUIDRV_FlexColor_SetMode24bppC0B8 (GUI_DEVICE * pDevice);
+
+  //
+  // Change orientation at runtime
+  //
+  int GUIDRV_FlexColor_SetOrientation(int Orientation, int LayerIndex);
+
+  //
+  // User interface
+  //
+  void GUIDRV_FlexColor_SetFunc(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API, void (* pfFunc)(GUI_DEVICE *), void (* pfMode)(GUI_DEVICE *));
+  void GUIDRV_FlexColor_Config (GUI_DEVICE * pDevice, CONFIG_FLEXCOLOR * pConfig);
+
+  //
+  // Setting up hardware interface to be used
+  //
+  void GUIDRV_FlexColor_SetInterface66712_B9 (GUI_DEVICE * pDevice, int Type);
+  void GUIDRV_FlexColor_SetInterface66712_B18(GUI_DEVICE * pDevice, int Type);
+  #define GUIDRV_FlexColor_SetInterface66715_B9(pDevice, Type)  GUIDRV_FlexColor_SetInterface66712_B9(pDevice, Type)
+  #define GUIDRV_FlexColor_SetInterface66715_B18(pDevice, Type) GUIDRV_FlexColor_SetInterface66712_B18(pDevice, Type)
+
+  //
+  // Setting up interface for reading back data
+  //
+  void GUIDRV_FlexColor_SetReadFunc66709_B16(GUI_DEVICE * pDevice, int Func);
+  void GUIDRV_FlexColor_SetReadFunc66712_B9 (GUI_DEVICE * pDevice, int Func);
+  void GUIDRV_FlexColor_SetReadFunc66712_B16(GUI_DEVICE * pDevice, int Func);
+  #define GUIDRV_FlexColor_SetReadFunc66715_B9(pDevice, Func)  GUIDRV_FlexColor_SetReadFunc66712_B9(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66715_B16(pDevice, Func) GUIDRV_FlexColor_SetReadFunc66712_B16(pDevice, Func)
+  void GUIDRV_FlexColor_SetReadFunc66720_B16(GUI_DEVICE * pDevice, int Func);
+  void GUIDRV_FlexColor_SetReadFunc66772_B8 (GUI_DEVICE * pDevice, int Func);
+  void GUIDRV_FlexColor_SetReadFunc66772_B16(GUI_DEVICE * pDevice, int Func);
+
+#else
+
+  //
+  // Display controller configuration
+  //
+  #define GUIDRV_FlexColor_SetFunc66708(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66709(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66712(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66714(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66715(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66718(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66719(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66720(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66721(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66722(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66723(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66724(pDevice)
+  #define GUIDRV_FlexColor_SetFunc66772(pDevice)
+
+  //
+  // Operation mode configuration (16bpp)
+  //
+  #define GUIDRV_FlexColor_SetMode16bppC0B8(pDevice)
+  #define GUIDRV_FlexColor_SetMode16bppC1B8(pDevice)
+  #define GUIDRV_FlexColor_SetMode16bppC0B16(pDevice)
+  #define GUIDRV_FlexColor_SetMode16bppC1B16(pDevice)
+
+  //
+  // Drawing mode configuration (18bpp)
+  //
+  #define GUIDRV_FlexColor_SetMode18bppC0B9(pDevice)
+  #define GUIDRV_FlexColor_SetMode18bppC1B9(pDevice)
+  #define GUIDRV_FlexColor_SetMode18bppC0B18(pDevice)
+  #define GUIDRV_FlexColor_SetMode18bppC1B18(pDevice)
+
+  //
+  // User interface
+  //
+  #define GUIDRV_FlexColor_SetFunc(pDevice, pHW_API, pfFunc, pfMode)
+  #define GUIDRV_FlexColor_Config(pDevice, pConfig)
+
+  //
+  // Change orientation at runtime
+  //
+  #define GUIDRV_FlexColor_SetOrientation(Orientation, LayerIndex);
+
+  //
+  // Setting up hardware interface to be used
+  //
+  #define GUIDRV_FlexColor_SetInterface66712_B9(pDevice, Type)
+  #define GUIDRV_FlexColor_SetInterface66712_B18(pDevice, Type)
+  #define GUIDRV_FlexColor_SetInterface66720_B18(pDevice, Type)
+  #define GUIDRV_FlexColor_SetInterface66715_B9(pDevice, Type)
+  #define GUIDRV_FlexColor_SetInterface66715_B18(pDevice, Type)
+
+  //
+  // Setting up interface for reading back data
+  //
+  #define GUIDRV_FlexColor_SetReadFunc66709_B16(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66712_B9(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66712_B16(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66715_B9(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66715_B16(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66720_B16(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66772_B8(pDevice, Func)
+  #define GUIDRV_FlexColor_SetReadFunc66772_B16(pDevice, Func)
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_FLEXCOLOR_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_IST3088.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,106 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_IST3088.h
+Purpose     : Interface definition for GUIDRV_IST3088 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_IST3088_H
+#define GUIDRV_IST3088_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_IST3088_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSXY_4_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_IST3088_4       &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OY_4    &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OX_4    &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OXY_4   &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OS_4    &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OSY_4   &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OSX_4   &GUIDRV_Win_API
+  #define GUIDRV_IST3088_OSXY_4  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_IST3088_4       &GUIDRV_IST3088_4_API
+  #define GUIDRV_IST3088_OY_4    &GUIDRV_IST3088_OY_4_API
+  #define GUIDRV_IST3088_OX_4    &GUIDRV_IST3088_OX_4_API
+  #define GUIDRV_IST3088_OXY_4   &GUIDRV_IST3088_OXY_4_API
+  #define GUIDRV_IST3088_OS_4    &GUIDRV_IST3088_OS_4_API
+  #define GUIDRV_IST3088_OSY_4   &GUIDRV_IST3088_OSY_4_API
+  #define GUIDRV_IST3088_OSX_4   &GUIDRV_IST3088_OSX_4_API
+  #define GUIDRV_IST3088_OSXY_4  &GUIDRV_IST3088_OSXY_4_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_IST3088_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_Lin.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,264 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_Lin.h
+Purpose     : Interface definition for GUIDRV_Lin driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_LIN_H
+#define GUIDRV_LIN_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_1_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_2_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_4_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_8_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_16_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_24_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_32_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_LIN_1       &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_1    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_1    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_1   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_1    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_1   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_1   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_1  &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_2       &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_2    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_2    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_2   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_2    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_2   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_2   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_2  &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_4       &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_4    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_4    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_4   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_4    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_4   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_4   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_4  &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_8       &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_8    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_8    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_8   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_8    &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_8   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_8   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_8  &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_16      &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_16   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_16   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_16  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_16   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_16  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_16  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_16 &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_24      &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_24   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_24   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_24  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_24   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_24  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_24  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_24 &GUIDRV_Win_API
+
+  #define GUIDRV_LIN_32      &GUIDRV_Win_API
+  #define GUIDRV_LIN_OY_32   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OX_32   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OXY_32  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OS_32   &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSY_32  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSX_32  &GUIDRV_Win_API
+  #define GUIDRV_LIN_OSXY_32 &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_LIN_1       &GUIDRV_Lin_1_API
+  #define GUIDRV_LIN_OY_1    &GUIDRV_Lin_OY_1_API
+  #define GUIDRV_LIN_OX_1    &GUIDRV_Lin_OX_1_API
+  #define GUIDRV_LIN_OXY_1   &GUIDRV_Lin_OXY_1_API
+  #define GUIDRV_LIN_OS_1    &GUIDRV_Lin_OS_1_API
+  #define GUIDRV_LIN_OSY_1   &GUIDRV_Lin_OSY_1_API
+  #define GUIDRV_LIN_OSX_1   &GUIDRV_Lin_OSX_1_API
+  #define GUIDRV_LIN_OSXY_1  &GUIDRV_Lin_OSXY_1_API
+
+  #define GUIDRV_LIN_2       &GUIDRV_Lin_2_API
+  #define GUIDRV_LIN_OY_2    &GUIDRV_Lin_OY_2_API
+  #define GUIDRV_LIN_OX_2    &GUIDRV_Lin_OX_2_API
+  #define GUIDRV_LIN_OXY_2   &GUIDRV_Lin_OXY_2_API
+  #define GUIDRV_LIN_OS_2    &GUIDRV_Lin_OS_2_API
+  #define GUIDRV_LIN_OSY_2   &GUIDRV_Lin_OSY_2_API
+  #define GUIDRV_LIN_OSX_2   &GUIDRV_Lin_OSX_2_API
+  #define GUIDRV_LIN_OSXY_2  &GUIDRV_Lin_OSXY_2_API
+
+  #define GUIDRV_LIN_4       &GUIDRV_Lin_4_API
+  #define GUIDRV_LIN_OY_4    &GUIDRV_Lin_OY_4_API
+  #define GUIDRV_LIN_OX_4    &GUIDRV_Lin_OX_4_API
+  #define GUIDRV_LIN_OXY_4   &GUIDRV_Lin_OXY_4_API
+  #define GUIDRV_LIN_OS_4    &GUIDRV_Lin_OS_4_API
+  #define GUIDRV_LIN_OSY_4   &GUIDRV_Lin_OSY_4_API
+  #define GUIDRV_LIN_OSX_4   &GUIDRV_Lin_OSX_4_API
+  #define GUIDRV_LIN_OSXY_4  &GUIDRV_Lin_OSXY_4_API
+
+  #define GUIDRV_LIN_8       &GUIDRV_Lin_8_API
+  #define GUIDRV_LIN_OY_8    &GUIDRV_Lin_OY_8_API
+  #define GUIDRV_LIN_OX_8    &GUIDRV_Lin_OX_8_API
+  #define GUIDRV_LIN_OXY_8   &GUIDRV_Lin_OXY_8_API
+  #define GUIDRV_LIN_OS_8    &GUIDRV_Lin_OS_8_API
+  #define GUIDRV_LIN_OSY_8   &GUIDRV_Lin_OSY_8_API
+  #define GUIDRV_LIN_OSX_8   &GUIDRV_Lin_OSX_8_API
+  #define GUIDRV_LIN_OSXY_8  &GUIDRV_Lin_OSXY_8_API
+
+  #define GUIDRV_LIN_16      &GUIDRV_Lin_16_API
+  #define GUIDRV_LIN_OY_16   &GUIDRV_Lin_OY_16_API
+  #define GUIDRV_LIN_OX_16   &GUIDRV_Lin_OX_16_API
+  #define GUIDRV_LIN_OXY_16  &GUIDRV_Lin_OXY_16_API
+  #define GUIDRV_LIN_OS_16   &GUIDRV_Lin_OS_16_API
+  #define GUIDRV_LIN_OSY_16  &GUIDRV_Lin_OSY_16_API
+  #define GUIDRV_LIN_OSX_16  &GUIDRV_Lin_OSX_16_API
+  #define GUIDRV_LIN_OSXY_16 &GUIDRV_Lin_OSXY_16_API
+
+  #define GUIDRV_LIN_24      &GUIDRV_Lin_24_API
+  #define GUIDRV_LIN_OY_24   &GUIDRV_Lin_OY_24_API
+  #define GUIDRV_LIN_OX_24   &GUIDRV_Lin_OX_24_API
+  #define GUIDRV_LIN_OXY_24  &GUIDRV_Lin_OXY_24_API
+  #define GUIDRV_LIN_OS_24   &GUIDRV_Lin_OS_24_API
+  #define GUIDRV_LIN_OSY_24  &GUIDRV_Lin_OSY_24_API
+  #define GUIDRV_LIN_OSX_24  &GUIDRV_Lin_OSX_24_API
+  #define GUIDRV_LIN_OSXY_24 &GUIDRV_Lin_OSXY_24_API
+
+  #define GUIDRV_LIN_32      &GUIDRV_Lin_32_API
+  #define GUIDRV_LIN_OY_32   &GUIDRV_Lin_OY_32_API
+  #define GUIDRV_LIN_OX_32   &GUIDRV_Lin_OX_32_API
+  #define GUIDRV_LIN_OXY_32  &GUIDRV_Lin_OXY_32_API
+  #define GUIDRV_LIN_OS_32   &GUIDRV_Lin_OS_32_API
+  #define GUIDRV_LIN_OSY_32  &GUIDRV_Lin_OSY_32_API
+  #define GUIDRV_LIN_OSX_32  &GUIDRV_Lin_OSX_32_API
+  #define GUIDRV_LIN_OSXY_32 &GUIDRV_Lin_OSXY_32_API
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D13748.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,124 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_S1D13748.h
+Purpose     : Interface definition for GUIDRV_S1D13748 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D13748_H
+#define GUIDRV_S1D13748_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#define GUIDRV_S1D13748_USE_MAIN 0
+#define GUIDRV_S1D13748_USE_PIP1 1
+#define GUIDRV_S1D13748_USE_PIP2 2
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  U32 BufferOffset;
+  int UseLayer;
+  int WriteBufferSize;
+} CONFIG_S1D13748;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_S1D13748_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OX_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OXY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OS_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSX_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSXY_16_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_S1D13748_16       &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OY_16    &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OX_16    &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OXY_16   &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OS_16    &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OSY_16   &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OSX_16   &GUIDRV_Win_API
+  #define GUIDRV_S1D13748_OSXY_16  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_S1D13748_16       &GUIDRV_S1D13748_16_API
+  #define GUIDRV_S1D13748_OY_16    &GUIDRV_S1D13748_OY_16_API
+  #define GUIDRV_S1D13748_OX_16    &GUIDRV_S1D13748_OX_16_API
+  #define GUIDRV_S1D13748_OXY_16   &GUIDRV_S1D13748_OXY_16_API
+  #define GUIDRV_S1D13748_OS_16    &GUIDRV_S1D13748_OS_16_API
+  #define GUIDRV_S1D13748_OSY_16   &GUIDRV_S1D13748_OSY_16_API
+  #define GUIDRV_S1D13748_OSX_16   &GUIDRV_S1D13748_OSX_16_API
+  #define GUIDRV_S1D13748_OSXY_16  &GUIDRV_S1D13748_OSXY_16_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_S1D13748_Config  (GUI_DEVICE * pDevice, CONFIG_S1D13748 * pConfig);
+void GUIDRV_S1D13748_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D13781.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,127 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_S1D13781.h
+Purpose     : Interface definition for GUIDRV_S1D13781 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D13781_H
+#define GUIDRV_S1D13781_H
+
+#define GUIDRV_S1D13781_USE_MAIN 0
+#define GUIDRV_S1D13781_USE_PIP1 1
+#define GUIDRV_S1D13781_USE_PIP2 2
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  U32 BufferOffset;
+  int UseLayer;
+  int WriteBufferSize;
+  int WaitUntilVNDP;
+} CONFIG_S1D13781;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_S1D13781_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OXY_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSY_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSX_8C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_S1D13781_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OXY_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSY_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSX_16C0_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_S1D13781_8C0       &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OXY_8C0   &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OSY_8C0   &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OSX_8C0   &GUIDRV_Win_API
+
+  #define GUIDRV_S1D13781_16C0      &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OXY_16C0  &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OSY_16C0  &GUIDRV_Win_API
+  #define GUIDRV_S1D13781_OSX_16C0  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_S1D13781_8C0       &GUIDRV_S1D13781_8C0_API
+  #define GUIDRV_S1D13781_OXY_8C0   &GUIDRV_S1D13781_OXY_8C0_API
+  #define GUIDRV_S1D13781_OSY_8C0   &GUIDRV_S1D13781_OSY_8C0_API
+  #define GUIDRV_S1D13781_OSX_8C0   &GUIDRV_S1D13781_OSX_8C0_API
+
+  #define GUIDRV_S1D13781_16C0      &GUIDRV_S1D13781_16C0_API
+  #define GUIDRV_S1D13781_OXY_16C0  &GUIDRV_S1D13781_OXY_16C0_API
+  #define GUIDRV_S1D13781_OSY_16C0  &GUIDRV_S1D13781_OSY_16C0_API
+  #define GUIDRV_S1D13781_OSX_16C0  &GUIDRV_S1D13781_OSX_16C0_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+  #define GUIDRV_S1D13781_Config(pDevice, pConfig)
+  #define GUIDRV_S1D13781_SetBusSPI(pDevice, pHW_API)
+  #define GUIDRV_S1D13781_SetOrientation(Orientation, LayerIndex)
+#else
+  void GUIDRV_S1D13781_Config        (GUI_DEVICE * pDevice, CONFIG_S1D13781 * pConfig);
+  void GUIDRV_S1D13781_SetBusSPI     (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+  int  GUIDRV_S1D13781_SetOrientation(int Orientation, int LayerIndex);
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D15G00.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,102 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_S1D15G00.h
+Purpose     : Interface definition for GUIDRV_S1D15G00 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D15G00_H
+#define GUIDRV_S1D15G00_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  int FirstSEG;
+  int FirstCOM;
+  int Orientation;
+  int UseCache;
+} CONFIG_S1D15G00;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_S1D15G00_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_S1D15G00    &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_S1D15G00    &GUIDRV_S1D15G00_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_S1D15G00_Config (GUI_DEVICE * pDevice, CONFIG_S1D15G00 * pConfig);
+void GUIDRV_S1D15G00_SetBus8(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SLin.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,199 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_SLin.h
+Purpose     : Interface definition for GUIDRV_SLin driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SLIN_H
+#define GUIDRV_SLIN_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Function pointers of hardware access routines
+  //
+  //HW_API_SLIN HW_API;
+  //
+  // Driver specific configuration items
+  //
+  int FirstSEG;
+  int FirstCOM;
+  int UseCache;
+  int UseMirror;   // Only used for SSD1848
+  int CheckBusy;
+  U8  UseDualScan; // Used for T6963
+} CONFIG_SLIN;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SLin_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SLin_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_2_API;
+
+extern const GUI_DEVICE_API GUIDRV_SLin_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_4_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_SLIN_1       &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OY_1    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OX_1    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OXY_1   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OS_1    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSY_1   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSX_1   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSXY_1  &GUIDRV_Win_API
+
+  #define GUIDRV_SLIN_2       &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OY_2    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OX_2    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OXY_2   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OS_2    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSY_2   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSX_2   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSXY_2  &GUIDRV_Win_API
+
+  #define GUIDRV_SLIN_4       &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OY_4    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OX_4    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OXY_4   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OS_4    &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSY_4   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSX_4   &GUIDRV_Win_API
+  #define GUIDRV_SLIN_OSXY_4  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_SLIN_1       &GUIDRV_SLin_1_API
+  #define GUIDRV_SLIN_OY_1    &GUIDRV_SLin_OY_1_API
+  #define GUIDRV_SLIN_OX_1    &GUIDRV_SLin_OX_1_API
+  #define GUIDRV_SLIN_OXY_1   &GUIDRV_SLin_OXY_1_API
+  #define GUIDRV_SLIN_OS_1    &GUIDRV_SLin_OS_1_API
+  #define GUIDRV_SLIN_OSY_1   &GUIDRV_SLin_OSY_1_API
+  #define GUIDRV_SLIN_OSX_1   &GUIDRV_SLin_OSX_1_API
+  #define GUIDRV_SLIN_OSXY_1  &GUIDRV_SLin_OSXY_1_API
+
+  #define GUIDRV_SLIN_2       &GUIDRV_SLin_2_API
+  #define GUIDRV_SLIN_OY_2    &GUIDRV_SLin_OY_2_API
+  #define GUIDRV_SLIN_OX_2    &GUIDRV_SLin_OX_2_API
+  #define GUIDRV_SLIN_OXY_2   &GUIDRV_SLin_OXY_2_API
+  #define GUIDRV_SLIN_OS_2    &GUIDRV_SLin_OS_2_API
+  #define GUIDRV_SLIN_OSY_2   &GUIDRV_SLin_OSY_2_API
+  #define GUIDRV_SLIN_OSX_2   &GUIDRV_SLin_OSX_2_API
+  #define GUIDRV_SLIN_OSXY_2  &GUIDRV_SLin_OSXY_2_API
+
+  #define GUIDRV_SLIN_4       &GUIDRV_SLin_4_API
+  #define GUIDRV_SLIN_OY_4    &GUIDRV_SLin_OY_4_API
+  #define GUIDRV_SLIN_OX_4    &GUIDRV_SLin_OX_4_API
+  #define GUIDRV_SLIN_OXY_4   &GUIDRV_SLin_OXY_4_API
+  #define GUIDRV_SLIN_OS_4    &GUIDRV_SLin_OS_4_API
+  #define GUIDRV_SLIN_OSY_4   &GUIDRV_SLin_OSY_4_API
+  #define GUIDRV_SLIN_OSX_4   &GUIDRV_SLin_OSX_4_API
+  #define GUIDRV_SLIN_OSXY_4  &GUIDRV_SLin_OSXY_4_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_SLin_Config(pDevice, pConfig)
+  #define GUIDRV_SLin_SetBus8(pDevice, pHW_API)
+  #define GUIDRV_SLin_SetS1D13700(pDevice)
+  #define GUIDRV_SLin_SetSSD1848(pDevice)
+  #define GUIDRV_SLin_SetT6963(pDevice)
+  #define GUIDRV_SLin_SetUC1617(pDevice)
+
+#else
+
+  void GUIDRV_SLin_Config     (GUI_DEVICE * pDevice, CONFIG_SLIN  * pConfig);
+  void GUIDRV_SLin_SetBus8    (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+  void GUIDRV_SLin_SetS1D13700(GUI_DEVICE * pDevice);
+  void GUIDRV_SLin_SetSSD1325 (GUI_DEVICE * pDevice);
+  void GUIDRV_SLin_SetSSD1848 (GUI_DEVICE * pDevice);
+  void GUIDRV_SLin_SetT6963   (GUI_DEVICE * pDevice);
+  void GUIDRV_SLin_SetUC1617  (GUI_DEVICE * pDevice);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SPage.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,289 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_SPage.h
+Purpose     : Interface definition for GUIDRV_SPage driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SPAGE_H
+#define GUIDRV_SPAGE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  int FirstSEG;
+  int FirstCOM;
+} CONFIG_SPAGE;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SPage_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_1C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_1C1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_2C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_2C1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_4C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_4C1_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_SPAGE_1C0       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_1C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_1C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_1C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_1C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_1C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_1C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_1C0  &GUIDRV_Win_API
+
+  #define GUIDRV_SPAGE_1C1       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_1C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_1C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_1C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_1C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_1C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_1C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_1C1  &GUIDRV_Win_API
+
+  #define GUIDRV_SPAGE_2C0       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_2C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_2C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_2C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_2C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_2C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_2C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_2C0  &GUIDRV_Win_API
+
+  #define GUIDRV_SPAGE_2C1       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_2C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_2C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_2C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_2C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_2C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_2C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_2C1  &GUIDRV_Win_API
+
+  #define GUIDRV_SPAGE_4C0       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_4C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_4C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_4C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_4C0    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_4C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_4C0   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_4C0  &GUIDRV_Win_API
+
+  #define GUIDRV_SPAGE_4C1       &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OY_4C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OX_4C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OXY_4C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OS_4C1    &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSY_4C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSX_4C1   &GUIDRV_Win_API
+  #define GUIDRV_SPAGE_OSXY_4C1  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_SPAGE_1C0       &GUIDRV_SPage_1C0_API
+  #define GUIDRV_SPAGE_OY_1C0    &GUIDRV_SPage_OY_1C0_API
+  #define GUIDRV_SPAGE_OX_1C0    &GUIDRV_SPage_OX_1C0_API
+  #define GUIDRV_SPAGE_OXY_1C0   &GUIDRV_SPage_OXY_1C0_API
+  #define GUIDRV_SPAGE_OS_1C0    &GUIDRV_SPage_OS_1C0_API
+  #define GUIDRV_SPAGE_OSY_1C0   &GUIDRV_SPage_OSY_1C0_API
+  #define GUIDRV_SPAGE_OSX_1C0   &GUIDRV_SPage_OSX_1C0_API
+  #define GUIDRV_SPAGE_OSXY_1C0  &GUIDRV_SPage_OSXY_1C0_API
+
+  #define GUIDRV_SPAGE_1C1       &GUIDRV_SPage_1C1_API
+  #define GUIDRV_SPAGE_OY_1C1    &GUIDRV_SPage_OY_1C1_API
+  #define GUIDRV_SPAGE_OX_1C1    &GUIDRV_SPage_OX_1C1_API
+  #define GUIDRV_SPAGE_OXY_1C1   &GUIDRV_SPage_OXY_1C1_API
+  #define GUIDRV_SPAGE_OS_1C1    &GUIDRV_SPage_OS_1C1_API
+  #define GUIDRV_SPAGE_OSY_1C1   &GUIDRV_SPage_OSY_1C1_API
+  #define GUIDRV_SPAGE_OSX_1C1   &GUIDRV_SPage_OSX_1C1_API
+  #define GUIDRV_SPAGE_OSXY_1C1  &GUIDRV_SPage_OSXY_1C1_API
+
+  #define GUIDRV_SPAGE_2C0       &GUIDRV_SPage_2C0_API
+  #define GUIDRV_SPAGE_OY_2C0    &GUIDRV_SPage_OY_2C0_API
+  #define GUIDRV_SPAGE_OX_2C0    &GUIDRV_SPage_OX_2C0_API
+  #define GUIDRV_SPAGE_OXY_2C0   &GUIDRV_SPage_OXY_2C0_API
+  #define GUIDRV_SPAGE_OS_2C0    &GUIDRV_SPage_OS_2C0_API
+  #define GUIDRV_SPAGE_OSY_2C0   &GUIDRV_SPage_OSY_2C0_API
+  #define GUIDRV_SPAGE_OSX_2C0   &GUIDRV_SPage_OSX_2C0_API
+  #define GUIDRV_SPAGE_OSXY_2C0  &GUIDRV_SPage_OSXY_2C0_API
+
+  #define GUIDRV_SPAGE_2C1       &GUIDRV_SPage_2C1_API
+  #define GUIDRV_SPAGE_OY_2C1    &GUIDRV_SPage_OY_2C1_API
+  #define GUIDRV_SPAGE_OX_2C1    &GUIDRV_SPage_OX_2C1_API
+  #define GUIDRV_SPAGE_OXY_2C1   &GUIDRV_SPage_OXY_2C1_API
+  #define GUIDRV_SPAGE_OS_2C1    &GUIDRV_SPage_OS_2C1_API
+  #define GUIDRV_SPAGE_OSY_2C1   &GUIDRV_SPage_OSY_2C1_API
+  #define GUIDRV_SPAGE_OSX_2C1   &GUIDRV_SPage_OSX_2C1_API
+  #define GUIDRV_SPAGE_OSXY_2C1  &GUIDRV_SPage_OSXY_2C1_API
+
+  #define GUIDRV_SPAGE_4C0       &GUIDRV_SPage_4C0_API
+  #define GUIDRV_SPAGE_OY_4C0    &GUIDRV_SPage_OY_4C0_API
+  #define GUIDRV_SPAGE_OX_4C0    &GUIDRV_SPage_OX_4C0_API
+  #define GUIDRV_SPAGE_OXY_4C0   &GUIDRV_SPage_OXY_4C0_API
+  #define GUIDRV_SPAGE_OS_4C0    &GUIDRV_SPage_OS_4C0_API
+  #define GUIDRV_SPAGE_OSY_4C0   &GUIDRV_SPage_OSY_4C0_API
+  #define GUIDRV_SPAGE_OSX_4C0   &GUIDRV_SPage_OSX_4C0_API
+  #define GUIDRV_SPAGE_OSXY_4C0  &GUIDRV_SPage_OSXY_4C0_API
+
+  #define GUIDRV_SPAGE_4C1       &GUIDRV_SPage_4C1_API
+  #define GUIDRV_SPAGE_OY_4C1    &GUIDRV_SPage_OY_4C1_API
+  #define GUIDRV_SPAGE_OX_4C1    &GUIDRV_SPage_OX_4C1_API
+  #define GUIDRV_SPAGE_OXY_4C1   &GUIDRV_SPage_OXY_4C1_API
+  #define GUIDRV_SPAGE_OS_4C1    &GUIDRV_SPage_OS_4C1_API
+  #define GUIDRV_SPAGE_OSY_4C1   &GUIDRV_SPage_OSY_4C1_API
+  #define GUIDRV_SPAGE_OSX_4C1   &GUIDRV_SPage_OSX_4C1_API
+  #define GUIDRV_SPAGE_OSXY_4C1  &GUIDRV_SPage_OSXY_4C1_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+  
+  #define GUIDRV_SPage_Config(pDevice, pConfig)
+  #define GUIDRV_SPage_SetBus8(pDevice, pHW_API)
+  #define GUIDRV_SPage_Set1502(pDevice)
+  #define GUIDRV_SPage_Set1510(pDevice)
+  #define GUIDRV_SPage_Set1512(pDevice)
+  #define GUIDRV_SPage_SetST75256(pDevice)
+  #define GUIDRV_SPage_SetST7591(pDevice)
+  #define GUIDRV_SPage_SetUC1611(pDevice)
+  #define GUIDRV_SPage_SetUC1628(pDevice)
+  #define GUIDRV_SPage_SetUC1638(pDevice)
+
+  // Obsolete
+  #define GUIDRV_SPage_SetS1D15(pDevice, Controller)
+
+#else
+
+  void GUIDRV_SPage_Config    (GUI_DEVICE * pDevice, CONFIG_SPAGE * pConfig);
+  void GUIDRV_SPage_SetBus8   (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+  void GUIDRV_SPage_Set1502   (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_Set1510   (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_Set1512   (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetST75256(GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetST75320(GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetST7591 (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetUC1610 (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetUC1611 (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetUC1628 (GUI_DEVICE * pDevice);
+  void GUIDRV_SPage_SetUC1638 (GUI_DEVICE * pDevice);
+
+  // Obsolete
+  void GUIDRV_SPage_SetS1D15 (GUI_DEVICE * pDevice, int Controller);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SSD1926.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,120 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUIDRV_SSD1926.h
+Purpose     : Interface definition for GUIDRV_SSD1926 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SSD1926_H
+#define GUIDRV_SSD1926_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  //
+  // Driver specific configuration items
+  //
+  int FirstSEG;
+  int FirstCOM;
+  int UseCache;
+} CONFIG_SSD1926;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SSD1926_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OX_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OXY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OS_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSX_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSXY_8_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_SSD1926_8       &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OY_8    &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OX_8    &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OXY_8   &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OS_8    &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OSY_8   &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OSX_8   &GUIDRV_Win_API
+  #define GUIDRV_SSD1926_OSXY_8  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_SSD1926_8       &GUIDRV_SSD1926_8_API
+  #define GUIDRV_SSD1926_OY_8    &GUIDRV_SSD1926_OY_8_API
+  #define GUIDRV_SSD1926_OX_8    &GUIDRV_SSD1926_OX_8_API
+  #define GUIDRV_SSD1926_OXY_8   &GUIDRV_SSD1926_OXY_8_API
+  #define GUIDRV_SSD1926_OS_8    &GUIDRV_SSD1926_OS_8_API
+  #define GUIDRV_SSD1926_OSY_8   &GUIDRV_SSD1926_OSY_8_API
+  #define GUIDRV_SSD1926_OSX_8   &GUIDRV_SSD1926_OSX_8_API
+  #define GUIDRV_SSD1926_OSXY_8  &GUIDRV_SSD1926_OSXY_8_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_SSD1926_Config  (GUI_DEVICE * pDevice, CONFIG_SSD1926 * pConfig);
+void GUIDRV_SSD1926_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_ARRAY.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,82 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_ARRAY.h
+Purpose     : Array handling routines
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_ARRAY_H
+#define GUI_ARRAY_H
+
+#include "WM_Intern.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Public types
+*
+**********************************************************************
+*/
+typedef WM_HMEM GUI_ARRAY;
+
+/*********************************************************************
+*
+*       Public functions
+*
+**********************************************************************
+*/
+GUI_ARRAY GUI_ARRAY_Create          (void);
+int       GUI_ARRAY_AddItem         (GUI_ARRAY hArray, const void * pNew, int Len);
+void      GUI_ARRAY_Delete          (GUI_ARRAY hArray);
+WM_HMEM   GUI_ARRAY_GethItem        (GUI_ARRAY hArray, unsigned int Index);
+unsigned  GUI_ARRAY_GetNumItems     (GUI_ARRAY hArray);
+void    * GUI_ARRAY_GetpItemLocked  (GUI_ARRAY hArray, unsigned int Index);
+int       GUI_ARRAY_SethItem        (GUI_ARRAY hArray, unsigned int Index, WM_HMEM hItem);
+WM_HMEM   GUI_ARRAY_SetItem         (GUI_ARRAY hArray, unsigned int Index, const void * pData, int Len);
+void      GUI_ARRAY_DeleteItem      (GUI_ARRAY hArray, unsigned int Index);
+char      GUI_ARRAY_InsertBlankItem (GUI_ARRAY hArray, unsigned int Index);
+WM_HMEM   GUI_ARRAY_InsertItem      (GUI_ARRAY hArray, unsigned int Index, int Len);
+void    * GUI_ARRAY_ResizeItemLocked(GUI_ARRAY hArray, unsigned int Index, int Len);
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* GUI_ARRAY_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_ARRAY_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,78 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_ARRAY_Private.h
+Purpose     : Private array handling routines, should be used only
+              from within GUI_ARRAY... routines!
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_ARRAY_PRIVATE_H
+#define GUI_ARRAY_PRIVATE_H
+
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Private types
+*
+**********************************************************************
+*/
+typedef struct {
+  U16 NumItems;
+  WM_HMEM haHandle;   /* Handle to buffer holding handles */
+} GUI_ARRAY_OBJ;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+WM_HMEM GUI_ARRAY__GethItem      (const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+void  * GUI_ARRAY__GetpItem      (const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+void  * GUI_ARRAY__GetpItemLocked(const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+int     GUI_ARRAY__SethItem      (      GUI_ARRAY_OBJ * pThis, unsigned int Index, WM_HMEM hItem);
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* GUI_ARRAY_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_BMP_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,114 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_BMP_Private.h
+Purpose     : Private header file for GUI_BMP... functions
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_BMP_PRIVATE_H
+#define GUI_BMP_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define BI_RGB       0
+#define BI_RLE8      1
+#define BI_RLE4      2
+#define BI_BITFIELDS 3
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+//
+// Default parameter structure for reading data from memory
+//
+typedef struct {
+  const U8 * pFileData;
+} GUI_BMP_PARAM;
+
+//
+// Context structure for getting stdio input
+//
+typedef struct {
+  GUI_GET_DATA_FUNC * pfGetData; // Function pointer
+  U32                 Off;       // Data pointer
+  void              * pParam;    // Parameter pointer passed to function
+} GUI_BMP_CONTEXT;
+
+//
+// Parameter structure for passing several required variables to the
+// functions _DrawLine_RGB() and _DrawLine_ARGB() (in GUI_BMP_EnableAlpha.c).
+//
+typedef struct {
+  const U8            * pSrc;           // Pointer to data
+  I32                   xSrc;           // Used to read data
+  int                   ySrc;           // Used to read data
+  I32                   xSize;
+  U32                   BytesPerPixel;
+  tLCDDEV_Color2Index * pfColor2Index;
+  tLCDDEV_Index2Color * pfIndex2Color;  // Used to manage bitfield conversion
+  LCD_API_NEXT_PIXEL  * pNextPixel_API;
+  int                   x0;             // Used to draw data
+  int                   y0;             // Used to draw data
+  int                   x1;             // Used to draw data
+  int                   y1;             // Used to draw data
+} GUI_DRAWLINE_INFO;
+
+/*********************************************************************
+*
+*       Interface
+*
+**********************************************************************
+*/
+int GUI_BMP__GetData    (void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int GUI_BMP__Init       (GUI_BMP_CONTEXT * pContext, I32 * pWidth, I32 * pHeight, U16 * pBitCount, int * pNumColors, int * pCompression);
+int GUI_BMP__ReadData   (GUI_BMP_CONTEXT * pContext, int NumBytes, const U8 ** ppData, unsigned StartOfFile);
+int GUI_BMP__ReadPalette(GUI_BMP_CONTEXT * pContext, int NumColors);
+
+#endif /* GUI_BMP_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_ConfDefaults.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,199 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_ConfDefaults.h
+Purpose     : Defaults for GUI config switches.
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+            be able do update to a later GUI version !
+
+*/
+
+#ifndef  GUI_CONFDEFAULTS_H
+#define  GUI_CONFDEFAULTS_H
+
+#include "GUIConf.h"
+
+#ifndef   GUI_USE_MIXCOLORS
+  #define GUI_USE_MIXCOLORS 1
+#endif
+
+#ifndef   GUI_USE_BIDI2
+  #define GUI_USE_BIDI2 1
+#endif
+
+#ifndef   LCD_MAX_LOG_COLORS
+  #define LCD_MAX_LOG_COLORS 256
+#else
+  #if (LCD_MAX_LOG_COLORS > 256)
+    #error The value of LCD_MAX_LOG_COLORS must be <= 256!
+  #endif
+#endif
+
+#define LCD_PIXELINDEX U32
+
+#ifndef LCD_YMAG
+  #define LCD_YMAG 1
+#endif
+#ifndef LCD_XMAG
+  #define LCD_XMAG 1
+#endif
+
+/**********************************************************************
+*
+*       Defaults for config switches
+*
+***********************************************************************
+*/
+
+/* ATTENTION: This define swaps the meaning of a logical color from
+   ABGR to ARGB.
+   
+   It further swaps the meaning of a transparent pixel:
+   ABGR: 0x00 means opaque, 0xFF means transparent
+   ARGB: 0x00 means transparent, 0xFF means opaque (default)
+*/
+#ifndef GUI_USE_ARGB
+  #define GUI_USE_ARGB 1
+#endif
+
+/* Define "universal pointer". Normally, this is not needed (define will expand to nothing)
+   However, on some systems (AVR - IAR compiler) it can be necessary ( -> __generic),
+   since a default pointer can access RAM only, not the built-in Flash
+*/
+#ifndef GUI_UNI_PTR
+  #define GUI_UNI_PTR /* Remains only for compatibility purpose, no longer used in emWin */
+#endif
+
+/* Define const storage. Normally, this is not needed (define will expand to const)
+   However, on some systems (AVR - IAR compiler) it can be necessary ( -> __flash const),
+   since otherwise constants are copied into RAM
+*/
+#ifndef GUI_CONST_STORAGE
+  #define GUI_CONST_STORAGE const
+#endif
+
+#ifndef GUI_USE_MEMDEV_1BPP_FOR_SCREEN
+  #define GUI_USE_MEMDEV_1BPP_FOR_SCREEN 1
+#endif
+
+#ifndef GUI_BIDI_MAX_CHARS_PER_LINE
+  #if GUI_USE_BIDI2
+    #define GUI_BIDI_MAX_CHARS_PER_LINE 200
+  #else
+    #define GUI_BIDI_MAX_CHARS_PER_LINE  80
+  #endif
+#endif
+
+#ifndef GUI_SUPPORT_TOUCH
+  #define GUI_SUPPORT_TOUCH   0
+#endif
+
+#ifndef GUI_SUPPORT_MOUSE
+  #define GUI_SUPPORT_MOUSE   0
+#endif
+
+#ifndef GUI_SUPPORT_MEMDEV
+  #define GUI_SUPPORT_MEMDEV  0
+#endif
+
+#ifndef GUI_OS
+  #define GUI_OS              0
+#endif
+
+#ifndef GUI_NUM_LAYERS
+  #define GUI_NUM_LAYERS      1
+#endif
+
+#ifndef GUI_SUPPORT_CURSOR
+  #define GUI_SUPPORT_CURSOR  (GUI_SUPPORT_MOUSE | GUI_SUPPORT_TOUCH)
+#endif
+
+#ifndef   GUI_CURSOR_LAYER
+  #define GUI_CURSOR_LAYER 0
+#endif
+
+#ifndef GUI_SUPPORT_ROTATION
+  #define GUI_SUPPORT_ROTATION 1
+#endif
+
+/* In order to avoid warnings for undefined parameters */
+#ifndef GUI_USE_PARA
+  #if defined (__BORLANDC__) || defined(NC30) || defined(NC308)
+    #define GUI_USE_PARA(para)
+  #else
+    #define GUI_USE_PARA(para) (void)para
+  #endif
+#endif
+
+/* Default for types */
+#ifndef GUI_TIMER_TIME
+  #define GUI_TIMER_TIME int  /* default is to use 16 bits for 16 bit CPUs,
+	                           32 bits on 32 bit CPUs for timing */
+#endif
+
+/* Types used for memory allocation */
+#define GUI_ALLOC_DATATYPE   I32
+#define GUI_ALLOC_DATATYPE_U U32
+
+#ifndef   GUI_MAX_XBF_BYTES
+  #define GUI_MAX_XBF_BYTES 200
+#endif
+
+#ifndef   GUI_MEMSET
+  #define GUI_MEMSET memset
+#endif
+
+#ifndef GUI_MEMCPY
+  #define GUI_MEMCPY memcpy
+#endif
+
+/* Optional custom drawing of memory devices */
+#ifndef   GUI_MEMDEV_SUPPORT_CUSTOMDRAW
+  #define GUI_MEMDEV_SUPPORT_CUSTOMDRAW 0
+#endif
+
+/* Clip static memory devices to parent borders */
+#ifndef   GUI_MEMDEV_CLIP_AT_PARENT
+  #define GUI_MEMDEV_CLIP_AT_PARENT 0
+#endif
+
+#endif   /* ifdef GUI_CONFDEFAULTS_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Debug.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,200 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_Debug.h
+Purpose     : Debug macros
+----------------------------------------------------------------------
+   Debug macros for logging
+
+ In the GUI Simulation, all output is transferred into the log window.
+*/
+
+#ifndef GUI_DEBUG_H
+#define GUI_DEBUG_H
+
+#include <stddef.h>
+
+#include "GUI.h"
+
+#define GUI_DEBUG_LEVEL_NOCHECK       0  /* No run time checks are performed */
+#define GUI_DEBUG_LEVEL_CHECK_PARA    1  /* Parameter checks are performed to avoid crashes */
+#define GUI_DEBUG_LEVEL_CHECK_ALL     2  /* Parameter checks and consistency checks are performed */
+#define GUI_DEBUG_LEVEL_LOG_ERRORS    3  /* Errors are recorded */
+#define GUI_DEBUG_LEVEL_LOG_WARNINGS  4  /* Errors & Warnings are recorded */
+#define GUI_DEBUG_LEVEL_LOG_ALL       5  /* Errors, Warnings and Messages are recorded. */
+
+#ifndef GUI_DEBUG_LEVEL
+  #ifdef WIN32
+    #define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_LOG_WARNINGS  /* Simulation should log all warnings */
+  #else
+    #define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_NOCHECK       /* For most targets, min. size is important */
+  #endif
+#endif
+
+#define GUI_LOCK_H(hMem)   GUI_ALLOC_LockH(hMem)
+#define GUI_UNLOCK_H(pMem) GUI_ALLOC_UnlockH((void **)&pMem)
+
+/*******************************************************************
+*
+*               Commandline
+*
+********************************************************************
+*/
+
+#ifdef WIN32
+  #define GUI_DEBUG_GETCMDLINE() SIM_GetCmdLine()
+#else
+  #define GUI_DEBUG_GETCMDLINE() 0
+#endif
+
+/*******************************************************************
+*
+*               Error macros
+*
+********************************************************************
+*/
+
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
+  #define GUI_DEBUG_ERROROUT(s)              GUI_ErrorOut(s)
+  #define GUI_DEBUG_ERROROUT1(s,p0)          GUI_ErrorOut1(s,p0)
+  #define GUI_DEBUG_ERROROUT2(s,p0,p1)       GUI_ErrorOut2(s,p0,p1)
+  #define GUI_DEBUG_ERROROUT3(s,p0,p1,p2)    GUI_ErrorOut3(s,p0,p1,p2)
+  #define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3) GUI_ErrorOut4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_ERROROUT_IF(exp,s)              { if (exp) GUI_DEBUG_ERROROUT(s); }
+  #define GUI_DEBUG_ERROROUT1_IF(exp,s,p0)          { if (exp) GUI_DEBUG_ERROROUT1(s,p0); }
+  #define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1)       { if (exp) GUI_DEBUG_ERROROUT2(s,p0,p1); }
+  #define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2)    { if (exp) GUI_DEBUG_ERROROUT3(s,p0,p1,p2); }
+  #define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3); }
+#else
+  #define GUI_DEBUG_ERROROUT(s)
+  #define GUI_DEBUG_ERROROUT1(s,p0)
+  #define GUI_DEBUG_ERROROUT2(s,p0,p1)
+  #define GUI_DEBUG_ERROROUT3(s,p0,p1,p2)
+  #define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_ERROROUT_IF(exp,s)
+  #define GUI_DEBUG_ERROROUT1_IF(exp,s,p0)
+  #define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1)
+  #define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2)
+  #define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+*               Warning macros
+*
+********************************************************************
+*/
+
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_WARNINGS
+  #define GUI_DEBUG_WARN(s)              GUI_Warn(s)
+  #define GUI_DEBUG_WARN1(s,p0)          GUI_Warn1(s,p0)
+  #define GUI_DEBUG_WARN2(s,p0,p1)       GUI_Warn2(s,p0,p1)
+  #define GUI_DEBUG_WARN3(s,p0,p1,p2)    GUI_Warn3(s,p0,p1,p2)
+  #define GUI_DEBUG_WARN4(s,p0,p1,p2,p3) GUI_Warn4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_WARN_IF(exp,s)                  { if (exp) GUI_DEBUG_WARN(s); }
+  #define GUI_DEBUG_WARN1_IF(exp,s,p0)              { if (exp) GUI_DEBUG_WARN1(s,p0); }
+  #define GUI_DEBUG_WARN2_IF(exp,s,p0,p1)           { if (exp) GUI_DEBUG_WARN2(s,p0,p1); }
+  #define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2)        { if (exp) GUI_DEBUG_WARN3(s,p0,p1,p2); }
+  #define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3)     { if (exp) GUI_DEBUG_WARN4(s,p0,p1,p2,p3); }
+#else
+  #define GUI_DEBUG_WARN(s)
+  #define GUI_DEBUG_WARN1(s,p0)
+  #define GUI_DEBUG_WARN2(s,p0,p1)
+  #define GUI_DEBUG_WARN3(s,p0,p1,p2)
+  #define GUI_DEBUG_WARN4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_WARN_IF(exp,s)
+  #define GUI_DEBUG_WARN1_IF(exp,s,p0)
+  #define GUI_DEBUG_WARN2_IF(exp,s,p0,p1)
+  #define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2)
+  #define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+*               Logging macros
+*
+********************************************************************
+*/
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ALL
+  #define GUI_DEBUG_LOG(s)              GUI_Log(s)
+  #define GUI_DEBUG_LOG1(s,p0)          GUI_Log1(s,p0)
+  #define GUI_DEBUG_LOG2(s,p0,p1)       GUI_Log2(s,p0,p1)
+  #define GUI_DEBUG_LOG3(s,p0,p1,p2)    GUI_Log3(s,p0,p1,p2)
+  #define GUI_DEBUG_LOG4(s,p0,p1,p2,p3) GUI_Log4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_LOG_IF(exp,s)                   { if (exp) GUI_DEBUG_LOG(s); }
+  #define GUI_DEBUG_LOG1_IF(exp,s,p0)               { if (exp) GUI_DEBUG_LOG1(s,p0); }
+  #define GUI_DEBUG_LOG2_IF(exp,s,p0,p1)            { if (exp) GUI_DEBUG_LOG2(s,p0,p1); }
+  #define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2)         { if (exp) GUI_DEBUG_LOG3(s,p0,p1,p2); }
+  #define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3)      { if (exp) GUI_DEBUG_LOG4(s,p0,p1,p2,p3); }
+#else
+  #define GUI_DEBUG_LOG(s)
+  #define GUI_DEBUG_LOG1(s,p0)
+  #define GUI_DEBUG_LOG2(s,p0,p1)
+  #define GUI_DEBUG_LOG3(s,p0,p1,p2)
+  #define GUI_DEBUG_LOG4(s,p0,p1,p2,p3)
+  #define GUI_DEBUG_LOG_IF(exp,s)
+  #define GUI_DEBUG_LOG1_IF(exp,s,p0)
+  #define GUI_DEBUG_LOG2_IF(exp,s,p0,p1)
+  #define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2)
+  #define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+*               Asserts
+*
+********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
+  #define GUI_DEBUG_ASSERT(exp)                     { if (!exp) GUI_DEBUG_ERROROUT(#exp); }
+#else
+  #define GUI_DEBUG_ASSERT(exp)
+#endif
+
+#endif /* LCD_H */
+
+
+
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_FontIntern.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,92 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_FontIntern.h
+Purpose     : Internal declarations used in font files
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+            be able do update to a later GUI version !
+
+*/
+
+
+#ifndef  GUI_FONTINTERN_H    /* Guard against multiple inclusion */
+#define  GUI_FONTINTERN_H
+
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8ASCII_Prop;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontF8x13_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontF8x15B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10S_ASCII_FontProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10ASCIIProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13H_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13HB_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16_1_FontProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16ASCIIProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font20_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font20B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font24_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font24B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font32_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font32B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontComic18B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontComic24B_ASCII_Prop1;
+
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font6x8ASCII_Prop0;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8x16ASCII_Prop0;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8x8ASCII_Prop0;
+
+extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font16_HK_CharInfo[169];
+
+#if defined(__cplusplus)
+  }
+#endif
+
+
+#endif   /* Guard against multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_GCache_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,114 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_GCache_Private.h
+Purpose     : Private header
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_GCACHE_PRIVATE_H
+#define GUI_GCACHE_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define DRIVER_CONTEXT DRIVER_CONTEXT_GCACHE
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+typedef struct {
+  int x0, y0, x1, y1, IsDirty;
+  int xSize, ySize;
+  int CacheLocked;
+  int MemSize;
+  int BitsPerPixel;
+  int BytesPerLine;
+  //
+  // Line buffer for reading operation
+  //
+  LCD_PIXELINDEX * pLineBuffer;
+  //
+  // Palette for drawing 'cache bitmap'
+  //
+  LCD_PIXELINDEX * pPalette;
+  //
+  // Cache management
+  //
+  void (* pfReadRect)     (GUI_DEVICE * pDevice, int _x0, int _y0, int _x1, int _y1, LCD_PIXELINDEX * pBuffer);
+  void (* pfSendCacheRect)(GUI_DEVICE * pDevice);
+  U32 * pVMEM;
+  //
+  // Drawing functions
+  //
+  void           (* pfDrawBitmap   )(GUI_DEVICE *  pDevice,  int _x0, int _y0, int xsize, int ysize, int _BitsPerPixel, int _BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+  void           (* pfDrawHLine    )(GUI_DEVICE *  pDevice,  int _x0, int _y0, int _x1);
+  void           (* pfDrawVLine    )(GUI_DEVICE *  pDevice,  int _x , int _y0, int _y1);
+  void           (* pfFillRect     )(GUI_DEVICE *  pDevice,  int _x0, int _y0, int _x1, int _y1);
+  LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE *  pDevice,  int _x, int _y);
+  void           (* pfSetPixelIndex)(GUI_DEVICE *  pDevice,  int _x, int _y, LCD_PIXELINDEX ColorIndex);
+  void           (* pfXorPixel     )(GUI_DEVICE *  pDevice,  int _x, int _y);
+  //
+  // GetData function
+  //
+  void          *(* pfGetDevData   )(GUI_DEVICE *  pDevice,  int Index);
+} DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       Interface
+*
+**********************************************************************
+*/
+GUI_DEVICE * GUI_GCACHE__CreateEx(int LayerIndex, const LCD_API_COLOR_CONV * pColorConvAPI, int BitsPerPixel);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_GIF_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,133 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_GIF_Private.h
+Purpose     : Private header file for GUI_GIF... functions
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_GIF_PRIVATE_H
+#define GUI_GIF_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define MAX_NUM_LWZ_BITS 12
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/* Context structure */
+typedef struct {
+  /* Required for getting input */
+  unsigned            NumBytesInBuffer;     /* Remaining bytes in buffer */
+  const U8          * pBuffer;              /* Pointer into buffer for reading data */
+  GUI_GET_DATA_FUNC * pfGetData;            /* Function pointer */
+  void              * pParam;               /* Parameter pointer passed to function */
+  U32                 Off;                  /* Data pointer */
+  /* Decompression data */
+  U8    aBuffer[258];                       /* Input buffer for data block */
+  short aCode  [(1 << MAX_NUM_LWZ_BITS)];   /* This array stores the LZW codes for the compressed strings */
+  U8    aPrefix[(1 << MAX_NUM_LWZ_BITS)];   /* Prefix character of the LZW code. */
+  U8    aDecompBuffer[3000];                /* Decompression buffer. The higher the compression, the more bytes are needed in the buffer. */
+  U8 *  sp;                                 /* Pointer into the decompression buffer */
+  int   CurBit;
+  int   LastBit;
+  int   GetDone;
+  int   LastByte;
+  int   ReturnClear;
+  int   CodeSize;
+  int   SetCodeSize;
+  int   MaxCode;
+  int   MaxCodeSize;
+  int   ClearCode;
+  int   EndCode;
+  int   FirstCode;
+  int   OldCode;
+  /* Palette buffer */
+  GUI_COLOR aColorTable[256];
+} GUI_GIF_CONTEXT;
+
+typedef struct {
+  int XPos;
+  int YPos;
+  int XSize;
+  int YSize;
+  int Flags;
+  int NumColors;
+} IMAGE_DESCRIPTOR;
+
+/* Default parameter structure for reading data from memory */
+typedef struct {
+  const U8 * pFileData;
+  U32   FileSize;
+} GUI_GIF_PARAM;
+
+typedef int  DRAW_FROM_DATABLOCK(GUI_GIF_CONTEXT * pContext, IMAGE_DESCRIPTOR * pDescriptor, int x0, int y0, int Transparency, int Disposal, int Num, int Denom);
+typedef void CLEAR_UNUSED_PIXELS(int x0, int y0, IMAGE_DESCRIPTOR * pDescriptor, GUI_GIF_IMAGE_INFO * pInfo, int Num, int Denom);
+
+/*********************************************************************
+*
+*       Private data
+*
+**********************************************************************
+*/
+extern const int GUI_GIF__aInterlaceOffset[4];
+extern const int GUI_GIF__aInterlaceYPos[4];
+
+/*********************************************************************
+*
+*       Interface
+*
+**********************************************************************
+*/
+int  GUI_GIF__ReadData(GUI_GIF_CONTEXT * pContext, unsigned NumBytes, const U8 ** ppData, unsigned StartOfFile);
+int  GUI_GIF__GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int  GUI_GIF__DrawFromFilePointer(GUI_GIF_CONTEXT * pContext, int x0, int y0, int Index, int Num, int Denom, DRAW_FROM_DATABLOCK pfDrawFromDataBlock, CLEAR_UNUSED_PIXELS pfClearUnusedPixels);
+void GUI_GIF__InitLZW(GUI_GIF_CONTEXT * pContext, int InputCodeSize);
+int  GUI_GIF__GetNextByte(GUI_GIF_CONTEXT * pContext);
+
+#endif /* GUI_GIF_PRIVATE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_HOOK.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,86 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_HOOK.h
+Purpose     : Hook handling routines
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GUI_HOOK_H
+#define GUI_HOOK_H
+
+#include "WM_Intern.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef int GUI_HOOK_FUNC(WM_MESSAGE* pMsg);
+
+typedef struct GUI_HOOK {
+  struct GUI_HOOK* pNext;
+  GUI_HOOK_FUNC*   pHookFunc;
+} GUI_HOOK;
+
+/*********************************************************************
+*
+*       Functions
+*
+**********************************************************************
+*/
+
+void GUI_HOOK_Add   (GUI_HOOK** ppFirstHook, GUI_HOOK* pNewHook, GUI_HOOK_FUNC* pHookFunc);
+void GUI_HOOK_Remove(GUI_HOOK** ppFirstHook, GUI_HOOK* pHook);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* GUI_HOOK_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_JPEG_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,308 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_JPEG_Private.h
+Purpose     : Private header
+----------------------------------------------------------------------
+
+Explanation of terms:
+  
+  Component   - Color channel, e.g., Red or Luminance.
+  Sample      - Single component value (i.e., one number in the image data).
+  Coefficient - Frequency coefficient (a DCT transform output number).
+  Block       - 8x8 group of samples or coefficients.
+  MCU         - (Minimum Coded Unit) is an interleaved set of blocks of size
+                determined by the sampling factors, or a single block in a
+                noninterleaved scan.
+
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_JPEG_PRIVATE_H
+#define GUI_JPEG_PRIVATE_H
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define JPEG_LOCK_H(h) (GUI_JPEG_DCONTEXT *)GUI_LOCK_H(h)
+
+/*********************************************************************
+*
+*       Scan types
+*/
+#define GRAYSCALE 0
+#define YH1V1     1
+#define YH2V1     2
+#define YH1V2     3
+#define YH2V2     4
+
+/*********************************************************************
+*
+*       Maximum number of...
+*/
+#define MAX_COMPONENTS  4
+#define MAX_HUFFTABLES  8
+#define MAX_QUANTTABLES 4
+#define MAX_COMPSINSCAN 4
+#define MAX_BLOCKSPERMCU 10
+
+/*********************************************************************
+*
+*       Marker definitions
+*/
+#define M_SOF0  0xc0 // Start Of Frame
+#define M_SOF1  0xc1
+#define M_SOF2  0xc2
+#define M_SOF3  0xc3
+
+#define M_SOF5  0xc5
+#define M_SOF6  0xc6
+#define M_SOF7  0xc7
+
+#define M_JPG   0xc8
+#define M_SOF9  0xc9
+#define M_SOF10 0xca
+#define M_SOF11 0xcb
+
+#define M_SOF13 0xcd
+#define M_SOF14 0xce
+#define M_SOF15 0xcf
+
+#define M_DHT   0xc4 // Define Huffman Table
+
+#define M_DAC   0xcc // Define Arithmetic Coding Table
+
+#define M_RST0  0xd0
+#define M_RST1  0xd1
+#define M_RST2  0xd2
+#define M_RST3  0xd3
+#define M_RST4  0xd4
+#define M_RST5  0xd5
+#define M_RST6  0xd6
+#define M_RST7  0xd7
+
+#define M_SOI   0xd8 // Start Of Image
+#define M_EOI   0xd9
+#define M_SOS   0xda // Start Of Scan
+#define M_DQT   0xdb // Define Quantisation Table
+#define M_DRI   0xdd // Define Restart Interval
+
+#define M_APP0  0xe0 // Application Usage
+#define M_APP14 0xee // Adobe marker
+
+#define M_TEM   0x01
+
+#define ADOBE_TRANSFORM_RGB   0
+#define ADOBE_TRANSFORM_YCBCR 1
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+//
+// Default parameter structure for reading data from memory
+//
+typedef struct {
+  const U8 * pFileData;
+  I32   FileSize;
+} GUI_JPEG_PARAM;
+
+//
+// Huffman table definition
+//
+typedef struct {
+  unsigned aLookUp[256];
+  U8       aCodeSize[256];
+  unsigned aTree[512];
+} HUFF_TABLE;
+
+//
+// Coefficient buffer used for progressive JPEGs
+//
+typedef struct {
+  int NumBlocksX;
+  int NumBlocksY;
+  unsigned BlockSize;
+  GUI_HMEM hData;
+} COEFF_BUFFER;
+
+typedef struct GUI_JPEG_DCONTEXT GUI_JPEG_DCONTEXT;
+
+struct GUI_JPEG_DCONTEXT {
+  //
+  // Function pointer for reading one byte
+  //
+  int (* pfGetU8)(GUI_JPEG_DCONTEXT * pContext, U8 * pByte);
+
+  GUI_GET_DATA_FUNC * pfGetData; // 'GetData' Function pointer
+  void * pParam;                 // Pointer passed to 'GetData' function
+  U32 Off;                       // Data pointer
+  //
+  // Image size
+  //
+  U16 xSize;
+  U16 ySize;
+  //
+  // Input buffer
+  //
+  const U8 * pBuffer;
+  unsigned   NumBytesInBuffer;
+  U8         StartOfFile;
+  U8         aStuff[4];        // Stuff back buffer
+  U8         NumBytesStuffed;  // Number of stuffed bytes
+  //
+  // Bit buffer
+  //
+  U32 BitBuffer;
+  int NumBitsLeft;
+  //
+  // Huffman tables
+  //
+  U8 aHuffNumTableAvail[MAX_HUFFTABLES];
+  U8 aaHuffNum[MAX_HUFFTABLES][17];   // Pointer to number of Huffman codes per bit size
+  U8 aaHuffVal[MAX_HUFFTABLES][256];  // Pointer to Huffman codes
+  HUFF_TABLE aHuffTable[MAX_HUFFTABLES];
+  HUFF_TABLE * apDC_Huff[MAX_BLOCKSPERMCU];
+  HUFF_TABLE * apAC_Huff[MAX_BLOCKSPERMCU];
+  //
+  // Quantization tables
+  //
+  U16 aaQuantTbl[MAX_QUANTTABLES][64];
+  U16 * apQuantTbl[MAX_QUANTTABLES];
+  //
+  // Component information
+  //
+  U8 NumCompsPerFrame;                      // Number of components per frame
+  U8 aCompHSamp[MAX_COMPONENTS];            // Component's horizontal sampling factor
+  U8 aCompVSamp[MAX_COMPONENTS];            // Component's vertical sampling factor
+  U8 aCompQuant[MAX_COMPONENTS];            // Component's quantization table selector
+  U8 aCompId   [MAX_COMPONENTS];            // Component's ID
+  U8 NumCompsPerScan;                       // Number of components per scan
+  U8 aCompList[MAX_COMPSINSCAN];            // Components in this scan
+  U8 aCompDC_Tab[MAX_COMPONENTS];           // Component's DC Huffman coding table selector
+  U8 aCompAC_Tab[MAX_COMPONENTS];           // Component's AC Huffman coding table selector
+  unsigned * apComponent[MAX_BLOCKSPERMCU]; // Points into the table aLastDC_Val[]
+  unsigned   aLastDC_Val[MAX_COMPONENTS];   // Table of last DC values
+  //
+  // Data used for progressive scans
+  //
+  U8 SpectralStart;                        // Spectral selection start
+  U8 SpectralEnd;                          // Spectral selection end
+  U8 SuccessiveLow;                        // Successive approximation low
+  U8 SuccessiveHigh;                       // Successive approximation high
+  COEFF_BUFFER aDC_Coeffs[MAX_COMPONENTS]; // DC coefficient buffer for progressive scan
+  COEFF_BUFFER aAC_Coeffs[MAX_COMPONENTS]; // AC coefficient buffer for progressive scan
+  int aBlockY_MCU[MAX_COMPONENTS];         // 
+  //
+  // Common
+  //
+  U8 TransformationRequired;
+  U8 IsProgressive;             // Flag is set to 1 if JPEG is progressive
+  U8 ScanType;                  // Gray, Yh1v1, Yh1v2, Yh2v1, Yh2v2
+  int MaxMCUsPerRow;            // Maximum number of MCUs per row
+  int MaxMCUsPerCol;            // Maximum number of MCUs per column
+  int MaxBlocksPerMCU;          // Maximum number of blocks per MCU
+  int MaxBlocksPerRow;          // Maximum number of blocks per row
+  int MaxMCU_xSize;             // MCU's max. X size in pixels
+  int MaxMCU_ySize;             // MCU's max. Y size in pixels
+  int DestBytesPerPixel;        // 4 (RGB) or 1 (Y)
+  int DestBytesPerScanline;     // Rounded up
+  int RealDestBytesPerScanline; // Actual bytes
+  int EOB_Run;                  // 'End Of Band' run
+  int RestartInterval;
+  int RestartsLeft;
+  int NextRestartNum;
+  int MCUsPerRow;
+  int MCUsPerCol;
+  int NumBlocksPerMCU;
+  int aMCU_Org[MAX_BLOCKSPERMCU];
+  //
+  // Block buffer
+  //
+  GUI_HMEM hBlocks;
+  GUI_HMEM hBlockMaxZagSet;
+  //
+  // Sample buffer
+  //
+  GUI_HMEM hSampleBuf;
+  U8     * pSampleBuf;
+  //
+  // Status
+  //
+  int TotalLinesLeft; // Total number of lines left in image
+  int MCULinesLeft;   // Total number of lines left in current MCU
+  //
+  // Output buffer(s)
+  //
+  GUI_HMEM hScanLine0; // Buffer 0
+  GUI_HMEM hScanLine1; // Buffer 1, only used for V2 sampling factors
+  U8 BufferIndex;
+  //
+  // Arrays used for converting YCbCr to RGB
+  //
+  int aCRR[256];
+  int aCBB[256];
+  I32 aCRG[256];
+  I32 aCBG[256];
+};
+
+/*********************************************************************
+*
+*       Private interface
+*
+**********************************************************************
+*/
+int       GUI_JPEG__DecodeLine              (GUI_JPEG_DCONTEXT * pContext);
+void      GUI_JPEG__Free                    (GUI_JPEG_DCONTEXT * pContext);
+GUI_COLOR GUI_JPEG__GetColorGray            (const U8 ** ppData, unsigned SkipCnt);
+GUI_COLOR GUI_JPEG__GetColorRGB             (const U8 ** ppData, unsigned SkipCnt);
+int       GUI_JPEG__GetData                 (void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int       GUI_JPEG__InitDraw                (GUI_HMEM hContext);
+int       GUI_JPEG__ReadUntilSOF            (GUI_HMEM hContext);
+void      GUI_JPEG__SetNextBand             (GUI_JPEG_DCONTEXT * pContext);
+int       GUI_JPEG__SkipLine                (GUI_JPEG_DCONTEXT * pContext);
+int       GUI_JPEG__GetInfoEx               (GUI_HMEM hContext, GUI_JPEG_INFO * pInfo);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,737 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_Private.h
+Purpose     : GUI internal declarations
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_PRIVATE_H
+#define GUI_PRIVATE_H
+
+#include "GUI.h"
+#include "LCD_Protected.h"
+#include "GUI_Debug.h"
+#if GUI_WINSUPPORT
+  #include "WM_GUI.h"
+#endif
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defaults for config switches
+*
+**********************************************************************
+
+  The config switches below do not affect the interface in GUI.h and
+  are therefor not required to be in GUI.h.
+*/
+
+/* Short address area.
+   For  most compilers, this is "near" or "__near"
+   We do not use this except for some CPUs which we know to always have some
+   near memory, because the GUI_Context and some other data will be declared
+   to be in this short address (near) memory area as it has a major effect
+   on performance.
+   Please define in GUIConf.h (if you want to use it)
+*/
+#ifndef GUI_SADDR
+  #define GUI_SADDR
+#endif
+
+#ifndef GUI_DEFAULT_FONT
+  #define GUI_DEFAULT_FONT    &GUI_Font6x8
+#endif
+
+#ifndef GUI_DEFAULT_CURSOR
+  #define GUI_DEFAULT_CURSOR  &GUI_CursorArrowM
+#endif
+
+#ifndef GUI_DEFAULT_BKCOLOR
+  #define GUI_DEFAULT_BKCOLOR GUI_BLACK
+#endif
+
+#ifndef GUI_DEFAULT_COLOR
+  #define GUI_DEFAULT_COLOR   GUI_WHITE
+#endif
+
+/*********************************************************************
+*
+*       Angles
+*
+**********************************************************************
+*/
+#define GUI_45DEG  512
+#define GUI_90DEG  (2 * GUI_45DEG)
+#define GUI_180DEG (4 * GUI_45DEG)
+#define GUI_360DEG (8 * GUI_45DEG)
+
+/*********************************************************************
+*
+*       Locking checks
+*
+**********************************************************************
+*/
+#if defined (WIN32) && defined (_DEBUG) && GUI_OS
+  #define GUI_ASSERT_LOCK()    GUITASK_AssertLock()
+  #define GUI_ASSERT_NO_LOCK() GUITASK_AssertNoLock()
+  void GUITASK_AssertLock(void);
+  void GUITASK_AssertNoLock(void);
+#else
+  #define GUI_ASSERT_LOCK()
+  #define GUI_ASSERT_NO_LOCK()
+#endif
+
+/*********************************************************************
+*
+*       Division tables
+*
+**********************************************************************
+*/
+extern const U8 GUI__aConvert_15_255[(1 << 4)];
+extern const U8 GUI__aConvert_31_255[(1 << 5)];
+extern const U8 GUI__aConvert_63_255[(1 << 6)];
+extern const U8 GUI__aConvert_255_15[(1 << 8)];
+extern const U8 GUI__aConvert_255_31[(1 << 8)];
+extern const U8 GUI__aConvert_255_63[(1 << 8)];
+
+/*********************************************************************
+*
+*       Usage internals
+*
+**********************************************************************
+*/
+typedef GUI_HMEM GUI_USAGE_Handle;
+typedef struct tsUSAGE_APIList tUSAGE_APIList;
+typedef struct GUI_Usage GUI_USAGE;
+#define GUI_USAGE_h GUI_USAGE_Handle
+
+typedef GUI_USAGE_h tUSAGE_CreateCompatible(GUI_USAGE * p);
+typedef void        tUSAGE_AddPixel        (GUI_USAGE * p, int x, int y);
+typedef void        tUSAGE_AddHLine        (GUI_USAGE * p, int x0, int y0, int len);
+typedef void        tUSAGE_Clear           (GUI_USAGE * p);
+typedef void        tUSAGE_Delete          (GUI_USAGE_h h);
+typedef int         tUSAGE_GetNextDirty    (GUI_USAGE * p, int * pxOff, int yOff);
+#define GUI_USAGE_LOCK_H(h) ((GUI_USAGE *)GUI_LOCK_H(h))
+
+void GUI_USAGE_DecUseCnt(GUI_USAGE_Handle  hUsage);
+
+GUI_USAGE_Handle GUI_USAGE_BM_Create(int x0, int y0, int xsize, int ysize, int Flags);
+void    GUI_USAGE_Select(GUI_USAGE_Handle hUsage);
+void    GUI_USAGE_AddRect(GUI_USAGE * pUsage, int x0, int y0, int xSize, int ySize);
+#define GUI_USAGE_AddPixel(p, x,y)            p->pAPI->pfAddPixel(p,x,y)
+#define GUI_USAGE_AddHLine(p,x,y,len)         p->pAPI->pfAddHLine(p,x,y,len)
+#define GUI_USAGE_Clear(p)                    p->pAPI->pfClear(p)
+#define GUI_USAGE_Delete(p)                   p->pAPI->pfDelete(p)
+#define GUI_USAGE_GetNextDirty(p,pxOff, yOff) p->pAPI->pfGetNextDirty(p,pxOff, yOff)
+
+struct tsUSAGE_APIList {
+  tUSAGE_AddPixel         * pfAddPixel;
+  tUSAGE_AddHLine         * pfAddHLine;
+  tUSAGE_Clear            * pfClear;
+  tUSAGE_CreateCompatible * pfCreateCompatible;
+  tUSAGE_Delete           * pfDelete;
+  tUSAGE_GetNextDirty     * pfGetNextDirty;
+} ;
+
+struct GUI_Usage {
+  I16P x0, y0, XSize, YSize;
+  const tUSAGE_APIList * pAPI;
+  I16 UseCnt;
+};
+
+/*********************************************************************
+*
+*       GUI_MEMDEV
+*
+**********************************************************************
+*/
+#if GUI_SUPPORT_MEMDEV
+
+typedef struct {
+  GUI_DEVICE * pDevice;
+  I16P                   x0, y0, XSize, YSize;
+  unsigned               BytesPerLine;
+  unsigned               BitsPerPixel;
+  GUI_HMEM               hUsage;
+} GUI_MEMDEV;
+
+#define      GUI_MEMDEV_LOCK_H(h) ((GUI_MEMDEV *)GUI_LOCK_H(h))
+
+void         GUI_MEMDEV__CopyFromLCD (GUI_MEMDEV_Handle hMem);
+void         GUI_MEMDEV__GetRect     (GUI_RECT * pRect);
+unsigned     GUI_MEMDEV__Color2Index (LCD_COLOR Color);
+LCD_COLOR    GUI_MEMDEV__Index2Color (int Index);
+unsigned int GUI_MEMDEV__GetIndexMask(void);
+void         GUI_MEMDEV__SetAlphaCallback(unsigned(* pcbSetAlpha)(U8));
+
+GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xSize, int ySize, int Flags,
+                                          const GUI_DEVICE_API     * pDeviceAPI,
+                                          const LCD_API_COLOR_CONV * pColorConvAPI);
+
+void              GUI_MEMDEV__DrawSizedAt        (GUI_MEMDEV_Handle hMem, int xPos, int yPos, int xSize, int ySize);
+GUI_MEMDEV_Handle GUI_MEMDEV__GetEmptyCopy32     (GUI_MEMDEV_Handle hMem, int * pxSize, int * pySize, int * pxPos, int * pyPos);
+void              GUI_MEMDEV__ReadLine           (int x0, int y, int x1, LCD_PIXELINDEX * pBuffer);
+void              GUI_MEMDEV__WriteToActiveAlpha (GUI_MEMDEV_Handle hMem,int x, int y);
+void              GUI_MEMDEV__WriteToActiveAt    (GUI_MEMDEV_Handle hMem,int x, int y);
+void              GUI_MEMDEV__WriteToActiveOpaque(GUI_MEMDEV_Handle hMem,int x, int y);
+void            * GUI_MEMDEV__XY2PTR             (int x,int y);
+void            * GUI_MEMDEV__XY2PTREx           (GUI_MEMDEV * pDev, int x,int y);
+void              GUI_MEMDEV__BlendColor32       (GUI_MEMDEV_Handle hMem, U32 BlendColor, U8 BlendIntens);
+
+unsigned GUI__AlphaPreserveTrans(int OnOff);
+
+extern unsigned GUI_MEMDEV__TimePerFrame;
+
+#define GUI_TIME_PER_FRAME (GUI_TIMER_TIME)GUI_MEMDEV__TimePerFrame
+
+#define GUI_POS_AUTO -4095   /* Position value for auto-pos */
+
+#endif
+
+/*********************************************************************
+*
+*       LCD_HL_ level defines
+*
+**********************************************************************
+*/
+#define LCD_HL_DrawHLine             GUI_pContext->pLCD_HL->pfDrawHLine
+#define LCD_HL_DrawPixel             GUI_pContext->pLCD_HL->pfDrawPixel
+
+/*********************************************************************
+*
+*       Helper functions
+*
+**********************************************************************
+*/
+#define GUI_ZEROINIT(Obj) GUI__MEMSET(Obj, 0, sizeof(Obj))
+int  GUI_cos(int angle);
+int  GUI_sin(int angle);
+extern const U32 GUI_Pow10[10];
+
+/* Multi-touch */
+void GUI_MTOUCH__ManagePID(int OnOff);
+
+/* Anti-aliased drawing */
+int  GUI_AA_Init       (int x0, int x1);
+int  GUI_AA_Init_HiRes (int x0, int x1);
+void GUI_AA_Exit       (void);
+I16  GUI_AA_HiRes2Pixel(int HiRes);
+
+void GL_DrawCircleAA_HiRes(int x0, int y0, int r);
+void GL_FillCircleAA_HiRes (int x0, int y0, int r);
+void GL_FillEllipseAA_HiRes(int x0, int y0, int rx, int ry);
+
+void GUI_AA__DrawCharAA2(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+void GUI_AA__DrawCharAA4(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+void GUI_AA__DrawCharAA8(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+
+/* Alpha blending helper functions */
+#define GUI_ALPHABLENDING_DONE  (1 << 0)
+
+int      GUI__GetAlphaBuffer    (U32 ** ppCurrent, U32 ** ppConvert, U32 ** ppData, int * pVXSizeMax);
+int      GUI__AllocAlphaBuffer  (int AllocDataBuffer);
+U32    * GUI__DoAlphaBlending   (int x, int y, U32 * pData, int xSize, tLCDDEV_Index2Color * pfIndex2Color_DEV, int * pDone);
+unsigned GUI__SetAlphaBufferSize(int xSize);
+
+/* System independent font routines */
+int        GUI_SIF__GetCharDistX       (U16P c, int * pSizeX);
+void       GUI_SIF__GetFontInfo        (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+char       GUI_SIF__IsInFont           (const GUI_FONT * pFont, U16 c);
+const U8 * GUI_SIF__GetpCharInfo       (const GUI_FONT * pFont, U16P c, unsigned SizeOfCharInfo);
+int        GUI_SIF__GetNumCharAreas    (const GUI_FONT * pFont);
+int        GUI_SIF__GetCharDistX_ExtFrm(U16P c, int * pSizeX);
+void       GUI_SIF__GetFontInfo_ExtFrm (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+char       GUI_SIF__IsInFont_ExtFrm    (const GUI_FONT * pFont, U16 c);
+int        GUI_SIF__GetCharInfo_ExtFrm (U16P c, GUI_CHARINFO_EXT * pInfo);
+void       GUI_SIF__ClearLine_ExtFrm   (const char * s, int Len);
+
+/* External binary font routines */
+int        GUI_XBF__GetOff       (const GUI_XBF_DATA * pXBF_Data, unsigned c, U32 * pOff);
+int        GUI_XBF__GetOffAndSize(const GUI_XBF_DATA * pXBF_Data, unsigned c, U32 * pOff, U16 * pSize);
+int        GUI_XBF__GetCharDistX (U16P c, int * pSizeX);
+void       GUI_XBF__GetFontInfo  (const GUI_FONT * pFont, GUI_FONTINFO * pInfo);
+char       GUI_XBF__IsInFont     (const GUI_FONT * pFont, U16 c);
+int        GUI_XBF__GetCharInfo  (U16P c, GUI_CHARINFO_EXT * pInfo);
+void       GUI_XBF__ClearLine    (const char * s, int Len);
+
+/* Conversion routines */
+void GUI_AddHex     (U32 v, U8 Len, char ** ps);
+void GUI_AddBin     (U32 v, U8 Len, char ** ps);
+void GUI_AddDecMin  (I32 v, char ** ps);
+void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char ** ps);
+long GUI_AddSign    (long v, char ** ps);
+int  GUI_Long2Len   (I32 v);
+
+#define GUI_UC__GetCharSize(sText)  GUI_pUC_API->pfGetCharSize(sText)
+#define GUI_UC__GetCharCode(sText)  GUI_pUC_API->pfGetCharCode(sText)
+
+int   GUI_UC__CalcSizeOfChar   (U16 Char);
+U16   GUI_UC__GetCharCodeInc   (const char ** ps);
+int   GUI_UC__NumChars2NumBytes(const char * s, int NumChars);
+int   GUI_UC__NumBytes2NumChars(const char * s, int NumBytes);
+
+int  GUI__GetLineNumChars  (const char * s, int MaxNumChars);
+int  GUI__GetNumChars      (const char * s);
+int  GUI__GetOverlap       (U16 Char);
+int  GUI__GetLineDistX     (const char * s, int Len);
+int  GUI__GetFontSizeY     (void);
+int  GUI__HandleEOLine     (const char ** ps);
+void GUI__InvertRectColors (int x0, int y0, int x1, int y1);
+void GUI__DispLine         (const char * s, int Len, const GUI_RECT * pr);
+void GUI__AddSpaceHex      (U32 v, U8 Len, char ** ps);
+void GUI__CalcTextRect     (const char * pText, const GUI_RECT * pTextRectIn, GUI_RECT * pTextRectOut, int TextAlign);
+
+void GUI__ClearTextBackground(int xDist, int yDist);
+
+int  GUI__WrapGetNumCharsDisp       (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int  GUI__WrapGetNumCharsToNextLine (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int  GUI__WrapGetNumBytesToNextLine (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+//void GUI__memset    (U8  * p, U8 Fill, int NumBytes);
+void GUI__memset16  (U16 * p, U16 Fill, int NumWords);
+int  GUI__strlen    (const char * s);
+int  GUI__strcmp    (const char * s0, const char * s1);
+int  GUI__strcmp_hp (GUI_HMEM hs0, const char * s1);
+
+/* Get cursor position */
+int  GUI__GetCursorPosX     (const char * s, int Index, int MaxNumChars);
+int  GUI__GetCursorPosChar  (const char * s, int x, int NumCharsToNextLine);
+U16  GUI__GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+
+/* Arabic support (tbd) */
+U16  GUI__GetPresentationForm     (U16 Char, U16 Next, U16 Prev, int * pIgnoreNext, const char * s);
+int  GUI__IsArabicCharacter       (U16 c);
+
+/* BiDi support */
+int  GUI__BIDI_Log2Vis           (const char * s, int NumChars, char * pBuffer, int BufferSize);
+int  GUI__BIDI_GetCursorPosX     (const char * s, int NumChars, int Index);
+int  GUI__BIDI_GetCursorPosChar  (const char * s, int NumChars, int x);
+U16  GUI__BIDI_GetLogChar        (const char * s, int NumChars, int Index);
+int  GUI__BIDI_GetCharDir        (const char * s, int NumChars, int Index);
+int  GUI__BIDI_IsNSM             (U16 Char);
+U16  GUI__BIDI_GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+int  GUI__BIDI_GetWordWrap       (const char * s, int xSize, int * pxDist);
+int  GUI__BIDI_GetCharWrap       (const char * s, int xSize);
+
+#if (GUI_USE_BIDI2)
+
+#define GUI__BIDI_Log2Vis            GUI__BIDI2_Log2Vis
+#define GUI__BIDI_GetCursorPosX      GUI__BIDI2_GetCursorPosX
+#define GUI__BIDI_GetCursorPosChar   GUI__BIDI2_GetCursorPosChar
+#define GUI__BIDI_GetLogChar         GUI__BIDI2_GetLogChar
+#define GUI__BIDI_GetCharDir         GUI__BIDI2_GetCharDir
+#define GUI__BIDI_IsNSM              GUI__BIDI2_IsNSM
+#define GUI__BIDI_GetCursorCharacter GUI__BIDI2_GetCursorCharacter
+#define GUI__BIDI_GetWordWrap        GUI__BIDI2_GetWordWrap
+#define GUI__BIDI_GetCharWrap        GUI__BIDI2_GetCharWrap
+#define GUI__BIDI_SetBaseDir         GUI__BIDI2_SetBaseDir
+#define GUI__BIDI_GetBaseDir         GUI__BIDI2_GetBaseDir
+
+int  GUI__BIDI_Log2Vis           (const char * s, int NumChars, char * pBuffer, int BufferSize);
+int  GUI__BIDI_GetCursorPosX     (const char * s, int NumChars, int Index);
+int  GUI__BIDI_GetCursorPosChar  (const char * s, int NumChars, int x);
+U16  GUI__BIDI_GetLogChar        (const char * s, int NumChars, int Index);
+int  GUI__BIDI_GetCharDir        (const char * s, int NumChars, int Index);
+int  GUI__BIDI_IsNSM             (U16 Char);
+U16  GUI__BIDI_GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+int  GUI__BIDI_GetWordWrap       (const char * s, int xSize, int * pxDist);
+int  GUI__BIDI_GetCharWrap       (const char * s, int xSize);
+void GUI__BIDI_SetBaseDir        (int Dir);
+int  GUI__BIDI_GetBaseDir        (void);
+
+#else
+
+#define GUI__BIDI_SetBaseDir
+#define GUI__BIDI_GetBaseDir
+
+#endif
+
+const char * GUI__BIDI_Log2VisBuffered(const char * s, int * pMaxNumChars, int Mode);
+
+extern int GUI__BIDI_Enabled;
+
+extern int (* _pfGUI__BIDI_Log2Vis         )(const char * s, int NumChars, char * pBuffer, int BufferSize);
+extern int (* _pfGUI__BIDI_GetCursorPosX   )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_GetCursorPosChar)(const char * s, int NumChars, int x);
+extern U16 (* _pfGUI__BIDI_GetLogChar      )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_GetCharDir      )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_IsNSM           )(U16 Char);
+
+/* BiDi-related function pointers */
+extern const char * (* GUI_CharLine_pfLog2Vis)(const char * s, int * pMaxNumChars, int Mode);
+
+extern int (* GUI__GetCursorPos_pfGetPosX)     (const char * s, int MaxNumChars, int Index);
+extern int (* GUI__GetCursorPos_pfGetPosChar)  (const char * s, int MaxNumChars, int x);
+extern U16 (* GUI__GetCursorPos_pfGetCharacter)(const char * s, int MaxNumChars, int Index, int * pIsRTL);
+
+extern int (* GUI__Wrap_pfGetWordWrap)(const char * s, int xSize, int * pxDist);
+extern int (* GUI__Wrap_pfGetCharWrap)(const char * s, int xSize);
+
+/* Proportional  font support */
+const GUI_FONT_PROP * GUIPROP__FindChar(const GUI_FONT_PROP * pProp, U16P c);
+
+/* Extended proportional font support */
+const GUI_FONT_PROP_EXT * GUIPROP_EXT__FindChar(const GUI_FONT_PROP_EXT * pPropExt, U16P c);
+void  GUIPROP_EXT__DispLine      (const char * s, int Len);
+void  GUIPROP_EXT__ClearLine     (const char * s, int Len);
+void  GUIPROP_EXT__SetfpClearLine(void (* fpClearLine)(const char * s, int Len));
+
+/* Reading data routines */
+U16 GUI__Read16(const U8 ** ppData);
+U32 GUI__Read32(const U8 ** ppData);
+
+/* Virtual screen support */
+void GUI__GetOrg(int * px, int * py);
+void GUI__SetOrgHook(void(* pfHook)(int x, int y));
+
+/* Timer support */
+int              GUI_TIMER__IsActive       (void);
+GUI_TIMER_TIME   GUI_TIMER__GetPeriod      (void);
+GUI_TIMER_HANDLE GUI_TIMER__GetFirstTimer  (PTR_ADDR * pContext);
+GUI_TIMER_HANDLE GUI_TIMER__GetNextTimerLin(GUI_TIMER_HANDLE hTimer, PTR_ADDR * pContext);
+
+/* Get function pointers for color conversion */
+tLCDDEV_Index2Color * GUI_GetpfIndex2ColorEx(int LayerIndex);
+tLCDDEV_Color2Index * GUI_GetpfColor2IndexEx(int LayerIndex);
+
+int GUI_GetBitsPerPixelEx(int LayerIndex);
+
+LCD_PIXELINDEX * LCD_GetpPalConvTable        (const LCD_LOGPALETTE * pLogPal);
+LCD_PIXELINDEX * LCD_GetpPalConvTableUncached(const LCD_LOGPALETTE * pLogPal);
+LCD_PIXELINDEX * LCD_GetpPalConvTableBM      (const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex);
+
+/* Setting a function for converting a color palette to an array of index values */
+void GUI_SetFuncGetpPalConvTable(LCD_PIXELINDEX * (* pFunc)(const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex));
+
+/*********************************************************************
+*
+*       Format definitions used by streamed bitmaps
+*
+*   IMPORTANT: DO NOT CHANGE THESE VALUES!
+*   THEY HAVE TO CORRESPOND TO THE DEFINITIONS WITHIN THE CODE OF THE BITMAPCONVERTER!
+*/
+#define GUI_STREAM_FORMAT_INDEXED    100 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE4       6   /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE8       7   /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_565        8   /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M565       9   /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_555        10  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M555       11  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE16      12  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLEM16     13  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_8888       16  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE32      15  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_24         17  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLEALPHA   18  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_12     19  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_12    20  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_12_1   21  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_12_1  22  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_16     23  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_16    24  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_A555       25  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_AM555      26  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_A565       27  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_AM565      28  /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M8888I     29  /* DO NOT CHANGE */
+
+void GUI__ReadHeaderFromStream  (GUI_BITMAP_STREAM * pBitmapHeader, const U8 * pData);
+void GUI__CreateBitmapFromStream(const GUI_BITMAP_STREAM * pBitmapHeader, const void * pData, GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const GUI_BITMAP_METHODS * pMethods);
+
+/* Cache management */
+int GUI__ManageCache  (int Cmd);
+int GUI__ManageCacheEx(int LayerIndex, int Cmd);
+
+/*********************************************************************
+*
+*       2d - GL
+*
+**********************************************************************
+*/
+void GL_DispChar         (U16 c);
+void GL_DrawArc          (int x0, int y0, int rx, int ry, int a0, int a1);
+void GL_DrawBitmap       (const GUI_BITMAP * pBM, int x0, int y0);
+void GL_DrawCircle       (int x0, int y0, int r);
+void GL_DrawEllipse      (int x0, int y0, int rx, int ry, int w);
+void GL_DrawHLine        (int y0, int x0, int x1);
+void GL_DrawPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GL_DrawPoint        (int x,  int y);
+void GL_DrawLine1        (int x0, int y0, int x1, int y1);
+void GL_DrawLine1Ex      (int x0, int y0, int x1, int y1, unsigned * pPixelCnt);
+void GL_DrawLineRel      (int dx, int dy);
+void GL_DrawLineTo       (int x,  int y);
+void GL_DrawLineToEx     (int x,  int y, unsigned * pPixelCnt);
+void GL_DrawLine         (int x0, int y0, int x1, int y1);
+void GL_DrawLineEx       (int x0, int y0, int x1, int y1, unsigned * pPixelCnt);
+void GL_MoveTo           (int x,  int y);
+void GL_FillCircle       (int x0, int y0, int r);
+void GL_FillCircleAA     (int x0, int y0, int r);
+void GL_FillEllipse      (int x0, int y0, int rx, int ry);
+void GL_FillPolygon      (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GL_SetDefault       (void);
+
+/*********************************************************************
+*
+*       Replacement of memcpy() and memset()
+*
+**********************************************************************
+*/
+//
+// Configurable function pointers
+//
+extern void * (* GUI__pfMemset)(void * pDest, int Fill, size_t Cnt);
+extern void * (* GUI__pfMemcpy)(void * pDest, const void * pSrc, size_t Cnt);
+
+extern int    (* GUI__pfStrcmp)(const char *, const char *);
+extern size_t (* GUI__pfStrlen)(const char *);
+extern char * (* GUI__pfStrcpy)(char *, const char *);
+//
+// Macros for typesave use of function pointers
+//
+#define GUI__MEMSET(pDest, Fill, Cnt) GUI__pfMemset((void *)(pDest), (int)(Fill), (size_t)(Cnt))
+#define GUI__MEMCPY(pDest, pSrc, Cnt) GUI__pfMemcpy((void *)(pDest), (const void *)(pSrc), (size_t)(Cnt))
+
+/*********************************************************************
+*
+*       Callback pointers for dynamic linkage
+*
+**********************************************************************
+Dynamic linkage pointers reduces configuration hassles.
+*/
+typedef int  GUI_tfTimer(void);
+typedef int  WM_tfHandlePID(void);
+
+/*********************************************************************
+*
+*       Text rotation
+*
+**********************************************************************
+*/
+extern GUI_RECT  GUI_RectDispString; /* Used by LCD_Rotate...() and GUI_DispStringInRect() */
+
+/*********************************************************************
+*
+*       Flag for setting transparency for 'EXT' fonts
+*
+**********************************************************************
+*/
+extern U8 GUI__CharHasTrans;
+
+/*********************************************************************
+*
+*       Multitasking support
+*
+**********************************************************************
+*/
+extern int GUITASK__EntranceCnt;
+
+/*********************************************************************
+*
+*       Bitmap related functions
+*
+**********************************************************************
+*/
+
+int       GUI_GetBitmapPixelIndex(const GUI_BITMAP * pBMP, unsigned x, unsigned y);
+GUI_COLOR GUI_GetBitmapPixelColor(const GUI_BITMAP * pBMP, unsigned x, unsigned y);
+int       GUI_GetBitmapPixelIndexEx(int BitsPerPixel, int BytesPerLine, const U8 * pData, unsigned x, unsigned y);
+
+void      GUI__DrawBitmap16bpp (int x0, int y0, int xsize, int ysize, const U8 * pPixel, const LCD_LOGPALETTE * pLogPal, int xMag, int yMag, tLCDDEV_Index2Color * pfIndex2Color, const LCD_API_COLOR_CONV * pColorConvAPI);
+void      GUI__DrawBitmapA16bpp(int x0, int y0, int xSize, int ySize, const U8 * pPixel, const LCD_LOGPALETTE * pLogPal, int xMag, int yMag, tLCDDEV_Index2Color * pfIndex2Color);
+void      GUI__SetPixelAlpha   (int x, int y, U8 Alpha, LCD_COLOR Color);
+LCD_COLOR GUI__MixColors       (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+void      GUI__MixColorsBulk   (U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+
+extern const GUI_UC_ENC_APILIST GUI_UC_None;
+
+/*********************************************************************
+*
+*       LCDDEV_L0_xxx
+*
+**********************************************************************
+*/
+#define LCDDEV_L0_Color2Index         GUI__apDevice[GUI_pContext->SelLayer]->pColorConvAPI->pfColor2Index
+#define LCDDEV_L0_Index2Color         GUI__apDevice[GUI_pContext->SelLayer]->pColorConvAPI->pfIndex2Color
+
+#define LCDDEV_L0_DrawBitmap          GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawBitmap
+#define LCDDEV_L0_DrawHLine           GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawHLine
+#define LCDDEV_L0_DrawVLine           GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawVLine
+#define LCDDEV_L0_DrawPixel           GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawPixel
+#define LCDDEV_L0_FillRect            GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfFillRect
+#define LCDDEV_L0_GetPixel            GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetPixel
+#define LCDDEV_L0_GetRect             GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetRect
+#define LCDDEV_L0_GetPixelIndex       GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetPixelIndex
+#define LCDDEV_L0_SetPixelIndex       GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfSetPixelIndex
+#define LCDDEV_L0_XorPixel            GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfXorPixel
+#define LCDDEV_L0_GetDevFunc          GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetDevFunc
+
+void LCD_ReadRect  (int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+void GUI_ReadRect  (int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+void GUI_ReadRectEx(int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+
+void LCD_ReadRectNoClip(int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+*       Internal color management
+*
+**********************************************************************
+*/
+typedef struct {
+  void         (* pfSetColor)   (LCD_COLOR Index);
+  void         (* pfSetBkColor) (LCD_COLOR Index);
+  LCD_DRAWMODE (* pfSetDrawMode)(LCD_DRAWMODE dm);
+} LCD_SET_COLOR_API;
+
+extern const LCD_SET_COLOR_API * LCD__pSetColorAPI;
+
+#define LCD__SetBkColorIndex(Index) (*GUI_pContext->LCD_pBkColorIndex = Index)
+#define LCD__SetColorIndex(Index)   (*GUI_pContext->LCD_pColorIndex   = Index)
+#define LCD__GetBkColorIndex()      (*GUI_pContext->LCD_pBkColorIndex)
+#define LCD__GetColorIndex()        (*GUI_pContext->LCD_pColorIndex)
+
+/* The following 2 defines are only required for compatibility to older versions of the TTF library */
+#define LCD_BKCOLORINDEX (*GUI_pContext->LCD_pBkColorIndex)
+#define LCD_COLORINDEX   (*GUI_pContext->LCD_pColorIndex)
+
+/*********************************************************************
+*
+*       EXTERNs for GL_CORE
+*
+**********************************************************************
+*/
+extern const GUI_FONT * GUI__pFontDefault;
+extern GUI_COLOR        GUI__ColorDefault;
+extern GUI_COLOR        GUI__BkColorDefault;
+
+extern GUI_SADDR GUI_CONTEXT * GUI_pContext;
+
+extern GUI_DEVICE * GUI__apDevice[GUI_NUM_LAYERS];
+
+//
+// Function pointer for converting a palette containing a color array into an index array
+//
+extern LCD_PIXELINDEX * (* GUI_pfGetpPalConvTable)(const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex);
+
+//
+// Function pointer for mixing up 2 colors
+//
+extern LCD_COLOR (* GUI__pfMixColors)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+
+//
+// Function pointer for mixing up arrays of colors
+//
+extern void (* GUI__pfMixColorsBulk)(U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+
+//
+// Function pointer for mixing color and gamma values
+//
+extern LCD_COLOR (* LCD_AA_pfMixColors16)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+
+//
+// Function pointer for drawing alpha memory devices
+//
+extern GUI_DRAWMEMDEV_FUNC   * GUI__pfDrawAlphaMemdevFunc;
+extern GUI_DRAWMEMDEV_FUNC   * GUI__pfDrawM565MemdevFunc;
+
+//
+// Function pointer for drawing alpha bitmaps
+//
+extern GUI_DRAWBITMAP_FUNC * GUI__pfDrawAlphaBitmapFunc;
+extern GUI_DRAWBITMAP_FUNC * GUI__pfDrawM565BitmapFunc;
+
+extern U8 GUI__DrawStreamedBitmap;
+
+//
+// API list to be used for MultiBuffering
+//
+extern const GUI_MULTIBUF_API    GUI_MULTIBUF_APIList;
+extern const GUI_MULTIBUF_API    GUI_MULTIBUF_APIListMasked;
+extern const GUI_MULTIBUF_API_EX GUI_MULTIBUF_APIListEx;
+
+#ifdef  GL_CORE_C
+  #define GUI_EXTERN
+#else
+  #define GUI_EXTERN extern
+#endif
+
+GUI_EXTERN   void (* GUI_pfExecAnimations)(void);
+GUI_EXTERN   int  (* GUI_pfUpdateSoftLayer)(void);
+
+#ifdef WIN32
+  GUI_EXTERN void (* GUI_pfSoftlayerGetPixel)(int x, int y, void * p);
+#endif
+
+GUI_EXTERN void (* GUI_pfHookMTOUCH)(const GUI_MTOUCH_STATE * pState);
+
+GUI_EXTERN const GUI_UC_ENC_APILIST * GUI_pUC_API; /* Unicode encoding API */
+
+GUI_EXTERN GUI_SADDR char             GUI_DecChar;
+GUI_EXTERN           GUI_tfTimer    * GUI_pfTimerExec;
+GUI_EXTERN           WM_tfHandlePID * WM_pfHandlePID;
+GUI_EXTERN   void (* GUI_pfDispCharStyle)(U16 Char);
+GUI_EXTERN   void (* GUI_pfDispCharLine)(int x0);
+
+GUI_EXTERN           int GUI__BufferSize; // Required buffer size in pixels for alpha blending and/or antialiasing
+GUI_EXTERN           int GUI_AA__ClipX0;  // x0-clipping value for AA module
+
+GUI_EXTERN           I8  GUI__aNumBuffers[GUI_NUM_LAYERS]; // Number of buffers used per layer
+GUI_EXTERN           U8  GUI__PreserveTrans;
+GUI_EXTERN           U8  GUI__IsInitialized;
+
+GUI_EXTERN           U8  GUI__NumLayersInUse;
+GUI_EXTERN           U32 GUI__LayerMask;
+
+#if GUI_SUPPORT_ROTATION
+  GUI_EXTERN const tLCD_APIList * GUI_pLCD_APIList; /* Used for rotating text */
+#endif
+
+GUI_EXTERN I16 GUI_OrgX, GUI_OrgY;
+
+#undef GUI_EXTERN
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUI_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SPRITE_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,77 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_SPRITE_Private.h
+Purpose     : Private header file for sprites
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_SPRITE_PRIVATE_H
+#define GUI_SPRITE_PRIVATE_H
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define SPRITE_LOCK_H(h) (GUI_SPRITE_OBJ *)GUI_LOCK_H(h)
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+//
+// The sprite object
+//
+typedef struct {
+  GUI_DEVICE       * pDevice;
+  GUI_RECT           Rect;
+  GUI_HMEM           hColors;
+  U16                Flags;
+  const GUI_BITMAP * pBM;
+  void            (* pCB)(GUI_HSPRITE hSprite, int Cmd); // Callback routine for animated sprites
+  GUI_HMEM           hContext;
+} GUI_SPRITE_OBJ;
+
+
+#endif // GUI_SPRITE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SetOrientation.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,94 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_SetOrientation.h
+Purpose     : Private include file for GUI_SetOrientation_xxx
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_SETORIENTATION_H
+#define GUI_SETORIENTATION_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_ORIENTATION
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+struct DRIVER_CONTEXT {
+  void (* pfLog2Phys)(DRIVER_CONTEXT * pContext, int x, int y, int * px_phys, int * py_phys);
+  U8 * pData;
+  int BytesPerPixel;
+  int BytesPerLine;
+  int Orientation;
+  int xSize, ySize;
+  int vxSize, vySize;
+  int PixelOffset;
+  const GUI_ORIENTATION_API * pDrawingAPI;
+};
+
+/*********************************************************************
+*
+*       Private interface
+*
+**********************************************************************
+*/
+void GUI__Sort(int * p0, int * p1);
+
+#endif /* GUI_SETORIENTATION_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SetOrientationCX.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,613 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_SetOrientationC0.c
+Purpose     : Runtime display orientation without cache
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI_SetOrientation.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define XY2PTR(x, y) (PIXEL *)(pContext->pData + y * pContext->BytesPerLine + x * pContext->pDrawingAPI->BytesPerPixel)
+
+/*********************************************************************
+*
+*       Static code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Static code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _Sort
+*
+* Purpose:
+*   Sorts the values pointed by the given pointers. Please note that
+*   the same static function is also in GUI_SetOrientationC0.h
+*   to enable better compiler optimization.
+*/
+static void _Sort(int * p0, int * p1) {
+  int temp;
+
+  if (*p0 > *p1) {
+    temp = *p0;
+    *p0  = *p1;
+    *p1  = temp;
+  }
+}
+
+/*********************************************************************
+*
+*       Static code: Bitmap drawing routines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Draw Bitmap 1 BPP
+*/
+static void _DrawBitLine1BPP(GUI_DEVICE * pDevice, unsigned x, unsigned y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+  LCD_PIXELINDEX IndexMask, Index0, Index1, Pixel;
+  LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE *, int, int);
+  PIXEL * pData;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  Index0 = *(pTrans + 0);
+  Index1 = *(pTrans + 1);
+  x += Diff;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+  case 0:
+    do {
+      *pData = (PIXEL)((*p & (0x80 >> Diff)) ? Index1 : Index0);
+      pData += pContext->PixelOffset;
+      if (++Diff == 8) {
+        Diff = 0;
+        p++;
+      }
+    } while (--xsize);
+    break;
+  case LCD_DRAWMODE_TRANS:
+    do {
+      if (*p & (0x80 >> Diff)) {
+        *pData = (PIXEL)Index1;
+      }
+      pData += pContext->PixelOffset;
+      if (++Diff == 8) {
+        Diff = 0;
+        p++;
+      }
+    } while (--xsize);
+    break;
+  case LCD_DRAWMODE_XOR | LCD_DRAWMODE_TRANS:
+  case LCD_DRAWMODE_XOR:
+    pfGetPixelIndex = pDevice->pDeviceAPI->pfGetPixelIndex;
+    IndexMask = pDevice->pColorConvAPI->pfGetIndexMask();
+    do {
+      if (*p & (0x80 >> Diff)) {
+        Pixel = pfGetPixelIndex(pDevice, x, y);
+        Pixel ^= IndexMask;
+        *pData = (PIXEL)Pixel;
+      }
+      pData += pContext->PixelOffset;
+      x++;
+      if (++Diff == 8) {
+        Diff = 0;
+        p++;
+      }
+    } while (--xsize);
+    break;
+  }
+}
+
+/*********************************************************************
+*
+*       Draw Bitmap 2 BPP
+*/
+static void _DrawBitLine2BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+  LCD_PIXELINDEX Pixels, PixelIndex;
+  int CurrentPixel, Shift, Index;
+  PIXEL * pData;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  Pixels = *p;
+  CurrentPixel = Diff;
+  x += Diff;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+  case 0:
+    if (pTrans) {
+      do {
+        Shift = (3 - CurrentPixel) << 1;
+        Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+        PixelIndex = *(pTrans + Index);
+        *pData = (PIXEL)PixelIndex;
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 4) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    } else {
+      do {
+        Shift = (3 - CurrentPixel) << 1;
+        Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+        *pData = (PIXEL)Index;
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 4) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    }
+    break;
+  case LCD_DRAWMODE_TRANS:
+    if (pTrans) {
+      do {
+        Shift = (3 - CurrentPixel) << 1;
+        Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+        if (Index) {
+          PixelIndex = *(pTrans + Index);
+          *pData = (PIXEL)PixelIndex;
+        }
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 4) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    } else {
+      do {
+        Shift = (3 - CurrentPixel) << 1;
+        Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+        if (Index) {
+          *pData = (PIXEL)Index;
+        }
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 4) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    }
+    break;
+  }
+}
+
+/*********************************************************************
+*
+*       Draw Bitmap 4 BPP
+*/
+static void _DrawBitLine4BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+  LCD_PIXELINDEX Pixels, PixelIndex;
+  int CurrentPixel, Shift, Index;
+  PIXEL * pData;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  Pixels = *p;
+  CurrentPixel = Diff;
+  x += Diff;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+  case 0:
+    if (pTrans) {
+      do {
+        Shift = (1 - CurrentPixel) << 2;
+        Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+        PixelIndex = *(pTrans + Index);
+        *pData = (PIXEL)PixelIndex;
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 2) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    } else {
+      do {
+        Shift = (1 - CurrentPixel) << 2;
+        Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+        *pData = (PIXEL)Index;
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 2) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    }
+    break;
+  case LCD_DRAWMODE_TRANS:
+    if (pTrans) {
+      do {
+        Shift = (1 - CurrentPixel) << 2;
+        Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+        if (Index) {
+          PixelIndex = *(pTrans + Index);
+          *pData = (PIXEL)PixelIndex;
+        }
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 2) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    } else {
+      do {
+        Shift = (1 - CurrentPixel) << 2;
+        Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+        if (Index) {
+          *pData = (PIXEL)Index;
+        }
+        pData += pContext->PixelOffset;
+        if (++CurrentPixel == 2) {
+          CurrentPixel = 0;
+          Pixels = *(++p);
+        }
+      } while (--xsize);
+    }
+    break;
+  }
+}
+
+/*********************************************************************
+*
+*       Draw Bitmap 8 BPP
+*/
+static void _DrawBitLine8BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int xsize, const LCD_PIXELINDEX * pTrans) {
+  LCD_PIXELINDEX Pixel;
+  PIXEL * pData;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+  case 0:
+    if (pTrans) {
+      do {
+        Pixel = *p++;
+        *pData = (PIXEL)*(pTrans + Pixel);
+        pData += pContext->PixelOffset;
+      } while (--xsize);
+    } else {
+      do {
+        *pData = (PIXEL)*p++;
+        pData += pContext->PixelOffset;
+      } while (--xsize);
+    }
+    break;
+  case LCD_DRAWMODE_TRANS:
+    if (pTrans) {
+      do {
+        Pixel = *p++;
+        if (Pixel) {
+          *pData = (PIXEL)*(pTrans + Pixel);
+        }
+        pData += pContext->PixelOffset;
+      } while (--xsize);
+    } else {
+      do {
+        Pixel = *p++;
+        if (Pixel) {
+          *pData = (PIXEL)Pixel;
+        }
+        pData += pContext->PixelOffset;
+      } while (--xsize);
+    }
+    break;
+  }
+}
+
+/*********************************************************************
+*
+*       Draw Bitmap 16 BPP
+*/
+static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const * p, int xsize) {
+  PIXEL * pData;
+  int x_phys, y_phys, PixelOffset;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  PixelOffset = pContext->PixelOffset;
+  do {
+    *pData = (PIXEL)*p++;
+    pData += PixelOffset;
+  } while (--xsize);
+}
+
+/*********************************************************************
+*
+*       Draw Bitmap 32 BPP
+*/
+static void _DrawBitLine32BPP(GUI_DEVICE * pDevice, int x, int y, U32 const * p, int xsize) {
+  PIXEL * pData;
+  int x_phys, y_phys, PixelOffset;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  PixelOffset = pContext->PixelOffset;
+  do {
+    *pData = (PIXEL)*p++;
+    pData += PixelOffset;
+  } while (--xsize);
+}
+
+/*********************************************************************
+*
+*       Static code: API functions for drawing operations, no cache
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _DrawBitmap_CX
+*/
+static void _DrawBitmap_CX(GUI_DEVICE * pDevice, int x0, int y0,
+                       int xSize, int ySize,
+                       int BitsPerPixel,
+                       int BytesPerLine,
+                       const U8 * pData, int Diff,
+                       const LCD_PIXELINDEX * pTrans) {
+  int x0_phys, y0_phys, x1_phys, y1_phys;
+  int i;
+  PIXEL * pDataBM;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  switch (BitsPerPixel) {
+  case 1:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine1BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+      pData += BytesPerLine;
+    }
+    break;
+  case 2:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine2BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+      pData += BytesPerLine;
+    }
+    break;
+  case 4:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine4BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+      pData += BytesPerLine;
+    }
+    break;
+  case 8:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine8BPP(pDevice, x0, i + y0, pData, xSize, pTrans);
+      pData += BytesPerLine;
+    }
+    break;
+  case 16:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine16BPP(pDevice, x0, i + y0, (U16 *)pData, xSize);
+      pData += BytesPerLine;
+    }
+    break;
+  case 32:
+    for (i = 0; i < ySize; i++) {
+      _DrawBitLine32BPP(pDevice, x0, i + y0, (U32 *)pData, xSize);
+      pData += BytesPerLine;
+    }
+    break;
+  }
+
+  pContext->pfLog2Phys(pContext, x0 + Diff,             y0,             &x0_phys, &y0_phys);
+  pContext->pfLog2Phys(pContext, x0 + Diff + xSize - 1, y0 + ySize - 1, &x1_phys, &y1_phys);
+  _Sort(&x0_phys, &x1_phys);
+  _Sort(&y0_phys, &y1_phys);
+  pDataBM = XY2PTR(x0_phys, y0_phys);
+  pDevice = pDevice->pNext;
+  pDevice->pDeviceAPI->pfDrawBitmap(pDevice,
+                                    x0_phys, y0_phys,
+                                    x1_phys - x0_phys + 1,
+                                    y1_phys - y0_phys + 1,
+                                    pContext->pDrawingAPI->BytesPerPixel << 3,
+                                    pContext->pDrawingAPI->BytesPerPixel * pContext->vxSize,
+                                    (U8 *)pDataBM, 0, NULL);
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_CX
+*/
+static LCD_PIXELINDEX _GetPixelIndex_CX(GUI_DEVICE * pDevice, int x, int y) {
+  PIXEL * pData;
+  PIXEL Pixel;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  Pixel = *pData;
+  return Pixel;
+}
+
+/*********************************************************************
+*
+*       _SetPixelIndex_CX
+*/
+static void _SetPixelIndex_CX(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) {
+  PIXEL * pData;
+  int x_phys, y_phys;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+  pData = XY2PTR(x_phys, y_phys);
+  *pData = (PIXEL)PixelIndex;
+  pDevice = pDevice->pNext;
+  pDevice->pDeviceAPI->pfSetPixelIndex(pDevice, x_phys, y_phys, PixelIndex);
+}
+
+/*********************************************************************
+*
+*       _XorPixel_CX
+*/
+static void _XorPixel_CX(GUI_DEVICE * pDevice, int x, int y) {
+  PIXEL Pixel, IndexMask;
+
+  IndexMask = (PIXEL)pDevice->pColorConvAPI->pfGetIndexMask();
+  Pixel = (PIXEL)pDevice->pDeviceAPI->pfGetPixelIndex(pDevice, x, y);
+  Pixel ^= IndexMask;
+  pDevice->pDeviceAPI->pfSetPixelIndex(pDevice, x, y, Pixel);
+}
+
+/*********************************************************************
+*
+*       _DrawHLine_CX
+*/
+static void _DrawHLine_CX(GUI_DEVICE * pDevice, int x0, int y, int x1) {
+  pDevice->pDeviceAPI->pfFillRect(pDevice, x0, y, x1, y);
+}
+
+/*********************************************************************
+*
+*       _DrawVLine_CX
+*/
+static void _DrawVLine_CX(GUI_DEVICE * pDevice, int x, int y0, int y1) {
+  pDevice->pDeviceAPI->pfFillRect(pDevice, x, y0, x, y1);
+}
+
+/*********************************************************************
+*
+*       _FillRect_CX
+*/
+static void _FillRect_CX(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+  PIXEL * pData;
+  PIXEL * pLine;
+  PIXEL * pPixel;
+  PIXEL Pixel, IndexMask;
+  int x0_phys, y0_phys, x1_phys, y1_phys;
+  int NumPixels, NumLines;
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pContext->pfLog2Phys(pContext, x0, y0, &x0_phys, &y0_phys);
+  pContext->pfLog2Phys(pContext, x1, y1, &x1_phys, &y1_phys);
+  _Sort(&x0_phys, &x1_phys);
+  _Sort(&y0_phys, &y1_phys);
+  pData = pLine = XY2PTR(x0_phys, y0_phys);
+  NumLines = y1_phys - y0_phys + 1;
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    IndexMask = (PIXEL)pDevice->pColorConvAPI->pfGetIndexMask();
+    do {
+      pPixel    = pLine;
+      NumPixels = x1_phys - x0_phys + 1;
+      do {
+        *pPixel++ ^= IndexMask;
+      } while (--NumPixels);
+      pLine += pContext->vxSize;
+    } while (--NumLines);
+  } else {
+    Pixel = (PIXEL)LCD__GetColorIndex();
+    if (sizeof(Pixel) == 1) {
+      NumPixels = x1_phys - x0_phys + 1;
+      do {
+        GUI__MEMSET((U8 *)pLine, (U8)Pixel, NumPixels);
+        pLine += pContext->vxSize;
+      } while (--NumLines);
+    } else {
+      do {
+        pPixel    = pLine;
+        NumPixels = x1_phys - x0_phys + 1;
+        do {
+          *pPixel++ = Pixel;
+        } while (--NumPixels);
+        pLine += pContext->vxSize;
+      } while (--NumLines);
+    }
+  }
+  pDevice = pDevice->pNext;
+  pDevice->pDeviceAPI->pfDrawBitmap(pDevice,
+                                    x0_phys, y0_phys,
+                                    x1_phys - x0_phys + 1,
+                                    y1_phys - y0_phys + 1,
+                                    pContext->pDrawingAPI->BytesPerPixel << 3,
+                                    pContext->pDrawingAPI->BytesPerPixel * pContext->vxSize,
+                                    (U8 *)pData, 0, NULL);
+}
+
+/*********************************************************************
+*
+*       Static data: Drawing API(s)
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       GUI_OrientationAPI_CX
+*/
+const GUI_ORIENTATION_API API_NAME = {
+  _DrawBitmap_CX,
+  _DrawHLine_CX,
+  _DrawVLine_CX,
+  _FillRect_CX,
+  _GetPixelIndex_CX,
+  _SetPixelIndex_CX,
+  _XorPixel_CX,
+  BYTES_PER_PIXEL
+};
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Type.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,684 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_Type.h
+Purpose     : Include file define the types used for GUI
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+            be able do update to a later GUI version !
+
+*/
+
+#ifndef  GUITYPE_H_INCLUDED
+#define  GUITYPE_H_INCLUDED
+
+#include "LCD.h"
+#include "GUIConf.h"
+
+/*********************************************************************
+*
+*       Common types
+*/
+typedef const char *  GUI_ConstString;
+
+typedef LCD_COLOR       GUI_COLOR;
+typedef LCD_LOGPALETTE  GUI_LOGPALETTE;
+typedef LCD_DRAWMODE    GUI_DRAWMODE;
+typedef LCD_RECT        GUI_RECT;
+
+typedef struct {
+  void      (* pfDraw)  (int x0,
+                         int y0,
+                         int xsize, 
+                         int ysize, 
+                         const U8 * pPixel, 
+                         const LCD_LOGPALETTE * pLogPal, 
+                         int xMag, 
+                         int yMag);
+  GUI_COLOR (* pfIndex2Color)(LCD_PIXELINDEX Index);
+  void      (* pfDrawHW)(int x0,
+                         int y0,
+                         int xsize, 
+                         int ysize, 
+                         const U8 * pPixel, 
+                         const LCD_LOGPALETTE * pLogPal, 
+                         int xMag, 
+                         int yMag);
+  const LCD_API_COLOR_CONV * pColorConvAPI;
+} GUI_BITMAP_METHODS;
+
+typedef struct {
+  U16P XSize;
+  U16P YSize;
+  U16P BytesPerLine;
+  U16P BitsPerPixel;
+  const U8 * pData;
+  const GUI_LOGPALETTE * pPal;
+  const GUI_BITMAP_METHODS * pMethods;
+} GUI_BITMAP;
+
+/* This structure may not be changed because the data that it
+   expects is read in binary form (via any kind of interface,
+   at runtime).
+   This structure should therefor not be changed.
+*/
+typedef struct {
+  U16 ID;
+  U16 Format;
+  U16 XSize;
+  U16 YSize;
+  U16 BytesPerLine;
+  U16 BitsPerPixel;
+  U16 NumColors;
+  U16 HasTrans;
+} GUI_BITMAP_STREAM;
+
+typedef struct {
+  int    Cmd;
+  U32    v;
+  void * p;
+} GUI_BITMAPSTREAM_PARAM;
+
+typedef struct {
+  int XSize;
+  int YSize;
+  int BitsPerPixel;
+  int NumColors;
+  int HasTrans;
+} GUI_BITMAPSTREAM_INFO;
+
+typedef void * (* GUI_BITMAPSTREAM_CALLBACK)(GUI_BITMAPSTREAM_PARAM * pParam);
+
+typedef struct {
+  int x,y;
+  U8  Pressed;
+  U8  Layer;
+} GUI_PID_STATE;
+
+typedef struct {
+  int Key;
+  int Pressed;
+} GUI_KEY_STATE;
+
+typedef struct {
+  int xPos;
+  int yPos;
+  int xSize;
+  int ySize;
+  int Delay;
+} GUI_GIF_IMAGE_INFO;
+
+typedef struct {
+  int xSize;
+  int ySize;
+  int NumImages;
+} GUI_GIF_INFO;
+
+#define GUI_REGISTER_INIT GUI_REGISTER_HOOK
+#define GUI_REGISTER_EXIT GUI_REGISTER_HOOK
+
+typedef struct GUI_REGISTER_HOOK GUI_REGISTER_HOOK;
+
+struct GUI_REGISTER_HOOK {
+  void (* pfVoid)(void);
+  GUI_REGISTER_HOOK * pNext;
+};
+
+typedef struct {
+  void (* cbBegin)(void);
+  void (* cbEnd)  (void);
+} GUI_MULTIBUF_API;
+
+typedef struct {
+  void (* cbBeginEx)(int LayerIndex);
+  void (* cbEndEx)  (int LayerIndex);
+} GUI_MULTIBUF_API_EX;
+
+/*********************************************************************
+*
+*       FONT structures
+*/
+
+/* Translation list. Translates a character code into up to 2
+   indices of images to display on top of each other;
+   'á' -> index('a'), index('´') */
+typedef struct {
+  I16P c0;
+  I16P c1;
+} GUI_FONT_TRANSLIST;
+
+typedef struct {
+  U16P FirstChar;
+  U16P LastChar;
+  const GUI_FONT_TRANSLIST * pList;
+} GUI_FONT_TRANSINFO;
+
+typedef struct {
+  U8 XSize;
+  U8 XDist;
+  U8 BytesPerLine;
+  const unsigned char * pData;
+} GUI_CHARINFO;
+
+typedef struct {
+  U8 XSize;
+  U8 YSize;
+  I8 XPos;
+  I8 YPos;
+  U8 XDist;
+  const unsigned char * pData;
+} GUI_CHARINFO_EXT;
+
+typedef struct GUI_FONT_PROP {
+  U16P First;                                  /* First character               */
+  U16P Last;                                   /* Last character                */
+  const GUI_CHARINFO         * paCharInfo;     /* Address of first character    */
+  const struct GUI_FONT_PROP * pNext;          /* Pointer to next               */
+} GUI_FONT_PROP;
+
+typedef struct GUI_FONT_PROP_EXT {
+  U16P First;                                  /* First character               */
+  U16P Last;                                   /* Last character                */
+  const GUI_CHARINFO_EXT         * paCharInfo; /* Address of first character    */
+  const struct GUI_FONT_PROP_EXT * pNext;      /* Pointer to next               */
+} GUI_FONT_PROP_EXT;
+
+typedef struct {
+  const unsigned char      * pData;
+  const U8                 * pTransData;
+  const GUI_FONT_TRANSINFO * pTrans;
+  U16P                       FirstChar;
+  U16P                       LastChar;
+  U8                         XSize;
+  U8                         XDist;
+  U8                         BytesPerLine;
+} GUI_FONT_MONO;
+
+/*********************************************************************
+*
+*       FONT structures
+*
+* This structure is used when retrieving information about a font.
+* It is designed for future expansion without incompatibilities.
+*/
+typedef struct {
+  U16 Flags;
+  U8 Baseline;
+  U8 LHeight;     /* height of a small lower case character (a,x) */
+  U8 CHeight;     /* height of a small upper case character (A,X) */
+} GUI_FONTINFO;
+
+#define GUI_FONTINFO_FLAG_PROP    (1 << 0)    /* Is proportional */
+#define GUI_FONTINFO_FLAG_MONO    (1 << 1)    /* Is monospaced */
+#define GUI_FONTINFO_FLAG_AA      (1 << 2)    /* Is an antialiased font */
+#define GUI_FONTINFO_FLAG_AA2     (1 << 3)    /* Is an antialiased font, 2bpp */
+#define GUI_FONTINFO_FLAG_AA4     (1 << 4)    /* Is an antialiased font, 4bpp */
+#define GUI_FONTINFO_FLAG_PROPFRM (1 << 5)    /* Is proportional, framed */
+
+/*********************************************************************
+*
+*       UNICODE Encoding
+*/
+typedef U16  tGUI_GetCharCode   (const char * s);
+typedef int  tGUI_GetCharSize   (const char * s);
+typedef int  tGUI_CalcSizeOfChar(U16 Char);
+typedef int  tGUI_Encode        (char * s, U16 Char);
+
+typedef struct {
+  tGUI_GetCharCode    * pfGetCharCode;
+  tGUI_GetCharSize    * pfGetCharSize;
+  tGUI_CalcSizeOfChar * pfCalcSizeOfChar;
+  tGUI_Encode         * pfEncode;
+} GUI_UC_ENC_APILIST;
+
+/*********************************************************************
+*
+*       FONT Encoding
+*/
+typedef int  tGUI_GetLineDistX(const char * s, int Len);
+typedef int  tGUI_GetLineLen  (const char * s, int MaxLen);
+typedef void tGL_DispLine     (const char * s, int Len);
+
+typedef struct {
+  tGUI_GetLineDistX * pfGetLineDistX;
+  tGUI_GetLineLen   * pfGetLineLen;
+  tGL_DispLine      * pfDispLine;
+} tGUI_ENC_APIList;
+
+extern const tGUI_ENC_APIList GUI_ENC_APIList_SJIS;
+extern const tGUI_ENC_APIList GUI_ENC_APIList_EXT;
+
+/*********************************************************************
+*
+*       FONT methods
+*/
+typedef struct GUI_FONT GUI_FONT;
+
+typedef void GUI_DISPCHAR    (U16 c);
+typedef int  GUI_GETCHARDISTX(U16P c, int * pSizeX);
+typedef void GUI_GETFONTINFO (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+typedef char GUI_ISINFONT    (const GUI_FONT * pFont, U16 c);
+typedef int  GUI_GETCHARINFO (U16P c, GUI_CHARINFO_EXT * pInfo);
+
+#define DECLARE_FONT(Type)                                     \
+void GUI##Type##_DispChar    (U16P c);                         \
+int  GUI##Type##_GetCharDistX(U16P c, int * pSizeX);                         \
+void GUI##Type##_GetFontInfo (const GUI_FONT * pFont, GUI_FONTINFO * pfi); \
+char GUI##Type##_IsInFont    (const GUI_FONT * pFont, U16 c); \
+int  GUI##Type##_GetCharInfo (U16P c, GUI_CHARINFO_EXT * pInfo)
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+DECLARE_FONT(MONO);
+DECLARE_FONT(PROP);
+DECLARE_FONT(PROP_EXT);
+DECLARE_FONT(PROP_FRM);
+DECLARE_FONT(PROPAA);
+DECLARE_FONT(PROP_AA2);
+DECLARE_FONT(PROP_AA2_EXT);
+DECLARE_FONT(PROP_AA4);
+DECLARE_FONT(PROP_AA4_EXT);
+
+/* MONO: Monospaced fonts */
+#define GUI_FONTTYPE_MONO       \
+  GUIMONO_DispChar,             \
+  GUIMONO_GetCharDistX,         \
+  GUIMONO_GetFontInfo,          \
+  GUIMONO_IsInFont,             \
+  (GUI_GETCHARINFO *)0,         \
+  (tGUI_ENC_APIList*)0
+
+/* PROP: Proportional fonts */
+#define GUI_FONTTYPE_PROP       \
+  GUIPROP_DispChar,             \
+  GUIPROP_GetCharDistX,         \
+  GUIPROP_GetFontInfo,          \
+  GUIPROP_IsInFont,             \
+  (GUI_GETCHARINFO *)0,         \
+  (tGUI_ENC_APIList*)0
+
+/* PROP_EXT: Extended proportional fonts */
+#define GUI_FONTTYPE_PROP_EXT       \
+  GUIPROP_EXT_DispChar,             \
+  GUIPROP_EXT_GetCharDistX,         \
+  GUIPROP_EXT_GetFontInfo,          \
+  GUIPROP_EXT_IsInFont,             \
+  GUIPROP_EXT_GetCharInfo,          \
+  &GUI_ENC_APIList_EXT
+
+/* PROP_FRM: Extended proportional fonts, framed */
+#define GUI_FONTTYPE_PROP_FRM       \
+  GUIPROP_FRM_DispChar,             \
+  GUIPROP_FRM_GetCharDistX,         \
+  GUIPROP_FRM_GetFontInfo,          \
+  GUIPROP_FRM_IsInFont,             \
+  (GUI_GETCHARINFO *)0,             \
+  (tGUI_ENC_APIList*)0
+
+/* PROP: Proportional fonts SJIS */
+#define GUI_FONTTYPE_PROP_SJIS  \
+  GUIPROP_DispChar,             \
+  GUIPROP_GetCharDistX,         \
+  GUIPROP_GetFontInfo,          \
+  GUIPROP_IsInFont,             \
+  (GUI_GETCHARINFO *)0,         \
+  &GUI_ENC_APIList_SJIS
+
+/* PROPAA: Proportional, antialiased fonts */
+#define GUI_FONTTYPE_PROPAA       \
+  GUIPROPAA_DispChar,             \
+  GUIPROPAA_GetCharDistX,         \
+  GUIPROPAA_GetFontInfo,          \
+  GUIPROPAA_IsInFont,             \
+  (GUI_GETCHARINFO *)0,           \
+  (tGUI_ENC_APIList*)0
+
+/* PROP_AA2: Proportional, antialiased fonts, 2bpp */
+#define GUI_FONTTYPE_PROP_AA2       \
+  GUIPROP_AA2_DispChar,             \
+  GUIPROP_AA2_GetCharDistX,         \
+  GUIPROP_AA2_GetFontInfo,          \
+  GUIPROP_AA2_IsInFont,             \
+  (GUI_GETCHARINFO *)0,             \
+  (tGUI_ENC_APIList*)0
+
+/* PROP_AA2_EXT: Proportional, antialiased fonts, 2bpp, extended font information */
+#define GUI_FONTTYPE_PROP_AA2_EXT   \
+  GUIPROP_AA2_EXT_DispChar,         \
+  GUIPROP_EXT_GetCharDistX,         \
+  GUIPROP_EXT_GetFontInfo,          \
+  GUIPROP_EXT_IsInFont,             \
+  GUIPROP_EXT_GetCharInfo,          \
+  &GUI_ENC_APIList_EXT
+
+/* PROP_AA2: Proportional, antialiased fonts, 2bpp, SJIS encoding */
+#define GUI_FONTTYPE_PROP_AA2_SJIS  \
+  GUIPROP_AA2_DispChar,             \
+  GUIPROP_AA2_GetCharDistX,         \
+  GUIPROP_AA2_GetFontInfo,          \
+  GUIPROP_AA2_IsInFont,             \
+  (GUI_GETCHARINFO *)0,             \
+  &GUI_ENC_APIList_SJIS
+
+/* PROP_AA4: Proportional, antialiased fonts, 4bpp */
+#define GUI_FONTTYPE_PROP_AA4       \
+  GUIPROP_AA4_DispChar,             \
+  GUIPROP_AA4_GetCharDistX,         \
+  GUIPROP_AA4_GetFontInfo,          \
+  GUIPROP_AA4_IsInFont,             \
+  (GUI_GETCHARINFO *)0,             \
+  (tGUI_ENC_APIList*)0
+
+/* PROP_AA4_EXT: Proportional, antialiased fonts, 4bpp, extended font information */
+#define GUI_FONTTYPE_PROP_AA4_EXT   \
+  GUIPROP_AA4_EXT_DispChar,         \
+  GUIPROP_EXT_GetCharDistX,         \
+  GUIPROP_EXT_GetFontInfo,          \
+  GUIPROP_EXT_IsInFont,             \
+  GUIPROP_EXT_GetCharInfo,          \
+  &GUI_ENC_APIList_EXT
+
+/* PROP_AA4: Proportional, antialiased fonts, 4bpp, SJIS encoding */
+#define GUI_FONTTYPE_PROP_AA4_SJIS  \
+  GUIPROP_AA4_DispChar,             \
+  GUIPROP_AA4_GetCharDistX,         \
+  GUIPROP_AA4_GetFontInfo,          \
+  GUIPROP_AA4_IsInFont,             \
+  (GUI_GETCHARINFO *)0,             \
+  &GUI_ENC_APIList_SJIS
+
+#if defined(__cplusplus)
+  }
+#endif
+
+struct GUI_FONT {
+  GUI_DISPCHAR     * pfDispChar; 
+  GUI_GETCHARDISTX * pfGetCharDistX; 
+  GUI_GETFONTINFO  * pfGetFontInfo; 
+  GUI_ISINFONT     * pfIsInFont;
+  GUI_GETCHARINFO  * pfGetCharInfo;
+  const tGUI_ENC_APIList* pafEncode;
+  U8 YSize;
+  U8 YDist;
+  U8 XMag;
+  U8 YMag;
+  union {
+    const void              * pFontData;
+    const GUI_FONT_MONO     * pMono;
+    const GUI_FONT_PROP     * pProp;
+    const GUI_FONT_PROP_EXT * pPropExt;
+  } p;
+  U8 Baseline;
+  U8 LHeight;     /* Height of a small lower case character (a,x) */
+  U8 CHeight;     /* Height of a small upper case character (A,X) */
+};
+
+/*********************************************************************
+*
+*       Bitmap serialization (BMP)
+*/
+typedef void GUI_CALLBACK_VOID_U8_P(U8 Data, void * p);
+
+/*********************************************************************
+*
+*       System independent font structures (SIF)
+*/
+typedef struct {
+  U32 ID;           /* Font file ID */
+  U16 YSize;        /* Height of font */
+  U16 YDist;        /* Space of font Y */
+  U16 Baseline;     /* Index of baseline */
+  U16 LHeight;      /* Height of a small lower case character (a) */
+  U16 CHeight;      /* Height of a upper case character (A) */
+  U16 NumAreas;     /* Number of character areas */
+} GUI_SI_FONT;
+
+typedef struct {
+  U16 First;        /* Index of first character */
+  U16 Last;         /* Index of last character */
+} GUI_SIF_CHAR_AREA;
+
+typedef struct {
+  U16 XSize;        /* Size of bitmap data in X */
+  U16 XDist;        /* Number of pixels for increment cursor in X */
+  U16 BytesPerLine; /* Number of bytes per line */
+  U16 Dummy;
+  U32 OffData;      /* Offset of pixel data */
+} GUI_SIF_CHARINFO;
+
+typedef struct {
+  U16 XSize;        /* Size of bitmap data in X */
+  U16 YSize;        /* Size of bitmap data in X */
+  I16 XOff;         /* Display offset of bitmap data in X */
+  I16 YOff;         /* Display offset of bitmap data in Y */
+  U16 XDist;        /* Number of pixels for increment cursor in X */
+  U16 Dummy;
+  U32 OffData;      /* Offset of pixel data */
+} GUI_SIF_CHARINFO_EXT;
+
+typedef struct tGUI_SIF_APIList_struct {
+  GUI_DISPCHAR          * pfDispChar;
+  GUI_GETCHARDISTX      * pfGetCharDistX;
+  GUI_GETFONTINFO       * pfGetFontInfo;
+  GUI_ISINFONT          * pfIsInFont;
+  GUI_GETCHARINFO       * pfGetCharInfo;
+  const tGUI_ENC_APIList* pafEncode;
+} tGUI_SIF_APIList;
+
+#define GUI_SIF_TYPE              tGUI_SIF_APIList
+#define GUI_SIF_TYPE_PROP         &GUI_SIF_APIList_Prop
+#define GUI_SIF_TYPE_PROP_EXT     &GUI_SIF_APIList_Prop_Ext
+#define GUI_SIF_TYPE_PROP_FRM     &GUI_SIF_APIList_Prop_Frm
+#define GUI_SIF_TYPE_PROP_AA2     &GUI_SIF_APIList_Prop_AA2
+#define GUI_SIF_TYPE_PROP_AA4     &GUI_SIF_APIList_Prop_AA4
+#define GUI_SIF_TYPE_PROP_AA2_EXT &GUI_SIF_APIList_Prop_AA2_EXT
+#define GUI_SIF_TYPE_PROP_AA4_EXT &GUI_SIF_APIList_Prop_AA4_EXT
+
+/*********************************************************************
+*
+*       External binary font structures (XBF)
+*/
+typedef int GUI_XBF_GET_DATA_FUNC(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer);
+
+typedef struct {
+  U16 First;                         /* First character of font */
+  U16 Last;                          /* Last character of font */
+  void * pVoid;                      /* Void pointer passed to GetData-function */
+  GUI_XBF_GET_DATA_FUNC * pfGetData; /* Pointer to callback function */
+} GUI_XBF_DATA;
+
+typedef struct tGUI_XBF_APIList_struct {
+  GUI_DISPCHAR          * pfDispChar;
+  GUI_GETCHARDISTX      * pfGetCharDistX;
+  GUI_GETFONTINFO       * pfGetFontInfo;
+  GUI_ISINFONT          * pfIsInFont;
+  GUI_GETCHARINFO       * pfGetCharInfo;
+  const tGUI_ENC_APIList* pafEncode;
+} tGUI_XBF_APIList;
+
+#define GUI_XBF_TYPE              tGUI_XBF_APIList
+#define GUI_XBF_TYPE_PROP         &GUI_XBF_APIList_Prop
+#define GUI_XBF_TYPE_PROP_EXT     &GUI_XBF_APIList_Prop_Ext
+#define GUI_XBF_TYPE_PROP_FRM     &GUI_XBF_APIList_Prop_Frm
+#define GUI_XBF_TYPE_PROP_AA2_EXT &GUI_XBF_APIList_Prop_AA2_Ext
+#define GUI_XBF_TYPE_PROP_AA4_EXT &GUI_XBF_APIList_Prop_AA4_Ext
+
+/*********************************************************************
+*
+*       TrueType support (TTF)
+*/
+typedef struct {
+  const void * pData;      /* Pointer to TTF font file in addressable memory area */
+  U32 NumBytes;            /* Size of file in bytes */
+} GUI_TTF_DATA;
+
+typedef struct {
+  GUI_TTF_DATA * pTTF;     /* Pointer to GUI_TTF_DATA structure which contains location and size of font file */
+  U32 aImageTypeBuffer[4]; /* Buffer for image type structure */
+  int PixelHeight;         /* Pixel height of new font. It means the height of the surrounding rectangle
+                            * between the glyphs 'g' anf 'f'. Please notice that it is not the distance
+                            * between two lines of text. With other words the value returned byGUI_GetFontSizeY()
+                            * is not identically with this value. */
+  int FaceIndex;           /* Some font files can contain more than one font face. In case of more than one face
+                            * this index specifies the zero based face index to be used to create the font. 
+                            * Usually 0. */
+} GUI_TTF_CS;
+
+/*********************************************************************
+*
+*       Task synchronization
+*/
+typedef void (* GUI_SIGNAL_EVENT_FUNC)    (void);
+typedef void (* GUI_WAIT_EVENT_FUNC)      (void);
+typedef void (* GUI_WAIT_EVENT_TIMED_FUNC)(int Period);
+
+/*********************************************************************
+*
+*       Memory management
+*/
+#ifndef     GUI_HMEM
+  #define     GUI_HMEM        I32
+#endif
+#define     GUI_HMEM_NULL     (0)
+typedef     GUI_HMEM      GUI_HWIN;
+typedef     GUI_HMEM      GUI_HSPRITE;
+
+/*********************************************************************
+*
+*       Multi touch input
+*/
+#ifndef   GUI_MTOUCH_MAX_NUM_POINTS
+  #define GUI_MTOUCH_MAX_NUM_POINTS 10
+#endif
+
+typedef struct {
+  I32 x;
+  I32 y;
+  U32 Id;
+  U16 Flags;
+} GUI_MTOUCH_INPUT;
+
+typedef struct {
+  int            LayerIndex;
+  unsigned       NumPoints;
+  GUI_TIMER_TIME TimeStamp;
+  PTR_ADDR       hInput;
+} GUI_MTOUCH_EVENT;
+
+//
+// Used for emWinSPY with reduced data types and array sizes
+//
+typedef struct {
+  U8  Layer;
+  U8  NumPoints;
+  I16 ax[5];
+  I16 ay[5];
+  U16 aId[5];
+  U8  aFlags[5];
+} GUI_MTOUCH_STATE;
+
+typedef void (* T_GUI_MTOUCH_STOREEVENT)(GUI_MTOUCH_EVENT *, GUI_MTOUCH_INPUT * pInput);
+
+/*********************************************************************
+*
+*       Hardware routines
+*/
+typedef struct {
+  //
+  // 8 Bit access
+  //
+  void (* pfWrite8_A0)  (U8 Data);
+  void (* pfWrite8_A1)  (U8 Data);
+  void (* pfWriteM8_A0) (U8 * pData, int NumItems);
+  void (* pfWriteM8_A1) (U8 * pData, int NumItems);
+  U8   (* pfRead8_A0)   (void);
+  U8   (* pfRead8_A1)   (void);
+  void (* pfReadM8_A0)  (U8 * pData, int NumItems);
+  void (* pfReadM8_A1)  (U8 * pData, int NumItems);
+  //
+  // 16 Bit access
+  //
+  void (* pfWrite16_A0) (U16 Data);
+  void (* pfWrite16_A1) (U16 Data);
+  void (* pfWriteM16_A0)(U16 * pData, int NumItems);
+  void (* pfWriteM16_A1)(U16 * pData, int NumItems);
+  U16  (* pfRead16_A0)  (void);
+  U16  (* pfRead16_A1)  (void);
+  void (* pfReadM16_A0) (U16 * pData, int NumItems);
+  void (* pfReadM16_A1) (U16 * pData, int NumItems);
+  //
+  // 32 Bit access
+  //
+  void (* pfWrite32_A0) (U32 Data);
+  void (* pfWrite32_A1) (U32 Data);
+  void (* pfWriteM32_A0)(U32 * pData, int NumItems);
+  void (* pfWriteM32_A1)(U32 * pData, int NumItems);
+  U32  (* pfRead32_A0)  (void);
+  U32  (* pfRead32_A1)  (void);
+  void (* pfReadM32_A0) (U32 * pData, int NumItems);
+  void (* pfReadM32_A1) (U32 * pData, int NumItems);
+  //
+  // SPI access
+  //
+  void (* pfSetCS)      (U8 NotActive);
+  //
+  // Common routines
+  //
+  void (* pfFlushBuffer)(void);
+} GUI_PORT_API;
+
+/*********************************************************************
+*
+*       Send/Receive function for VNC and/or emWinSPY
+*/
+typedef int    (* GUI_tSend)  (const U8 * pData, int len, void * p);
+typedef int    (* GUI_tRecv)  (      U8 * pData, int len, void * p);
+
+/*********************************************************************
+*
+*       Memory allocation replacement for emWinSPY
+*/
+typedef void * (* GUI_tMalloc)(unsigned int);
+typedef void   (* GUI_tFree)  (void *);
+
+#endif  /* GUITYPE_H_INCLUDED */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_VNC.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,210 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_VNC.h
+Purpose     : Publics for the VNC server
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+            be able do update to a later GUI version !
+
+*/
+
+#ifndef  GUI_VNC_H
+#define  GUI_VNC_H
+
+#include "GUI_Private.h"
+#include "GUI_Type.h"
+#include "IP_FS.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define GUI_VNC_NO_ERROR            0
+#define GUI_VNC_ERROR_MISC          1
+#define GUI_VNC_ERROR_WRONGFORMAT   2
+
+#define GUI_DES_ENCRYPT 0
+#define GUI_DES_DECRYPT 1
+
+//
+// File transfer
+//
+#define GUI_VNC_SUPPORT_FILETRANSFER 0x10
+
+//
+// Extension message (used for file transfer)
+//
+#define RFB_EXTENSION 0xFCul
+
+//
+// File transfer protocol
+//
+#define RFBX_FILE_LIST_REQUEST      (0x000102ul | (RFB_EXTENSION << 24))
+#define RFBX_FILE_LIST_REPLY        (0x000103ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_START_REQUEST   (0x000106ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_START_REPLY     (0x000107ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_DATA_REQUEST    (0x000108ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_DATA_REPLY      (0x000109ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_END_REQUEST     (0x00010Aul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_END_REPLY       (0x00010Bul | (RFB_EXTENSION << 24))
+
+#define RFBX_DOWNLOAD_START_REQUEST (0x00010Cul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_START_REPLY   (0x00010Dul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_DATA_REQUEST  (0x00010Eul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_DATA_REPLY    (0x00010Ful | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_END_REPLY     (0x000110ul | (RFB_EXTENSION << 24))
+#define RFBX_MKDIR_REQUEST          (0x000111ul | (RFB_EXTENSION << 24))
+#define RFBX_MKDIR_REPLY            (0x000112ul | (RFB_EXTENSION << 24))
+#define RFBX_REMOVE_REQUEST         (0x000113ul | (RFB_EXTENSION << 24))
+#define RFBX_REMOVE_REPLY           (0x000114ul | (RFB_EXTENSION << 24))
+#define RFBX_RENAME_REQUEST         (0x000115ul | (RFB_EXTENSION << 24))
+#define RFBX_RENAME_REPLY           (0x000116ul | (RFB_EXTENSION << 24))
+
+  /*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct {
+  U8 * pBuffer;
+  int  BufferSize;
+  int  NumBytesInBuffer;
+} BUFFER_CB;
+
+typedef struct GUI_VNC_CONTEXT {
+  GUI_DEVICE * pDevice;
+  struct GUI_VNC_CONTEXT * pNext;
+  int LayerIndex;
+  int BytesPerPixel;
+  int BitsPerPixel;  // Note, that from within the VNC server the function LCD_GetBitsBerPixel() can not be used because the VNC server runs in a separate thread and the device chain can change during the function call
+  //
+  // Connection related data
+  //
+  GUI_tSend    pfSend;
+  GUI_tRecv    pfReceive;
+  void       * pConnectInfo;
+  U16          ServerIndex;
+  //
+  // Display related info
+  //
+  int x0Dirty, y0Dirty, x1Dirty, y1Dirty;
+  int xSize, ySize;
+  int xOrg, yOrg, xOrgNew, yOrgNew;
+  //
+  // Status
+  //
+  char ClientSupportsHextile;
+  char IsBigEndian;
+  char OrgLock;
+  char BkFlag;
+  //
+  // Pointer to buffer
+  //
+  U8 * pBuffer;
+  unsigned SizeOfBuffer;
+  int (* pfStoreU8)  (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U8 Data);
+  int (* pfStoreU16) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U16 Data);
+  int (* pfStoreU32) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U32 Data);
+  int (* pfStoreData)(struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, const U8 * pData, int NumBytes);
+  int (* pfFlush)    (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB);
+  int (* pfRead)     (struct GUI_VNC_CONTEXT * pContext, U8 *, int Len);
+} GUI_VNC_CONTEXT;
+
+typedef struct {
+  void (* pfGetChallenge)(U8 * pChallenge);
+  void (* pfGetResponse )(U8 * pResponse );
+} GUI_VNC_AUTHENTICATION;
+
+/*********************************************************************
+*
+*       Private Functions
+*
+**********************************************************************
+*/
+void GUI_VNC_SetDESKey(U8 * pKey, int Mode);
+void GUI_VNC_DoDES    (U8 * pInblock, U8 * pOutblock);
+
+/*********************************************************************
+*
+*       Public Functions
+*
+**********************************************************************
+*/
+void GUI_VNC_AttachToLayer      (GUI_VNC_CONTEXT * pContext, int LayerIndex);
+void GUI_VNC_EnableKeyboardInput(int OnOff);
+void GUI_VNC_EnableMouseInput   (int OnOff);
+void GUI_VNC_EnableFileTransfer (unsigned OnOff);
+int  GUI_VNC_GetNumConnections  (void);
+int  GUI_VNC_Process            (GUI_VNC_CONTEXT * pContext, GUI_tSend pfSend, GUI_tRecv pfReceive, void * pConnectInfo);
+void GUI_VNC_RingBell           (void);
+void GUI_VNC_SetAuthentication  (GUI_VNC_AUTHENTICATION * pAuthentication);
+void GUI_VNC_SetPassword        (U8 * sPassword);
+void GUI_VNC_SetProgName        (const char * sProgName);
+void GUI_VNC_SetSize            (unsigned xSize, unsigned ySize);
+void GUI_VNC_SetLockFrame       (unsigned OnOff);
+void GUI_VNC_SetRetryCount      (unsigned Cnt);
+void GUI_VNC_SetFS_API          (const IP_FS_API * pFS_API);
+
+//
+// Private function for setting file transfer handler
+//
+void GUI_VNC__SetRFBExtensionHandler(int (* pFunc)(U32, GUI_VNC_CONTEXT *, BUFFER_CB *));
+
+//
+// External routine to link the server to the system ... USER defined !
+//
+int  GUI_VNC_X_StartServer  (int LayerIndex, int ServerIndex);
+int  GUI_VNC_X_StartServerFT(int LayerIndex, int ServerIndex);
+void GUI_VNC_X_getpeername  (U32 * Addr);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif   /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Version.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,51 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI_Version.h
+Purpose     : Include file defining current GUI version
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef  GUI_VERSION_H
+#define  GUI_VERSION_H
+
+#define GUI_VERSION 548111
+
+#endif   /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI__BiDi2_Brackets_800.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,173 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI__BiDi2_Brackets_800.h
+Purpose     : Bracket pairs according to Unicode V8.0.0
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifdef GUI__BIDI2
+//  CodePoint
+//  |       Paired bracket
+//  |       |       Bracket type
+//  |       |       |
+//  V       V       V
+  { 0x0028, 0x0029, BPT_O },  // LEFT PARENTHESIS
+  { 0x0029, 0x0028, BPT_C },  // RIGHT PARENTHESIS
+  { 0x005B, 0x005D, BPT_O },  // LEFT SQUARE BRACKET
+  { 0x005D, 0x005B, BPT_C },  // RIGHT SQUARE BRACKET
+  { 0x007B, 0x007D, BPT_O },  // LEFT CURLY BRACKET
+  { 0x007D, 0x007B, BPT_C },  // RIGHT CURLY BRACKET
+  { 0x0F3A, 0x0F3B, BPT_O },  // TIBETAN MARK GUG RTAGS GYON
+  { 0x0F3B, 0x0F3A, BPT_C },  // TIBETAN MARK GUG RTAGS GYAS
+  { 0x0F3C, 0x0F3D, BPT_O },  // TIBETAN MARK ANG KHANG GYON
+  { 0x0F3D, 0x0F3C, BPT_C },  // TIBETAN MARK ANG KHANG GYAS
+  { 0x169B, 0x169C, BPT_O },  // OGHAM FEATHER MARK
+  { 0x169C, 0x169B, BPT_C },  // OGHAM REVERSED FEATHER MARK
+  { 0x2045, 0x2046, BPT_O },  // LEFT SQUARE BRACKET WITH QUILL
+  { 0x2046, 0x2045, BPT_C },  // RIGHT SQUARE BRACKET WITH QUILL
+  { 0x207D, 0x207E, BPT_O },  // SUPERSCRIPT LEFT PARENTHESIS
+  { 0x207E, 0x207D, BPT_C },  // SUPERSCRIPT RIGHT PARENTHESIS
+  { 0x208D, 0x208E, BPT_O },  // SUBSCRIPT LEFT PARENTHESIS
+  { 0x208E, 0x208D, BPT_C },  // SUBSCRIPT RIGHT PARENTHESIS
+  { 0x2308, 0x2309, BPT_O },  // LEFT CEILING
+  { 0x2309, 0x2308, BPT_C },  // RIGHT CEILING
+  { 0x230A, 0x230B, BPT_O },  // LEFT FLOOR
+  { 0x230B, 0x230A, BPT_C },  // RIGHT FLOOR
+  { 0x2329, 0x232A, BPT_O },  // LEFT-POINTING ANGLE BRACKET
+  { 0x232A, 0x2329, BPT_C },  // RIGHT-POINTING ANGLE BRACKET
+  { 0x2768, 0x2769, BPT_O },  // MEDIUM LEFT PARENTHESIS ORNAMENT
+  { 0x2769, 0x2768, BPT_C },  // MEDIUM RIGHT PARENTHESIS ORNAMENT
+  { 0x276A, 0x276B, BPT_O },  // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+  { 0x276B, 0x276A, BPT_C },  // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+  { 0x276C, 0x276D, BPT_O },  // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x276D, 0x276C, BPT_C },  // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x276E, 0x276F, BPT_O },  // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+  { 0x276F, 0x276E, BPT_C },  // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+  { 0x2770, 0x2771, BPT_O },  // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x2771, 0x2770, BPT_C },  // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x2772, 0x2773, BPT_O },  // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+  { 0x2773, 0x2772, BPT_C },  // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+  { 0x2774, 0x2775, BPT_O },  // MEDIUM LEFT CURLY BRACKET ORNAMENT
+  { 0x2775, 0x2774, BPT_C },  // MEDIUM RIGHT CURLY BRACKET ORNAMENT
+  { 0x27C5, 0x27C6, BPT_O },  // LEFT S-SHAPED BAG DELIMITER
+  { 0x27C6, 0x27C5, BPT_C },  // RIGHT S-SHAPED BAG DELIMITER
+  { 0x27E6, 0x27E7, BPT_O },  // MATHEMATICAL LEFT WHITE SQUARE BRACKET
+  { 0x27E7, 0x27E6, BPT_C },  // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+  { 0x27E8, 0x27E9, BPT_O },  // MATHEMATICAL LEFT ANGLE BRACKET
+  { 0x27E9, 0x27E8, BPT_C },  // MATHEMATICAL RIGHT ANGLE BRACKET
+  { 0x27EA, 0x27EB, BPT_O },  // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+  { 0x27EB, 0x27EA, BPT_C },  // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+  { 0x27EC, 0x27ED, BPT_O },  // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+  { 0x27ED, 0x27EC, BPT_C },  // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+  { 0x27EE, 0x27EF, BPT_O },  // MATHEMATICAL LEFT FLATTENED PARENTHESIS
+  { 0x27EF, 0x27EE, BPT_C },  // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+  { 0x2983, 0x2984, BPT_O },  // LEFT WHITE CURLY BRACKET
+  { 0x2984, 0x2983, BPT_C },  // RIGHT WHITE CURLY BRACKET
+  { 0x2985, 0x2986, BPT_O },  // LEFT WHITE PARENTHESIS
+  { 0x2986, 0x2985, BPT_C },  // RIGHT WHITE PARENTHESIS
+  { 0x2987, 0x2988, BPT_O },  // Z NOTATION LEFT IMAGE BRACKET
+  { 0x2988, 0x2987, BPT_C },  // Z NOTATION RIGHT IMAGE BRACKET
+  { 0x2989, 0x298A, BPT_O },  // Z NOTATION LEFT BINDING BRACKET
+  { 0x298A, 0x2989, BPT_C },  // Z NOTATION RIGHT BINDING BRACKET
+  { 0x298B, 0x298C, BPT_O },  // LEFT SQUARE BRACKET WITH UNDERBAR
+  { 0x298C, 0x298B, BPT_C },  // RIGHT SQUARE BRACKET WITH UNDERBAR
+  { 0x298D, 0x2990, BPT_O },  // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+  { 0x298E, 0x298F, BPT_C },  // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+  { 0x298F, 0x298E, BPT_O },  // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+  { 0x2990, 0x298D, BPT_C },  // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+  { 0x2991, 0x2992, BPT_O },  // LEFT ANGLE BRACKET WITH DOT
+  { 0x2992, 0x2991, BPT_C },  // RIGHT ANGLE BRACKET WITH DOT
+  { 0x2993, 0x2994, BPT_O },  // LEFT ARC LESS-THAN BRACKET
+  { 0x2994, 0x2993, BPT_C },  // RIGHT ARC GREATER-THAN BRACKET
+  { 0x2995, 0x2996, BPT_O },  // DOUBLE LEFT ARC GREATER-THAN BRACKET
+  { 0x2996, 0x2995, BPT_C },  // DOUBLE RIGHT ARC LESS-THAN BRACKET
+  { 0x2997, 0x2998, BPT_O },  // LEFT BLACK TORTOISE SHELL BRACKET
+  { 0x2998, 0x2997, BPT_C },  // RIGHT BLACK TORTOISE SHELL BRACKET
+  { 0x29D8, 0x29D9, BPT_O },  // LEFT WIGGLY FENCE
+  { 0x29D9, 0x29D8, BPT_C },  // RIGHT WIGGLY FENCE
+  { 0x29DA, 0x29DB, BPT_O },  // LEFT DOUBLE WIGGLY FENCE
+  { 0x29DB, 0x29DA, BPT_C },  // RIGHT DOUBLE WIGGLY FENCE
+  { 0x29FC, 0x29FD, BPT_O },  // LEFT-POINTING CURVED ANGLE BRACKET
+  { 0x29FD, 0x29FC, BPT_C },  // RIGHT-POINTING CURVED ANGLE BRACKET
+  { 0x2E22, 0x2E23, BPT_O },  // TOP LEFT HALF BRACKET
+  { 0x2E23, 0x2E22, BPT_C },  // TOP RIGHT HALF BRACKET
+  { 0x2E24, 0x2E25, BPT_O },  // BOTTOM LEFT HALF BRACKET
+  { 0x2E25, 0x2E24, BPT_C },  // BOTTOM RIGHT HALF BRACKET
+  { 0x2E26, 0x2E27, BPT_O },  // LEFT SIDEWAYS U BRACKET
+  { 0x2E27, 0x2E26, BPT_C },  // RIGHT SIDEWAYS U BRACKET
+  { 0x2E28, 0x2E29, BPT_O },  // LEFT DOUBLE PARENTHESIS
+  { 0x2E29, 0x2E28, BPT_C },  // RIGHT DOUBLE PARENTHESIS
+  { 0x3008, 0x3009, BPT_O },  // LEFT ANGLE BRACKET
+  { 0x3009, 0x3008, BPT_C },  // RIGHT ANGLE BRACKET
+  { 0x300A, 0x300B, BPT_O },  // LEFT DOUBLE ANGLE BRACKET
+  { 0x300B, 0x300A, BPT_C },  // RIGHT DOUBLE ANGLE BRACKET
+  { 0x300C, 0x300D, BPT_O },  // LEFT CORNER BRACKET
+  { 0x300D, 0x300C, BPT_C },  // RIGHT CORNER BRACKET
+  { 0x300E, 0x300F, BPT_O },  // LEFT WHITE CORNER BRACKET
+  { 0x300F, 0x300E, BPT_C },  // RIGHT WHITE CORNER BRACKET
+  { 0x3010, 0x3011, BPT_O },  // LEFT BLACK LENTICULAR BRACKET
+  { 0x3011, 0x3010, BPT_C },  // RIGHT BLACK LENTICULAR BRACKET
+  { 0x3014, 0x3015, BPT_O },  // LEFT TORTOISE SHELL BRACKET
+  { 0x3015, 0x3014, BPT_C },  // RIGHT TORTOISE SHELL BRACKET
+  { 0x3016, 0x3017, BPT_O },  // LEFT WHITE LENTICULAR BRACKET
+  { 0x3017, 0x3016, BPT_C },  // RIGHT WHITE LENTICULAR BRACKET
+  { 0x3018, 0x3019, BPT_O },  // LEFT WHITE TORTOISE SHELL BRACKET
+  { 0x3019, 0x3018, BPT_C },  // RIGHT WHITE TORTOISE SHELL BRACKET
+  { 0x301A, 0x301B, BPT_O },  // LEFT WHITE SQUARE BRACKET
+  { 0x301B, 0x301A, BPT_C },  // RIGHT WHITE SQUARE BRACKET
+  { 0xFE59, 0xFE5A, BPT_O },  // SMALL LEFT PARENTHESIS
+  { 0xFE5A, 0xFE59, BPT_C },  // SMALL RIGHT PARENTHESIS
+  { 0xFE5B, 0xFE5C, BPT_O },  // SMALL LEFT CURLY BRACKET
+  { 0xFE5C, 0xFE5B, BPT_C },  // SMALL RIGHT CURLY BRACKET
+  { 0xFE5D, 0xFE5E, BPT_O },  // SMALL LEFT TORTOISE SHELL BRACKET
+  { 0xFE5E, 0xFE5D, BPT_C },  // SMALL RIGHT TORTOISE SHELL BRACKET
+  { 0xFF08, 0xFF09, BPT_O },  // FULLWIDTH LEFT PARENTHESIS
+  { 0xFF09, 0xFF08, BPT_C },  // FULLWIDTH RIGHT PARENTHESIS
+  { 0xFF3B, 0xFF3D, BPT_O },  // FULLWIDTH LEFT SQUARE BRACKET
+  { 0xFF3D, 0xFF3B, BPT_C },  // FULLWIDTH RIGHT SQUARE BRACKET
+  { 0xFF5B, 0xFF5D, BPT_O },  // FULLWIDTH LEFT CURLY BRACKET
+  { 0xFF5D, 0xFF5B, BPT_C },  // FULLWIDTH RIGHT CURLY BRACKET
+  { 0xFF5F, 0xFF60, BPT_O },  // FULLWIDTH LEFT WHITE PARENTHESIS
+  { 0xFF60, 0xFF5F, BPT_C },  // FULLWIDTH RIGHT WHITE PARENTHESIS
+  { 0xFF62, 0xFF63, BPT_O },  // HALFWIDTH LEFT CORNER BRACKET
+  { 0xFF63, 0xFF62, BPT_C },  // HALFWIDTH RIGHT CORNER BRACKET
+#endif
+
+/*************************** End of file ****************************/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI__BiDi2_Types_800.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,16606 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : GUI__BiDi2_Types_800.h
+Purpose     : Bidi types according to Unicode V8.0.0
+
+            ( !!! Basic  Multilingual  Plane Only !!! )
+
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifdef GUI__BIDI2
+
+#ifndef   GUI_BIDI_SUPPORT_RANGE_0
+  #define GUI_BIDI_SUPPORT_RANGE_0 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_1
+  #define GUI_BIDI_SUPPORT_RANGE_1 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_2
+  #define GUI_BIDI_SUPPORT_RANGE_2 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_3
+  #define GUI_BIDI_SUPPORT_RANGE_3 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_4
+  #define GUI_BIDI_SUPPORT_RANGE_4 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_A
+  #define GUI_BIDI_SUPPORT_RANGE_A 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_D
+  #define GUI_BIDI_SUPPORT_RANGE_D 1
+#endif
+#ifndef   GUI_BIDI_SUPPORT_RANGE_F
+  #define GUI_BIDI_SUPPORT_RANGE_F 1
+#endif
+
+#if (GUI_BIDI_SUPPORT_RANGE_0 == 1)
+
+//  CodePoint
+//  |       BiDi category
+//  |       |               Unicode name
+//  |       |               |
+//  V       V               V
+  { 0x0000, BIDI_BN  },  // <control>
+  { 0x0001, BIDI_BN  },  // <control>
+  { 0x0002, BIDI_BN  },  // <control>
+  { 0x0003, BIDI_BN  },  // <control>
+  { 0x0004, BIDI_BN  },  // <control>
+  { 0x0005, BIDI_BN  },  // <control>
+  { 0x0006, BIDI_BN  },  // <control>
+  { 0x0007, BIDI_BN  },  // <control>
+  { 0x0008, BIDI_BN  },  // <control>
+  { 0x0009, BIDI_S   },  // <control>
+  { 0x000A, BIDI_B   },  // <control>
+  { 0x000B, BIDI_S   },  // <control>
+  { 0x000C, BIDI_WS  },  // <control>
+  { 0x000D, BIDI_B   },  // <control>
+  { 0x000E, BIDI_BN  },  // <control>
+  { 0x000F, BIDI_BN  },  // <control>
+  { 0x0010, BIDI_BN  },  // <control>
+  { 0x0011, BIDI_BN  },  // <control>
+  { 0x0012, BIDI_BN  },  // <control>
+  { 0x0013, BIDI_BN  },  // <control>
+  { 0x0014, BIDI_BN  },  // <control>
+  { 0x0015, BIDI_BN  },  // <control>
+  { 0x0016, BIDI_BN  },  // <control>
+  { 0x0017, BIDI_BN  },  // <control>
+  { 0x0018, BIDI_BN  },  // <control>
+  { 0x0019, BIDI_BN  },  // <control>
+  { 0x001A, BIDI_BN  },  // <control>
+  { 0x001B, BIDI_BN  },  // <control>
+  { 0x001C, BIDI_B   },  // <control>
+  { 0x001D, BIDI_B   },  // <control>
+  { 0x001E, BIDI_B   },  // <control>
+  { 0x001F, BIDI_S   },  // <control>
+  { 0x0020, BIDI_WS  },  // SPACE
+  { 0x0021, BIDI_ON  },  // EXCLAMATION MARK
+  { 0x0022, BIDI_ON  },  // QUOTATION MARK
+  { 0x0023, BIDI_ET  },  // NUMBER SIGN
+  { 0x0024, BIDI_ET  },  // DOLLAR SIGN
+  { 0x0025, BIDI_ET  },  // PERCENT SIGN
+  { 0x0026, BIDI_ON  },  // AMPERSAND
+  { 0x0027, BIDI_ON  },  // APOSTROPHE
+  { 0x0028, BIDI_ON  },  // LEFT PARENTHESIS
+  { 0x0029, BIDI_ON  },  // RIGHT PARENTHESIS
+  { 0x002A, BIDI_ON  },  // ASTERISK
+  { 0x002B, BIDI_ES  },  // PLUS SIGN
+  { 0x002C, BIDI_CS  },  // COMMA
+  { 0x002D, BIDI_ES  },  // HYPHEN-MINUS
+  { 0x002E, BIDI_CS  },  // FULL STOP
+  { 0x002F, BIDI_CS  },  // SOLIDUS
+  { 0x0030, BIDI_EN  },  // DIGIT ZERO
+  { 0x0031, BIDI_EN  },  // DIGIT ONE
+  { 0x0032, BIDI_EN  },  // DIGIT TWO
+  { 0x0033, BIDI_EN  },  // DIGIT THREE
+  { 0x0034, BIDI_EN  },  // DIGIT FOUR
+  { 0x0035, BIDI_EN  },  // DIGIT FIVE
+  { 0x0036, BIDI_EN  },  // DIGIT SIX
+  { 0x0037, BIDI_EN  },  // DIGIT SEVEN
+  { 0x0038, BIDI_EN  },  // DIGIT EIGHT
+  { 0x0039, BIDI_EN  },  // DIGIT NINE
+  { 0x003A, BIDI_CS  },  // COLON
+  { 0x003B, BIDI_ON  },  // SEMICOLON
+  { 0x003C, BIDI_ON  },  // LESS-THAN SIGN
+  { 0x003D, BIDI_ON  },  // EQUALS SIGN
+  { 0x003E, BIDI_ON  },  // GREATER-THAN SIGN
+  { 0x003F, BIDI_ON  },  // QUESTION MARK
+  { 0x0040, BIDI_ON  },  // COMMERCIAL AT
+  { 0x0041, BIDI_L   },  // LATIN CAPITAL LETTER A
+  { 0x0042, BIDI_L   },  // LATIN CAPITAL LETTER B
+  { 0x0043, BIDI_L   },  // LATIN CAPITAL LETTER C
+  { 0x0044, BIDI_L   },  // LATIN CAPITAL LETTER D
+  { 0x0045, BIDI_L   },  // LATIN CAPITAL LETTER E
+  { 0x0046, BIDI_L   },  // LATIN CAPITAL LETTER F
+  { 0x0047, BIDI_L   },  // LATIN CAPITAL LETTER G
+  { 0x0048, BIDI_L   },  // LATIN CAPITAL LETTER H
+  { 0x0049, BIDI_L   },  // LATIN CAPITAL LETTER I
+  { 0x004A, BIDI_L   },  // LATIN CAPITAL LETTER J
+  { 0x004B, BIDI_L   },  // LATIN CAPITAL LETTER K
+  { 0x004C, BIDI_L   },  // LATIN CAPITAL LETTER L
+  { 0x004D, BIDI_L   },  // LATIN CAPITAL LETTER M
+  { 0x004E, BIDI_L   },  // LATIN CAPITAL LETTER N
+  { 0x004F, BIDI_L   },  // LATIN CAPITAL LETTER O
+  { 0x0050, BIDI_L   },  // LATIN CAPITAL LETTER P
+  { 0x0051, BIDI_L   },  // LATIN CAPITAL LETTER Q
+  { 0x0052, BIDI_L   },  // LATIN CAPITAL LETTER R
+  { 0x0053, BIDI_L   },  // LATIN CAPITAL LETTER S
+  { 0x0054, BIDI_L   },  // LATIN CAPITAL LETTER T
+  { 0x0055, BIDI_L   },  // LATIN CAPITAL LETTER U
+  { 0x0056, BIDI_L   },  // LATIN CAPITAL LETTER V
+  { 0x0057, BIDI_L   },  // LATIN CAPITAL LETTER W
+  { 0x0058, BIDI_L   },  // LATIN CAPITAL LETTER X
+  { 0x0059, BIDI_L   },  // LATIN CAPITAL LETTER Y
+  { 0x005A, BIDI_L   },  // LATIN CAPITAL LETTER Z
+  { 0x005B, BIDI_ON  },  // LEFT SQUARE BRACKET
+  { 0x005C, BIDI_ON  },  // REVERSE SOLIDUS
+  { 0x005D, BIDI_ON  },  // RIGHT SQUARE BRACKET
+  { 0x005E, BIDI_ON  },  // CIRCUMFLEX ACCENT
+  { 0x005F, BIDI_ON  },  // LOW LINE
+  { 0x0060, BIDI_ON  },  // GRAVE ACCENT
+  { 0x0061, BIDI_L   },  // LATIN SMALL LETTER A
+  { 0x0062, BIDI_L   },  // LATIN SMALL LETTER B
+  { 0x0063, BIDI_L   },  // LATIN SMALL LETTER C
+  { 0x0064, BIDI_L   },  // LATIN SMALL LETTER D
+  { 0x0065, BIDI_L   },  // LATIN SMALL LETTER E
+  { 0x0066, BIDI_L   },  // LATIN SMALL LETTER F
+  { 0x0067, BIDI_L   },  // LATIN SMALL LETTER G
+  { 0x0068, BIDI_L   },  // LATIN SMALL LETTER H
+  { 0x0069, BIDI_L   },  // LATIN SMALL LETTER I
+  { 0x006A, BIDI_L   },  // LATIN SMALL LETTER J
+  { 0x006B, BIDI_L   },  // LATIN SMALL LETTER K
+  { 0x006C, BIDI_L   },  // LATIN SMALL LETTER L
+  { 0x006D, BIDI_L   },  // LATIN SMALL LETTER M
+  { 0x006E, BIDI_L   },  // LATIN SMALL LETTER N
+  { 0x006F, BIDI_L   },  // LATIN SMALL LETTER O
+  { 0x0070, BIDI_L   },  // LATIN SMALL LETTER P
+  { 0x0071, BIDI_L   },  // LATIN SMALL LETTER Q
+  { 0x0072, BIDI_L   },  // LATIN SMALL LETTER R
+  { 0x0073, BIDI_L   },  // LATIN SMALL LETTER S
+  { 0x0074, BIDI_L   },  // LATIN SMALL LETTER T
+  { 0x0075, BIDI_L   },  // LATIN SMALL LETTER U
+  { 0x0076, BIDI_L   },  // LATIN SMALL LETTER V
+  { 0x0077, BIDI_L   },  // LATIN SMALL LETTER W
+  { 0x0078, BIDI_L   },  // LATIN SMALL LETTER X
+  { 0x0079, BIDI_L   },  // LATIN SMALL LETTER Y
+  { 0x007A, BIDI_L   },  // LATIN SMALL LETTER Z
+  { 0x007B, BIDI_ON  },  // LEFT CURLY BRACKET
+  { 0x007C, BIDI_ON  },  // VERTICAL LINE
+  { 0x007D, BIDI_ON  },  // RIGHT CURLY BRACKET
+  { 0x007E, BIDI_ON  },  // TILDE
+  { 0x007F, BIDI_BN  },  // <control>
+  { 0x0080, BIDI_BN  },  // <control>
+  { 0x0081, BIDI_BN  },  // <control>
+  { 0x0082, BIDI_BN  },  // <control>
+  { 0x0083, BIDI_BN  },  // <control>
+  { 0x0084, BIDI_BN  },  // <control>
+  { 0x0085, BIDI_B   },  // <control>
+  { 0x0086, BIDI_BN  },  // <control>
+  { 0x0087, BIDI_BN  },  // <control>
+  { 0x0088, BIDI_BN  },  // <control>
+  { 0x0089, BIDI_BN  },  // <control>
+  { 0x008A, BIDI_BN  },  // <control>
+  { 0x008B, BIDI_BN  },  // <control>
+  { 0x008C, BIDI_BN  },  // <control>
+  { 0x008D, BIDI_BN  },  // <control>
+  { 0x008E, BIDI_BN  },  // <control>
+  { 0x008F, BIDI_BN  },  // <control>
+  { 0x0090, BIDI_BN  },  // <control>
+  { 0x0091, BIDI_BN  },  // <control>
+  { 0x0092, BIDI_BN  },  // <control>
+  { 0x0093, BIDI_BN  },  // <control>
+  { 0x0094, BIDI_BN  },  // <control>
+  { 0x0095, BIDI_BN  },  // <control>
+  { 0x0096, BIDI_BN  },  // <control>
+  { 0x0097, BIDI_BN  },  // <control>
+  { 0x0098, BIDI_BN  },  // <control>
+  { 0x0099, BIDI_BN  },  // <control>
+  { 0x009A, BIDI_BN  },  // <control>
+  { 0x009B, BIDI_BN  },  // <control>
+  { 0x009C, BIDI_BN  },  // <control>
+  { 0x009D, BIDI_BN  },  // <control>
+  { 0x009E, BIDI_BN  },  // <control>
+  { 0x009F, BIDI_BN  },  // <control>
+  { 0x00A0, BIDI_CS  },  // NO-BREAK SPACE
+  { 0x00A1, BIDI_ON  },  // INVERTED EXCLAMATION MARK
+  { 0x00A2, BIDI_ET  },  // CENT SIGN
+  { 0x00A3, BIDI_ET  },  // POUND SIGN
+  { 0x00A4, BIDI_ET  },  // CURRENCY SIGN
+  { 0x00A5, BIDI_ET  },  // YEN SIGN
+  { 0x00A6, BIDI_ON  },  // BROKEN BAR
+  { 0x00A7, BIDI_ON  },  // SECTION SIGN
+  { 0x00A8, BIDI_ON  },  // DIAERESIS
+  { 0x00A9, BIDI_ON  },  // COPYRIGHT SIGN
+  { 0x00AA, BIDI_L   },  // FEMININE ORDINAL INDICATOR
+  { 0x00AB, BIDI_ON  },  // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+  { 0x00AC, BIDI_ON  },  // NOT SIGN
+  { 0x00AD, BIDI_BN  },  // SOFT HYPHEN
+  { 0x00AE, BIDI_ON  },  // REGISTERED SIGN
+  { 0x00AF, BIDI_ON  },  // MACRON
+  { 0x00B0, BIDI_ET  },  // DEGREE SIGN
+  { 0x00B1, BIDI_ET  },  // PLUS-MINUS SIGN
+  { 0x00B2, BIDI_EN  },  // SUPERSCRIPT TWO
+  { 0x00B3, BIDI_EN  },  // SUPERSCRIPT THREE
+  { 0x00B4, BIDI_ON  },  // ACUTE ACCENT
+  { 0x00B5, BIDI_L   },  // MICRO SIGN
+  { 0x00B6, BIDI_ON  },  // PILCROW SIGN
+  { 0x00B7, BIDI_ON  },  // MIDDLE DOT
+  { 0x00B8, BIDI_ON  },  // CEDILLA
+  { 0x00B9, BIDI_EN  },  // SUPERSCRIPT ONE
+  { 0x00BA, BIDI_L   },  // MASCULINE ORDINAL INDICATOR
+  { 0x00BB, BIDI_ON  },  // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+  { 0x00BC, BIDI_ON  },  // VULGAR FRACTION ONE QUARTER
+  { 0x00BD, BIDI_ON  },  // VULGAR FRACTION ONE HALF
+  { 0x00BE, BIDI_ON  },  // VULGAR FRACTION THREE QUARTERS
+  { 0x00BF, BIDI_ON  },  // INVERTED QUESTION MARK
+  { 0x00C0, BIDI_L   },  // LATIN CAPITAL LETTER A WITH GRAVE
+  { 0x00C1, BIDI_L   },  // LATIN CAPITAL LETTER A WITH ACUTE
+  { 0x00C2, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+  { 0x00C3, BIDI_L   },  // LATIN CAPITAL LETTER A WITH TILDE
+  { 0x00C4, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DIAERESIS
+  { 0x00C5, BIDI_L   },  // LATIN CAPITAL LETTER A WITH RING ABOVE
+  { 0x00C6, BIDI_L   },  // LATIN CAPITAL LETTER AE
+  { 0x00C7, BIDI_L   },  // LATIN CAPITAL LETTER C WITH CEDILLA
+  { 0x00C8, BIDI_L   },  // LATIN CAPITAL LETTER E WITH GRAVE
+  { 0x00C9, BIDI_L   },  // LATIN CAPITAL LETTER E WITH ACUTE
+  { 0x00CA, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  { 0x00CB, BIDI_L   },  // LATIN CAPITAL LETTER E WITH DIAERESIS
+  { 0x00CC, BIDI_L   },  // LATIN CAPITAL LETTER I WITH GRAVE
+  { 0x00CD, BIDI_L   },  // LATIN CAPITAL LETTER I WITH ACUTE
+  { 0x00CE, BIDI_L   },  // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  { 0x00CF, BIDI_L   },  // LATIN CAPITAL LETTER I WITH DIAERESIS
+  { 0x00D0, BIDI_L   },  // LATIN CAPITAL LETTER ETH
+  { 0x00D1, BIDI_L   },  // LATIN CAPITAL LETTER N WITH TILDE
+  { 0x00D2, BIDI_L   },  // LATIN CAPITAL LETTER O WITH GRAVE
+  { 0x00D3, BIDI_L   },  // LATIN CAPITAL LETTER O WITH ACUTE
+  { 0x00D4, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+  { 0x00D5, BIDI_L   },  // LATIN CAPITAL LETTER O WITH TILDE
+  { 0x00D6, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DIAERESIS
+  { 0x00D7, BIDI_ON  },  // MULTIPLICATION SIGN
+  { 0x00D8, BIDI_L   },  // LATIN CAPITAL LETTER O WITH STROKE
+  { 0x00D9, BIDI_L   },  // LATIN CAPITAL LETTER U WITH GRAVE
+  { 0x00DA, BIDI_L   },  // LATIN CAPITAL LETTER U WITH ACUTE
+  { 0x00DB, BIDI_L   },  // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+  { 0x00DC, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS
+  { 0x00DD, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH ACUTE
+  { 0x00DE, BIDI_L   },  // LATIN CAPITAL LETTER THORN
+  { 0x00DF, BIDI_L   },  // LATIN SMALL LETTER SHARP S
+  { 0x00E0, BIDI_L   },  // LATIN SMALL LETTER A WITH GRAVE
+  { 0x00E1, BIDI_L   },  // LATIN SMALL LETTER A WITH ACUTE
+  { 0x00E2, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+  { 0x00E3, BIDI_L   },  // LATIN SMALL LETTER A WITH TILDE
+  { 0x00E4, BIDI_L   },  // LATIN SMALL LETTER A WITH DIAERESIS
+  { 0x00E5, BIDI_L   },  // LATIN SMALL LETTER A WITH RING ABOVE
+  { 0x00E6, BIDI_L   },  // LATIN SMALL LETTER AE
+  { 0x00E7, BIDI_L   },  // LATIN SMALL LETTER C WITH CEDILLA
+  { 0x00E8, BIDI_L   },  // LATIN SMALL LETTER E WITH GRAVE
+  { 0x00E9, BIDI_L   },  // LATIN SMALL LETTER E WITH ACUTE
+  { 0x00EA, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX
+  { 0x00EB, BIDI_L   },  // LATIN SMALL LETTER E WITH DIAERESIS
+  { 0x00EC, BIDI_L   },  // LATIN SMALL LETTER I WITH GRAVE
+  { 0x00ED, BIDI_L   },  // LATIN SMALL LETTER I WITH ACUTE
+  { 0x00EE, BIDI_L   },  // LATIN SMALL LETTER I WITH CIRCUMFLEX
+  { 0x00EF, BIDI_L   },  // LATIN SMALL LETTER I WITH DIAERESIS
+  { 0x00F0, BIDI_L   },  // LATIN SMALL LETTER ETH
+  { 0x00F1, BIDI_L   },  // LATIN SMALL LETTER N WITH TILDE
+  { 0x00F2, BIDI_L   },  // LATIN SMALL LETTER O WITH GRAVE
+  { 0x00F3, BIDI_L   },  // LATIN SMALL LETTER O WITH ACUTE
+  { 0x00F4, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+  { 0x00F5, BIDI_L   },  // LATIN SMALL LETTER O WITH TILDE
+  { 0x00F6, BIDI_L   },  // LATIN SMALL LETTER O WITH DIAERESIS
+  { 0x00F7, BIDI_ON  },  // DIVISION SIGN
+  { 0x00F8, BIDI_L   },  // LATIN SMALL LETTER O WITH STROKE
+  { 0x00F9, BIDI_L   },  // LATIN SMALL LETTER U WITH GRAVE
+  { 0x00FA, BIDI_L   },  // LATIN SMALL LETTER U WITH ACUTE
+  { 0x00FB, BIDI_L   },  // LATIN SMALL LETTER U WITH CIRCUMFLEX
+  { 0x00FC, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS
+  { 0x00FD, BIDI_L   },  // LATIN SMALL LETTER Y WITH ACUTE
+  { 0x00FE, BIDI_L   },  // LATIN SMALL LETTER THORN
+  { 0x00FF, BIDI_L   },  // LATIN SMALL LETTER Y WITH DIAERESIS
+  { 0x0100, BIDI_L   },  // LATIN CAPITAL LETTER A WITH MACRON
+  { 0x0101, BIDI_L   },  // LATIN SMALL LETTER A WITH MACRON
+  { 0x0102, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE
+  { 0x0103, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE
+  { 0x0104, BIDI_L   },  // LATIN CAPITAL LETTER A WITH OGONEK
+  { 0x0105, BIDI_L   },  // LATIN SMALL LETTER A WITH OGONEK
+  { 0x0106, BIDI_L   },  // LATIN CAPITAL LETTER C WITH ACUTE
+  { 0x0107, BIDI_L   },  // LATIN SMALL LETTER C WITH ACUTE
+  { 0x0108, BIDI_L   },  // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+  { 0x0109, BIDI_L   },  // LATIN SMALL LETTER C WITH CIRCUMFLEX
+  { 0x010A, BIDI_L   },  // LATIN CAPITAL LETTER C WITH DOT ABOVE
+  { 0x010B, BIDI_L   },  // LATIN SMALL LETTER C WITH DOT ABOVE
+  { 0x010C, BIDI_L   },  // LATIN CAPITAL LETTER C WITH CARON
+  { 0x010D, BIDI_L   },  // LATIN SMALL LETTER C WITH CARON
+  { 0x010E, BIDI_L   },  // LATIN CAPITAL LETTER D WITH CARON
+  { 0x010F, BIDI_L   },  // LATIN SMALL LETTER D WITH CARON
+  { 0x0110, BIDI_L   },  // LATIN CAPITAL LETTER D WITH STROKE
+  { 0x0111, BIDI_L   },  // LATIN SMALL LETTER D WITH STROKE
+  { 0x0112, BIDI_L   },  // LATIN CAPITAL LETTER E WITH MACRON
+  { 0x0113, BIDI_L   },  // LATIN SMALL LETTER E WITH MACRON
+  { 0x0114, BIDI_L   },  // LATIN CAPITAL LETTER E WITH BREVE
+  { 0x0115, BIDI_L   },  // LATIN SMALL LETTER E WITH BREVE
+  { 0x0116, BIDI_L   },  // LATIN CAPITAL LETTER E WITH DOT ABOVE
+  { 0x0117, BIDI_L   },  // LATIN SMALL LETTER E WITH DOT ABOVE
+  { 0x0118, BIDI_L   },  // LATIN CAPITAL LETTER E WITH OGONEK
+  { 0x0119, BIDI_L   },  // LATIN SMALL LETTER E WITH OGONEK
+  { 0x011A, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CARON
+  { 0x011B, BIDI_L   },  // LATIN SMALL LETTER E WITH CARON
+  { 0x011C, BIDI_L   },  // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+  { 0x011D, BIDI_L   },  // LATIN SMALL LETTER G WITH CIRCUMFLEX
+  { 0x011E, BIDI_L   },  // LATIN CAPITAL LETTER G WITH BREVE
+  { 0x011F, BIDI_L   },  // LATIN SMALL LETTER G WITH BREVE
+  { 0x0120, BIDI_L   },  // LATIN CAPITAL LETTER G WITH DOT ABOVE
+  { 0x0121, BIDI_L   },  // LATIN SMALL LETTER G WITH DOT ABOVE
+  { 0x0122, BIDI_L   },  // LATIN CAPITAL LETTER G WITH CEDILLA
+  { 0x0123, BIDI_L   },  // LATIN SMALL LETTER G WITH CEDILLA
+  { 0x0124, BIDI_L   },  // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+  { 0x0125, BIDI_L   },  // LATIN SMALL LETTER H WITH CIRCUMFLEX
+  { 0x0126, BIDI_L   },  // LATIN CAPITAL LETTER H WITH STROKE
+  { 0x0127, BIDI_L   },  // LATIN SMALL LETTER H WITH STROKE
+  { 0x0128, BIDI_L   },  // LATIN CAPITAL LETTER I WITH TILDE
+  { 0x0129, BIDI_L   },  // LATIN SMALL LETTER I WITH TILDE
+  { 0x012A, BIDI_L   },  // LATIN CAPITAL LETTER I WITH MACRON
+  { 0x012B, BIDI_L   },  // LATIN SMALL LETTER I WITH MACRON
+  { 0x012C, BIDI_L   },  // LATIN CAPITAL LETTER I WITH BREVE
+  { 0x012D, BIDI_L   },  // LATIN SMALL LETTER I WITH BREVE
+  { 0x012E, BIDI_L   },  // LATIN CAPITAL LETTER I WITH OGONEK
+  { 0x012F, BIDI_L   },  // LATIN SMALL LETTER I WITH OGONEK
+  { 0x0130, BIDI_L   },  // LATIN CAPITAL LETTER I WITH DOT ABOVE
+  { 0x0131, BIDI_L   },  // LATIN SMALL LETTER DOTLESS I
+  { 0x0132, BIDI_L   },  // LATIN CAPITAL LIGATURE IJ
+  { 0x0133, BIDI_L   },  // LATIN SMALL LIGATURE IJ
+  { 0x0134, BIDI_L   },  // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+  { 0x0135, BIDI_L   },  // LATIN SMALL LETTER J WITH CIRCUMFLEX
+  { 0x0136, BIDI_L   },  // LATIN CAPITAL LETTER K WITH CEDILLA
+  { 0x0137, BIDI_L   },  // LATIN SMALL LETTER K WITH CEDILLA
+  { 0x0138, BIDI_L   },  // LATIN SMALL LETTER KRA
+  { 0x0139, BIDI_L   },  // LATIN CAPITAL LETTER L WITH ACUTE
+  { 0x013A, BIDI_L   },  // LATIN SMALL LETTER L WITH ACUTE
+  { 0x013B, BIDI_L   },  // LATIN CAPITAL LETTER L WITH CEDILLA
+  { 0x013C, BIDI_L   },  // LATIN SMALL LETTER L WITH CEDILLA
+  { 0x013D, BIDI_L   },  // LATIN CAPITAL LETTER L WITH CARON
+  { 0x013E, BIDI_L   },  // LATIN SMALL LETTER L WITH CARON
+  { 0x013F, BIDI_L   },  // LATIN CAPITAL LETTER L WITH MIDDLE DOT
+  { 0x0140, BIDI_L   },  // LATIN SMALL LETTER L WITH MIDDLE DOT
+  { 0x0141, BIDI_L   },  // LATIN CAPITAL LETTER L WITH STROKE
+  { 0x0142, BIDI_L   },  // LATIN SMALL LETTER L WITH STROKE
+  { 0x0143, BIDI_L   },  // LATIN CAPITAL LETTER N WITH ACUTE
+  { 0x0144, BIDI_L   },  // LATIN SMALL LETTER N WITH ACUTE
+  { 0x0145, BIDI_L   },  // LATIN CAPITAL LETTER N WITH CEDILLA
+  { 0x0146, BIDI_L   },  // LATIN SMALL LETTER N WITH CEDILLA
+  { 0x0147, BIDI_L   },  // LATIN CAPITAL LETTER N WITH CARON
+  { 0x0148, BIDI_L   },  // LATIN SMALL LETTER N WITH CARON
+  { 0x0149, BIDI_L   },  // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+  { 0x014A, BIDI_L   },  // LATIN CAPITAL LETTER ENG
+  { 0x014B, BIDI_L   },  // LATIN SMALL LETTER ENG
+  { 0x014C, BIDI_L   },  // LATIN CAPITAL LETTER O WITH MACRON
+  { 0x014D, BIDI_L   },  // LATIN SMALL LETTER O WITH MACRON
+  { 0x014E, BIDI_L   },  // LATIN CAPITAL LETTER O WITH BREVE
+  { 0x014F, BIDI_L   },  // LATIN SMALL LETTER O WITH BREVE
+  { 0x0150, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+  { 0x0151, BIDI_L   },  // LATIN SMALL LETTER O WITH DOUBLE ACUTE
+  { 0x0152, BIDI_L   },  // LATIN CAPITAL LIGATURE OE
+  { 0x0153, BIDI_L   },  // LATIN SMALL LIGATURE OE
+  { 0x0154, BIDI_L   },  // LATIN CAPITAL LETTER R WITH ACUTE
+  { 0x0155, BIDI_L   },  // LATIN SMALL LETTER R WITH ACUTE
+  { 0x0156, BIDI_L   },  // LATIN CAPITAL LETTER R WITH CEDILLA
+  { 0x0157, BIDI_L   },  // LATIN SMALL LETTER R WITH CEDILLA
+  { 0x0158, BIDI_L   },  // LATIN CAPITAL LETTER R WITH CARON
+  { 0x0159, BIDI_L   },  // LATIN SMALL LETTER R WITH CARON
+  { 0x015A, BIDI_L   },  // LATIN CAPITAL LETTER S WITH ACUTE
+  { 0x015B, BIDI_L   },  // LATIN SMALL LETTER S WITH ACUTE
+  { 0x015C, BIDI_L   },  // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+  { 0x015D, BIDI_L   },  // LATIN SMALL LETTER S WITH CIRCUMFLEX
+  { 0x015E, BIDI_L   },  // LATIN CAPITAL LETTER S WITH CEDILLA
+  { 0x015F, BIDI_L   },  // LATIN SMALL LETTER S WITH CEDILLA
+  { 0x0160, BIDI_L   },  // LATIN CAPITAL LETTER S WITH CARON
+  { 0x0161, BIDI_L   },  // LATIN SMALL LETTER S WITH CARON
+  { 0x0162, BIDI_L   },  // LATIN CAPITAL LETTER T WITH CEDILLA
+  { 0x0163, BIDI_L   },  // LATIN SMALL LETTER T WITH CEDILLA
+  { 0x0164, BIDI_L   },  // LATIN CAPITAL LETTER T WITH CARON
+  { 0x0165, BIDI_L   },  // LATIN SMALL LETTER T WITH CARON
+  { 0x0166, BIDI_L   },  // LATIN CAPITAL LETTER T WITH STROKE
+  { 0x0167, BIDI_L   },  // LATIN SMALL LETTER T WITH STROKE
+  { 0x0168, BIDI_L   },  // LATIN CAPITAL LETTER U WITH TILDE
+  { 0x0169, BIDI_L   },  // LATIN SMALL LETTER U WITH TILDE
+  { 0x016A, BIDI_L   },  // LATIN CAPITAL LETTER U WITH MACRON
+  { 0x016B, BIDI_L   },  // LATIN SMALL LETTER U WITH MACRON
+  { 0x016C, BIDI_L   },  // LATIN CAPITAL LETTER U WITH BREVE
+  { 0x016D, BIDI_L   },  // LATIN SMALL LETTER U WITH BREVE
+  { 0x016E, BIDI_L   },  // LATIN CAPITAL LETTER U WITH RING ABOVE
+  { 0x016F, BIDI_L   },  // LATIN SMALL LETTER U WITH RING ABOVE
+  { 0x0170, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+  { 0x0171, BIDI_L   },  // LATIN SMALL LETTER U WITH DOUBLE ACUTE
+  { 0x0172, BIDI_L   },  // LATIN CAPITAL LETTER U WITH OGONEK
+  { 0x0173, BIDI_L   },  // LATIN SMALL LETTER U WITH OGONEK
+  { 0x0174, BIDI_L   },  // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+  { 0x0175, BIDI_L   },  // LATIN SMALL LETTER W WITH CIRCUMFLEX
+  { 0x0176, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+  { 0x0177, BIDI_L   },  // LATIN SMALL LETTER Y WITH CIRCUMFLEX
+  { 0x0178, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH DIAERESIS
+  { 0x0179, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH ACUTE
+  { 0x017A, BIDI_L   },  // LATIN SMALL LETTER Z WITH ACUTE
+  { 0x017B, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+  { 0x017C, BIDI_L   },  // LATIN SMALL LETTER Z WITH DOT ABOVE
+  { 0x017D, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH CARON
+  { 0x017E, BIDI_L   },  // LATIN SMALL LETTER Z WITH CARON
+  { 0x017F, BIDI_L   },  // LATIN SMALL LETTER LONG S
+  { 0x0180, BIDI_L   },  // LATIN SMALL LETTER B WITH STROKE
+  { 0x0181, BIDI_L   },  // LATIN CAPITAL LETTER B WITH HOOK
+  { 0x0182, BIDI_L   },  // LATIN CAPITAL LETTER B WITH TOPBAR
+  { 0x0183, BIDI_L   },  // LATIN SMALL LETTER B WITH TOPBAR
+  { 0x0184, BIDI_L   },  // LATIN CAPITAL LETTER TONE SIX
+  { 0x0185, BIDI_L   },  // LATIN SMALL LETTER TONE SIX
+  { 0x0186, BIDI_L   },  // LATIN CAPITAL LETTER OPEN O
+  { 0x0187, BIDI_L   },  // LATIN CAPITAL LETTER C WITH HOOK
+  { 0x0188, BIDI_L   },  // LATIN SMALL LETTER C WITH HOOK
+  { 0x0189, BIDI_L   },  // LATIN CAPITAL LETTER AFRICAN D
+  { 0x018A, BIDI_L   },  // LATIN CAPITAL LETTER D WITH HOOK
+  { 0x018B, BIDI_L   },  // LATIN CAPITAL LETTER D WITH TOPBAR
+  { 0x018C, BIDI_L   },  // LATIN SMALL LETTER D WITH TOPBAR
+  { 0x018D, BIDI_L   },  // LATIN SMALL LETTER TURNED DELTA
+  { 0x018E, BIDI_L   },  // LATIN CAPITAL LETTER REVERSED E
+  { 0x018F, BIDI_L   },  // LATIN CAPITAL LETTER SCHWA
+  { 0x0190, BIDI_L   },  // LATIN CAPITAL LETTER OPEN E
+  { 0x0191, BIDI_L   },  // LATIN CAPITAL LETTER F WITH HOOK
+  { 0x0192, BIDI_L   },  // LATIN SMALL LETTER F WITH HOOK
+  { 0x0193, BIDI_L   },  // LATIN CAPITAL LETTER G WITH HOOK
+  { 0x0194, BIDI_L   },  // LATIN CAPITAL LETTER GAMMA
+  { 0x0195, BIDI_L   },  // LATIN SMALL LETTER HV
+  { 0x0196, BIDI_L   },  // LATIN CAPITAL LETTER IOTA
+  { 0x0197, BIDI_L   },  // LATIN CAPITAL LETTER I WITH STROKE
+  { 0x0198, BIDI_L   },  // LATIN CAPITAL LETTER K WITH HOOK
+  { 0x0199, BIDI_L   },  // LATIN SMALL LETTER K WITH HOOK
+  { 0x019A, BIDI_L   },  // LATIN SMALL LETTER L WITH BAR
+  { 0x019B, BIDI_L   },  // LATIN SMALL LETTER LAMBDA WITH STROKE
+  { 0x019C, BIDI_L   },  // LATIN CAPITAL LETTER TURNED M
+  { 0x019D, BIDI_L   },  // LATIN CAPITAL LETTER N WITH LEFT HOOK
+  { 0x019E, BIDI_L   },  // LATIN SMALL LETTER N WITH LONG RIGHT LEG
+  { 0x019F, BIDI_L   },  // LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+  { 0x01A0, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN
+  { 0x01A1, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN
+  { 0x01A2, BIDI_L   },  // LATIN CAPITAL LETTER OI
+  { 0x01A3, BIDI_L   },  // LATIN SMALL LETTER OI
+  { 0x01A4, BIDI_L   },  // LATIN CAPITAL LETTER P WITH HOOK
+  { 0x01A5, BIDI_L   },  // LATIN SMALL LETTER P WITH HOOK
+  { 0x01A6, BIDI_L   },  // LATIN LETTER YR
+  { 0x01A7, BIDI_L   },  // LATIN CAPITAL LETTER TONE TWO
+  { 0x01A8, BIDI_L   },  // LATIN SMALL LETTER TONE TWO
+  { 0x01A9, BIDI_L   },  // LATIN CAPITAL LETTER ESH
+  { 0x01AA, BIDI_L   },  // LATIN LETTER REVERSED ESH LOOP
+  { 0x01AB, BIDI_L   },  // LATIN SMALL LETTER T WITH PALATAL HOOK
+  { 0x01AC, BIDI_L   },  // LATIN CAPITAL LETTER T WITH HOOK
+  { 0x01AD, BIDI_L   },  // LATIN SMALL LETTER T WITH HOOK
+  { 0x01AE, BIDI_L   },  // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+  { 0x01AF, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN
+  { 0x01B0, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN
+  { 0x01B1, BIDI_L   },  // LATIN CAPITAL LETTER UPSILON
+  { 0x01B2, BIDI_L   },  // LATIN CAPITAL LETTER V WITH HOOK
+  { 0x01B3, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH HOOK
+  { 0x01B4, BIDI_L   },  // LATIN SMALL LETTER Y WITH HOOK
+  { 0x01B5, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH STROKE
+  { 0x01B6, BIDI_L   },  // LATIN SMALL LETTER Z WITH STROKE
+  { 0x01B7, BIDI_L   },  // LATIN CAPITAL LETTER EZH
+  { 0x01B8, BIDI_L   },  // LATIN CAPITAL LETTER EZH REVERSED
+  { 0x01B9, BIDI_L   },  // LATIN SMALL LETTER EZH REVERSED
+  { 0x01BA, BIDI_L   },  // LATIN SMALL LETTER EZH WITH TAIL
+  { 0x01BB, BIDI_L   },  // LATIN LETTER TWO WITH STROKE
+  { 0x01BC, BIDI_L   },  // LATIN CAPITAL LETTER TONE FIVE
+  { 0x01BD, BIDI_L   },  // LATIN SMALL LETTER TONE FIVE
+  { 0x01BE, BIDI_L   },  // LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+  { 0x01BF, BIDI_L   },  // LATIN LETTER WYNN
+  { 0x01C0, BIDI_L   },  // LATIN LETTER DENTAL CLICK
+  { 0x01C1, BIDI_L   },  // LATIN LETTER LATERAL CLICK
+  { 0x01C2, BIDI_L   },  // LATIN LETTER ALVEOLAR CLICK
+  { 0x01C3, BIDI_L   },  // LATIN LETTER RETROFLEX CLICK
+  { 0x01C4, BIDI_L   },  // LATIN CAPITAL LETTER DZ WITH CARON
+  { 0x01C5, BIDI_L   },  // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+  { 0x01C6, BIDI_L   },  // LATIN SMALL LETTER DZ WITH CARON
+  { 0x01C7, BIDI_L   },  // LATIN CAPITAL LETTER LJ
+  { 0x01C8, BIDI_L   },  // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+  { 0x01C9, BIDI_L   },  // LATIN SMALL LETTER LJ
+  { 0x01CA, BIDI_L   },  // LATIN CAPITAL LETTER NJ
+  { 0x01CB, BIDI_L   },  // LATIN CAPITAL LETTER N WITH SMALL LETTER J
+  { 0x01CC, BIDI_L   },  // LATIN SMALL LETTER NJ
+  { 0x01CD, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CARON
+  { 0x01CE, BIDI_L   },  // LATIN SMALL LETTER A WITH CARON
+  { 0x01CF, BIDI_L   },  // LATIN CAPITAL LETTER I WITH CARON
+  { 0x01D0, BIDI_L   },  // LATIN SMALL LETTER I WITH CARON
+  { 0x01D1, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CARON
+  { 0x01D2, BIDI_L   },  // LATIN SMALL LETTER O WITH CARON
+  { 0x01D3, BIDI_L   },  // LATIN CAPITAL LETTER U WITH CARON
+  { 0x01D4, BIDI_L   },  // LATIN SMALL LETTER U WITH CARON
+  { 0x01D5, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+  { 0x01D6, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+  { 0x01D7, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+  { 0x01D8, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+  { 0x01D9, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+  { 0x01DA, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+  { 0x01DB, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+  { 0x01DC, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+  { 0x01DD, BIDI_L   },  // LATIN SMALL LETTER TURNED E
+  { 0x01DE, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+  { 0x01DF, BIDI_L   },  // LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+  { 0x01E0, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+  { 0x01E1, BIDI_L   },  // LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+  { 0x01E2, BIDI_L   },  // LATIN CAPITAL LETTER AE WITH MACRON
+  { 0x01E3, BIDI_L   },  // LATIN SMALL LETTER AE WITH MACRON
+  { 0x01E4, BIDI_L   },  // LATIN CAPITAL LETTER G WITH STROKE
+  { 0x01E5, BIDI_L   },  // LATIN SMALL LETTER G WITH STROKE
+  { 0x01E6, BIDI_L   },  // LATIN CAPITAL LETTER G WITH CARON
+  { 0x01E7, BIDI_L   },  // LATIN SMALL LETTER G WITH CARON
+  { 0x01E8, BIDI_L   },  // LATIN CAPITAL LETTER K WITH CARON
+  { 0x01E9, BIDI_L   },  // LATIN SMALL LETTER K WITH CARON
+  { 0x01EA, BIDI_L   },  // LATIN CAPITAL LETTER O WITH OGONEK
+  { 0x01EB, BIDI_L   },  // LATIN SMALL LETTER O WITH OGONEK
+  { 0x01EC, BIDI_L   },  // LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+  { 0x01ED, BIDI_L   },  // LATIN SMALL LETTER O WITH OGONEK AND MACRON
+  { 0x01EE, BIDI_L   },  // LATIN CAPITAL LETTER EZH WITH CARON
+  { 0x01EF, BIDI_L   },  // LATIN SMALL LETTER EZH WITH CARON
+  { 0x01F0, BIDI_L   },  // LATIN SMALL LETTER J WITH CARON
+  { 0x01F1, BIDI_L   },  // LATIN CAPITAL LETTER DZ
+  { 0x01F2, BIDI_L   },  // LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+  { 0x01F3, BIDI_L   },  // LATIN SMALL LETTER DZ
+  { 0x01F4, BIDI_L   },  // LATIN CAPITAL LETTER G WITH ACUTE
+  { 0x01F5, BIDI_L   },  // LATIN SMALL LETTER G WITH ACUTE
+  { 0x01F6, BIDI_L   },  // LATIN CAPITAL LETTER HWAIR
+  { 0x01F7, BIDI_L   },  // LATIN CAPITAL LETTER WYNN
+  { 0x01F8, BIDI_L   },  // LATIN CAPITAL LETTER N WITH GRAVE
+  { 0x01F9, BIDI_L   },  // LATIN SMALL LETTER N WITH GRAVE
+  { 0x01FA, BIDI_L   },  // LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+  { 0x01FB, BIDI_L   },  // LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+  { 0x01FC, BIDI_L   },  // LATIN CAPITAL LETTER AE WITH ACUTE
+  { 0x01FD, BIDI_L   },  // LATIN SMALL LETTER AE WITH ACUTE
+  { 0x01FE, BIDI_L   },  // LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+  { 0x01FF, BIDI_L   },  // LATIN SMALL LETTER O WITH STROKE AND ACUTE
+  { 0x0200, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+  { 0x0201, BIDI_L   },  // LATIN SMALL LETTER A WITH DOUBLE GRAVE
+  { 0x0202, BIDI_L   },  // LATIN CAPITAL LETTER A WITH INVERTED BREVE
+  { 0x0203, BIDI_L   },  // LATIN SMALL LETTER A WITH INVERTED BREVE
+  { 0x0204, BIDI_L   },  // LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+  { 0x0205, BIDI_L   },  // LATIN SMALL LETTER E WITH DOUBLE GRAVE
+  { 0x0206, BIDI_L   },  // LATIN CAPITAL LETTER E WITH INVERTED BREVE
+  { 0x0207, BIDI_L   },  // LATIN SMALL LETTER E WITH INVERTED BREVE
+  { 0x0208, BIDI_L   },  // LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+  { 0x0209, BIDI_L   },  // LATIN SMALL LETTER I WITH DOUBLE GRAVE
+  { 0x020A, BIDI_L   },  // LATIN CAPITAL LETTER I WITH INVERTED BREVE
+  { 0x020B, BIDI_L   },  // LATIN SMALL LETTER I WITH INVERTED BREVE
+  { 0x020C, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+  { 0x020D, BIDI_L   },  // LATIN SMALL LETTER O WITH DOUBLE GRAVE
+  { 0x020E, BIDI_L   },  // LATIN CAPITAL LETTER O WITH INVERTED BREVE
+  { 0x020F, BIDI_L   },  // LATIN SMALL LETTER O WITH INVERTED BREVE
+  { 0x0210, BIDI_L   },  // LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+  { 0x0211, BIDI_L   },  // LATIN SMALL LETTER R WITH DOUBLE GRAVE
+  { 0x0212, BIDI_L   },  // LATIN CAPITAL LETTER R WITH INVERTED BREVE
+  { 0x0213, BIDI_L   },  // LATIN SMALL LETTER R WITH INVERTED BREVE
+  { 0x0214, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+  { 0x0215, BIDI_L   },  // LATIN SMALL LETTER U WITH DOUBLE GRAVE
+  { 0x0216, BIDI_L   },  // LATIN CAPITAL LETTER U WITH INVERTED BREVE
+  { 0x0217, BIDI_L   },  // LATIN SMALL LETTER U WITH INVERTED BREVE
+  { 0x0218, BIDI_L   },  // LATIN CAPITAL LETTER S WITH COMMA BELOW
+  { 0x0219, BIDI_L   },  // LATIN SMALL LETTER S WITH COMMA BELOW
+  { 0x021A, BIDI_L   },  // LATIN CAPITAL LETTER T WITH COMMA BELOW
+  { 0x021B, BIDI_L   },  // LATIN SMALL LETTER T WITH COMMA BELOW
+  { 0x021C, BIDI_L   },  // LATIN CAPITAL LETTER YOGH
+  { 0x021D, BIDI_L   },  // LATIN SMALL LETTER YOGH
+  { 0x021E, BIDI_L   },  // LATIN CAPITAL LETTER H WITH CARON
+  { 0x021F, BIDI_L   },  // LATIN SMALL LETTER H WITH CARON
+  { 0x0220, BIDI_L   },  // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+  { 0x0221, BIDI_L   },  // LATIN SMALL LETTER D WITH CURL
+  { 0x0222, BIDI_L   },  // LATIN CAPITAL LETTER OU
+  { 0x0223, BIDI_L   },  // LATIN SMALL LETTER OU
+  { 0x0224, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH HOOK
+  { 0x0225, BIDI_L   },  // LATIN SMALL LETTER Z WITH HOOK
+  { 0x0226, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DOT ABOVE
+  { 0x0227, BIDI_L   },  // LATIN SMALL LETTER A WITH DOT ABOVE
+  { 0x0228, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CEDILLA
+  { 0x0229, BIDI_L   },  // LATIN SMALL LETTER E WITH CEDILLA
+  { 0x022A, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+  { 0x022B, BIDI_L   },  // LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+  { 0x022C, BIDI_L   },  // LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+  { 0x022D, BIDI_L   },  // LATIN SMALL LETTER O WITH TILDE AND MACRON
+  { 0x022E, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DOT ABOVE
+  { 0x022F, BIDI_L   },  // LATIN SMALL LETTER O WITH DOT ABOVE
+  { 0x0230, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+  { 0x0231, BIDI_L   },  // LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+  { 0x0232, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH MACRON
+  { 0x0233, BIDI_L   },  // LATIN SMALL LETTER Y WITH MACRON
+  { 0x0234, BIDI_L   },  // LATIN SMALL LETTER L WITH CURL
+  { 0x0235, BIDI_L   },  // LATIN SMALL LETTER N WITH CURL
+  { 0x0236, BIDI_L   },  // LATIN SMALL LETTER T WITH CURL
+  { 0x0237, BIDI_L   },  // LATIN SMALL LETTER DOTLESS J
+  { 0x0238, BIDI_L   },  // LATIN SMALL LETTER DB DIGRAPH
+  { 0x0239, BIDI_L   },  // LATIN SMALL LETTER QP DIGRAPH
+  { 0x023A, BIDI_L   },  // LATIN CAPITAL LETTER A WITH STROKE
+  { 0x023B, BIDI_L   },  // LATIN CAPITAL LETTER C WITH STROKE
+  { 0x023C, BIDI_L   },  // LATIN SMALL LETTER C WITH STROKE
+  { 0x023D, BIDI_L   },  // LATIN CAPITAL LETTER L WITH BAR
+  { 0x023E, BIDI_L   },  // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+  { 0x023F, BIDI_L   },  // LATIN SMALL LETTER S WITH SWASH TAIL
+  { 0x0240, BIDI_L   },  // LATIN SMALL LETTER Z WITH SWASH TAIL
+  { 0x0241, BIDI_L   },  // LATIN CAPITAL LETTER GLOTTAL STOP
+  { 0x0242, BIDI_L   },  // LATIN SMALL LETTER GLOTTAL STOP
+  { 0x0243, BIDI_L   },  // LATIN CAPITAL LETTER B WITH STROKE
+  { 0x0244, BIDI_L   },  // LATIN CAPITAL LETTER U BAR
+  { 0x0245, BIDI_L   },  // LATIN CAPITAL LETTER TURNED V
+  { 0x0246, BIDI_L   },  // LATIN CAPITAL LETTER E WITH STROKE
+  { 0x0247, BIDI_L   },  // LATIN SMALL LETTER E WITH STROKE
+  { 0x0248, BIDI_L   },  // LATIN CAPITAL LETTER J WITH STROKE
+  { 0x0249, BIDI_L   },  // LATIN SMALL LETTER J WITH STROKE
+  { 0x024A, BIDI_L   },  // LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+  { 0x024B, BIDI_L   },  // LATIN SMALL LETTER Q WITH HOOK TAIL
+  { 0x024C, BIDI_L   },  // LATIN CAPITAL LETTER R WITH STROKE
+  { 0x024D, BIDI_L   },  // LATIN SMALL LETTER R WITH STROKE
+  { 0x024E, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH STROKE
+  { 0x024F, BIDI_L   },  // LATIN SMALL LETTER Y WITH STROKE
+  { 0x0250, BIDI_L   },  // LATIN SMALL LETTER TURNED A
+  { 0x0251, BIDI_L   },  // LATIN SMALL LETTER ALPHA
+  { 0x0252, BIDI_L   },  // LATIN SMALL LETTER TURNED ALPHA
+  { 0x0253, BIDI_L   },  // LATIN SMALL LETTER B WITH HOOK
+  { 0x0254, BIDI_L   },  // LATIN SMALL LETTER OPEN O
+  { 0x0255, BIDI_L   },  // LATIN SMALL LETTER C WITH CURL
+  { 0x0256, BIDI_L   },  // LATIN SMALL LETTER D WITH TAIL
+  { 0x0257, BIDI_L   },  // LATIN SMALL LETTER D WITH HOOK
+  { 0x0258, BIDI_L   },  // LATIN SMALL LETTER REVERSED E
+  { 0x0259, BIDI_L   },  // LATIN SMALL LETTER SCHWA
+  { 0x025A, BIDI_L   },  // LATIN SMALL LETTER SCHWA WITH HOOK
+  { 0x025B, BIDI_L   },  // LATIN SMALL LETTER OPEN E
+  { 0x025C, BIDI_L   },  // LATIN SMALL LETTER REVERSED OPEN E
+  { 0x025D, BIDI_L   },  // LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+  { 0x025E, BIDI_L   },  // LATIN SMALL LETTER CLOSED REVERSED OPEN E
+  { 0x025F, BIDI_L   },  // LATIN SMALL LETTER DOTLESS J WITH STROKE
+  { 0x0260, BIDI_L   },  // LATIN SMALL LETTER G WITH HOOK
+  { 0x0261, BIDI_L   },  // LATIN SMALL LETTER SCRIPT G
+  { 0x0262, BIDI_L   },  // LATIN LETTER SMALL CAPITAL G
+  { 0x0263, BIDI_L   },  // LATIN SMALL LETTER GAMMA
+  { 0x0264, BIDI_L   },  // LATIN SMALL LETTER RAMS HORN
+  { 0x0265, BIDI_L   },  // LATIN SMALL LETTER TURNED H
+  { 0x0266, BIDI_L   },  // LATIN SMALL LETTER H WITH HOOK
+  { 0x0267, BIDI_L   },  // LATIN SMALL LETTER HENG WITH HOOK
+  { 0x0268, BIDI_L   },  // LATIN SMALL LETTER I WITH STROKE
+  { 0x0269, BIDI_L   },  // LATIN SMALL LETTER IOTA
+  { 0x026A, BIDI_L   },  // LATIN LETTER SMALL CAPITAL I
+  { 0x026B, BIDI_L   },  // LATIN SMALL LETTER L WITH MIDDLE TILDE
+  { 0x026C, BIDI_L   },  // LATIN SMALL LETTER L WITH BELT
+  { 0x026D, BIDI_L   },  // LATIN SMALL LETTER L WITH RETROFLEX HOOK
+  { 0x026E, BIDI_L   },  // LATIN SMALL LETTER LEZH
+  { 0x026F, BIDI_L   },  // LATIN SMALL LETTER TURNED M
+  { 0x0270, BIDI_L   },  // LATIN SMALL LETTER TURNED M WITH LONG LEG
+  { 0x0271, BIDI_L   },  // LATIN SMALL LETTER M WITH HOOK
+  { 0x0272, BIDI_L   },  // LATIN SMALL LETTER N WITH LEFT HOOK
+  { 0x0273, BIDI_L   },  // LATIN SMALL LETTER N WITH RETROFLEX HOOK
+  { 0x0274, BIDI_L   },  // LATIN LETTER SMALL CAPITAL N
+  { 0x0275, BIDI_L   },  // LATIN SMALL LETTER BARRED O
+  { 0x0276, BIDI_L   },  // LATIN LETTER SMALL CAPITAL OE
+  { 0x0277, BIDI_L   },  // LATIN SMALL LETTER CLOSED OMEGA
+  { 0x0278, BIDI_L   },  // LATIN SMALL LETTER PHI
+  { 0x0279, BIDI_L   },  // LATIN SMALL LETTER TURNED R
+  { 0x027A, BIDI_L   },  // LATIN SMALL LETTER TURNED R WITH LONG LEG
+  { 0x027B, BIDI_L   },  // LATIN SMALL LETTER TURNED R WITH HOOK
+  { 0x027C, BIDI_L   },  // LATIN SMALL LETTER R WITH LONG LEG
+  { 0x027D, BIDI_L   },  // LATIN SMALL LETTER R WITH TAIL
+  { 0x027E, BIDI_L   },  // LATIN SMALL LETTER R WITH FISHHOOK
+  { 0x027F, BIDI_L   },  // LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+  { 0x0280, BIDI_L   },  // LATIN LETTER SMALL CAPITAL R
+  { 0x0281, BIDI_L   },  // LATIN LETTER SMALL CAPITAL INVERTED R
+  { 0x0282, BIDI_L   },  // LATIN SMALL LETTER S WITH HOOK
+  { 0x0283, BIDI_L   },  // LATIN SMALL LETTER ESH
+  { 0x0284, BIDI_L   },  // LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+  { 0x0285, BIDI_L   },  // LATIN SMALL LETTER SQUAT REVERSED ESH
+  { 0x0286, BIDI_L   },  // LATIN SMALL LETTER ESH WITH CURL
+  { 0x0287, BIDI_L   },  // LATIN SMALL LETTER TURNED T
+  { 0x0288, BIDI_L   },  // LATIN SMALL LETTER T WITH RETROFLEX HOOK
+  { 0x0289, BIDI_L   },  // LATIN SMALL LETTER U BAR
+  { 0x028A, BIDI_L   },  // LATIN SMALL LETTER UPSILON
+  { 0x028B, BIDI_L   },  // LATIN SMALL LETTER V WITH HOOK
+  { 0x028C, BIDI_L   },  // LATIN SMALL LETTER TURNED V
+  { 0x028D, BIDI_L   },  // LATIN SMALL LETTER TURNED W
+  { 0x028E, BIDI_L   },  // LATIN SMALL LETTER TURNED Y
+  { 0x028F, BIDI_L   },  // LATIN LETTER SMALL CAPITAL Y
+  { 0x0290, BIDI_L   },  // LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+  { 0x0291, BIDI_L   },  // LATIN SMALL LETTER Z WITH CURL
+  { 0x0292, BIDI_L   },  // LATIN SMALL LETTER EZH
+  { 0x0293, BIDI_L   },  // LATIN SMALL LETTER EZH WITH CURL
+  { 0x0294, BIDI_L   },  // LATIN LETTER GLOTTAL STOP
+  { 0x0295, BIDI_L   },  // LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+  { 0x0296, BIDI_L   },  // LATIN LETTER INVERTED GLOTTAL STOP
+  { 0x0297, BIDI_L   },  // LATIN LETTER STRETCHED C
+  { 0x0298, BIDI_L   },  // LATIN LETTER BILABIAL CLICK
+  { 0x0299, BIDI_L   },  // LATIN LETTER SMALL CAPITAL B
+  { 0x029A, BIDI_L   },  // LATIN SMALL LETTER CLOSED OPEN E
+  { 0x029B, BIDI_L   },  // LATIN LETTER SMALL CAPITAL G WITH HOOK
+  { 0x029C, BIDI_L   },  // LATIN LETTER SMALL CAPITAL H
+  { 0x029D, BIDI_L   },  // LATIN SMALL LETTER J WITH CROSSED-TAIL
+  { 0x029E, BIDI_L   },  // LATIN SMALL LETTER TURNED K
+  { 0x029F, BIDI_L   },  // LATIN LETTER SMALL CAPITAL L
+  { 0x02A0, BIDI_L   },  // LATIN SMALL LETTER Q WITH HOOK
+  { 0x02A1, BIDI_L   },  // LATIN LETTER GLOTTAL STOP WITH STROKE
+  { 0x02A2, BIDI_L   },  // LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+  { 0x02A3, BIDI_L   },  // LATIN SMALL LETTER DZ DIGRAPH
+  { 0x02A4, BIDI_L   },  // LATIN SMALL LETTER DEZH DIGRAPH
+  { 0x02A5, BIDI_L   },  // LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+  { 0x02A6, BIDI_L   },  // LATIN SMALL LETTER TS DIGRAPH
+  { 0x02A7, BIDI_L   },  // LATIN SMALL LETTER TESH DIGRAPH
+  { 0x02A8, BIDI_L   },  // LATIN SMALL LETTER TC DIGRAPH WITH CURL
+  { 0x02A9, BIDI_L   },  // LATIN SMALL LETTER FENG DIGRAPH
+  { 0x02AA, BIDI_L   },  // LATIN SMALL LETTER LS DIGRAPH
+  { 0x02AB, BIDI_L   },  // LATIN SMALL LETTER LZ DIGRAPH
+  { 0x02AC, BIDI_L   },  // LATIN LETTER BILABIAL PERCUSSIVE
+  { 0x02AD, BIDI_L   },  // LATIN LETTER BIDENTAL PERCUSSIVE
+  { 0x02AE, BIDI_L   },  // LATIN SMALL LETTER TURNED H WITH FISHHOOK
+  { 0x02AF, BIDI_L   },  // LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+  { 0x02B0, BIDI_L   },  // MODIFIER LETTER SMALL H
+  { 0x02B1, BIDI_L   },  // MODIFIER LETTER SMALL H WITH HOOK
+  { 0x02B2, BIDI_L   },  // MODIFIER LETTER SMALL J
+  { 0x02B3, BIDI_L   },  // MODIFIER LETTER SMALL R
+  { 0x02B4, BIDI_L   },  // MODIFIER LETTER SMALL TURNED R
+  { 0x02B5, BIDI_L   },  // MODIFIER LETTER SMALL TURNED R WITH HOOK
+  { 0x02B6, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL INVERTED R
+  { 0x02B7, BIDI_L   },  // MODIFIER LETTER SMALL W
+  { 0x02B8, BIDI_L   },  // MODIFIER LETTER SMALL Y
+  { 0x02B9, BIDI_ON  },  // MODIFIER LETTER PRIME
+  { 0x02BA, BIDI_ON  },  // MODIFIER LETTER DOUBLE PRIME
+  { 0x02BB, BIDI_L   },  // MODIFIER LETTER TURNED COMMA
+  { 0x02BC, BIDI_L   },  // MODIFIER LETTER APOSTROPHE
+  { 0x02BD, BIDI_L   },  // MODIFIER LETTER REVERSED COMMA
+  { 0x02BE, BIDI_L   },  // MODIFIER LETTER RIGHT HALF RING
+  { 0x02BF, BIDI_L   },  // MODIFIER LETTER LEFT HALF RING
+  { 0x02C0, BIDI_L   },  // MODIFIER LETTER GLOTTAL STOP
+  { 0x02C1, BIDI_L   },  // MODIFIER LETTER REVERSED GLOTTAL STOP
+  { 0x02C2, BIDI_ON  },  // MODIFIER LETTER LEFT ARROWHEAD
+  { 0x02C3, BIDI_ON  },  // MODIFIER LETTER RIGHT ARROWHEAD
+  { 0x02C4, BIDI_ON  },  // MODIFIER LETTER UP ARROWHEAD
+  { 0x02C5, BIDI_ON  },  // MODIFIER LETTER DOWN ARROWHEAD
+  { 0x02C6, BIDI_ON  },  // MODIFIER LETTER CIRCUMFLEX ACCENT
+  { 0x02C7, BIDI_ON  },  // CARON
+  { 0x02C8, BIDI_ON  },  // MODIFIER LETTER VERTICAL LINE
+  { 0x02C9, BIDI_ON  },  // MODIFIER LETTER MACRON
+  { 0x02CA, BIDI_ON  },  // MODIFIER LETTER ACUTE ACCENT
+  { 0x02CB, BIDI_ON  },  // MODIFIER LETTER GRAVE ACCENT
+  { 0x02CC, BIDI_ON  },  // MODIFIER LETTER LOW VERTICAL LINE
+  { 0x02CD, BIDI_ON  },  // MODIFIER LETTER LOW MACRON
+  { 0x02CE, BIDI_ON  },  // MODIFIER LETTER LOW GRAVE ACCENT
+  { 0x02CF, BIDI_ON  },  // MODIFIER LETTER LOW ACUTE ACCENT
+  { 0x02D0, BIDI_L   },  // MODIFIER LETTER TRIANGULAR COLON
+  { 0x02D1, BIDI_L   },  // MODIFIER LETTER HALF TRIANGULAR COLON
+  { 0x02D2, BIDI_ON  },  // MODIFIER LETTER CENTRED RIGHT HALF RING
+  { 0x02D3, BIDI_ON  },  // MODIFIER LETTER CENTRED LEFT HALF RING
+  { 0x02D4, BIDI_ON  },  // MODIFIER LETTER UP TACK
+  { 0x02D5, BIDI_ON  },  // MODIFIER LETTER DOWN TACK
+  { 0x02D6, BIDI_ON  },  // MODIFIER LETTER PLUS SIGN
+  { 0x02D7, BIDI_ON  },  // MODIFIER LETTER MINUS SIGN
+  { 0x02D8, BIDI_ON  },  // BREVE
+  { 0x02D9, BIDI_ON  },  // DOT ABOVE
+  { 0x02DA, BIDI_ON  },  // RING ABOVE
+  { 0x02DB, BIDI_ON  },  // OGONEK
+  { 0x02DC, BIDI_ON  },  // SMALL TILDE
+  { 0x02DD, BIDI_ON  },  // DOUBLE ACUTE ACCENT
+  { 0x02DE, BIDI_ON  },  // MODIFIER LETTER RHOTIC HOOK
+  { 0x02DF, BIDI_ON  },  // MODIFIER LETTER CROSS ACCENT
+  { 0x02E0, BIDI_L   },  // MODIFIER LETTER SMALL GAMMA
+  { 0x02E1, BIDI_L   },  // MODIFIER LETTER SMALL L
+  { 0x02E2, BIDI_L   },  // MODIFIER LETTER SMALL S
+  { 0x02E3, BIDI_L   },  // MODIFIER LETTER SMALL X
+  { 0x02E4, BIDI_L   },  // MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+  { 0x02E5, BIDI_ON  },  // MODIFIER LETTER EXTRA-HIGH TONE BAR
+  { 0x02E6, BIDI_ON  },  // MODIFIER LETTER HIGH TONE BAR
+  { 0x02E7, BIDI_ON  },  // MODIFIER LETTER MID TONE BAR
+  { 0x02E8, BIDI_ON  },  // MODIFIER LETTER LOW TONE BAR
+  { 0x02E9, BIDI_ON  },  // MODIFIER LETTER EXTRA-LOW TONE BAR
+  { 0x02EA, BIDI_ON  },  // MODIFIER LETTER YIN DEPARTING TONE MARK
+  { 0x02EB, BIDI_ON  },  // MODIFIER LETTER YANG DEPARTING TONE MARK
+  { 0x02EC, BIDI_ON  },  // MODIFIER LETTER VOICING
+  { 0x02ED, BIDI_ON  },  // MODIFIER LETTER UNASPIRATED
+  { 0x02EE, BIDI_L   },  // MODIFIER LETTER DOUBLE APOSTROPHE
+  { 0x02EF, BIDI_ON  },  // MODIFIER LETTER LOW DOWN ARROWHEAD
+  { 0x02F0, BIDI_ON  },  // MODIFIER LETTER LOW UP ARROWHEAD
+  { 0x02F1, BIDI_ON  },  // MODIFIER LETTER LOW LEFT ARROWHEAD
+  { 0x02F2, BIDI_ON  },  // MODIFIER LETTER LOW RIGHT ARROWHEAD
+  { 0x02F3, BIDI_ON  },  // MODIFIER LETTER LOW RING
+  { 0x02F4, BIDI_ON  },  // MODIFIER LETTER MIDDLE GRAVE ACCENT
+  { 0x02F5, BIDI_ON  },  // MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+  { 0x02F6, BIDI_ON  },  // MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+  { 0x02F7, BIDI_ON  },  // MODIFIER LETTER LOW TILDE
+  { 0x02F8, BIDI_ON  },  // MODIFIER LETTER RAISED COLON
+  { 0x02F9, BIDI_ON  },  // MODIFIER LETTER BEGIN HIGH TONE
+  { 0x02FA, BIDI_ON  },  // MODIFIER LETTER END HIGH TONE
+  { 0x02FB, BIDI_ON  },  // MODIFIER LETTER BEGIN LOW TONE
+  { 0x02FC, BIDI_ON  },  // MODIFIER LETTER END LOW TONE
+  { 0x02FD, BIDI_ON  },  // MODIFIER LETTER SHELF
+  { 0x02FE, BIDI_ON  },  // MODIFIER LETTER OPEN SHELF
+  { 0x02FF, BIDI_ON  },  // MODIFIER LETTER LOW LEFT ARROW
+  { 0x0300, BIDI_NSM },  // COMBINING GRAVE ACCENT
+  { 0x0301, BIDI_NSM },  // COMBINING ACUTE ACCENT
+  { 0x0302, BIDI_NSM },  // COMBINING CIRCUMFLEX ACCENT
+  { 0x0303, BIDI_NSM },  // COMBINING TILDE
+  { 0x0304, BIDI_NSM },  // COMBINING MACRON
+  { 0x0305, BIDI_NSM },  // COMBINING OVERLINE
+  { 0x0306, BIDI_NSM },  // COMBINING BREVE
+  { 0x0307, BIDI_NSM },  // COMBINING DOT ABOVE
+  { 0x0308, BIDI_NSM },  // COMBINING DIAERESIS
+  { 0x0309, BIDI_NSM },  // COMBINING HOOK ABOVE
+  { 0x030A, BIDI_NSM },  // COMBINING RING ABOVE
+  { 0x030B, BIDI_NSM },  // COMBINING DOUBLE ACUTE ACCENT
+  { 0x030C, BIDI_NSM },  // COMBINING CARON
+  { 0x030D, BIDI_NSM },  // COMBINING VERTICAL LINE ABOVE
+  { 0x030E, BIDI_NSM },  // COMBINING DOUBLE VERTICAL LINE ABOVE
+  { 0x030F, BIDI_NSM },  // COMBINING DOUBLE GRAVE ACCENT
+  { 0x0310, BIDI_NSM },  // COMBINING CANDRABINDU
+  { 0x0311, BIDI_NSM },  // COMBINING INVERTED BREVE
+  { 0x0312, BIDI_NSM },  // COMBINING TURNED COMMA ABOVE
+  { 0x0313, BIDI_NSM },  // COMBINING COMMA ABOVE
+  { 0x0314, BIDI_NSM },  // COMBINING REVERSED COMMA ABOVE
+  { 0x0315, BIDI_NSM },  // COMBINING COMMA ABOVE RIGHT
+  { 0x0316, BIDI_NSM },  // COMBINING GRAVE ACCENT BELOW
+  { 0x0317, BIDI_NSM },  // COMBINING ACUTE ACCENT BELOW
+  { 0x0318, BIDI_NSM },  // COMBINING LEFT TACK BELOW
+  { 0x0319, BIDI_NSM },  // COMBINING RIGHT TACK BELOW
+  { 0x031A, BIDI_NSM },  // COMBINING LEFT ANGLE ABOVE
+  { 0x031B, BIDI_NSM },  // COMBINING HORN
+  { 0x031C, BIDI_NSM },  // COMBINING LEFT HALF RING BELOW
+  { 0x031D, BIDI_NSM },  // COMBINING UP TACK BELOW
+  { 0x031E, BIDI_NSM },  // COMBINING DOWN TACK BELOW
+  { 0x031F, BIDI_NSM },  // COMBINING PLUS SIGN BELOW
+  { 0x0320, BIDI_NSM },  // COMBINING MINUS SIGN BELOW
+  { 0x0321, BIDI_NSM },  // COMBINING PALATALIZED HOOK BELOW
+  { 0x0322, BIDI_NSM },  // COMBINING RETROFLEX HOOK BELOW
+  { 0x0323, BIDI_NSM },  // COMBINING DOT BELOW
+  { 0x0324, BIDI_NSM },  // COMBINING DIAERESIS BELOW
+  { 0x0325, BIDI_NSM },  // COMBINING RING BELOW
+  { 0x0326, BIDI_NSM },  // COMBINING COMMA BELOW
+  { 0x0327, BIDI_NSM },  // COMBINING CEDILLA
+  { 0x0328, BIDI_NSM },  // COMBINING OGONEK
+  { 0x0329, BIDI_NSM },  // COMBINING VERTICAL LINE BELOW
+  { 0x032A, BIDI_NSM },  // COMBINING BRIDGE BELOW
+  { 0x032B, BIDI_NSM },  // COMBINING INVERTED DOUBLE ARCH BELOW
+  { 0x032C, BIDI_NSM },  // COMBINING CARON BELOW
+  { 0x032D, BIDI_NSM },  // COMBINING CIRCUMFLEX ACCENT BELOW
+  { 0x032E, BIDI_NSM },  // COMBINING BREVE BELOW
+  { 0x032F, BIDI_NSM },  // COMBINING INVERTED BREVE BELOW
+  { 0x0330, BIDI_NSM },  // COMBINING TILDE BELOW
+  { 0x0331, BIDI_NSM },  // COMBINING MACRON BELOW
+  { 0x0332, BIDI_NSM },  // COMBINING LOW LINE
+  { 0x0333, BIDI_NSM },  // COMBINING DOUBLE LOW LINE
+  { 0x0334, BIDI_NSM },  // COMBINING TILDE OVERLAY
+  { 0x0335, BIDI_NSM },  // COMBINING SHORT STROKE OVERLAY
+  { 0x0336, BIDI_NSM },  // COMBINING LONG STROKE OVERLAY
+  { 0x0337, BIDI_NSM },  // COMBINING SHORT SOLIDUS OVERLAY
+  { 0x0338, BIDI_NSM },  // COMBINING LONG SOLIDUS OVERLAY
+  { 0x0339, BIDI_NSM },  // COMBINING RIGHT HALF RING BELOW
+  { 0x033A, BIDI_NSM },  // COMBINING INVERTED BRIDGE BELOW
+  { 0x033B, BIDI_NSM },  // COMBINING SQUARE BELOW
+  { 0x033C, BIDI_NSM },  // COMBINING SEAGULL BELOW
+  { 0x033D, BIDI_NSM },  // COMBINING X ABOVE
+  { 0x033E, BIDI_NSM },  // COMBINING VERTICAL TILDE
+  { 0x033F, BIDI_NSM },  // COMBINING DOUBLE OVERLINE
+  { 0x0340, BIDI_NSM },  // COMBINING GRAVE TONE MARK
+  { 0x0341, BIDI_NSM },  // COMBINING ACUTE TONE MARK
+  { 0x0342, BIDI_NSM },  // COMBINING GREEK PERISPOMENI
+  { 0x0343, BIDI_NSM },  // COMBINING GREEK KORONIS
+  { 0x0344, BIDI_NSM },  // COMBINING GREEK DIALYTIKA TONOS
+  { 0x0345, BIDI_NSM },  // COMBINING GREEK YPOGEGRAMMENI
+  { 0x0346, BIDI_NSM },  // COMBINING BRIDGE ABOVE
+  { 0x0347, BIDI_NSM },  // COMBINING EQUALS SIGN BELOW
+  { 0x0348, BIDI_NSM },  // COMBINING DOUBLE VERTICAL LINE BELOW
+  { 0x0349, BIDI_NSM },  // COMBINING LEFT ANGLE BELOW
+  { 0x034A, BIDI_NSM },  // COMBINING NOT TILDE ABOVE
+  { 0x034B, BIDI_NSM },  // COMBINING HOMOTHETIC ABOVE
+  { 0x034C, BIDI_NSM },  // COMBINING ALMOST EQUAL TO ABOVE
+  { 0x034D, BIDI_NSM },  // COMBINING LEFT RIGHT ARROW BELOW
+  { 0x034E, BIDI_NSM },  // COMBINING UPWARDS ARROW BELOW
+  { 0x034F, BIDI_NSM },  // COMBINING GRAPHEME JOINER
+  { 0x0350, BIDI_NSM },  // COMBINING RIGHT ARROWHEAD ABOVE
+  { 0x0351, BIDI_NSM },  // COMBINING LEFT HALF RING ABOVE
+  { 0x0352, BIDI_NSM },  // COMBINING FERMATA
+  { 0x0353, BIDI_NSM },  // COMBINING X BELOW
+  { 0x0354, BIDI_NSM },  // COMBINING LEFT ARROWHEAD BELOW
+  { 0x0355, BIDI_NSM },  // COMBINING RIGHT ARROWHEAD BELOW
+  { 0x0356, BIDI_NSM },  // COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+  { 0x0357, BIDI_NSM },  // COMBINING RIGHT HALF RING ABOVE
+  { 0x0358, BIDI_NSM },  // COMBINING DOT ABOVE RIGHT
+  { 0x0359, BIDI_NSM },  // COMBINING ASTERISK BELOW
+  { 0x035A, BIDI_NSM },  // COMBINING DOUBLE RING BELOW
+  { 0x035B, BIDI_NSM },  // COMBINING ZIGZAG ABOVE
+  { 0x035C, BIDI_NSM },  // COMBINING DOUBLE BREVE BELOW
+  { 0x035D, BIDI_NSM },  // COMBINING DOUBLE BREVE
+  { 0x035E, BIDI_NSM },  // COMBINING DOUBLE MACRON
+  { 0x035F, BIDI_NSM },  // COMBINING DOUBLE MACRON BELOW
+  { 0x0360, BIDI_NSM },  // COMBINING DOUBLE TILDE
+  { 0x0361, BIDI_NSM },  // COMBINING DOUBLE INVERTED BREVE
+  { 0x0362, BIDI_NSM },  // COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+  { 0x0363, BIDI_NSM },  // COMBINING LATIN SMALL LETTER A
+  { 0x0364, BIDI_NSM },  // COMBINING LATIN SMALL LETTER E
+  { 0x0365, BIDI_NSM },  // COMBINING LATIN SMALL LETTER I
+  { 0x0366, BIDI_NSM },  // COMBINING LATIN SMALL LETTER O
+  { 0x0367, BIDI_NSM },  // COMBINING LATIN SMALL LETTER U
+  { 0x0368, BIDI_NSM },  // COMBINING LATIN SMALL LETTER C
+  { 0x0369, BIDI_NSM },  // COMBINING LATIN SMALL LETTER D
+  { 0x036A, BIDI_NSM },  // COMBINING LATIN SMALL LETTER H
+  { 0x036B, BIDI_NSM },  // COMBINING LATIN SMALL LETTER M
+  { 0x036C, BIDI_NSM },  // COMBINING LATIN SMALL LETTER R
+  { 0x036D, BIDI_NSM },  // COMBINING LATIN SMALL LETTER T
+  { 0x036E, BIDI_NSM },  // COMBINING LATIN SMALL LETTER V
+  { 0x036F, BIDI_NSM },  // COMBINING LATIN SMALL LETTER X
+  { 0x0370, BIDI_L   },  // GREEK CAPITAL LETTER HETA
+  { 0x0371, BIDI_L   },  // GREEK SMALL LETTER HETA
+  { 0x0372, BIDI_L   },  // GREEK CAPITAL LETTER ARCHAIC SAMPI
+  { 0x0373, BIDI_L   },  // GREEK SMALL LETTER ARCHAIC SAMPI
+  { 0x0374, BIDI_ON  },  // GREEK NUMERAL SIGN
+  { 0x0375, BIDI_ON  },  // GREEK LOWER NUMERAL SIGN
+  { 0x0376, BIDI_L   },  // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+  { 0x0377, BIDI_L   },  // GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+  { 0x037A, BIDI_L   },  // GREEK YPOGEGRAMMENI
+  { 0x037B, BIDI_L   },  // GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
+  { 0x037C, BIDI_L   },  // GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
+  { 0x037D, BIDI_L   },  // GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+  { 0x037E, BIDI_ON  },  // GREEK QUESTION MARK
+  { 0x037F, BIDI_L   },  // GREEK CAPITAL LETTER YOT
+  { 0x0384, BIDI_ON  },  // GREEK TONOS
+  { 0x0385, BIDI_ON  },  // GREEK DIALYTIKA TONOS
+  { 0x0386, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH TONOS
+  { 0x0387, BIDI_ON  },  // GREEK ANO TELEIA
+  { 0x0388, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH TONOS
+  { 0x0389, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH TONOS
+  { 0x038A, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH TONOS
+  { 0x038C, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH TONOS
+  { 0x038E, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH TONOS
+  { 0x038F, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH TONOS
+  { 0x0390, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+  { 0x0391, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA
+  { 0x0392, BIDI_L   },  // GREEK CAPITAL LETTER BETA
+  { 0x0393, BIDI_L   },  // GREEK CAPITAL LETTER GAMMA
+  { 0x0394, BIDI_L   },  // GREEK CAPITAL LETTER DELTA
+  { 0x0395, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON
+  { 0x0396, BIDI_L   },  // GREEK CAPITAL LETTER ZETA
+  { 0x0397, BIDI_L   },  // GREEK CAPITAL LETTER ETA
+  { 0x0398, BIDI_L   },  // GREEK CAPITAL LETTER THETA
+  { 0x0399, BIDI_L   },  // GREEK CAPITAL LETTER IOTA
+  { 0x039A, BIDI_L   },  // GREEK CAPITAL LETTER KAPPA
+  { 0x039B, BIDI_L   },  // GREEK CAPITAL LETTER LAMDA
+  { 0x039C, BIDI_L   },  // GREEK CAPITAL LETTER MU
+  { 0x039D, BIDI_L   },  // GREEK CAPITAL LETTER NU
+  { 0x039E, BIDI_L   },  // GREEK CAPITAL LETTER XI
+  { 0x039F, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON
+  { 0x03A0, BIDI_L   },  // GREEK CAPITAL LETTER PI
+  { 0x03A1, BIDI_L   },  // GREEK CAPITAL LETTER RHO
+  { 0x03A3, BIDI_L   },  // GREEK CAPITAL LETTER SIGMA
+  { 0x03A4, BIDI_L   },  // GREEK CAPITAL LETTER TAU
+  { 0x03A5, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON
+  { 0x03A6, BIDI_L   },  // GREEK CAPITAL LETTER PHI
+  { 0x03A7, BIDI_L   },  // GREEK CAPITAL LETTER CHI
+  { 0x03A8, BIDI_L   },  // GREEK CAPITAL LETTER PSI
+  { 0x03A9, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA
+  { 0x03AA, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+  { 0x03AB, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+  { 0x03AC, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH TONOS
+  { 0x03AD, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH TONOS
+  { 0x03AE, BIDI_L   },  // GREEK SMALL LETTER ETA WITH TONOS
+  { 0x03AF, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH TONOS
+  { 0x03B0, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+  { 0x03B1, BIDI_L   },  // GREEK SMALL LETTER ALPHA
+  { 0x03B2, BIDI_L   },  // GREEK SMALL LETTER BETA
+  { 0x03B3, BIDI_L   },  // GREEK SMALL LETTER GAMMA
+  { 0x03B4, BIDI_L   },  // GREEK SMALL LETTER DELTA
+  { 0x03B5, BIDI_L   },  // GREEK SMALL LETTER EPSILON
+  { 0x03B6, BIDI_L   },  // GREEK SMALL LETTER ZETA
+  { 0x03B7, BIDI_L   },  // GREEK SMALL LETTER ETA
+  { 0x03B8, BIDI_L   },  // GREEK SMALL LETTER THETA
+  { 0x03B9, BIDI_L   },  // GREEK SMALL LETTER IOTA
+  { 0x03BA, BIDI_L   },  // GREEK SMALL LETTER KAPPA
+  { 0x03BB, BIDI_L   },  // GREEK SMALL LETTER LAMDA
+  { 0x03BC, BIDI_L   },  // GREEK SMALL LETTER MU
+  { 0x03BD, BIDI_L   },  // GREEK SMALL LETTER NU
+  { 0x03BE, BIDI_L   },  // GREEK SMALL LETTER XI
+  { 0x03BF, BIDI_L   },  // GREEK SMALL LETTER OMICRON
+  { 0x03C0, BIDI_L   },  // GREEK SMALL LETTER PI
+  { 0x03C1, BIDI_L   },  // GREEK SMALL LETTER RHO
+  { 0x03C2, BIDI_L   },  // GREEK SMALL LETTER FINAL SIGMA
+  { 0x03C3, BIDI_L   },  // GREEK SMALL LETTER SIGMA
+  { 0x03C4, BIDI_L   },  // GREEK SMALL LETTER TAU
+  { 0x03C5, BIDI_L   },  // GREEK SMALL LETTER UPSILON
+  { 0x03C6, BIDI_L   },  // GREEK SMALL LETTER PHI
+  { 0x03C7, BIDI_L   },  // GREEK SMALL LETTER CHI
+  { 0x03C8, BIDI_L   },  // GREEK SMALL LETTER PSI
+  { 0x03C9, BIDI_L   },  // GREEK SMALL LETTER OMEGA
+  { 0x03CA, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DIALYTIKA
+  { 0x03CB, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+  { 0x03CC, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH TONOS
+  { 0x03CD, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH TONOS
+  { 0x03CE, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH TONOS
+  { 0x03CF, BIDI_L   },  // GREEK CAPITAL KAI SYMBOL
+  { 0x03D0, BIDI_L   },  // GREEK BETA SYMBOL
+  { 0x03D1, BIDI_L   },  // GREEK THETA SYMBOL
+  { 0x03D2, BIDI_L   },  // GREEK UPSILON WITH HOOK SYMBOL
+  { 0x03D3, BIDI_L   },  // GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+  { 0x03D4, BIDI_L   },  // GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+  { 0x03D5, BIDI_L   },  // GREEK PHI SYMBOL
+  { 0x03D6, BIDI_L   },  // GREEK PI SYMBOL
+  { 0x03D7, BIDI_L   },  // GREEK KAI SYMBOL
+  { 0x03D8, BIDI_L   },  // GREEK LETTER ARCHAIC KOPPA
+  { 0x03D9, BIDI_L   },  // GREEK SMALL LETTER ARCHAIC KOPPA
+  { 0x03DA, BIDI_L   },  // GREEK LETTER STIGMA
+  { 0x03DB, BIDI_L   },  // GREEK SMALL LETTER STIGMA
+  { 0x03DC, BIDI_L   },  // GREEK LETTER DIGAMMA
+  { 0x03DD, BIDI_L   },  // GREEK SMALL LETTER DIGAMMA
+  { 0x03DE, BIDI_L   },  // GREEK LETTER KOPPA
+  { 0x03DF, BIDI_L   },  // GREEK SMALL LETTER KOPPA
+  { 0x03E0, BIDI_L   },  // GREEK LETTER SAMPI
+  { 0x03E1, BIDI_L   },  // GREEK SMALL LETTER SAMPI
+  { 0x03E2, BIDI_L   },  // COPTIC CAPITAL LETTER SHEI
+  { 0x03E3, BIDI_L   },  // COPTIC SMALL LETTER SHEI
+  { 0x03E4, BIDI_L   },  // COPTIC CAPITAL LETTER FEI
+  { 0x03E5, BIDI_L   },  // COPTIC SMALL LETTER FEI
+  { 0x03E6, BIDI_L   },  // COPTIC CAPITAL LETTER KHEI
+  { 0x03E7, BIDI_L   },  // COPTIC SMALL LETTER KHEI
+  { 0x03E8, BIDI_L   },  // COPTIC CAPITAL LETTER HORI
+  { 0x03E9, BIDI_L   },  // COPTIC SMALL LETTER HORI
+  { 0x03EA, BIDI_L   },  // COPTIC CAPITAL LETTER GANGIA
+  { 0x03EB, BIDI_L   },  // COPTIC SMALL LETTER GANGIA
+  { 0x03EC, BIDI_L   },  // COPTIC CAPITAL LETTER SHIMA
+  { 0x03ED, BIDI_L   },  // COPTIC SMALL LETTER SHIMA
+  { 0x03EE, BIDI_L   },  // COPTIC CAPITAL LETTER DEI
+  { 0x03EF, BIDI_L   },  // COPTIC SMALL LETTER DEI
+  { 0x03F0, BIDI_L   },  // GREEK KAPPA SYMBOL
+  { 0x03F1, BIDI_L   },  // GREEK RHO SYMBOL
+  { 0x03F2, BIDI_L   },  // GREEK LUNATE SIGMA SYMBOL
+  { 0x03F3, BIDI_L   },  // GREEK LETTER YOT
+  { 0x03F4, BIDI_L   },  // GREEK CAPITAL THETA SYMBOL
+  { 0x03F5, BIDI_L   },  // GREEK LUNATE EPSILON SYMBOL
+  { 0x03F6, BIDI_ON  },  // GREEK REVERSED LUNATE EPSILON SYMBOL
+  { 0x03F7, BIDI_L   },  // GREEK CAPITAL LETTER SHO
+  { 0x03F8, BIDI_L   },  // GREEK SMALL LETTER SHO
+  { 0x03F9, BIDI_L   },  // GREEK CAPITAL LUNATE SIGMA SYMBOL
+  { 0x03FA, BIDI_L   },  // GREEK CAPITAL LETTER SAN
+  { 0x03FB, BIDI_L   },  // GREEK SMALL LETTER SAN
+  { 0x03FC, BIDI_L   },  // GREEK RHO WITH STROKE SYMBOL
+  { 0x03FD, BIDI_L   },  // GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+  { 0x03FE, BIDI_L   },  // GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+  { 0x03FF, BIDI_L   },  // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+  { 0x0400, BIDI_L   },  // CYRILLIC CAPITAL LETTER IE WITH GRAVE
+  { 0x0401, BIDI_L   },  // CYRILLIC CAPITAL LETTER IO
+  { 0x0402, BIDI_L   },  // CYRILLIC CAPITAL LETTER DJE
+  { 0x0403, BIDI_L   },  // CYRILLIC CAPITAL LETTER GJE
+  { 0x0404, BIDI_L   },  // CYRILLIC CAPITAL LETTER UKRAINIAN IE
+  { 0x0405, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZE
+  { 0x0406, BIDI_L   },  // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+  { 0x0407, BIDI_L   },  // CYRILLIC CAPITAL LETTER YI
+  { 0x0408, BIDI_L   },  // CYRILLIC CAPITAL LETTER JE
+  { 0x0409, BIDI_L   },  // CYRILLIC CAPITAL LETTER LJE
+  { 0x040A, BIDI_L   },  // CYRILLIC CAPITAL LETTER NJE
+  { 0x040B, BIDI_L   },  // CYRILLIC CAPITAL LETTER TSHE
+  { 0x040C, BIDI_L   },  // CYRILLIC CAPITAL LETTER KJE
+  { 0x040D, BIDI_L   },  // CYRILLIC CAPITAL LETTER I WITH GRAVE
+  { 0x040E, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHORT U
+  { 0x040F, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZHE
+  { 0x0410, BIDI_L   },  // CYRILLIC CAPITAL LETTER A
+  { 0x0411, BIDI_L   },  // CYRILLIC CAPITAL LETTER BE
+  { 0x0412, BIDI_L   },  // CYRILLIC CAPITAL LETTER VE
+  { 0x0413, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE
+  { 0x0414, BIDI_L   },  // CYRILLIC CAPITAL LETTER DE
+  { 0x0415, BIDI_L   },  // CYRILLIC CAPITAL LETTER IE
+  { 0x0416, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZHE
+  { 0x0417, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZE
+  { 0x0418, BIDI_L   },  // CYRILLIC CAPITAL LETTER I
+  { 0x0419, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHORT I
+  { 0x041A, BIDI_L   },  // CYRILLIC CAPITAL LETTER KA
+  { 0x041B, BIDI_L   },  // CYRILLIC CAPITAL LETTER EL
+  { 0x041C, BIDI_L   },  // CYRILLIC CAPITAL LETTER EM
+  { 0x041D, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN
+  { 0x041E, BIDI_L   },  // CYRILLIC CAPITAL LETTER O
+  { 0x041F, BIDI_L   },  // CYRILLIC CAPITAL LETTER PE
+  { 0x0420, BIDI_L   },  // CYRILLIC CAPITAL LETTER ER
+  { 0x0421, BIDI_L   },  // CYRILLIC CAPITAL LETTER ES
+  { 0x0422, BIDI_L   },  // CYRILLIC CAPITAL LETTER TE
+  { 0x0423, BIDI_L   },  // CYRILLIC CAPITAL LETTER U
+  { 0x0424, BIDI_L   },  // CYRILLIC CAPITAL LETTER EF
+  { 0x0425, BIDI_L   },  // CYRILLIC CAPITAL LETTER HA
+  { 0x0426, BIDI_L   },  // CYRILLIC CAPITAL LETTER TSE
+  { 0x0427, BIDI_L   },  // CYRILLIC CAPITAL LETTER CHE
+  { 0x0428, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHA
+  { 0x0429, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHCHA
+  { 0x042A, BIDI_L   },  // CYRILLIC CAPITAL LETTER HARD SIGN
+  { 0x042B, BIDI_L   },  // CYRILLIC CAPITAL LETTER YERU
+  { 0x042C, BIDI_L   },  // CYRILLIC CAPITAL LETTER SOFT SIGN
+  { 0x042D, BIDI_L   },  // CYRILLIC CAPITAL LETTER E
+  { 0x042E, BIDI_L   },  // CYRILLIC CAPITAL LETTER YU
+  { 0x042F, BIDI_L   },  // CYRILLIC CAPITAL LETTER YA
+  { 0x0430, BIDI_L   },  // CYRILLIC SMALL LETTER A
+  { 0x0431, BIDI_L   },  // CYRILLIC SMALL LETTER BE
+  { 0x0432, BIDI_L   },  // CYRILLIC SMALL LETTER VE
+  { 0x0433, BIDI_L   },  // CYRILLIC SMALL LETTER GHE
+  { 0x0434, BIDI_L   },  // CYRILLIC SMALL LETTER DE
+  { 0x0435, BIDI_L   },  // CYRILLIC SMALL LETTER IE
+  { 0x0436, BIDI_L   },  // CYRILLIC SMALL LETTER ZHE
+  { 0x0437, BIDI_L   },  // CYRILLIC SMALL LETTER ZE
+  { 0x0438, BIDI_L   },  // CYRILLIC SMALL LETTER I
+  { 0x0439, BIDI_L   },  // CYRILLIC SMALL LETTER SHORT I
+  { 0x043A, BIDI_L   },  // CYRILLIC SMALL LETTER KA
+  { 0x043B, BIDI_L   },  // CYRILLIC SMALL LETTER EL
+  { 0x043C, BIDI_L   },  // CYRILLIC SMALL LETTER EM
+  { 0x043D, BIDI_L   },  // CYRILLIC SMALL LETTER EN
+  { 0x043E, BIDI_L   },  // CYRILLIC SMALL LETTER O
+  { 0x043F, BIDI_L   },  // CYRILLIC SMALL LETTER PE
+  { 0x0440, BIDI_L   },  // CYRILLIC SMALL LETTER ER
+  { 0x0441, BIDI_L   },  // CYRILLIC SMALL LETTER ES
+  { 0x0442, BIDI_L   },  // CYRILLIC SMALL LETTER TE
+  { 0x0443, BIDI_L   },  // CYRILLIC SMALL LETTER U
+  { 0x0444, BIDI_L   },  // CYRILLIC SMALL LETTER EF
+  { 0x0445, BIDI_L   },  // CYRILLIC SMALL LETTER HA
+  { 0x0446, BIDI_L   },  // CYRILLIC SMALL LETTER TSE
+  { 0x0447, BIDI_L   },  // CYRILLIC SMALL LETTER CHE
+  { 0x0448, BIDI_L   },  // CYRILLIC SMALL LETTER SHA
+  { 0x0449, BIDI_L   },  // CYRILLIC SMALL LETTER SHCHA
+  { 0x044A, BIDI_L   },  // CYRILLIC SMALL LETTER HARD SIGN
+  { 0x044B, BIDI_L   },  // CYRILLIC SMALL LETTER YERU
+  { 0x044C, BIDI_L   },  // CYRILLIC SMALL LETTER SOFT SIGN
+  { 0x044D, BIDI_L   },  // CYRILLIC SMALL LETTER E
+  { 0x044E, BIDI_L   },  // CYRILLIC SMALL LETTER YU
+  { 0x044F, BIDI_L   },  // CYRILLIC SMALL LETTER YA
+  { 0x0450, BIDI_L   },  // CYRILLIC SMALL LETTER IE WITH GRAVE
+  { 0x0451, BIDI_L   },  // CYRILLIC SMALL LETTER IO
+  { 0x0452, BIDI_L   },  // CYRILLIC SMALL LETTER DJE
+  { 0x0453, BIDI_L   },  // CYRILLIC SMALL LETTER GJE
+  { 0x0454, BIDI_L   },  // CYRILLIC SMALL LETTER UKRAINIAN IE
+  { 0x0455, BIDI_L   },  // CYRILLIC SMALL LETTER DZE
+  { 0x0456, BIDI_L   },  // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+  { 0x0457, BIDI_L   },  // CYRILLIC SMALL LETTER YI
+  { 0x0458, BIDI_L   },  // CYRILLIC SMALL LETTER JE
+  { 0x0459, BIDI_L   },  // CYRILLIC SMALL LETTER LJE
+  { 0x045A, BIDI_L   },  // CYRILLIC SMALL LETTER NJE
+  { 0x045B, BIDI_L   },  // CYRILLIC SMALL LETTER TSHE
+  { 0x045C, BIDI_L   },  // CYRILLIC SMALL LETTER KJE
+  { 0x045D, BIDI_L   },  // CYRILLIC SMALL LETTER I WITH GRAVE
+  { 0x045E, BIDI_L   },  // CYRILLIC SMALL LETTER SHORT U
+  { 0x045F, BIDI_L   },  // CYRILLIC SMALL LETTER DZHE
+  { 0x0460, BIDI_L   },  // CYRILLIC CAPITAL LETTER OMEGA
+  { 0x0461, BIDI_L   },  // CYRILLIC SMALL LETTER OMEGA
+  { 0x0462, BIDI_L   },  // CYRILLIC CAPITAL LETTER YAT
+  { 0x0463, BIDI_L   },  // CYRILLIC SMALL LETTER YAT
+  { 0x0464, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED E
+  { 0x0465, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED E
+  { 0x0466, BIDI_L   },  // CYRILLIC CAPITAL LETTER LITTLE YUS
+  { 0x0467, BIDI_L   },  // CYRILLIC SMALL LETTER LITTLE YUS
+  { 0x0468, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+  { 0x0469, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+  { 0x046A, BIDI_L   },  // CYRILLIC CAPITAL LETTER BIG YUS
+  { 0x046B, BIDI_L   },  // CYRILLIC SMALL LETTER BIG YUS
+  { 0x046C, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+  { 0x046D, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+  { 0x046E, BIDI_L   },  // CYRILLIC CAPITAL LETTER KSI
+  { 0x046F, BIDI_L   },  // CYRILLIC SMALL LETTER KSI
+  { 0x0470, BIDI_L   },  // CYRILLIC CAPITAL LETTER PSI
+  { 0x0471, BIDI_L   },  // CYRILLIC SMALL LETTER PSI
+  { 0x0472, BIDI_L   },  // CYRILLIC CAPITAL LETTER FITA
+  { 0x0473, BIDI_L   },  // CYRILLIC SMALL LETTER FITA
+  { 0x0474, BIDI_L   },  // CYRILLIC CAPITAL LETTER IZHITSA
+  { 0x0475, BIDI_L   },  // CYRILLIC SMALL LETTER IZHITSA
+  { 0x0476, BIDI_L   },  // CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+  { 0x0477, BIDI_L   },  // CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+  { 0x0478, BIDI_L   },  // CYRILLIC CAPITAL LETTER UK
+  { 0x0479, BIDI_L   },  // CYRILLIC SMALL LETTER UK
+  { 0x047A, BIDI_L   },  // CYRILLIC CAPITAL LETTER ROUND OMEGA
+  { 0x047B, BIDI_L   },  // CYRILLIC SMALL LETTER ROUND OMEGA
+  { 0x047C, BIDI_L   },  // CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+  { 0x047D, BIDI_L   },  // CYRILLIC SMALL LETTER OMEGA WITH TITLO
+  { 0x047E, BIDI_L   },  // CYRILLIC CAPITAL LETTER OT
+  { 0x047F, BIDI_L   },  // CYRILLIC SMALL LETTER OT
+  { 0x0480, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOPPA
+  { 0x0481, BIDI_L   },  // CYRILLIC SMALL LETTER KOPPA
+  { 0x0482, BIDI_L   },  // CYRILLIC THOUSANDS SIGN
+  { 0x0483, BIDI_NSM },  // COMBINING CYRILLIC TITLO
+  { 0x0484, BIDI_NSM },  // COMBINING CYRILLIC PALATALIZATION
+  { 0x0485, BIDI_NSM },  // COMBINING CYRILLIC DASIA PNEUMATA
+  { 0x0486, BIDI_NSM },  // COMBINING CYRILLIC PSILI PNEUMATA
+  { 0x0487, BIDI_NSM },  // COMBINING CYRILLIC POKRYTIE
+  { 0x0488, BIDI_NSM },  // COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+  { 0x0489, BIDI_NSM },  // COMBINING CYRILLIC MILLIONS SIGN
+  { 0x048A, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+  { 0x048B, BIDI_L   },  // CYRILLIC SMALL LETTER SHORT I WITH TAIL
+  { 0x048C, BIDI_L   },  // CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+  { 0x048D, BIDI_L   },  // CYRILLIC SMALL LETTER SEMISOFT SIGN
+  { 0x048E, BIDI_L   },  // CYRILLIC CAPITAL LETTER ER WITH TICK
+  { 0x048F, BIDI_L   },  // CYRILLIC SMALL LETTER ER WITH TICK
+  { 0x0490, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+  { 0x0491, BIDI_L   },  // CYRILLIC SMALL LETTER GHE WITH UPTURN
+  { 0x0492, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE WITH STROKE
+  { 0x0493, BIDI_L   },  // CYRILLIC SMALL LETTER GHE WITH STROKE
+  { 0x0494, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+  { 0x0495, BIDI_L   },  // CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+  { 0x0496, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+  { 0x0497, BIDI_L   },  // CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+  { 0x0498, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+  { 0x0499, BIDI_L   },  // CYRILLIC SMALL LETTER ZE WITH DESCENDER
+  { 0x049A, BIDI_L   },  // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+  { 0x049B, BIDI_L   },  // CYRILLIC SMALL LETTER KA WITH DESCENDER
+  { 0x049C, BIDI_L   },  // CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+  { 0x049D, BIDI_L   },  // CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+  { 0x049E, BIDI_L   },  // CYRILLIC CAPITAL LETTER KA WITH STROKE
+  { 0x049F, BIDI_L   },  // CYRILLIC SMALL LETTER KA WITH STROKE
+  { 0x04A0, BIDI_L   },  // CYRILLIC CAPITAL LETTER BASHKIR KA
+  { 0x04A1, BIDI_L   },  // CYRILLIC SMALL LETTER BASHKIR KA
+  { 0x04A2, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+  { 0x04A3, BIDI_L   },  // CYRILLIC SMALL LETTER EN WITH DESCENDER
+  { 0x04A4, BIDI_L   },  // CYRILLIC CAPITAL LIGATURE EN GHE
+  { 0x04A5, BIDI_L   },  // CYRILLIC SMALL LIGATURE EN GHE
+  { 0x04A6, BIDI_L   },  // CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+  { 0x04A7, BIDI_L   },  // CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+  { 0x04A8, BIDI_L   },  // CYRILLIC CAPITAL LETTER ABKHASIAN HA
+  { 0x04A9, BIDI_L   },  // CYRILLIC SMALL LETTER ABKHASIAN HA
+  { 0x04AA, BIDI_L   },  // CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+  { 0x04AB, BIDI_L   },  // CYRILLIC SMALL LETTER ES WITH DESCENDER
+  { 0x04AC, BIDI_L   },  // CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+  { 0x04AD, BIDI_L   },  // CYRILLIC SMALL LETTER TE WITH DESCENDER
+  { 0x04AE, BIDI_L   },  // CYRILLIC CAPITAL LETTER STRAIGHT U
+  { 0x04AF, BIDI_L   },  // CYRILLIC SMALL LETTER STRAIGHT U
+  { 0x04B0, BIDI_L   },  // CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+  { 0x04B1, BIDI_L   },  // CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+  { 0x04B2, BIDI_L   },  // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+  { 0x04B3, BIDI_L   },  // CYRILLIC SMALL LETTER HA WITH DESCENDER
+  { 0x04B4, BIDI_L   },  // CYRILLIC CAPITAL LIGATURE TE TSE
+  { 0x04B5, BIDI_L   },  // CYRILLIC SMALL LIGATURE TE TSE
+  { 0x04B6, BIDI_L   },  // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+  { 0x04B7, BIDI_L   },  // CYRILLIC SMALL LETTER CHE WITH DESCENDER
+  { 0x04B8, BIDI_L   },  // CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+  { 0x04B9, BIDI_L   },  // CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+  { 0x04BA, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHHA
+  { 0x04BB, BIDI_L   },  // CYRILLIC SMALL LETTER SHHA
+  { 0x04BC, BIDI_L   },  // CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+  { 0x04BD, BIDI_L   },  // CYRILLIC SMALL LETTER ABKHASIAN CHE
+  { 0x04BE, BIDI_L   },  // CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+  { 0x04BF, BIDI_L   },  // CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+  { 0x04C0, BIDI_L   },  // CYRILLIC LETTER PALOCHKA
+  { 0x04C1, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+  { 0x04C2, BIDI_L   },  // CYRILLIC SMALL LETTER ZHE WITH BREVE
+  { 0x04C3, BIDI_L   },  // CYRILLIC CAPITAL LETTER KA WITH HOOK
+  { 0x04C4, BIDI_L   },  // CYRILLIC SMALL LETTER KA WITH HOOK
+  { 0x04C5, BIDI_L   },  // CYRILLIC CAPITAL LETTER EL WITH TAIL
+  { 0x04C6, BIDI_L   },  // CYRILLIC SMALL LETTER EL WITH TAIL
+  { 0x04C7, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN WITH HOOK
+  { 0x04C8, BIDI_L   },  // CYRILLIC SMALL LETTER EN WITH HOOK
+  { 0x04C9, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN WITH TAIL
+  { 0x04CA, BIDI_L   },  // CYRILLIC SMALL LETTER EN WITH TAIL
+  { 0x04CB, BIDI_L   },  // CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+  { 0x04CC, BIDI_L   },  // CYRILLIC SMALL LETTER KHAKASSIAN CHE
+  { 0x04CD, BIDI_L   },  // CYRILLIC CAPITAL LETTER EM WITH TAIL
+  { 0x04CE, BIDI_L   },  // CYRILLIC SMALL LETTER EM WITH TAIL
+  { 0x04CF, BIDI_L   },  // CYRILLIC SMALL LETTER PALOCHKA
+  { 0x04D0, BIDI_L   },  // CYRILLIC CAPITAL LETTER A WITH BREVE
+  { 0x04D1, BIDI_L   },  // CYRILLIC SMALL LETTER A WITH BREVE
+  { 0x04D2, BIDI_L   },  // CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+  { 0x04D3, BIDI_L   },  // CYRILLIC SMALL LETTER A WITH DIAERESIS
+  { 0x04D4, BIDI_L   },  // CYRILLIC CAPITAL LIGATURE A IE
+  { 0x04D5, BIDI_L   },  // CYRILLIC SMALL LIGATURE A IE
+  { 0x04D6, BIDI_L   },  // CYRILLIC CAPITAL LETTER IE WITH BREVE
+  { 0x04D7, BIDI_L   },  // CYRILLIC SMALL LETTER IE WITH BREVE
+  { 0x04D8, BIDI_L   },  // CYRILLIC CAPITAL LETTER SCHWA
+  { 0x04D9, BIDI_L   },  // CYRILLIC SMALL LETTER SCHWA
+  { 0x04DA, BIDI_L   },  // CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+  { 0x04DB, BIDI_L   },  // CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+  { 0x04DC, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+  { 0x04DD, BIDI_L   },  // CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+  { 0x04DE, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+  { 0x04DF, BIDI_L   },  // CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+  { 0x04E0, BIDI_L   },  // CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+  { 0x04E1, BIDI_L   },  // CYRILLIC SMALL LETTER ABKHASIAN DZE
+  { 0x04E2, BIDI_L   },  // CYRILLIC CAPITAL LETTER I WITH MACRON
+  { 0x04E3, BIDI_L   },  // CYRILLIC SMALL LETTER I WITH MACRON
+  { 0x04E4, BIDI_L   },  // CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+  { 0x04E5, BIDI_L   },  // CYRILLIC SMALL LETTER I WITH DIAERESIS
+  { 0x04E6, BIDI_L   },  // CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+  { 0x04E7, BIDI_L   },  // CYRILLIC SMALL LETTER O WITH DIAERESIS
+  { 0x04E8, BIDI_L   },  // CYRILLIC CAPITAL LETTER BARRED O
+  { 0x04E9, BIDI_L   },  // CYRILLIC SMALL LETTER BARRED O
+  { 0x04EA, BIDI_L   },  // CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+  { 0x04EB, BIDI_L   },  // CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+  { 0x04EC, BIDI_L   },  // CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+  { 0x04ED, BIDI_L   },  // CYRILLIC SMALL LETTER E WITH DIAERESIS
+  { 0x04EE, BIDI_L   },  // CYRILLIC CAPITAL LETTER U WITH MACRON
+  { 0x04EF, BIDI_L   },  // CYRILLIC SMALL LETTER U WITH MACRON
+  { 0x04F0, BIDI_L   },  // CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+  { 0x04F1, BIDI_L   },  // CYRILLIC SMALL LETTER U WITH DIAERESIS
+  { 0x04F2, BIDI_L   },  // CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+  { 0x04F3, BIDI_L   },  // CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+  { 0x04F4, BIDI_L   },  // CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+  { 0x04F5, BIDI_L   },  // CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+  { 0x04F6, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+  { 0x04F7, BIDI_L   },  // CYRILLIC SMALL LETTER GHE WITH DESCENDER
+  { 0x04F8, BIDI_L   },  // CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+  { 0x04F9, BIDI_L   },  // CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+  { 0x04FA, BIDI_L   },  // CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+  { 0x04FB, BIDI_L   },  // CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+  { 0x04FC, BIDI_L   },  // CYRILLIC CAPITAL LETTER HA WITH HOOK
+  { 0x04FD, BIDI_L   },  // CYRILLIC SMALL LETTER HA WITH HOOK
+  { 0x04FE, BIDI_L   },  // CYRILLIC CAPITAL LETTER HA WITH STROKE
+  { 0x04FF, BIDI_L   },  // CYRILLIC SMALL LETTER HA WITH STROKE
+  { 0x0500, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI DE
+  { 0x0501, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI DE
+  { 0x0502, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI DJE
+  { 0x0503, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI DJE
+  { 0x0504, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI ZJE
+  { 0x0505, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI ZJE
+  { 0x0506, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI DZJE
+  { 0x0507, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI DZJE
+  { 0x0508, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI LJE
+  { 0x0509, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI LJE
+  { 0x050A, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI NJE
+  { 0x050B, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI NJE
+  { 0x050C, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI SJE
+  { 0x050D, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI SJE
+  { 0x050E, BIDI_L   },  // CYRILLIC CAPITAL LETTER KOMI TJE
+  { 0x050F, BIDI_L   },  // CYRILLIC SMALL LETTER KOMI TJE
+  { 0x0510, BIDI_L   },  // CYRILLIC CAPITAL LETTER REVERSED ZE
+  { 0x0511, BIDI_L   },  // CYRILLIC SMALL LETTER REVERSED ZE
+  { 0x0512, BIDI_L   },  // CYRILLIC CAPITAL LETTER EL WITH HOOK
+  { 0x0513, BIDI_L   },  // CYRILLIC SMALL LETTER EL WITH HOOK
+  { 0x0514, BIDI_L   },  // CYRILLIC CAPITAL LETTER LHA
+  { 0x0515, BIDI_L   },  // CYRILLIC SMALL LETTER LHA
+  { 0x0516, BIDI_L   },  // CYRILLIC CAPITAL LETTER RHA
+  { 0x0517, BIDI_L   },  // CYRILLIC SMALL LETTER RHA
+  { 0x0518, BIDI_L   },  // CYRILLIC CAPITAL LETTER YAE
+  { 0x0519, BIDI_L   },  // CYRILLIC SMALL LETTER YAE
+  { 0x051A, BIDI_L   },  // CYRILLIC CAPITAL LETTER QA
+  { 0x051B, BIDI_L   },  // CYRILLIC SMALL LETTER QA
+  { 0x051C, BIDI_L   },  // CYRILLIC CAPITAL LETTER WE
+  { 0x051D, BIDI_L   },  // CYRILLIC SMALL LETTER WE
+  { 0x051E, BIDI_L   },  // CYRILLIC CAPITAL LETTER ALEUT KA
+  { 0x051F, BIDI_L   },  // CYRILLIC SMALL LETTER ALEUT KA
+  { 0x0520, BIDI_L   },  // CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+  { 0x0521, BIDI_L   },  // CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+  { 0x0522, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+  { 0x0523, BIDI_L   },  // CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+  { 0x0524, BIDI_L   },  // CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+  { 0x0525, BIDI_L   },  // CYRILLIC SMALL LETTER PE WITH DESCENDER
+  { 0x0526, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+  { 0x0527, BIDI_L   },  // CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+  { 0x0528, BIDI_L   },  // CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+  { 0x0529, BIDI_L   },  // CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+  { 0x052A, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZZHE
+  { 0x052B, BIDI_L   },  // CYRILLIC SMALL LETTER DZZHE
+  { 0x052C, BIDI_L   },  // CYRILLIC CAPITAL LETTER DCHE
+  { 0x052D, BIDI_L   },  // CYRILLIC SMALL LETTER DCHE
+  { 0x052E, BIDI_L   },  // CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+  { 0x052F, BIDI_L   },  // CYRILLIC SMALL LETTER EL WITH DESCENDER
+  { 0x0531, BIDI_L   },  // ARMENIAN CAPITAL LETTER AYB
+  { 0x0532, BIDI_L   },  // ARMENIAN CAPITAL LETTER BEN
+  { 0x0533, BIDI_L   },  // ARMENIAN CAPITAL LETTER GIM
+  { 0x0534, BIDI_L   },  // ARMENIAN CAPITAL LETTER DA
+  { 0x0535, BIDI_L   },  // ARMENIAN CAPITAL LETTER ECH
+  { 0x0536, BIDI_L   },  // ARMENIAN CAPITAL LETTER ZA
+  { 0x0537, BIDI_L   },  // ARMENIAN CAPITAL LETTER EH
+  { 0x0538, BIDI_L   },  // ARMENIAN CAPITAL LETTER ET
+  { 0x0539, BIDI_L   },  // ARMENIAN CAPITAL LETTER TO
+  { 0x053A, BIDI_L   },  // ARMENIAN CAPITAL LETTER ZHE
+  { 0x053B, BIDI_L   },  // ARMENIAN CAPITAL LETTER INI
+  { 0x053C, BIDI_L   },  // ARMENIAN CAPITAL LETTER LIWN
+  { 0x053D, BIDI_L   },  // ARMENIAN CAPITAL LETTER XEH
+  { 0x053E, BIDI_L   },  // ARMENIAN CAPITAL LETTER CA
+  { 0x053F, BIDI_L   },  // ARMENIAN CAPITAL LETTER KEN
+  { 0x0540, BIDI_L   },  // ARMENIAN CAPITAL LETTER HO
+  { 0x0541, BIDI_L   },  // ARMENIAN CAPITAL LETTER JA
+  { 0x0542, BIDI_L   },  // ARMENIAN CAPITAL LETTER GHAD
+  { 0x0543, BIDI_L   },  // ARMENIAN CAPITAL LETTER CHEH
+  { 0x0544, BIDI_L   },  // ARMENIAN CAPITAL LETTER MEN
+  { 0x0545, BIDI_L   },  // ARMENIAN CAPITAL LETTER YI
+  { 0x0546, BIDI_L   },  // ARMENIAN CAPITAL LETTER NOW
+  { 0x0547, BIDI_L   },  // ARMENIAN CAPITAL LETTER SHA
+  { 0x0548, BIDI_L   },  // ARMENIAN CAPITAL LETTER VO
+  { 0x0549, BIDI_L   },  // ARMENIAN CAPITAL LETTER CHA
+  { 0x054A, BIDI_L   },  // ARMENIAN CAPITAL LETTER PEH
+  { 0x054B, BIDI_L   },  // ARMENIAN CAPITAL LETTER JHEH
+  { 0x054C, BIDI_L   },  // ARMENIAN CAPITAL LETTER RA
+  { 0x054D, BIDI_L   },  // ARMENIAN CAPITAL LETTER SEH
+  { 0x054E, BIDI_L   },  // ARMENIAN CAPITAL LETTER VEW
+  { 0x054F, BIDI_L   },  // ARMENIAN CAPITAL LETTER TIWN
+  { 0x0550, BIDI_L   },  // ARMENIAN CAPITAL LETTER REH
+  { 0x0551, BIDI_L   },  // ARMENIAN CAPITAL LETTER CO
+  { 0x0552, BIDI_L   },  // ARMENIAN CAPITAL LETTER YIWN
+  { 0x0553, BIDI_L   },  // ARMENIAN CAPITAL LETTER PIWR
+  { 0x0554, BIDI_L   },  // ARMENIAN CAPITAL LETTER KEH
+  { 0x0555, BIDI_L   },  // ARMENIAN CAPITAL LETTER OH
+  { 0x0556, BIDI_L   },  // ARMENIAN CAPITAL LETTER FEH
+  { 0x0559, BIDI_L   },  // ARMENIAN MODIFIER LETTER LEFT HALF RING
+  { 0x055A, BIDI_L   },  // ARMENIAN APOSTROPHE
+  { 0x055B, BIDI_L   },  // ARMENIAN EMPHASIS MARK
+  { 0x055C, BIDI_L   },  // ARMENIAN EXCLAMATION MARK
+  { 0x055D, BIDI_L   },  // ARMENIAN COMMA
+  { 0x055E, BIDI_L   },  // ARMENIAN QUESTION MARK
+  { 0x055F, BIDI_L   },  // ARMENIAN ABBREVIATION MARK
+  { 0x0561, BIDI_L   },  // ARMENIAN SMALL LETTER AYB
+  { 0x0562, BIDI_L   },  // ARMENIAN SMALL LETTER BEN
+  { 0x0563, BIDI_L   },  // ARMENIAN SMALL LETTER GIM
+  { 0x0564, BIDI_L   },  // ARMENIAN SMALL LETTER DA
+  { 0x0565, BIDI_L   },  // ARMENIAN SMALL LETTER ECH
+  { 0x0566, BIDI_L   },  // ARMENIAN SMALL LETTER ZA
+  { 0x0567, BIDI_L   },  // ARMENIAN SMALL LETTER EH
+  { 0x0568, BIDI_L   },  // ARMENIAN SMALL LETTER ET
+  { 0x0569, BIDI_L   },  // ARMENIAN SMALL LETTER TO
+  { 0x056A, BIDI_L   },  // ARMENIAN SMALL LETTER ZHE
+  { 0x056B, BIDI_L   },  // ARMENIAN SMALL LETTER INI
+  { 0x056C, BIDI_L   },  // ARMENIAN SMALL LETTER LIWN
+  { 0x056D, BIDI_L   },  // ARMENIAN SMALL LETTER XEH
+  { 0x056E, BIDI_L   },  // ARMENIAN SMALL LETTER CA
+  { 0x056F, BIDI_L   },  // ARMENIAN SMALL LETTER KEN
+  { 0x0570, BIDI_L   },  // ARMENIAN SMALL LETTER HO
+  { 0x0571, BIDI_L   },  // ARMENIAN SMALL LETTER JA
+  { 0x0572, BIDI_L   },  // ARMENIAN SMALL LETTER GHAD
+  { 0x0573, BIDI_L   },  // ARMENIAN SMALL LETTER CHEH
+  { 0x0574, BIDI_L   },  // ARMENIAN SMALL LETTER MEN
+  { 0x0575, BIDI_L   },  // ARMENIAN SMALL LETTER YI
+  { 0x0576, BIDI_L   },  // ARMENIAN SMALL LETTER NOW
+  { 0x0577, BIDI_L   },  // ARMENIAN SMALL LETTER SHA
+  { 0x0578, BIDI_L   },  // ARMENIAN SMALL LETTER VO
+  { 0x0579, BIDI_L   },  // ARMENIAN SMALL LETTER CHA
+  { 0x057A, BIDI_L   },  // ARMENIAN SMALL LETTER PEH
+  { 0x057B, BIDI_L   },  // ARMENIAN SMALL LETTER JHEH
+  { 0x057C, BIDI_L   },  // ARMENIAN SMALL LETTER RA
+  { 0x057D, BIDI_L   },  // ARMENIAN SMALL LETTER SEH
+  { 0x057E, BIDI_L   },  // ARMENIAN SMALL LETTER VEW
+  { 0x057F, BIDI_L   },  // ARMENIAN SMALL LETTER TIWN
+  { 0x0580, BIDI_L   },  // ARMENIAN SMALL LETTER REH
+  { 0x0581, BIDI_L   },  // ARMENIAN SMALL LETTER CO
+  { 0x0582, BIDI_L   },  // ARMENIAN SMALL LETTER YIWN
+  { 0x0583, BIDI_L   },  // ARMENIAN SMALL LETTER PIWR
+  { 0x0584, BIDI_L   },  // ARMENIAN SMALL LETTER KEH
+  { 0x0585, BIDI_L   },  // ARMENIAN SMALL LETTER OH
+  { 0x0586, BIDI_L   },  // ARMENIAN SMALL LETTER FEH
+  { 0x0587, BIDI_L   },  // ARMENIAN SMALL LIGATURE ECH YIWN
+  { 0x0589, BIDI_L   },  // ARMENIAN FULL STOP
+  { 0x058A, BIDI_ON  },  // ARMENIAN HYPHEN
+  { 0x058D, BIDI_ON  },  // RIGHT-FACING ARMENIAN ETERNITY SIGN
+  { 0x058E, BIDI_ON  },  // LEFT-FACING ARMENIAN ETERNITY SIGN
+  { 0x058F, BIDI_ET  },  // ARMENIAN DRAM SIGN
+  { 0x0591, BIDI_NSM },  // HEBREW ACCENT ETNAHTA
+  { 0x0592, BIDI_NSM },  // HEBREW ACCENT SEGOL
+  { 0x0593, BIDI_NSM },  // HEBREW ACCENT SHALSHELET
+  { 0x0594, BIDI_NSM },  // HEBREW ACCENT ZAQEF QATAN
+  { 0x0595, BIDI_NSM },  // HEBREW ACCENT ZAQEF GADOL
+  { 0x0596, BIDI_NSM },  // HEBREW ACCENT TIPEHA
+  { 0x0597, BIDI_NSM },  // HEBREW ACCENT REVIA
+  { 0x0598, BIDI_NSM },  // HEBREW ACCENT ZARQA
+  { 0x0599, BIDI_NSM },  // HEBREW ACCENT PASHTA
+  { 0x059A, BIDI_NSM },  // HEBREW ACCENT YETIV
+  { 0x059B, BIDI_NSM },  // HEBREW ACCENT TEVIR
+  { 0x059C, BIDI_NSM },  // HEBREW ACCENT GERESH
+  { 0x059D, BIDI_NSM },  // HEBREW ACCENT GERESH MUQDAM
+  { 0x059E, BIDI_NSM },  // HEBREW ACCENT GERSHAYIM
+  { 0x059F, BIDI_NSM },  // HEBREW ACCENT QARNEY PARA
+  { 0x05A0, BIDI_NSM },  // HEBREW ACCENT TELISHA GEDOLA
+  { 0x05A1, BIDI_NSM },  // HEBREW ACCENT PAZER
+  { 0x05A2, BIDI_NSM },  // HEBREW ACCENT ATNAH HAFUKH
+  { 0x05A3, BIDI_NSM },  // HEBREW ACCENT MUNAH
+  { 0x05A4, BIDI_NSM },  // HEBREW ACCENT MAHAPAKH
+  { 0x05A5, BIDI_NSM },  // HEBREW ACCENT MERKHA
+  { 0x05A6, BIDI_NSM },  // HEBREW ACCENT MERKHA KEFULA
+  { 0x05A7, BIDI_NSM },  // HEBREW ACCENT DARGA
+  { 0x05A8, BIDI_NSM },  // HEBREW ACCENT QADMA
+  { 0x05A9, BIDI_NSM },  // HEBREW ACCENT TELISHA QETANA
+  { 0x05AA, BIDI_NSM },  // HEBREW ACCENT YERAH BEN YOMO
+  { 0x05AB, BIDI_NSM },  // HEBREW ACCENT OLE
+  { 0x05AC, BIDI_NSM },  // HEBREW ACCENT ILUY
+  { 0x05AD, BIDI_NSM },  // HEBREW ACCENT DEHI
+  { 0x05AE, BIDI_NSM },  // HEBREW ACCENT ZINOR
+  { 0x05AF, BIDI_NSM },  // HEBREW MARK MASORA CIRCLE
+  { 0x05B0, BIDI_NSM },  // HEBREW POINT SHEVA
+  { 0x05B1, BIDI_NSM },  // HEBREW POINT HATAF SEGOL
+  { 0x05B2, BIDI_NSM },  // HEBREW POINT HATAF PATAH
+  { 0x05B3, BIDI_NSM },  // HEBREW POINT HATAF QAMATS
+  { 0x05B4, BIDI_NSM },  // HEBREW POINT HIRIQ
+  { 0x05B5, BIDI_NSM },  // HEBREW POINT TSERE
+  { 0x05B6, BIDI_NSM },  // HEBREW POINT SEGOL
+  { 0x05B7, BIDI_NSM },  // HEBREW POINT PATAH
+  { 0x05B8, BIDI_NSM },  // HEBREW POINT QAMATS
+  { 0x05B9, BIDI_NSM },  // HEBREW POINT HOLAM
+  { 0x05BA, BIDI_NSM },  // HEBREW POINT HOLAM HASER FOR VAV
+  { 0x05BB, BIDI_NSM },  // HEBREW POINT QUBUTS
+  { 0x05BC, BIDI_NSM },  // HEBREW POINT DAGESH OR MAPIQ
+  { 0x05BD, BIDI_NSM },  // HEBREW POINT METEG
+  { 0x05BE, BIDI_R   },  // HEBREW PUNCTUATION MAQAF
+  { 0x05BF, BIDI_NSM },  // HEBREW POINT RAFE
+  { 0x05C0, BIDI_R   },  // HEBREW PUNCTUATION PASEQ
+  { 0x05C1, BIDI_NSM },  // HEBREW POINT SHIN DOT
+  { 0x05C2, BIDI_NSM },  // HEBREW POINT SIN DOT
+  { 0x05C3, BIDI_R   },  // HEBREW PUNCTUATION SOF PASUQ
+  { 0x05C4, BIDI_NSM },  // HEBREW MARK UPPER DOT
+  { 0x05C5, BIDI_NSM },  // HEBREW MARK LOWER DOT
+  { 0x05C6, BIDI_R   },  // HEBREW PUNCTUATION NUN HAFUKHA
+  { 0x05C7, BIDI_NSM },  // HEBREW POINT QAMATS QATAN
+  { 0x05D0, BIDI_R   },  // HEBREW LETTER ALEF
+  { 0x05D1, BIDI_R   },  // HEBREW LETTER BET
+  { 0x05D2, BIDI_R   },  // HEBREW LETTER GIMEL
+  { 0x05D3, BIDI_R   },  // HEBREW LETTER DALET
+  { 0x05D4, BIDI_R   },  // HEBREW LETTER HE
+  { 0x05D5, BIDI_R   },  // HEBREW LETTER VAV
+  { 0x05D6, BIDI_R   },  // HEBREW LETTER ZAYIN
+  { 0x05D7, BIDI_R   },  // HEBREW LETTER HET
+  { 0x05D8, BIDI_R   },  // HEBREW LETTER TET
+  { 0x05D9, BIDI_R   },  // HEBREW LETTER YOD
+  { 0x05DA, BIDI_R   },  // HEBREW LETTER FINAL KAF
+  { 0x05DB, BIDI_R   },  // HEBREW LETTER KAF
+  { 0x05DC, BIDI_R   },  // HEBREW LETTER LAMED
+  { 0x05DD, BIDI_R   },  // HEBREW LETTER FINAL MEM
+  { 0x05DE, BIDI_R   },  // HEBREW LETTER MEM
+  { 0x05DF, BIDI_R   },  // HEBREW LETTER FINAL NUN
+  { 0x05E0, BIDI_R   },  // HEBREW LETTER NUN
+  { 0x05E1, BIDI_R   },  // HEBREW LETTER SAMEKH
+  { 0x05E2, BIDI_R   },  // HEBREW LETTER AYIN
+  { 0x05E3, BIDI_R   },  // HEBREW LETTER FINAL PE
+  { 0x05E4, BIDI_R   },  // HEBREW LETTER PE
+  { 0x05E5, BIDI_R   },  // HEBREW LETTER FINAL TSADI
+  { 0x05E6, BIDI_R   },  // HEBREW LETTER TSADI
+  { 0x05E7, BIDI_R   },  // HEBREW LETTER QOF
+  { 0x05E8, BIDI_R   },  // HEBREW LETTER RESH
+  { 0x05E9, BIDI_R   },  // HEBREW LETTER SHIN
+  { 0x05EA, BIDI_R   },  // HEBREW LETTER TAV
+  { 0x05F0, BIDI_R   },  // HEBREW LIGATURE YIDDISH DOUBLE VAV
+  { 0x05F1, BIDI_R   },  // HEBREW LIGATURE YIDDISH VAV YOD
+  { 0x05F2, BIDI_R   },  // HEBREW LIGATURE YIDDISH DOUBLE YOD
+  { 0x05F3, BIDI_R   },  // HEBREW PUNCTUATION GERESH
+  { 0x05F4, BIDI_R   },  // HEBREW PUNCTUATION GERSHAYIM
+  { 0x0600, BIDI_AN  },  // ARABIC NUMBER SIGN
+  { 0x0601, BIDI_AN  },  // ARABIC SIGN SANAH
+  { 0x0602, BIDI_AN  },  // ARABIC FOOTNOTE MARKER
+  { 0x0603, BIDI_AN  },  // ARABIC SIGN SAFHA
+  { 0x0604, BIDI_AN  },  // ARABIC SIGN SAMVAT
+  { 0x0605, BIDI_AN  },  // ARABIC NUMBER MARK ABOVE
+  { 0x0606, BIDI_ON  },  // ARABIC-INDIC CUBE ROOT
+  { 0x0607, BIDI_ON  },  // ARABIC-INDIC FOURTH ROOT
+  { 0x0608, BIDI_AL  },  // ARABIC RAY
+  { 0x0609, BIDI_ET  },  // ARABIC-INDIC PER MILLE SIGN
+  { 0x060A, BIDI_ET  },  // ARABIC-INDIC PER TEN THOUSAND SIGN
+  { 0x060B, BIDI_AL  },  // AFGHANI SIGN
+  { 0x060C, BIDI_CS  },  // ARABIC COMMA
+  { 0x060D, BIDI_AL  },  // ARABIC DATE SEPARATOR
+  { 0x060E, BIDI_ON  },  // ARABIC POETIC VERSE SIGN
+  { 0x060F, BIDI_ON  },  // ARABIC SIGN MISRA
+  { 0x0610, BIDI_NSM },  // ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+  { 0x0611, BIDI_NSM },  // ARABIC SIGN ALAYHE ASSALLAM
+  { 0x0612, BIDI_NSM },  // ARABIC SIGN RAHMATULLAH ALAYHE
+  { 0x0613, BIDI_NSM },  // ARABIC SIGN RADI ALLAHOU ANHU
+  { 0x0614, BIDI_NSM },  // ARABIC SIGN TAKHALLUS
+  { 0x0615, BIDI_NSM },  // ARABIC SMALL HIGH TAH
+  { 0x0616, BIDI_NSM },  // ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH
+  { 0x0617, BIDI_NSM },  // ARABIC SMALL HIGH ZAIN
+  { 0x0618, BIDI_NSM },  // ARABIC SMALL FATHA
+  { 0x0619, BIDI_NSM },  // ARABIC SMALL DAMMA
+  { 0x061A, BIDI_NSM },  // ARABIC SMALL KASRA
+  { 0x061B, BIDI_AL  },  // ARABIC SEMICOLON
+  { 0x061C, BIDI_AL  },  // ARABIC LETTER MARK
+  { 0x061E, BIDI_AL  },  // ARABIC TRIPLE DOT PUNCTUATION MARK
+  { 0x061F, BIDI_AL  },  // ARABIC QUESTION MARK
+  { 0x0620, BIDI_AL  },  // ARABIC LETTER KASHMIRI YEH
+  { 0x0621, BIDI_AL  },  // ARABIC LETTER HAMZA
+  { 0x0622, BIDI_AL  },  // ARABIC LETTER ALEF WITH MADDA ABOVE
+  { 0x0623, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA ABOVE
+  { 0x0624, BIDI_AL  },  // ARABIC LETTER WAW WITH HAMZA ABOVE
+  { 0x0625, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA BELOW
+  { 0x0626, BIDI_AL  },  // ARABIC LETTER YEH WITH HAMZA ABOVE
+  { 0x0627, BIDI_AL  },  // ARABIC LETTER ALEF
+  { 0x0628, BIDI_AL  },  // ARABIC LETTER BEH
+  { 0x0629, BIDI_AL  },  // ARABIC LETTER TEH MARBUTA
+  { 0x062A, BIDI_AL  },  // ARABIC LETTER TEH
+  { 0x062B, BIDI_AL  },  // ARABIC LETTER THEH
+  { 0x062C, BIDI_AL  },  // ARABIC LETTER JEEM
+  { 0x062D, BIDI_AL  },  // ARABIC LETTER HAH
+  { 0x062E, BIDI_AL  },  // ARABIC LETTER KHAH
+  { 0x062F, BIDI_AL  },  // ARABIC LETTER DAL
+  { 0x0630, BIDI_AL  },  // ARABIC LETTER THAL
+  { 0x0631, BIDI_AL  },  // ARABIC LETTER REH
+  { 0x0632, BIDI_AL  },  // ARABIC LETTER ZAIN
+  { 0x0633, BIDI_AL  },  // ARABIC LETTER SEEN
+  { 0x0634, BIDI_AL  },  // ARABIC LETTER SHEEN
+  { 0x0635, BIDI_AL  },  // ARABIC LETTER SAD
+  { 0x0636, BIDI_AL  },  // ARABIC LETTER DAD
+  { 0x0637, BIDI_AL  },  // ARABIC LETTER TAH
+  { 0x0638, BIDI_AL  },  // ARABIC LETTER ZAH
+  { 0x0639, BIDI_AL  },  // ARABIC LETTER AIN
+  { 0x063A, BIDI_AL  },  // ARABIC LETTER GHAIN
+  { 0x063B, BIDI_AL  },  // ARABIC LETTER KEHEH WITH TWO DOTS ABOVE
+  { 0x063C, BIDI_AL  },  // ARABIC LETTER KEHEH WITH THREE DOTS BELOW
+  { 0x063D, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH INVERTED V
+  { 0x063E, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
+  { 0x063F, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+  { 0x0640, BIDI_AL  },  // ARABIC TATWEEL
+  { 0x0641, BIDI_AL  },  // ARABIC LETTER FEH
+  { 0x0642, BIDI_AL  },  // ARABIC LETTER QAF
+  { 0x0643, BIDI_AL  },  // ARABIC LETTER KAF
+  { 0x0644, BIDI_AL  },  // ARABIC LETTER LAM
+  { 0x0645, BIDI_AL  },  // ARABIC LETTER MEEM
+  { 0x0646, BIDI_AL  },  // ARABIC LETTER NOON
+  { 0x0647, BIDI_AL  },  // ARABIC LETTER HEH
+  { 0x0648, BIDI_AL  },  // ARABIC LETTER WAW
+  { 0x0649, BIDI_AL  },  // ARABIC LETTER ALEF MAKSURA
+  { 0x064A, BIDI_AL  },  // ARABIC LETTER YEH
+  { 0x064B, BIDI_NSM },  // ARABIC FATHATAN
+  { 0x064C, BIDI_NSM },  // ARABIC DAMMATAN
+  { 0x064D, BIDI_NSM },  // ARABIC KASRATAN
+  { 0x064E, BIDI_NSM },  // ARABIC FATHA
+  { 0x064F, BIDI_NSM },  // ARABIC DAMMA
+  { 0x0650, BIDI_NSM },  // ARABIC KASRA
+  { 0x0651, BIDI_NSM },  // ARABIC SHADDA
+  { 0x0652, BIDI_NSM },  // ARABIC SUKUN
+  { 0x0653, BIDI_NSM },  // ARABIC MADDAH ABOVE
+  { 0x0654, BIDI_NSM },  // ARABIC HAMZA ABOVE
+  { 0x0655, BIDI_NSM },  // ARABIC HAMZA BELOW
+  { 0x0656, BIDI_NSM },  // ARABIC SUBSCRIPT ALEF
+  { 0x0657, BIDI_NSM },  // ARABIC INVERTED DAMMA
+  { 0x0658, BIDI_NSM },  // ARABIC MARK NOON GHUNNA
+  { 0x0659, BIDI_NSM },  // ARABIC ZWARAKAY
+  { 0x065A, BIDI_NSM },  // ARABIC VOWEL SIGN SMALL V ABOVE
+  { 0x065B, BIDI_NSM },  // ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+  { 0x065C, BIDI_NSM },  // ARABIC VOWEL SIGN DOT BELOW
+  { 0x065D, BIDI_NSM },  // ARABIC REVERSED DAMMA
+  { 0x065E, BIDI_NSM },  // ARABIC FATHA WITH TWO DOTS
+  { 0x065F, BIDI_NSM },  // ARABIC WAVY HAMZA BELOW
+  { 0x0660, BIDI_AN  },  // ARABIC-INDIC DIGIT ZERO
+  { 0x0661, BIDI_AN  },  // ARABIC-INDIC DIGIT ONE
+  { 0x0662, BIDI_AN  },  // ARABIC-INDIC DIGIT TWO
+  { 0x0663, BIDI_AN  },  // ARABIC-INDIC DIGIT THREE
+  { 0x0664, BIDI_AN  },  // ARABIC-INDIC DIGIT FOUR
+  { 0x0665, BIDI_AN  },  // ARABIC-INDIC DIGIT FIVE
+  { 0x0666, BIDI_AN  },  // ARABIC-INDIC DIGIT SIX
+  { 0x0667, BIDI_AN  },  // ARABIC-INDIC DIGIT SEVEN
+  { 0x0668, BIDI_AN  },  // ARABIC-INDIC DIGIT EIGHT
+  { 0x0669, BIDI_AN  },  // ARABIC-INDIC DIGIT NINE
+  { 0x066A, BIDI_ET  },  // ARABIC PERCENT SIGN
+  { 0x066B, BIDI_AN  },  // ARABIC DECIMAL SEPARATOR
+  { 0x066C, BIDI_AN  },  // ARABIC THOUSANDS SEPARATOR
+  { 0x066D, BIDI_AL  },  // ARABIC FIVE POINTED STAR
+  { 0x066E, BIDI_AL  },  // ARABIC LETTER DOTLESS BEH
+  { 0x066F, BIDI_AL  },  // ARABIC LETTER DOTLESS QAF
+  { 0x0670, BIDI_NSM },  // ARABIC LETTER SUPERSCRIPT ALEF
+  { 0x0671, BIDI_AL  },  // ARABIC LETTER ALEF WASLA
+  { 0x0672, BIDI_AL  },  // ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+  { 0x0673, BIDI_AL  },  // ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+  { 0x0674, BIDI_AL  },  // ARABIC LETTER HIGH HAMZA
+  { 0x0675, BIDI_AL  },  // ARABIC LETTER HIGH HAMZA ALEF
+  { 0x0676, BIDI_AL  },  // ARABIC LETTER HIGH HAMZA WAW
+  { 0x0677, BIDI_AL  },  // ARABIC LETTER U WITH HAMZA ABOVE
+  { 0x0678, BIDI_AL  },  // ARABIC LETTER HIGH HAMZA YEH
+  { 0x0679, BIDI_AL  },  // ARABIC LETTER TTEH
+  { 0x067A, BIDI_AL  },  // ARABIC LETTER TTEHEH
+  { 0x067B, BIDI_AL  },  // ARABIC LETTER BEEH
+  { 0x067C, BIDI_AL  },  // ARABIC LETTER TEH WITH RING
+  { 0x067D, BIDI_AL  },  // ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+  { 0x067E, BIDI_AL  },  // ARABIC LETTER PEH
+  { 0x067F, BIDI_AL  },  // ARABIC LETTER TEHEH
+  { 0x0680, BIDI_AL  },  // ARABIC LETTER BEHEH
+  { 0x0681, BIDI_AL  },  // ARABIC LETTER HAH WITH HAMZA ABOVE
+  { 0x0682, BIDI_AL  },  // ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+  { 0x0683, BIDI_AL  },  // ARABIC LETTER NYEH
+  { 0x0684, BIDI_AL  },  // ARABIC LETTER DYEH
+  { 0x0685, BIDI_AL  },  // ARABIC LETTER HAH WITH THREE DOTS ABOVE
+  { 0x0686, BIDI_AL  },  // ARABIC LETTER TCHEH
+  { 0x0687, BIDI_AL  },  // ARABIC LETTER TCHEHEH
+  { 0x0688, BIDI_AL  },  // ARABIC LETTER DDAL
+  { 0x0689, BIDI_AL  },  // ARABIC LETTER DAL WITH RING
+  { 0x068A, BIDI_AL  },  // ARABIC LETTER DAL WITH DOT BELOW
+  { 0x068B, BIDI_AL  },  // ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+  { 0x068C, BIDI_AL  },  // ARABIC LETTER DAHAL
+  { 0x068D, BIDI_AL  },  // ARABIC LETTER DDAHAL
+  { 0x068E, BIDI_AL  },  // ARABIC LETTER DUL
+  { 0x068F, BIDI_AL  },  // ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+  { 0x0690, BIDI_AL  },  // ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+  { 0x0691, BIDI_AL  },  // ARABIC LETTER RREH
+  { 0x0692, BIDI_AL  },  // ARABIC LETTER REH WITH SMALL V
+  { 0x0693, BIDI_AL  },  // ARABIC LETTER REH WITH RING
+  { 0x0694, BIDI_AL  },  // ARABIC LETTER REH WITH DOT BELOW
+  { 0x0695, BIDI_AL  },  // ARABIC LETTER REH WITH SMALL V BELOW
+  { 0x0696, BIDI_AL  },  // ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+  { 0x0697, BIDI_AL  },  // ARABIC LETTER REH WITH TWO DOTS ABOVE
+  { 0x0698, BIDI_AL  },  // ARABIC LETTER JEH
+  { 0x0699, BIDI_AL  },  // ARABIC LETTER REH WITH FOUR DOTS ABOVE
+  { 0x069A, BIDI_AL  },  // ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+  { 0x069B, BIDI_AL  },  // ARABIC LETTER SEEN WITH THREE DOTS BELOW
+  { 0x069C, BIDI_AL  },  // ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+  { 0x069D, BIDI_AL  },  // ARABIC LETTER SAD WITH TWO DOTS BELOW
+  { 0x069E, BIDI_AL  },  // ARABIC LETTER SAD WITH THREE DOTS ABOVE
+  { 0x069F, BIDI_AL  },  // ARABIC LETTER TAH WITH THREE DOTS ABOVE
+  { 0x06A0, BIDI_AL  },  // ARABIC LETTER AIN WITH THREE DOTS ABOVE
+  { 0x06A1, BIDI_AL  },  // ARABIC LETTER DOTLESS FEH
+  { 0x06A2, BIDI_AL  },  // ARABIC LETTER FEH WITH DOT MOVED BELOW
+  { 0x06A3, BIDI_AL  },  // ARABIC LETTER FEH WITH DOT BELOW
+  { 0x06A4, BIDI_AL  },  // ARABIC LETTER VEH
+  { 0x06A5, BIDI_AL  },  // ARABIC LETTER FEH WITH THREE DOTS BELOW
+  { 0x06A6, BIDI_AL  },  // ARABIC LETTER PEHEH
+  { 0x06A7, BIDI_AL  },  // ARABIC LETTER QAF WITH DOT ABOVE
+  { 0x06A8, BIDI_AL  },  // ARABIC LETTER QAF WITH THREE DOTS ABOVE
+  { 0x06A9, BIDI_AL  },  // ARABIC LETTER KEHEH
+  { 0x06AA, BIDI_AL  },  // ARABIC LETTER SWASH KAF
+  { 0x06AB, BIDI_AL  },  // ARABIC LETTER KAF WITH RING
+  { 0x06AC, BIDI_AL  },  // ARABIC LETTER KAF WITH DOT ABOVE
+  { 0x06AD, BIDI_AL  },  // ARABIC LETTER NG
+  { 0x06AE, BIDI_AL  },  // ARABIC LETTER KAF WITH THREE DOTS BELOW
+  { 0x06AF, BIDI_AL  },  // ARABIC LETTER GAF
+  { 0x06B0, BIDI_AL  },  // ARABIC LETTER GAF WITH RING
+  { 0x06B1, BIDI_AL  },  // ARABIC LETTER NGOEH
+  { 0x06B2, BIDI_AL  },  // ARABIC LETTER GAF WITH TWO DOTS BELOW
+  { 0x06B3, BIDI_AL  },  // ARABIC LETTER GUEH
+  { 0x06B4, BIDI_AL  },  // ARABIC LETTER GAF WITH THREE DOTS ABOVE
+  { 0x06B5, BIDI_AL  },  // ARABIC LETTER LAM WITH SMALL V
+  { 0x06B6, BIDI_AL  },  // ARABIC LETTER LAM WITH DOT ABOVE
+  { 0x06B7, BIDI_AL  },  // ARABIC LETTER LAM WITH THREE DOTS ABOVE
+  { 0x06B8, BIDI_AL  },  // ARABIC LETTER LAM WITH THREE DOTS BELOW
+  { 0x06B9, BIDI_AL  },  // ARABIC LETTER NOON WITH DOT BELOW
+  { 0x06BA, BIDI_AL  },  // ARABIC LETTER NOON GHUNNA
+  { 0x06BB, BIDI_AL  },  // ARABIC LETTER RNOON
+  { 0x06BC, BIDI_AL  },  // ARABIC LETTER NOON WITH RING
+  { 0x06BD, BIDI_AL  },  // ARABIC LETTER NOON WITH THREE DOTS ABOVE
+  { 0x06BE, BIDI_AL  },  // ARABIC LETTER HEH DOACHASHMEE
+  { 0x06BF, BIDI_AL  },  // ARABIC LETTER TCHEH WITH DOT ABOVE
+  { 0x06C0, BIDI_AL  },  // ARABIC LETTER HEH WITH YEH ABOVE
+  { 0x06C1, BIDI_AL  },  // ARABIC LETTER HEH GOAL
+  { 0x06C2, BIDI_AL  },  // ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+  { 0x06C3, BIDI_AL  },  // ARABIC LETTER TEH MARBUTA GOAL
+  { 0x06C4, BIDI_AL  },  // ARABIC LETTER WAW WITH RING
+  { 0x06C5, BIDI_AL  },  // ARABIC LETTER KIRGHIZ OE
+  { 0x06C6, BIDI_AL  },  // ARABIC LETTER OE
+  { 0x06C7, BIDI_AL  },  // ARABIC LETTER U
+  { 0x06C8, BIDI_AL  },  // ARABIC LETTER YU
+  { 0x06C9, BIDI_AL  },  // ARABIC LETTER KIRGHIZ YU
+  { 0x06CA, BIDI_AL  },  // ARABIC LETTER WAW WITH TWO DOTS ABOVE
+  { 0x06CB, BIDI_AL  },  // ARABIC LETTER VE
+  { 0x06CC, BIDI_AL  },  // ARABIC LETTER FARSI YEH
+  { 0x06CD, BIDI_AL  },  // ARABIC LETTER YEH WITH TAIL
+  { 0x06CE, BIDI_AL  },  // ARABIC LETTER YEH WITH SMALL V
+  { 0x06CF, BIDI_AL  },  // ARABIC LETTER WAW WITH DOT ABOVE
+  { 0x06D0, BIDI_AL  },  // ARABIC LETTER E
+  { 0x06D1, BIDI_AL  },  // ARABIC LETTER YEH WITH THREE DOTS BELOW
+  { 0x06D2, BIDI_AL  },  // ARABIC LETTER YEH BARREE
+  { 0x06D3, BIDI_AL  },  // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+  { 0x06D4, BIDI_AL  },  // ARABIC FULL STOP
+  { 0x06D5, BIDI_AL  },  // ARABIC LETTER AE
+  { 0x06D6, BIDI_NSM },  // ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+  { 0x06D7, BIDI_NSM },  // ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+  { 0x06D8, BIDI_NSM },  // ARABIC SMALL HIGH MEEM INITIAL FORM
+  { 0x06D9, BIDI_NSM },  // ARABIC SMALL HIGH LAM ALEF
+  { 0x06DA, BIDI_NSM },  // ARABIC SMALL HIGH JEEM
+  { 0x06DB, BIDI_NSM },  // ARABIC SMALL HIGH THREE DOTS
+  { 0x06DC, BIDI_NSM },  // ARABIC SMALL HIGH SEEN
+  { 0x06DD, BIDI_AN  },  // ARABIC END OF AYAH
+  { 0x06DE, BIDI_ON  },  // ARABIC START OF RUB EL HIZB
+  { 0x06DF, BIDI_NSM },  // ARABIC SMALL HIGH ROUNDED ZERO
+  { 0x06E0, BIDI_NSM },  // ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+  { 0x06E1, BIDI_NSM },  // ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+  { 0x06E2, BIDI_NSM },  // ARABIC SMALL HIGH MEEM ISOLATED FORM
+  { 0x06E3, BIDI_NSM },  // ARABIC SMALL LOW SEEN
+  { 0x06E4, BIDI_NSM },  // ARABIC SMALL HIGH MADDA
+  { 0x06E5, BIDI_AL  },  // ARABIC SMALL WAW
+  { 0x06E6, BIDI_AL  },  // ARABIC SMALL YEH
+  { 0x06E7, BIDI_NSM },  // ARABIC SMALL HIGH YEH
+  { 0x06E8, BIDI_NSM },  // ARABIC SMALL HIGH NOON
+  { 0x06E9, BIDI_ON  },  // ARABIC PLACE OF SAJDAH
+  { 0x06EA, BIDI_NSM },  // ARABIC EMPTY CENTRE LOW STOP
+  { 0x06EB, BIDI_NSM },  // ARABIC EMPTY CENTRE HIGH STOP
+  { 0x06EC, BIDI_NSM },  // ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+  { 0x06ED, BIDI_NSM },  // ARABIC SMALL LOW MEEM
+  { 0x06EE, BIDI_AL  },  // ARABIC LETTER DAL WITH INVERTED V
+  { 0x06EF, BIDI_AL  },  // ARABIC LETTER REH WITH INVERTED V
+  { 0x06F0, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT ZERO
+  { 0x06F1, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT ONE
+  { 0x06F2, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT TWO
+  { 0x06F3, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT THREE
+  { 0x06F4, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT FOUR
+  { 0x06F5, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT FIVE
+  { 0x06F6, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT SIX
+  { 0x06F7, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT SEVEN
+  { 0x06F8, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT EIGHT
+  { 0x06F9, BIDI_EN  },  // EXTENDED ARABIC-INDIC DIGIT NINE
+  { 0x06FA, BIDI_AL  },  // ARABIC LETTER SHEEN WITH DOT BELOW
+  { 0x06FB, BIDI_AL  },  // ARABIC LETTER DAD WITH DOT BELOW
+  { 0x06FC, BIDI_AL  },  // ARABIC LETTER GHAIN WITH DOT BELOW
+  { 0x06FD, BIDI_AL  },  // ARABIC SIGN SINDHI AMPERSAND
+  { 0x06FE, BIDI_AL  },  // ARABIC SIGN SINDHI POSTPOSITION MEN
+  { 0x06FF, BIDI_AL  },  // ARABIC LETTER HEH WITH INVERTED V
+  { 0x0700, BIDI_AL  },  // SYRIAC END OF PARAGRAPH
+  { 0x0701, BIDI_AL  },  // SYRIAC SUPRALINEAR FULL STOP
+  { 0x0702, BIDI_AL  },  // SYRIAC SUBLINEAR FULL STOP
+  { 0x0703, BIDI_AL  },  // SYRIAC SUPRALINEAR COLON
+  { 0x0704, BIDI_AL  },  // SYRIAC SUBLINEAR COLON
+  { 0x0705, BIDI_AL  },  // SYRIAC HORIZONTAL COLON
+  { 0x0706, BIDI_AL  },  // SYRIAC COLON SKEWED LEFT
+  { 0x0707, BIDI_AL  },  // SYRIAC COLON SKEWED RIGHT
+  { 0x0708, BIDI_AL  },  // SYRIAC SUPRALINEAR COLON SKEWED LEFT
+  { 0x0709, BIDI_AL  },  // SYRIAC SUBLINEAR COLON SKEWED RIGHT
+  { 0x070A, BIDI_AL  },  // SYRIAC CONTRACTION
+  { 0x070B, BIDI_AL  },  // SYRIAC HARKLEAN OBELUS
+  { 0x070C, BIDI_AL  },  // SYRIAC HARKLEAN METOBELUS
+  { 0x070D, BIDI_AL  },  // SYRIAC HARKLEAN ASTERISCUS
+  { 0x070F, BIDI_AL  },  // SYRIAC ABBREVIATION MARK
+  { 0x0710, BIDI_AL  },  // SYRIAC LETTER ALAPH
+  { 0x0711, BIDI_NSM },  // SYRIAC LETTER SUPERSCRIPT ALAPH
+  { 0x0712, BIDI_AL  },  // SYRIAC LETTER BETH
+  { 0x0713, BIDI_AL  },  // SYRIAC LETTER GAMAL
+  { 0x0714, BIDI_AL  },  // SYRIAC LETTER GAMAL GARSHUNI
+  { 0x0715, BIDI_AL  },  // SYRIAC LETTER DALATH
+  { 0x0716, BIDI_AL  },  // SYRIAC LETTER DOTLESS DALATH RISH
+  { 0x0717, BIDI_AL  },  // SYRIAC LETTER HE
+  { 0x0718, BIDI_AL  },  // SYRIAC LETTER WAW
+  { 0x0719, BIDI_AL  },  // SYRIAC LETTER ZAIN
+  { 0x071A, BIDI_AL  },  // SYRIAC LETTER HETH
+  { 0x071B, BIDI_AL  },  // SYRIAC LETTER TETH
+  { 0x071C, BIDI_AL  },  // SYRIAC LETTER TETH GARSHUNI
+  { 0x071D, BIDI_AL  },  // SYRIAC LETTER YUDH
+  { 0x071E, BIDI_AL  },  // SYRIAC LETTER YUDH HE
+  { 0x071F, BIDI_AL  },  // SYRIAC LETTER KAPH
+  { 0x0720, BIDI_AL  },  // SYRIAC LETTER LAMADH
+  { 0x0721, BIDI_AL  },  // SYRIAC LETTER MIM
+  { 0x0722, BIDI_AL  },  // SYRIAC LETTER NUN
+  { 0x0723, BIDI_AL  },  // SYRIAC LETTER SEMKATH
+  { 0x0724, BIDI_AL  },  // SYRIAC LETTER FINAL SEMKATH
+  { 0x0725, BIDI_AL  },  // SYRIAC LETTER E
+  { 0x0726, BIDI_AL  },  // SYRIAC LETTER PE
+  { 0x0727, BIDI_AL  },  // SYRIAC LETTER REVERSED PE
+  { 0x0728, BIDI_AL  },  // SYRIAC LETTER SADHE
+  { 0x0729, BIDI_AL  },  // SYRIAC LETTER QAPH
+  { 0x072A, BIDI_AL  },  // SYRIAC LETTER RISH
+  { 0x072B, BIDI_AL  },  // SYRIAC LETTER SHIN
+  { 0x072C, BIDI_AL  },  // SYRIAC LETTER TAW
+  { 0x072D, BIDI_AL  },  // SYRIAC LETTER PERSIAN BHETH
+  { 0x072E, BIDI_AL  },  // SYRIAC LETTER PERSIAN GHAMAL
+  { 0x072F, BIDI_AL  },  // SYRIAC LETTER PERSIAN DHALATH
+  { 0x0730, BIDI_NSM },  // SYRIAC PTHAHA ABOVE
+  { 0x0731, BIDI_NSM },  // SYRIAC PTHAHA BELOW
+  { 0x0732, BIDI_NSM },  // SYRIAC PTHAHA DOTTED
+  { 0x0733, BIDI_NSM },  // SYRIAC ZQAPHA ABOVE
+  { 0x0734, BIDI_NSM },  // SYRIAC ZQAPHA BELOW
+  { 0x0735, BIDI_NSM },  // SYRIAC ZQAPHA DOTTED
+  { 0x0736, BIDI_NSM },  // SYRIAC RBASA ABOVE
+  { 0x0737, BIDI_NSM },  // SYRIAC RBASA BELOW
+  { 0x0738, BIDI_NSM },  // SYRIAC DOTTED ZLAMA HORIZONTAL
+  { 0x0739, BIDI_NSM },  // SYRIAC DOTTED ZLAMA ANGULAR
+  { 0x073A, BIDI_NSM },  // SYRIAC HBASA ABOVE
+  { 0x073B, BIDI_NSM },  // SYRIAC HBASA BELOW
+  { 0x073C, BIDI_NSM },  // SYRIAC HBASA-ESASA DOTTED
+  { 0x073D, BIDI_NSM },  // SYRIAC ESASA ABOVE
+  { 0x073E, BIDI_NSM },  // SYRIAC ESASA BELOW
+  { 0x073F, BIDI_NSM },  // SYRIAC RWAHA
+  { 0x0740, BIDI_NSM },  // SYRIAC FEMININE DOT
+  { 0x0741, BIDI_NSM },  // SYRIAC QUSHSHAYA
+  { 0x0742, BIDI_NSM },  // SYRIAC RUKKAKHA
+  { 0x0743, BIDI_NSM },  // SYRIAC TWO VERTICAL DOTS ABOVE
+  { 0x0744, BIDI_NSM },  // SYRIAC TWO VERTICAL DOTS BELOW
+  { 0x0745, BIDI_NSM },  // SYRIAC THREE DOTS ABOVE
+  { 0x0746, BIDI_NSM },  // SYRIAC THREE DOTS BELOW
+  { 0x0747, BIDI_NSM },  // SYRIAC OBLIQUE LINE ABOVE
+  { 0x0748, BIDI_NSM },  // SYRIAC OBLIQUE LINE BELOW
+  { 0x0749, BIDI_NSM },  // SYRIAC MUSIC
+  { 0x074A, BIDI_NSM },  // SYRIAC BARREKH
+  { 0x074D, BIDI_AL  },  // SYRIAC LETTER SOGDIAN ZHAIN
+  { 0x074E, BIDI_AL  },  // SYRIAC LETTER SOGDIAN KHAPH
+  { 0x074F, BIDI_AL  },  // SYRIAC LETTER SOGDIAN FE
+  { 0x0750, BIDI_AL  },  // ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+  { 0x0751, BIDI_AL  },  // ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+  { 0x0752, BIDI_AL  },  // ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+  { 0x0753, BIDI_AL  },  // ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+  { 0x0754, BIDI_AL  },  // ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+  { 0x0755, BIDI_AL  },  // ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+  { 0x0756, BIDI_AL  },  // ARABIC LETTER BEH WITH SMALL V
+  { 0x0757, BIDI_AL  },  // ARABIC LETTER HAH WITH TWO DOTS ABOVE
+  { 0x0758, BIDI_AL  },  // ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+  { 0x0759, BIDI_AL  },  // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+  { 0x075A, BIDI_AL  },  // ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+  { 0x075B, BIDI_AL  },  // ARABIC LETTER REH WITH STROKE
+  { 0x075C, BIDI_AL  },  // ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+  { 0x075D, BIDI_AL  },  // ARABIC LETTER AIN WITH TWO DOTS ABOVE
+  { 0x075E, BIDI_AL  },  // ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+  { 0x075F, BIDI_AL  },  // ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+  { 0x0760, BIDI_AL  },  // ARABIC LETTER FEH WITH TWO DOTS BELOW
+  { 0x0761, BIDI_AL  },  // ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+  { 0x0762, BIDI_AL  },  // ARABIC LETTER KEHEH WITH DOT ABOVE
+  { 0x0763, BIDI_AL  },  // ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+  { 0x0764, BIDI_AL  },  // ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+  { 0x0765, BIDI_AL  },  // ARABIC LETTER MEEM WITH DOT ABOVE
+  { 0x0766, BIDI_AL  },  // ARABIC LETTER MEEM WITH DOT BELOW
+  { 0x0767, BIDI_AL  },  // ARABIC LETTER NOON WITH TWO DOTS BELOW
+  { 0x0768, BIDI_AL  },  // ARABIC LETTER NOON WITH SMALL TAH
+  { 0x0769, BIDI_AL  },  // ARABIC LETTER NOON WITH SMALL V
+  { 0x076A, BIDI_AL  },  // ARABIC LETTER LAM WITH BAR
+  { 0x076B, BIDI_AL  },  // ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+  { 0x076C, BIDI_AL  },  // ARABIC LETTER REH WITH HAMZA ABOVE
+  { 0x076D, BIDI_AL  },  // ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+  { 0x076E, BIDI_AL  },  // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW
+  { 0x076F, BIDI_AL  },  // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+  { 0x0770, BIDI_AL  },  // ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+  { 0x0771, BIDI_AL  },  // ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+  { 0x0772, BIDI_AL  },  // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
+  { 0x0773, BIDI_AL  },  // ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+  { 0x0774, BIDI_AL  },  // ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+  { 0x0775, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+  { 0x0776, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+  { 0x0777, BIDI_AL  },  // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+  { 0x0778, BIDI_AL  },  // ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+  { 0x0779, BIDI_AL  },  // ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+  { 0x077A, BIDI_AL  },  // ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+  { 0x077B, BIDI_AL  },  // ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+  { 0x077C, BIDI_AL  },  // ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+  { 0x077D, BIDI_AL  },  // ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE
+  { 0x077E, BIDI_AL  },  // ARABIC LETTER SEEN WITH INVERTED V
+  { 0x077F, BIDI_AL  },  // ARABIC LETTER KAF WITH TWO DOTS ABOVE
+  { 0x0780, BIDI_AL  },  // THAANA LETTER HAA
+  { 0x0781, BIDI_AL  },  // THAANA LETTER SHAVIYANI
+  { 0x0782, BIDI_AL  },  // THAANA LETTER NOONU
+  { 0x0783, BIDI_AL  },  // THAANA LETTER RAA
+  { 0x0784, BIDI_AL  },  // THAANA LETTER BAA
+  { 0x0785, BIDI_AL  },  // THAANA LETTER LHAVIYANI
+  { 0x0786, BIDI_AL  },  // THAANA LETTER KAAFU
+  { 0x0787, BIDI_AL  },  // THAANA LETTER ALIFU
+  { 0x0788, BIDI_AL  },  // THAANA LETTER VAAVU
+  { 0x0789, BIDI_AL  },  // THAANA LETTER MEEMU
+  { 0x078A, BIDI_AL  },  // THAANA LETTER FAAFU
+  { 0x078B, BIDI_AL  },  // THAANA LETTER DHAALU
+  { 0x078C, BIDI_AL  },  // THAANA LETTER THAA
+  { 0x078D, BIDI_AL  },  // THAANA LETTER LAAMU
+  { 0x078E, BIDI_AL  },  // THAANA LETTER GAAFU
+  { 0x078F, BIDI_AL  },  // THAANA LETTER GNAVIYANI
+  { 0x0790, BIDI_AL  },  // THAANA LETTER SEENU
+  { 0x0791, BIDI_AL  },  // THAANA LETTER DAVIYANI
+  { 0x0792, BIDI_AL  },  // THAANA LETTER ZAVIYANI
+  { 0x0793, BIDI_AL  },  // THAANA LETTER TAVIYANI
+  { 0x0794, BIDI_AL  },  // THAANA LETTER YAA
+  { 0x0795, BIDI_AL  },  // THAANA LETTER PAVIYANI
+  { 0x0796, BIDI_AL  },  // THAANA LETTER JAVIYANI
+  { 0x0797, BIDI_AL  },  // THAANA LETTER CHAVIYANI
+  { 0x0798, BIDI_AL  },  // THAANA LETTER TTAA
+  { 0x0799, BIDI_AL  },  // THAANA LETTER HHAA
+  { 0x079A, BIDI_AL  },  // THAANA LETTER KHAA
+  { 0x079B, BIDI_AL  },  // THAANA LETTER THAALU
+  { 0x079C, BIDI_AL  },  // THAANA LETTER ZAA
+  { 0x079D, BIDI_AL  },  // THAANA LETTER SHEENU
+  { 0x079E, BIDI_AL  },  // THAANA LETTER SAADHU
+  { 0x079F, BIDI_AL  },  // THAANA LETTER DAADHU
+  { 0x07A0, BIDI_AL  },  // THAANA LETTER TO
+  { 0x07A1, BIDI_AL  },  // THAANA LETTER ZO
+  { 0x07A2, BIDI_AL  },  // THAANA LETTER AINU
+  { 0x07A3, BIDI_AL  },  // THAANA LETTER GHAINU
+  { 0x07A4, BIDI_AL  },  // THAANA LETTER QAAFU
+  { 0x07A5, BIDI_AL  },  // THAANA LETTER WAAVU
+  { 0x07A6, BIDI_NSM },  // THAANA ABAFILI
+  { 0x07A7, BIDI_NSM },  // THAANA AABAAFILI
+  { 0x07A8, BIDI_NSM },  // THAANA IBIFILI
+  { 0x07A9, BIDI_NSM },  // THAANA EEBEEFILI
+  { 0x07AA, BIDI_NSM },  // THAANA UBUFILI
+  { 0x07AB, BIDI_NSM },  // THAANA OOBOOFILI
+  { 0x07AC, BIDI_NSM },  // THAANA EBEFILI
+  { 0x07AD, BIDI_NSM },  // THAANA EYBEYFILI
+  { 0x07AE, BIDI_NSM },  // THAANA OBOFILI
+  { 0x07AF, BIDI_NSM },  // THAANA OABOAFILI
+  { 0x07B0, BIDI_NSM },  // THAANA SUKUN
+  { 0x07B1, BIDI_AL  },  // THAANA LETTER NAA
+  { 0x07C0, BIDI_R   },  // NKO DIGIT ZERO
+  { 0x07C1, BIDI_R   },  // NKO DIGIT ONE
+  { 0x07C2, BIDI_R   },  // NKO DIGIT TWO
+  { 0x07C3, BIDI_R   },  // NKO DIGIT THREE
+  { 0x07C4, BIDI_R   },  // NKO DIGIT FOUR
+  { 0x07C5, BIDI_R   },  // NKO DIGIT FIVE
+  { 0x07C6, BIDI_R   },  // NKO DIGIT SIX
+  { 0x07C7, BIDI_R   },  // NKO DIGIT SEVEN
+  { 0x07C8, BIDI_R   },  // NKO DIGIT EIGHT
+  { 0x07C9, BIDI_R   },  // NKO DIGIT NINE
+  { 0x07CA, BIDI_R   },  // NKO LETTER A
+  { 0x07CB, BIDI_R   },  // NKO LETTER EE
+  { 0x07CC, BIDI_R   },  // NKO LETTER I
+  { 0x07CD, BIDI_R   },  // NKO LETTER E
+  { 0x07CE, BIDI_R   },  // NKO LETTER U
+  { 0x07CF, BIDI_R   },  // NKO LETTER OO
+  { 0x07D0, BIDI_R   },  // NKO LETTER O
+  { 0x07D1, BIDI_R   },  // NKO LETTER DAGBASINNA
+  { 0x07D2, BIDI_R   },  // NKO LETTER N
+  { 0x07D3, BIDI_R   },  // NKO LETTER BA
+  { 0x07D4, BIDI_R   },  // NKO LETTER PA
+  { 0x07D5, BIDI_R   },  // NKO LETTER TA
+  { 0x07D6, BIDI_R   },  // NKO LETTER JA
+  { 0x07D7, BIDI_R   },  // NKO LETTER CHA
+  { 0x07D8, BIDI_R   },  // NKO LETTER DA
+  { 0x07D9, BIDI_R   },  // NKO LETTER RA
+  { 0x07DA, BIDI_R   },  // NKO LETTER RRA
+  { 0x07DB, BIDI_R   },  // NKO LETTER SA
+  { 0x07DC, BIDI_R   },  // NKO LETTER GBA
+  { 0x07DD, BIDI_R   },  // NKO LETTER FA
+  { 0x07DE, BIDI_R   },  // NKO LETTER KA
+  { 0x07DF, BIDI_R   },  // NKO LETTER LA
+  { 0x07E0, BIDI_R   },  // NKO LETTER NA WOLOSO
+  { 0x07E1, BIDI_R   },  // NKO LETTER MA
+  { 0x07E2, BIDI_R   },  // NKO LETTER NYA
+  { 0x07E3, BIDI_R   },  // NKO LETTER NA
+  { 0x07E4, BIDI_R   },  // NKO LETTER HA
+  { 0x07E5, BIDI_R   },  // NKO LETTER WA
+  { 0x07E6, BIDI_R   },  // NKO LETTER YA
+  { 0x07E7, BIDI_R   },  // NKO LETTER NYA WOLOSO
+  { 0x07E8, BIDI_R   },  // NKO LETTER JONA JA
+  { 0x07E9, BIDI_R   },  // NKO LETTER JONA CHA
+  { 0x07EA, BIDI_R   },  // NKO LETTER JONA RA
+  { 0x07EB, BIDI_NSM },  // NKO COMBINING SHORT HIGH TONE
+  { 0x07EC, BIDI_NSM },  // NKO COMBINING SHORT LOW TONE
+  { 0x07ED, BIDI_NSM },  // NKO COMBINING SHORT RISING TONE
+  { 0x07EE, BIDI_NSM },  // NKO COMBINING LONG DESCENDING TONE
+  { 0x07EF, BIDI_NSM },  // NKO COMBINING LONG HIGH TONE
+  { 0x07F0, BIDI_NSM },  // NKO COMBINING LONG LOW TONE
+  { 0x07F1, BIDI_NSM },  // NKO COMBINING LONG RISING TONE
+  { 0x07F2, BIDI_NSM },  // NKO COMBINING NASALIZATION MARK
+  { 0x07F3, BIDI_NSM },  // NKO COMBINING DOUBLE DOT ABOVE
+  { 0x07F4, BIDI_R   },  // NKO HIGH TONE APOSTROPHE
+  { 0x07F5, BIDI_R   },  // NKO LOW TONE APOSTROPHE
+  { 0x07F6, BIDI_ON  },  // NKO SYMBOL OO DENNEN
+  { 0x07F7, BIDI_ON  },  // NKO SYMBOL GBAKURUNEN
+  { 0x07F8, BIDI_ON  },  // NKO COMMA
+  { 0x07F9, BIDI_ON  },  // NKO EXCLAMATION MARK
+  { 0x07FA, BIDI_R   },  // NKO LAJANYALAN
+  { 0x0800, BIDI_R   },  // SAMARITAN LETTER ALAF
+  { 0x0801, BIDI_R   },  // SAMARITAN LETTER BIT
+  { 0x0802, BIDI_R   },  // SAMARITAN LETTER GAMAN
+  { 0x0803, BIDI_R   },  // SAMARITAN LETTER DALAT
+  { 0x0804, BIDI_R   },  // SAMARITAN LETTER IY
+  { 0x0805, BIDI_R   },  // SAMARITAN LETTER BAA
+  { 0x0806, BIDI_R   },  // SAMARITAN LETTER ZEN
+  { 0x0807, BIDI_R   },  // SAMARITAN LETTER IT
+  { 0x0808, BIDI_R   },  // SAMARITAN LETTER TIT
+  { 0x0809, BIDI_R   },  // SAMARITAN LETTER YUT
+  { 0x080A, BIDI_R   },  // SAMARITAN LETTER KAAF
+  { 0x080B, BIDI_R   },  // SAMARITAN LETTER LABAT
+  { 0x080C, BIDI_R   },  // SAMARITAN LETTER MIM
+  { 0x080D, BIDI_R   },  // SAMARITAN LETTER NUN
+  { 0x080E, BIDI_R   },  // SAMARITAN LETTER SINGAAT
+  { 0x080F, BIDI_R   },  // SAMARITAN LETTER IN
+  { 0x0810, BIDI_R   },  // SAMARITAN LETTER FI
+  { 0x0811, BIDI_R   },  // SAMARITAN LETTER TSAADIY
+  { 0x0812, BIDI_R   },  // SAMARITAN LETTER QUF
+  { 0x0813, BIDI_R   },  // SAMARITAN LETTER RISH
+  { 0x0814, BIDI_R   },  // SAMARITAN LETTER SHAN
+  { 0x0815, BIDI_R   },  // SAMARITAN LETTER TAAF
+  { 0x0816, BIDI_NSM },  // SAMARITAN MARK IN
+  { 0x0817, BIDI_NSM },  // SAMARITAN MARK IN-ALAF
+  { 0x0818, BIDI_NSM },  // SAMARITAN MARK OCCLUSION
+  { 0x0819, BIDI_NSM },  // SAMARITAN MARK DAGESH
+  { 0x081A, BIDI_R   },  // SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+  { 0x081B, BIDI_NSM },  // SAMARITAN MARK EPENTHETIC YUT
+  { 0x081C, BIDI_NSM },  // SAMARITAN VOWEL SIGN LONG E
+  { 0x081D, BIDI_NSM },  // SAMARITAN VOWEL SIGN E
+  { 0x081E, BIDI_NSM },  // SAMARITAN VOWEL SIGN OVERLONG AA
+  { 0x081F, BIDI_NSM },  // SAMARITAN VOWEL SIGN LONG AA
+  { 0x0820, BIDI_NSM },  // SAMARITAN VOWEL SIGN AA
+  { 0x0821, BIDI_NSM },  // SAMARITAN VOWEL SIGN OVERLONG A
+  { 0x0822, BIDI_NSM },  // SAMARITAN VOWEL SIGN LONG A
+  { 0x0823, BIDI_NSM },  // SAMARITAN VOWEL SIGN A
+  { 0x0824, BIDI_R   },  // SAMARITAN MODIFIER LETTER SHORT A
+  { 0x0825, BIDI_NSM },  // SAMARITAN VOWEL SIGN SHORT A
+  { 0x0826, BIDI_NSM },  // SAMARITAN VOWEL SIGN LONG U
+  { 0x0827, BIDI_NSM },  // SAMARITAN VOWEL SIGN U
+  { 0x0828, BIDI_R   },  // SAMARITAN MODIFIER LETTER I
+  { 0x0829, BIDI_NSM },  // SAMARITAN VOWEL SIGN LONG I
+  { 0x082A, BIDI_NSM },  // SAMARITAN VOWEL SIGN I
+  { 0x082B, BIDI_NSM },  // SAMARITAN VOWEL SIGN O
+  { 0x082C, BIDI_NSM },  // SAMARITAN VOWEL SIGN SUKUN
+  { 0x082D, BIDI_NSM },  // SAMARITAN MARK NEQUDAA
+  { 0x0830, BIDI_R   },  // SAMARITAN PUNCTUATION NEQUDAA
+  { 0x0831, BIDI_R   },  // SAMARITAN PUNCTUATION AFSAAQ
+  { 0x0832, BIDI_R   },  // SAMARITAN PUNCTUATION ANGED
+  { 0x0833, BIDI_R   },  // SAMARITAN PUNCTUATION BAU
+  { 0x0834, BIDI_R   },  // SAMARITAN PUNCTUATION ATMAAU
+  { 0x0835, BIDI_R   },  // SAMARITAN PUNCTUATION SHIYYAALAA
+  { 0x0836, BIDI_R   },  // SAMARITAN ABBREVIATION MARK
+  { 0x0837, BIDI_R   },  // SAMARITAN PUNCTUATION MELODIC QITSA
+  { 0x0838, BIDI_R   },  // SAMARITAN PUNCTUATION ZIQAA
+  { 0x0839, BIDI_R   },  // SAMARITAN PUNCTUATION QITSA
+  { 0x083A, BIDI_R   },  // SAMARITAN PUNCTUATION ZAEF
+  { 0x083B, BIDI_R   },  // SAMARITAN PUNCTUATION TURU
+  { 0x083C, BIDI_R   },  // SAMARITAN PUNCTUATION ARKAANU
+  { 0x083D, BIDI_R   },  // SAMARITAN PUNCTUATION SOF MASHFAAT
+  { 0x083E, BIDI_R   },  // SAMARITAN PUNCTUATION ANNAAU
+  { 0x0840, BIDI_R   },  // MANDAIC LETTER HALQA
+  { 0x0841, BIDI_R   },  // MANDAIC LETTER AB
+  { 0x0842, BIDI_R   },  // MANDAIC LETTER AG
+  { 0x0843, BIDI_R   },  // MANDAIC LETTER AD
+  { 0x0844, BIDI_R   },  // MANDAIC LETTER AH
+  { 0x0845, BIDI_R   },  // MANDAIC LETTER USHENNA
+  { 0x0846, BIDI_R   },  // MANDAIC LETTER AZ
+  { 0x0847, BIDI_R   },  // MANDAIC LETTER IT
+  { 0x0848, BIDI_R   },  // MANDAIC LETTER ATT
+  { 0x0849, BIDI_R   },  // MANDAIC LETTER AKSA
+  { 0x084A, BIDI_R   },  // MANDAIC LETTER AK
+  { 0x084B, BIDI_R   },  // MANDAIC LETTER AL
+  { 0x084C, BIDI_R   },  // MANDAIC LETTER AM
+  { 0x084D, BIDI_R   },  // MANDAIC LETTER AN
+  { 0x084E, BIDI_R   },  // MANDAIC LETTER AS
+  { 0x084F, BIDI_R   },  // MANDAIC LETTER IN
+  { 0x0850, BIDI_R   },  // MANDAIC LETTER AP
+  { 0x0851, BIDI_R   },  // MANDAIC LETTER ASZ
+  { 0x0852, BIDI_R   },  // MANDAIC LETTER AQ
+  { 0x0853, BIDI_R   },  // MANDAIC LETTER AR
+  { 0x0854, BIDI_R   },  // MANDAIC LETTER ASH
+  { 0x0855, BIDI_R   },  // MANDAIC LETTER AT
+  { 0x0856, BIDI_R   },  // MANDAIC LETTER DUSHENNA
+  { 0x0857, BIDI_R   },  // MANDAIC LETTER KAD
+  { 0x0858, BIDI_R   },  // MANDAIC LETTER AIN
+  { 0x0859, BIDI_NSM },  // MANDAIC AFFRICATION MARK
+  { 0x085A, BIDI_NSM },  // MANDAIC VOCALIZATION MARK
+  { 0x085B, BIDI_NSM },  // MANDAIC GEMINATION MARK
+  { 0x085E, BIDI_R   },  // MANDAIC PUNCTUATION
+  { 0x08A0, BIDI_AL  },  // ARABIC LETTER BEH WITH SMALL V BELOW
+  { 0x08A1, BIDI_AL  },  // ARABIC LETTER BEH WITH HAMZA ABOVE
+  { 0x08A2, BIDI_AL  },  // ARABIC LETTER JEEM WITH TWO DOTS ABOVE
+  { 0x08A3, BIDI_AL  },  // ARABIC LETTER TAH WITH TWO DOTS ABOVE
+  { 0x08A4, BIDI_AL  },  // ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE
+  { 0x08A5, BIDI_AL  },  // ARABIC LETTER QAF WITH DOT BELOW
+  { 0x08A6, BIDI_AL  },  // ARABIC LETTER LAM WITH DOUBLE BAR
+  { 0x08A7, BIDI_AL  },  // ARABIC LETTER MEEM WITH THREE DOTS ABOVE
+  { 0x08A8, BIDI_AL  },  // ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE
+  { 0x08A9, BIDI_AL  },  // ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE
+  { 0x08AA, BIDI_AL  },  // ARABIC LETTER REH WITH LOOP
+  { 0x08AB, BIDI_AL  },  // ARABIC LETTER WAW WITH DOT WITHIN
+  { 0x08AC, BIDI_AL  },  // ARABIC LETTER ROHINGYA YEH
+  { 0x08AD, BIDI_AL  },  // ARABIC LETTER LOW ALEF
+  { 0x08AE, BIDI_AL  },  // ARABIC LETTER DAL WITH THREE DOTS BELOW
+  { 0x08AF, BIDI_AL  },  // ARABIC LETTER SAD WITH THREE DOTS BELOW
+  { 0x08B0, BIDI_AL  },  // ARABIC LETTER GAF WITH INVERTED STROKE
+  { 0x08B1, BIDI_AL  },  // ARABIC LETTER STRAIGHT WAW
+  { 0x08B2, BIDI_AL  },  // ARABIC LETTER ZAIN WITH INVERTED V ABOVE
+  { 0x08B3, BIDI_AL  },  // ARABIC LETTER AIN WITH THREE DOTS BELOW
+  { 0x08B4, BIDI_AL  },  // ARABIC LETTER KAF WITH DOT BELOW
+  { 0x08E3, BIDI_NSM },  // ARABIC TURNED DAMMA BELOW
+  { 0x08E4, BIDI_NSM },  // ARABIC CURLY FATHA
+  { 0x08E5, BIDI_NSM },  // ARABIC CURLY DAMMA
+  { 0x08E6, BIDI_NSM },  // ARABIC CURLY KASRA
+  { 0x08E7, BIDI_NSM },  // ARABIC CURLY FATHATAN
+  { 0x08E8, BIDI_NSM },  // ARABIC CURLY DAMMATAN
+  { 0x08E9, BIDI_NSM },  // ARABIC CURLY KASRATAN
+  { 0x08EA, BIDI_NSM },  // ARABIC TONE ONE DOT ABOVE
+  { 0x08EB, BIDI_NSM },  // ARABIC TONE TWO DOTS ABOVE
+  { 0x08EC, BIDI_NSM },  // ARABIC TONE LOOP ABOVE
+  { 0x08ED, BIDI_NSM },  // ARABIC TONE ONE DOT BELOW
+  { 0x08EE, BIDI_NSM },  // ARABIC TONE TWO DOTS BELOW
+  { 0x08EF, BIDI_NSM },  // ARABIC TONE LOOP BELOW
+  { 0x08F0, BIDI_NSM },  // ARABIC OPEN FATHATAN
+  { 0x08F1, BIDI_NSM },  // ARABIC OPEN DAMMATAN
+  { 0x08F2, BIDI_NSM },  // ARABIC OPEN KASRATAN
+  { 0x08F3, BIDI_NSM },  // ARABIC SMALL HIGH WAW
+  { 0x08F4, BIDI_NSM },  // ARABIC FATHA WITH RING
+  { 0x08F5, BIDI_NSM },  // ARABIC FATHA WITH DOT ABOVE
+  { 0x08F6, BIDI_NSM },  // ARABIC KASRA WITH DOT BELOW
+  { 0x08F7, BIDI_NSM },  // ARABIC LEFT ARROWHEAD ABOVE
+  { 0x08F8, BIDI_NSM },  // ARABIC RIGHT ARROWHEAD ABOVE
+  { 0x08F9, BIDI_NSM },  // ARABIC LEFT ARROWHEAD BELOW
+  { 0x08FA, BIDI_NSM },  // ARABIC RIGHT ARROWHEAD BELOW
+  { 0x08FB, BIDI_NSM },  // ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
+  { 0x08FC, BIDI_NSM },  // ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+  { 0x08FD, BIDI_NSM },  // ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
+  { 0x08FE, BIDI_NSM },  // ARABIC DAMMA WITH DOT
+  { 0x08FF, BIDI_NSM },  // ARABIC MARK SIDEWAYS NOON GHUNNA
+  { 0x0900, BIDI_NSM },  // DEVANAGARI SIGN INVERTED CANDRABINDU
+  { 0x0901, BIDI_NSM },  // DEVANAGARI SIGN CANDRABINDU
+  { 0x0902, BIDI_NSM },  // DEVANAGARI SIGN ANUSVARA
+  { 0x0903, BIDI_L   },  // DEVANAGARI SIGN VISARGA
+  { 0x0904, BIDI_L   },  // DEVANAGARI LETTER SHORT A
+  { 0x0905, BIDI_L   },  // DEVANAGARI LETTER A
+  { 0x0906, BIDI_L   },  // DEVANAGARI LETTER AA
+  { 0x0907, BIDI_L   },  // DEVANAGARI LETTER I
+  { 0x0908, BIDI_L   },  // DEVANAGARI LETTER II
+  { 0x0909, BIDI_L   },  // DEVANAGARI LETTER U
+  { 0x090A, BIDI_L   },  // DEVANAGARI LETTER UU
+  { 0x090B, BIDI_L   },  // DEVANAGARI LETTER VOCALIC R
+  { 0x090C, BIDI_L   },  // DEVANAGARI LETTER VOCALIC L
+  { 0x090D, BIDI_L   },  // DEVANAGARI LETTER CANDRA E
+  { 0x090E, BIDI_L   },  // DEVANAGARI LETTER SHORT E
+  { 0x090F, BIDI_L   },  // DEVANAGARI LETTER E
+  { 0x0910, BIDI_L   },  // DEVANAGARI LETTER AI
+  { 0x0911, BIDI_L   },  // DEVANAGARI LETTER CANDRA O
+  { 0x0912, BIDI_L   },  // DEVANAGARI LETTER SHORT O
+  { 0x0913, BIDI_L   },  // DEVANAGARI LETTER O
+  { 0x0914, BIDI_L   },  // DEVANAGARI LETTER AU
+  { 0x0915, BIDI_L   },  // DEVANAGARI LETTER KA
+  { 0x0916, BIDI_L   },  // DEVANAGARI LETTER KHA
+  { 0x0917, BIDI_L   },  // DEVANAGARI LETTER GA
+  { 0x0918, BIDI_L   },  // DEVANAGARI LETTER GHA
+  { 0x0919, BIDI_L   },  // DEVANAGARI LETTER NGA
+  { 0x091A, BIDI_L   },  // DEVANAGARI LETTER CA
+  { 0x091B, BIDI_L   },  // DEVANAGARI LETTER CHA
+  { 0x091C, BIDI_L   },  // DEVANAGARI LETTER JA
+  { 0x091D, BIDI_L   },  // DEVANAGARI LETTER JHA
+  { 0x091E, BIDI_L   },  // DEVANAGARI LETTER NYA
+  { 0x091F, BIDI_L   },  // DEVANAGARI LETTER TTA
+  { 0x0920, BIDI_L   },  // DEVANAGARI LETTER TTHA
+  { 0x0921, BIDI_L   },  // DEVANAGARI LETTER DDA
+  { 0x0922, BIDI_L   },  // DEVANAGARI LETTER DDHA
+  { 0x0923, BIDI_L   },  // DEVANAGARI LETTER NNA
+  { 0x0924, BIDI_L   },  // DEVANAGARI LETTER TA
+  { 0x0925, BIDI_L   },  // DEVANAGARI LETTER THA
+  { 0x0926, BIDI_L   },  // DEVANAGARI LETTER DA
+  { 0x0927, BIDI_L   },  // DEVANAGARI LETTER DHA
+  { 0x0928, BIDI_L   },  // DEVANAGARI LETTER NA
+  { 0x0929, BIDI_L   },  // DEVANAGARI LETTER NNNA
+  { 0x092A, BIDI_L   },  // DEVANAGARI LETTER PA
+  { 0x092B, BIDI_L   },  // DEVANAGARI LETTER PHA
+  { 0x092C, BIDI_L   },  // DEVANAGARI LETTER BA
+  { 0x092D, BIDI_L   },  // DEVANAGARI LETTER BHA
+  { 0x092E, BIDI_L   },  // DEVANAGARI LETTER MA
+  { 0x092F, BIDI_L   },  // DEVANAGARI LETTER YA
+  { 0x0930, BIDI_L   },  // DEVANAGARI LETTER RA
+  { 0x0931, BIDI_L   },  // DEVANAGARI LETTER RRA
+  { 0x0932, BIDI_L   },  // DEVANAGARI LETTER LA
+  { 0x0933, BIDI_L   },  // DEVANAGARI LETTER LLA
+  { 0x0934, BIDI_L   },  // DEVANAGARI LETTER LLLA
+  { 0x0935, BIDI_L   },  // DEVANAGARI LETTER VA
+  { 0x0936, BIDI_L   },  // DEVANAGARI LETTER SHA
+  { 0x0937, BIDI_L   },  // DEVANAGARI LETTER SSA
+  { 0x0938, BIDI_L   },  // DEVANAGARI LETTER SA
+  { 0x0939, BIDI_L   },  // DEVANAGARI LETTER HA
+  { 0x093A, BIDI_NSM },  // DEVANAGARI VOWEL SIGN OE
+  { 0x093B, BIDI_L   },  // DEVANAGARI VOWEL SIGN OOE
+  { 0x093C, BIDI_NSM },  // DEVANAGARI SIGN NUKTA
+  { 0x093D, BIDI_L   },  // DEVANAGARI SIGN AVAGRAHA
+  { 0x093E, BIDI_L   },  // DEVANAGARI VOWEL SIGN AA
+  { 0x093F, BIDI_L   },  // DEVANAGARI VOWEL SIGN I
+  { 0x0940, BIDI_L   },  // DEVANAGARI VOWEL SIGN II
+  { 0x0941, BIDI_NSM },  // DEVANAGARI VOWEL SIGN U
+  { 0x0942, BIDI_NSM },  // DEVANAGARI VOWEL SIGN UU
+  { 0x0943, BIDI_NSM },  // DEVANAGARI VOWEL SIGN VOCALIC R
+  { 0x0944, BIDI_NSM },  // DEVANAGARI VOWEL SIGN VOCALIC RR
+  { 0x0945, BIDI_NSM },  // DEVANAGARI VOWEL SIGN CANDRA E
+  { 0x0946, BIDI_NSM },  // DEVANAGARI VOWEL SIGN SHORT E
+  { 0x0947, BIDI_NSM },  // DEVANAGARI VOWEL SIGN E
+  { 0x0948, BIDI_NSM },  // DEVANAGARI VOWEL SIGN AI
+  { 0x0949, BIDI_L   },  // DEVANAGARI VOWEL SIGN CANDRA O
+  { 0x094A, BIDI_L   },  // DEVANAGARI VOWEL SIGN SHORT O
+  { 0x094B, BIDI_L   },  // DEVANAGARI VOWEL SIGN O
+  { 0x094C, BIDI_L   },  // DEVANAGARI VOWEL SIGN AU
+  { 0x094D, BIDI_NSM },  // DEVANAGARI SIGN VIRAMA
+  { 0x094E, BIDI_L   },  // DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+  { 0x094F, BIDI_L   },  // DEVANAGARI VOWEL SIGN AW
+  { 0x0950, BIDI_L   },  // DEVANAGARI OM
+  { 0x0951, BIDI_NSM },  // DEVANAGARI STRESS SIGN UDATTA
+  { 0x0952, BIDI_NSM },  // DEVANAGARI STRESS SIGN ANUDATTA
+  { 0x0953, BIDI_NSM },  // DEVANAGARI GRAVE ACCENT
+  { 0x0954, BIDI_NSM },  // DEVANAGARI ACUTE ACCENT
+  { 0x0955, BIDI_NSM },  // DEVANAGARI VOWEL SIGN CANDRA LONG E
+  { 0x0956, BIDI_NSM },  // DEVANAGARI VOWEL SIGN UE
+  { 0x0957, BIDI_NSM },  // DEVANAGARI VOWEL SIGN UUE
+  { 0x0958, BIDI_L   },  // DEVANAGARI LETTER QA
+  { 0x0959, BIDI_L   },  // DEVANAGARI LETTER KHHA
+  { 0x095A, BIDI_L   },  // DEVANAGARI LETTER GHHA
+  { 0x095B, BIDI_L   },  // DEVANAGARI LETTER ZA
+  { 0x095C, BIDI_L   },  // DEVANAGARI LETTER DDDHA
+  { 0x095D, BIDI_L   },  // DEVANAGARI LETTER RHA
+  { 0x095E, BIDI_L   },  // DEVANAGARI LETTER FA
+  { 0x095F, BIDI_L   },  // DEVANAGARI LETTER YYA
+  { 0x0960, BIDI_L   },  // DEVANAGARI LETTER VOCALIC RR
+  { 0x0961, BIDI_L   },  // DEVANAGARI LETTER VOCALIC LL
+  { 0x0962, BIDI_NSM },  // DEVANAGARI VOWEL SIGN VOCALIC L
+  { 0x0963, BIDI_NSM },  // DEVANAGARI VOWEL SIGN VOCALIC LL
+  { 0x0964, BIDI_L   },  // DEVANAGARI DANDA
+  { 0x0965, BIDI_L   },  // DEVANAGARI DOUBLE DANDA
+  { 0x0966, BIDI_L   },  // DEVANAGARI DIGIT ZERO
+  { 0x0967, BIDI_L   },  // DEVANAGARI DIGIT ONE
+  { 0x0968, BIDI_L   },  // DEVANAGARI DIGIT TWO
+  { 0x0969, BIDI_L   },  // DEVANAGARI DIGIT THREE
+  { 0x096A, BIDI_L   },  // DEVANAGARI DIGIT FOUR
+  { 0x096B, BIDI_L   },  // DEVANAGARI DIGIT FIVE
+  { 0x096C, BIDI_L   },  // DEVANAGARI DIGIT SIX
+  { 0x096D, BIDI_L   },  // DEVANAGARI DIGIT SEVEN
+  { 0x096E, BIDI_L   },  // DEVANAGARI DIGIT EIGHT
+  { 0x096F, BIDI_L   },  // DEVANAGARI DIGIT NINE
+  { 0x0970, BIDI_L   },  // DEVANAGARI ABBREVIATION SIGN
+  { 0x0971, BIDI_L   },  // DEVANAGARI SIGN HIGH SPACING DOT
+  { 0x0972, BIDI_L   },  // DEVANAGARI LETTER CANDRA A
+  { 0x0973, BIDI_L   },  // DEVANAGARI LETTER OE
+  { 0x0974, BIDI_L   },  // DEVANAGARI LETTER OOE
+  { 0x0975, BIDI_L   },  // DEVANAGARI LETTER AW
+  { 0x0976, BIDI_L   },  // DEVANAGARI LETTER UE
+  { 0x0977, BIDI_L   },  // DEVANAGARI LETTER UUE
+  { 0x0978, BIDI_L   },  // DEVANAGARI LETTER MARWARI DDA
+  { 0x0979, BIDI_L   },  // DEVANAGARI LETTER ZHA
+  { 0x097A, BIDI_L   },  // DEVANAGARI LETTER HEAVY YA
+  { 0x097B, BIDI_L   },  // DEVANAGARI LETTER GGA
+  { 0x097C, BIDI_L   },  // DEVANAGARI LETTER JJA
+  { 0x097D, BIDI_L   },  // DEVANAGARI LETTER GLOTTAL STOP
+  { 0x097E, BIDI_L   },  // DEVANAGARI LETTER DDDA
+  { 0x097F, BIDI_L   },  // DEVANAGARI LETTER BBA
+  { 0x0980, BIDI_L   },  // BENGALI ANJI
+  { 0x0981, BIDI_NSM },  // BENGALI SIGN CANDRABINDU
+  { 0x0982, BIDI_L   },  // BENGALI SIGN ANUSVARA
+  { 0x0983, BIDI_L   },  // BENGALI SIGN VISARGA
+  { 0x0985, BIDI_L   },  // BENGALI LETTER A
+  { 0x0986, BIDI_L   },  // BENGALI LETTER AA
+  { 0x0987, BIDI_L   },  // BENGALI LETTER I
+  { 0x0988, BIDI_L   },  // BENGALI LETTER II
+  { 0x0989, BIDI_L   },  // BENGALI LETTER U
+  { 0x098A, BIDI_L   },  // BENGALI LETTER UU
+  { 0x098B, BIDI_L   },  // BENGALI LETTER VOCALIC R
+  { 0x098C, BIDI_L   },  // BENGALI LETTER VOCALIC L
+  { 0x098F, BIDI_L   },  // BENGALI LETTER E
+  { 0x0990, BIDI_L   },  // BENGALI LETTER AI
+  { 0x0993, BIDI_L   },  // BENGALI LETTER O
+  { 0x0994, BIDI_L   },  // BENGALI LETTER AU
+  { 0x0995, BIDI_L   },  // BENGALI LETTER KA
+  { 0x0996, BIDI_L   },  // BENGALI LETTER KHA
+  { 0x0997, BIDI_L   },  // BENGALI LETTER GA
+  { 0x0998, BIDI_L   },  // BENGALI LETTER GHA
+  { 0x0999, BIDI_L   },  // BENGALI LETTER NGA
+  { 0x099A, BIDI_L   },  // BENGALI LETTER CA
+  { 0x099B, BIDI_L   },  // BENGALI LETTER CHA
+  { 0x099C, BIDI_L   },  // BENGALI LETTER JA
+  { 0x099D, BIDI_L   },  // BENGALI LETTER JHA
+  { 0x099E, BIDI_L   },  // BENGALI LETTER NYA
+  { 0x099F, BIDI_L   },  // BENGALI LETTER TTA
+  { 0x09A0, BIDI_L   },  // BENGALI LETTER TTHA
+  { 0x09A1, BIDI_L   },  // BENGALI LETTER DDA
+  { 0x09A2, BIDI_L   },  // BENGALI LETTER DDHA
+  { 0x09A3, BIDI_L   },  // BENGALI LETTER NNA
+  { 0x09A4, BIDI_L   },  // BENGALI LETTER TA
+  { 0x09A5, BIDI_L   },  // BENGALI LETTER THA
+  { 0x09A6, BIDI_L   },  // BENGALI LETTER DA
+  { 0x09A7, BIDI_L   },  // BENGALI LETTER DHA
+  { 0x09A8, BIDI_L   },  // BENGALI LETTER NA
+  { 0x09AA, BIDI_L   },  // BENGALI LETTER PA
+  { 0x09AB, BIDI_L   },  // BENGALI LETTER PHA
+  { 0x09AC, BIDI_L   },  // BENGALI LETTER BA
+  { 0x09AD, BIDI_L   },  // BENGALI LETTER BHA
+  { 0x09AE, BIDI_L   },  // BENGALI LETTER MA
+  { 0x09AF, BIDI_L   },  // BENGALI LETTER YA
+  { 0x09B0, BIDI_L   },  // BENGALI LETTER RA
+  { 0x09B2, BIDI_L   },  // BENGALI LETTER LA
+  { 0x09B6, BIDI_L   },  // BENGALI LETTER SHA
+  { 0x09B7, BIDI_L   },  // BENGALI LETTER SSA
+  { 0x09B8, BIDI_L   },  // BENGALI LETTER SA
+  { 0x09B9, BIDI_L   },  // BENGALI LETTER HA
+  { 0x09BC, BIDI_NSM },  // BENGALI SIGN NUKTA
+  { 0x09BD, BIDI_L   },  // BENGALI SIGN AVAGRAHA
+  { 0x09BE, BIDI_L   },  // BENGALI VOWEL SIGN AA
+  { 0x09BF, BIDI_L   },  // BENGALI VOWEL SIGN I
+  { 0x09C0, BIDI_L   },  // BENGALI VOWEL SIGN II
+  { 0x09C1, BIDI_NSM },  // BENGALI VOWEL SIGN U
+  { 0x09C2, BIDI_NSM },  // BENGALI VOWEL SIGN UU
+  { 0x09C3, BIDI_NSM },  // BENGALI VOWEL SIGN VOCALIC R
+  { 0x09C4, BIDI_NSM },  // BENGALI VOWEL SIGN VOCALIC RR
+  { 0x09C7, BIDI_L   },  // BENGALI VOWEL SIGN E
+  { 0x09C8, BIDI_L   },  // BENGALI VOWEL SIGN AI
+  { 0x09CB, BIDI_L   },  // BENGALI VOWEL SIGN O
+  { 0x09CC, BIDI_L   },  // BENGALI VOWEL SIGN AU
+  { 0x09CD, BIDI_NSM },  // BENGALI SIGN VIRAMA
+  { 0x09CE, BIDI_L   },  // BENGALI LETTER KHANDA TA
+  { 0x09D7, BIDI_L   },  // BENGALI AU LENGTH MARK
+  { 0x09DC, BIDI_L   },  // BENGALI LETTER RRA
+  { 0x09DD, BIDI_L   },  // BENGALI LETTER RHA
+  { 0x09DF, BIDI_L   },  // BENGALI LETTER YYA
+  { 0x09E0, BIDI_L   },  // BENGALI LETTER VOCALIC RR
+  { 0x09E1, BIDI_L   },  // BENGALI LETTER VOCALIC LL
+  { 0x09E2, BIDI_NSM },  // BENGALI VOWEL SIGN VOCALIC L
+  { 0x09E3, BIDI_NSM },  // BENGALI VOWEL SIGN VOCALIC LL
+  { 0x09E6, BIDI_L   },  // BENGALI DIGIT ZERO
+  { 0x09E7, BIDI_L   },  // BENGALI DIGIT ONE
+  { 0x09E8, BIDI_L   },  // BENGALI DIGIT TWO
+  { 0x09E9, BIDI_L   },  // BENGALI DIGIT THREE
+  { 0x09EA, BIDI_L   },  // BENGALI DIGIT FOUR
+  { 0x09EB, BIDI_L   },  // BENGALI DIGIT FIVE
+  { 0x09EC, BIDI_L   },  // BENGALI DIGIT SIX
+  { 0x09ED, BIDI_L   },  // BENGALI DIGIT SEVEN
+  { 0x09EE, BIDI_L   },  // BENGALI DIGIT EIGHT
+  { 0x09EF, BIDI_L   },  // BENGALI DIGIT NINE
+  { 0x09F0, BIDI_L   },  // BENGALI LETTER RA WITH MIDDLE DIAGONAL
+  { 0x09F1, BIDI_L   },  // BENGALI LETTER RA WITH LOWER DIAGONAL
+  { 0x09F2, BIDI_ET  },  // BENGALI RUPEE MARK
+  { 0x09F3, BIDI_ET  },  // BENGALI RUPEE SIGN
+  { 0x09F4, BIDI_L   },  // BENGALI CURRENCY NUMERATOR ONE
+  { 0x09F5, BIDI_L   },  // BENGALI CURRENCY NUMERATOR TWO
+  { 0x09F6, BIDI_L   },  // BENGALI CURRENCY NUMERATOR THREE
+  { 0x09F7, BIDI_L   },  // BENGALI CURRENCY NUMERATOR FOUR
+  { 0x09F8, BIDI_L   },  // BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+  { 0x09F9, BIDI_L   },  // BENGALI CURRENCY DENOMINATOR SIXTEEN
+  { 0x09FA, BIDI_L   },  // BENGALI ISSHAR
+  { 0x09FB, BIDI_ET  },  // BENGALI GANDA MARK
+  { 0x0A01, BIDI_NSM },  // GURMUKHI SIGN ADAK BINDI
+  { 0x0A02, BIDI_NSM },  // GURMUKHI SIGN BINDI
+  { 0x0A03, BIDI_L   },  // GURMUKHI SIGN VISARGA
+  { 0x0A05, BIDI_L   },  // GURMUKHI LETTER A
+  { 0x0A06, BIDI_L   },  // GURMUKHI LETTER AA
+  { 0x0A07, BIDI_L   },  // GURMUKHI LETTER I
+  { 0x0A08, BIDI_L   },  // GURMUKHI LETTER II
+  { 0x0A09, BIDI_L   },  // GURMUKHI LETTER U
+  { 0x0A0A, BIDI_L   },  // GURMUKHI LETTER UU
+  { 0x0A0F, BIDI_L   },  // GURMUKHI LETTER EE
+  { 0x0A10, BIDI_L   },  // GURMUKHI LETTER AI
+  { 0x0A13, BIDI_L   },  // GURMUKHI LETTER OO
+  { 0x0A14, BIDI_L   },  // GURMUKHI LETTER AU
+  { 0x0A15, BIDI_L   },  // GURMUKHI LETTER KA
+  { 0x0A16, BIDI_L   },  // GURMUKHI LETTER KHA
+  { 0x0A17, BIDI_L   },  // GURMUKHI LETTER GA
+  { 0x0A18, BIDI_L   },  // GURMUKHI LETTER GHA
+  { 0x0A19, BIDI_L   },  // GURMUKHI LETTER NGA
+  { 0x0A1A, BIDI_L   },  // GURMUKHI LETTER CA
+  { 0x0A1B, BIDI_L   },  // GURMUKHI LETTER CHA
+  { 0x0A1C, BIDI_L   },  // GURMUKHI LETTER JA
+  { 0x0A1D, BIDI_L   },  // GURMUKHI LETTER JHA
+  { 0x0A1E, BIDI_L   },  // GURMUKHI LETTER NYA
+  { 0x0A1F, BIDI_L   },  // GURMUKHI LETTER TTA
+  { 0x0A20, BIDI_L   },  // GURMUKHI LETTER TTHA
+  { 0x0A21, BIDI_L   },  // GURMUKHI LETTER DDA
+  { 0x0A22, BIDI_L   },  // GURMUKHI LETTER DDHA
+  { 0x0A23, BIDI_L   },  // GURMUKHI LETTER NNA
+  { 0x0A24, BIDI_L   },  // GURMUKHI LETTER TA
+  { 0x0A25, BIDI_L   },  // GURMUKHI LETTER THA
+  { 0x0A26, BIDI_L   },  // GURMUKHI LETTER DA
+  { 0x0A27, BIDI_L   },  // GURMUKHI LETTER DHA
+  { 0x0A28, BIDI_L   },  // GURMUKHI LETTER NA
+  { 0x0A2A, BIDI_L   },  // GURMUKHI LETTER PA
+  { 0x0A2B, BIDI_L   },  // GURMUKHI LETTER PHA
+  { 0x0A2C, BIDI_L   },  // GURMUKHI LETTER BA
+  { 0x0A2D, BIDI_L   },  // GURMUKHI LETTER BHA
+  { 0x0A2E, BIDI_L   },  // GURMUKHI LETTER MA
+  { 0x0A2F, BIDI_L   },  // GURMUKHI LETTER YA
+  { 0x0A30, BIDI_L   },  // GURMUKHI LETTER RA
+  { 0x0A32, BIDI_L   },  // GURMUKHI LETTER LA
+  { 0x0A33, BIDI_L   },  // GURMUKHI LETTER LLA
+  { 0x0A35, BIDI_L   },  // GURMUKHI LETTER VA
+  { 0x0A36, BIDI_L   },  // GURMUKHI LETTER SHA
+  { 0x0A38, BIDI_L   },  // GURMUKHI LETTER SA
+  { 0x0A39, BIDI_L   },  // GURMUKHI LETTER HA
+  { 0x0A3C, BIDI_NSM },  // GURMUKHI SIGN NUKTA
+  { 0x0A3E, BIDI_L   },  // GURMUKHI VOWEL SIGN AA
+  { 0x0A3F, BIDI_L   },  // GURMUKHI VOWEL SIGN I
+  { 0x0A40, BIDI_L   },  // GURMUKHI VOWEL SIGN II
+  { 0x0A41, BIDI_NSM },  // GURMUKHI VOWEL SIGN U
+  { 0x0A42, BIDI_NSM },  // GURMUKHI VOWEL SIGN UU
+  { 0x0A47, BIDI_NSM },  // GURMUKHI VOWEL SIGN EE
+  { 0x0A48, BIDI_NSM },  // GURMUKHI VOWEL SIGN AI
+  { 0x0A4B, BIDI_NSM },  // GURMUKHI VOWEL SIGN OO
+  { 0x0A4C, BIDI_NSM },  // GURMUKHI VOWEL SIGN AU
+  { 0x0A4D, BIDI_NSM },  // GURMUKHI SIGN VIRAMA
+  { 0x0A51, BIDI_NSM },  // GURMUKHI SIGN UDAAT
+  { 0x0A59, BIDI_L   },  // GURMUKHI LETTER KHHA
+  { 0x0A5A, BIDI_L   },  // GURMUKHI LETTER GHHA
+  { 0x0A5B, BIDI_L   },  // GURMUKHI LETTER ZA
+  { 0x0A5C, BIDI_L   },  // GURMUKHI LETTER RRA
+  { 0x0A5E, BIDI_L   },  // GURMUKHI LETTER FA
+  { 0x0A66, BIDI_L   },  // GURMUKHI DIGIT ZERO
+  { 0x0A67, BIDI_L   },  // GURMUKHI DIGIT ONE
+  { 0x0A68, BIDI_L   },  // GURMUKHI DIGIT TWO
+  { 0x0A69, BIDI_L   },  // GURMUKHI DIGIT THREE
+  { 0x0A6A, BIDI_L   },  // GURMUKHI DIGIT FOUR
+  { 0x0A6B, BIDI_L   },  // GURMUKHI DIGIT FIVE
+  { 0x0A6C, BIDI_L   },  // GURMUKHI DIGIT SIX
+  { 0x0A6D, BIDI_L   },  // GURMUKHI DIGIT SEVEN
+  { 0x0A6E, BIDI_L   },  // GURMUKHI DIGIT EIGHT
+  { 0x0A6F, BIDI_L   },  // GURMUKHI DIGIT NINE
+  { 0x0A70, BIDI_NSM },  // GURMUKHI TIPPI
+  { 0x0A71, BIDI_NSM },  // GURMUKHI ADDAK
+  { 0x0A72, BIDI_L   },  // GURMUKHI IRI
+  { 0x0A73, BIDI_L   },  // GURMUKHI URA
+  { 0x0A74, BIDI_L   },  // GURMUKHI EK ONKAR
+  { 0x0A75, BIDI_NSM },  // GURMUKHI SIGN YAKASH
+  { 0x0A81, BIDI_NSM },  // GUJARATI SIGN CANDRABINDU
+  { 0x0A82, BIDI_NSM },  // GUJARATI SIGN ANUSVARA
+  { 0x0A83, BIDI_L   },  // GUJARATI SIGN VISARGA
+  { 0x0A85, BIDI_L   },  // GUJARATI LETTER A
+  { 0x0A86, BIDI_L   },  // GUJARATI LETTER AA
+  { 0x0A87, BIDI_L   },  // GUJARATI LETTER I
+  { 0x0A88, BIDI_L   },  // GUJARATI LETTER II
+  { 0x0A89, BIDI_L   },  // GUJARATI LETTER U
+  { 0x0A8A, BIDI_L   },  // GUJARATI LETTER UU
+  { 0x0A8B, BIDI_L   },  // GUJARATI LETTER VOCALIC R
+  { 0x0A8C, BIDI_L   },  // GUJARATI LETTER VOCALIC L
+  { 0x0A8D, BIDI_L   },  // GUJARATI VOWEL CANDRA E
+  { 0x0A8F, BIDI_L   },  // GUJARATI LETTER E
+  { 0x0A90, BIDI_L   },  // GUJARATI LETTER AI
+  { 0x0A91, BIDI_L   },  // GUJARATI VOWEL CANDRA O
+  { 0x0A93, BIDI_L   },  // GUJARATI LETTER O
+  { 0x0A94, BIDI_L   },  // GUJARATI LETTER AU
+  { 0x0A95, BIDI_L   },  // GUJARATI LETTER KA
+  { 0x0A96, BIDI_L   },  // GUJARATI LETTER KHA
+  { 0x0A97, BIDI_L   },  // GUJARATI LETTER GA
+  { 0x0A98, BIDI_L   },  // GUJARATI LETTER GHA
+  { 0x0A99, BIDI_L   },  // GUJARATI LETTER NGA
+  { 0x0A9A, BIDI_L   },  // GUJARATI LETTER CA
+  { 0x0A9B, BIDI_L   },  // GUJARATI LETTER CHA
+  { 0x0A9C, BIDI_L   },  // GUJARATI LETTER JA
+  { 0x0A9D, BIDI_L   },  // GUJARATI LETTER JHA
+  { 0x0A9E, BIDI_L   },  // GUJARATI LETTER NYA
+  { 0x0A9F, BIDI_L   },  // GUJARATI LETTER TTA
+  { 0x0AA0, BIDI_L   },  // GUJARATI LETTER TTHA
+  { 0x0AA1, BIDI_L   },  // GUJARATI LETTER DDA
+  { 0x0AA2, BIDI_L   },  // GUJARATI LETTER DDHA
+  { 0x0AA3, BIDI_L   },  // GUJARATI LETTER NNA
+  { 0x0AA4, BIDI_L   },  // GUJARATI LETTER TA
+  { 0x0AA5, BIDI_L   },  // GUJARATI LETTER THA
+  { 0x0AA6, BIDI_L   },  // GUJARATI LETTER DA
+  { 0x0AA7, BIDI_L   },  // GUJARATI LETTER DHA
+  { 0x0AA8, BIDI_L   },  // GUJARATI LETTER NA
+  { 0x0AAA, BIDI_L   },  // GUJARATI LETTER PA
+  { 0x0AAB, BIDI_L   },  // GUJARATI LETTER PHA
+  { 0x0AAC, BIDI_L   },  // GUJARATI LETTER BA
+  { 0x0AAD, BIDI_L   },  // GUJARATI LETTER BHA
+  { 0x0AAE, BIDI_L   },  // GUJARATI LETTER MA
+  { 0x0AAF, BIDI_L   },  // GUJARATI LETTER YA
+  { 0x0AB0, BIDI_L   },  // GUJARATI LETTER RA
+  { 0x0AB2, BIDI_L   },  // GUJARATI LETTER LA
+  { 0x0AB3, BIDI_L   },  // GUJARATI LETTER LLA
+  { 0x0AB5, BIDI_L   },  // GUJARATI LETTER VA
+  { 0x0AB6, BIDI_L   },  // GUJARATI LETTER SHA
+  { 0x0AB7, BIDI_L   },  // GUJARATI LETTER SSA
+  { 0x0AB8, BIDI_L   },  // GUJARATI LETTER SA
+  { 0x0AB9, BIDI_L   },  // GUJARATI LETTER HA
+  { 0x0ABC, BIDI_NSM },  // GUJARATI SIGN NUKTA
+  { 0x0ABD, BIDI_L   },  // GUJARATI SIGN AVAGRAHA
+  { 0x0ABE, BIDI_L   },  // GUJARATI VOWEL SIGN AA
+  { 0x0ABF, BIDI_L   },  // GUJARATI VOWEL SIGN I
+  { 0x0AC0, BIDI_L   },  // GUJARATI VOWEL SIGN II
+  { 0x0AC1, BIDI_NSM },  // GUJARATI VOWEL SIGN U
+  { 0x0AC2, BIDI_NSM },  // GUJARATI VOWEL SIGN UU
+  { 0x0AC3, BIDI_NSM },  // GUJARATI VOWEL SIGN VOCALIC R
+  { 0x0AC4, BIDI_NSM },  // GUJARATI VOWEL SIGN VOCALIC RR
+  { 0x0AC5, BIDI_NSM },  // GUJARATI VOWEL SIGN CANDRA E
+  { 0x0AC7, BIDI_NSM },  // GUJARATI VOWEL SIGN E
+  { 0x0AC8, BIDI_NSM },  // GUJARATI VOWEL SIGN AI
+  { 0x0AC9, BIDI_L   },  // GUJARATI VOWEL SIGN CANDRA O
+  { 0x0ACB, BIDI_L   },  // GUJARATI VOWEL SIGN O
+  { 0x0ACC, BIDI_L   },  // GUJARATI VOWEL SIGN AU
+  { 0x0ACD, BIDI_NSM },  // GUJARATI SIGN VIRAMA
+  { 0x0AD0, BIDI_L   },  // GUJARATI OM
+  { 0x0AE0, BIDI_L   },  // GUJARATI LETTER VOCALIC RR
+  { 0x0AE1, BIDI_L   },  // GUJARATI LETTER VOCALIC LL
+  { 0x0AE2, BIDI_NSM },  // GUJARATI VOWEL SIGN VOCALIC L
+  { 0x0AE3, BIDI_NSM },  // GUJARATI VOWEL SIGN VOCALIC LL
+  { 0x0AE6, BIDI_L   },  // GUJARATI DIGIT ZERO
+  { 0x0AE7, BIDI_L   },  // GUJARATI DIGIT ONE
+  { 0x0AE8, BIDI_L   },  // GUJARATI DIGIT TWO
+  { 0x0AE9, BIDI_L   },  // GUJARATI DIGIT THREE
+  { 0x0AEA, BIDI_L   },  // GUJARATI DIGIT FOUR
+  { 0x0AEB, BIDI_L   },  // GUJARATI DIGIT FIVE
+  { 0x0AEC, BIDI_L   },  // GUJARATI DIGIT SIX
+  { 0x0AED, BIDI_L   },  // GUJARATI DIGIT SEVEN
+  { 0x0AEE, BIDI_L   },  // GUJARATI DIGIT EIGHT
+  { 0x0AEF, BIDI_L   },  // GUJARATI DIGIT NINE
+  { 0x0AF0, BIDI_L   },  // GUJARATI ABBREVIATION SIGN
+  { 0x0AF1, BIDI_ET  },  // GUJARATI RUPEE SIGN
+  { 0x0AF9, BIDI_L   },  // GUJARATI LETTER ZHA
+  { 0x0B01, BIDI_NSM },  // ORIYA SIGN CANDRABINDU
+  { 0x0B02, BIDI_L   },  // ORIYA SIGN ANUSVARA
+  { 0x0B03, BIDI_L   },  // ORIYA SIGN VISARGA
+  { 0x0B05, BIDI_L   },  // ORIYA LETTER A
+  { 0x0B06, BIDI_L   },  // ORIYA LETTER AA
+  { 0x0B07, BIDI_L   },  // ORIYA LETTER I
+  { 0x0B08, BIDI_L   },  // ORIYA LETTER II
+  { 0x0B09, BIDI_L   },  // ORIYA LETTER U
+  { 0x0B0A, BIDI_L   },  // ORIYA LETTER UU
+  { 0x0B0B, BIDI_L   },  // ORIYA LETTER VOCALIC R
+  { 0x0B0C, BIDI_L   },  // ORIYA LETTER VOCALIC L
+  { 0x0B0F, BIDI_L   },  // ORIYA LETTER E
+  { 0x0B10, BIDI_L   },  // ORIYA LETTER AI
+  { 0x0B13, BIDI_L   },  // ORIYA LETTER O
+  { 0x0B14, BIDI_L   },  // ORIYA LETTER AU
+  { 0x0B15, BIDI_L   },  // ORIYA LETTER KA
+  { 0x0B16, BIDI_L   },  // ORIYA LETTER KHA
+  { 0x0B17, BIDI_L   },  // ORIYA LETTER GA
+  { 0x0B18, BIDI_L   },  // ORIYA LETTER GHA
+  { 0x0B19, BIDI_L   },  // ORIYA LETTER NGA
+  { 0x0B1A, BIDI_L   },  // ORIYA LETTER CA
+  { 0x0B1B, BIDI_L   },  // ORIYA LETTER CHA
+  { 0x0B1C, BIDI_L   },  // ORIYA LETTER JA
+  { 0x0B1D, BIDI_L   },  // ORIYA LETTER JHA
+  { 0x0B1E, BIDI_L   },  // ORIYA LETTER NYA
+  { 0x0B1F, BIDI_L   },  // ORIYA LETTER TTA
+  { 0x0B20, BIDI_L   },  // ORIYA LETTER TTHA
+  { 0x0B21, BIDI_L   },  // ORIYA LETTER DDA
+  { 0x0B22, BIDI_L   },  // ORIYA LETTER DDHA
+  { 0x0B23, BIDI_L   },  // ORIYA LETTER NNA
+  { 0x0B24, BIDI_L   },  // ORIYA LETTER TA
+  { 0x0B25, BIDI_L   },  // ORIYA LETTER THA
+  { 0x0B26, BIDI_L   },  // ORIYA LETTER DA
+  { 0x0B27, BIDI_L   },  // ORIYA LETTER DHA
+  { 0x0B28, BIDI_L   },  // ORIYA LETTER NA
+  { 0x0B2A, BIDI_L   },  // ORIYA LETTER PA
+  { 0x0B2B, BIDI_L   },  // ORIYA LETTER PHA
+  { 0x0B2C, BIDI_L   },  // ORIYA LETTER BA
+  { 0x0B2D, BIDI_L   },  // ORIYA LETTER BHA
+  { 0x0B2E, BIDI_L   },  // ORIYA LETTER MA
+  { 0x0B2F, BIDI_L   },  // ORIYA LETTER YA
+  { 0x0B30, BIDI_L   },  // ORIYA LETTER RA
+  { 0x0B32, BIDI_L   },  // ORIYA LETTER LA
+  { 0x0B33, BIDI_L   },  // ORIYA LETTER LLA
+  { 0x0B35, BIDI_L   },  // ORIYA LETTER VA
+  { 0x0B36, BIDI_L   },  // ORIYA LETTER SHA
+  { 0x0B37, BIDI_L   },  // ORIYA LETTER SSA
+  { 0x0B38, BIDI_L   },  // ORIYA LETTER SA
+  { 0x0B39, BIDI_L   },  // ORIYA LETTER HA
+  { 0x0B3C, BIDI_NSM },  // ORIYA SIGN NUKTA
+  { 0x0B3D, BIDI_L   },  // ORIYA SIGN AVAGRAHA
+  { 0x0B3E, BIDI_L   },  // ORIYA VOWEL SIGN AA
+  { 0x0B3F, BIDI_NSM },  // ORIYA VOWEL SIGN I
+  { 0x0B40, BIDI_L   },  // ORIYA VOWEL SIGN II
+  { 0x0B41, BIDI_NSM },  // ORIYA VOWEL SIGN U
+  { 0x0B42, BIDI_NSM },  // ORIYA VOWEL SIGN UU
+  { 0x0B43, BIDI_NSM },  // ORIYA VOWEL SIGN VOCALIC R
+  { 0x0B44, BIDI_NSM },  // ORIYA VOWEL SIGN VOCALIC RR
+  { 0x0B47, BIDI_L   },  // ORIYA VOWEL SIGN E
+  { 0x0B48, BIDI_L   },  // ORIYA VOWEL SIGN AI
+  { 0x0B4B, BIDI_L   },  // ORIYA VOWEL SIGN O
+  { 0x0B4C, BIDI_L   },  // ORIYA VOWEL SIGN AU
+  { 0x0B4D, BIDI_NSM },  // ORIYA SIGN VIRAMA
+  { 0x0B56, BIDI_NSM },  // ORIYA AI LENGTH MARK
+  { 0x0B57, BIDI_L   },  // ORIYA AU LENGTH MARK
+  { 0x0B5C, BIDI_L   },  // ORIYA LETTER RRA
+  { 0x0B5D, BIDI_L   },  // ORIYA LETTER RHA
+  { 0x0B5F, BIDI_L   },  // ORIYA LETTER YYA
+  { 0x0B60, BIDI_L   },  // ORIYA LETTER VOCALIC RR
+  { 0x0B61, BIDI_L   },  // ORIYA LETTER VOCALIC LL
+  { 0x0B62, BIDI_NSM },  // ORIYA VOWEL SIGN VOCALIC L
+  { 0x0B63, BIDI_NSM },  // ORIYA VOWEL SIGN VOCALIC LL
+  { 0x0B66, BIDI_L   },  // ORIYA DIGIT ZERO
+  { 0x0B67, BIDI_L   },  // ORIYA DIGIT ONE
+  { 0x0B68, BIDI_L   },  // ORIYA DIGIT TWO
+  { 0x0B69, BIDI_L   },  // ORIYA DIGIT THREE
+  { 0x0B6A, BIDI_L   },  // ORIYA DIGIT FOUR
+  { 0x0B6B, BIDI_L   },  // ORIYA DIGIT FIVE
+  { 0x0B6C, BIDI_L   },  // ORIYA DIGIT SIX
+  { 0x0B6D, BIDI_L   },  // ORIYA DIGIT SEVEN
+  { 0x0B6E, BIDI_L   },  // ORIYA DIGIT EIGHT
+  { 0x0B6F, BIDI_L   },  // ORIYA DIGIT NINE
+  { 0x0B70, BIDI_L   },  // ORIYA ISSHAR
+  { 0x0B71, BIDI_L   },  // ORIYA LETTER WA
+  { 0x0B72, BIDI_L   },  // ORIYA FRACTION ONE QUARTER
+  { 0x0B73, BIDI_L   },  // ORIYA FRACTION ONE HALF
+  { 0x0B74, BIDI_L   },  // ORIYA FRACTION THREE QUARTERS
+  { 0x0B75, BIDI_L   },  // ORIYA FRACTION ONE SIXTEENTH
+  { 0x0B76, BIDI_L   },  // ORIYA FRACTION ONE EIGHTH
+  { 0x0B77, BIDI_L   },  // ORIYA FRACTION THREE SIXTEENTHS
+  { 0x0B82, BIDI_NSM },  // TAMIL SIGN ANUSVARA
+  { 0x0B83, BIDI_L   },  // TAMIL SIGN VISARGA
+  { 0x0B85, BIDI_L   },  // TAMIL LETTER A
+  { 0x0B86, BIDI_L   },  // TAMIL LETTER AA
+  { 0x0B87, BIDI_L   },  // TAMIL LETTER I
+  { 0x0B88, BIDI_L   },  // TAMIL LETTER II
+  { 0x0B89, BIDI_L   },  // TAMIL LETTER U
+  { 0x0B8A, BIDI_L   },  // TAMIL LETTER UU
+  { 0x0B8E, BIDI_L   },  // TAMIL LETTER E
+  { 0x0B8F, BIDI_L   },  // TAMIL LETTER EE
+  { 0x0B90, BIDI_L   },  // TAMIL LETTER AI
+  { 0x0B92, BIDI_L   },  // TAMIL LETTER O
+  { 0x0B93, BIDI_L   },  // TAMIL LETTER OO
+  { 0x0B94, BIDI_L   },  // TAMIL LETTER AU
+  { 0x0B95, BIDI_L   },  // TAMIL LETTER KA
+  { 0x0B99, BIDI_L   },  // TAMIL LETTER NGA
+  { 0x0B9A, BIDI_L   },  // TAMIL LETTER CA
+  { 0x0B9C, BIDI_L   },  // TAMIL LETTER JA
+  { 0x0B9E, BIDI_L   },  // TAMIL LETTER NYA
+  { 0x0B9F, BIDI_L   },  // TAMIL LETTER TTA
+  { 0x0BA3, BIDI_L   },  // TAMIL LETTER NNA
+  { 0x0BA4, BIDI_L   },  // TAMIL LETTER TA
+  { 0x0BA8, BIDI_L   },  // TAMIL LETTER NA
+  { 0x0BA9, BIDI_L   },  // TAMIL LETTER NNNA
+  { 0x0BAA, BIDI_L   },  // TAMIL LETTER PA
+  { 0x0BAE, BIDI_L   },  // TAMIL LETTER MA
+  { 0x0BAF, BIDI_L   },  // TAMIL LETTER YA
+  { 0x0BB0, BIDI_L   },  // TAMIL LETTER RA
+  { 0x0BB1, BIDI_L   },  // TAMIL LETTER RRA
+  { 0x0BB2, BIDI_L   },  // TAMIL LETTER LA
+  { 0x0BB3, BIDI_L   },  // TAMIL LETTER LLA
+  { 0x0BB4, BIDI_L   },  // TAMIL LETTER LLLA
+  { 0x0BB5, BIDI_L   },  // TAMIL LETTER VA
+  { 0x0BB6, BIDI_L   },  // TAMIL LETTER SHA
+  { 0x0BB7, BIDI_L   },  // TAMIL LETTER SSA
+  { 0x0BB8, BIDI_L   },  // TAMIL LETTER SA
+  { 0x0BB9, BIDI_L   },  // TAMIL LETTER HA
+  { 0x0BBE, BIDI_L   },  // TAMIL VOWEL SIGN AA
+  { 0x0BBF, BIDI_L   },  // TAMIL VOWEL SIGN I
+  { 0x0BC0, BIDI_NSM },  // TAMIL VOWEL SIGN II
+  { 0x0BC1, BIDI_L   },  // TAMIL VOWEL SIGN U
+  { 0x0BC2, BIDI_L   },  // TAMIL VOWEL SIGN UU
+  { 0x0BC6, BIDI_L   },  // TAMIL VOWEL SIGN E
+  { 0x0BC7, BIDI_L   },  // TAMIL VOWEL SIGN EE
+  { 0x0BC8, BIDI_L   },  // TAMIL VOWEL SIGN AI
+  { 0x0BCA, BIDI_L   },  // TAMIL VOWEL SIGN O
+  { 0x0BCB, BIDI_L   },  // TAMIL VOWEL SIGN OO
+  { 0x0BCC, BIDI_L   },  // TAMIL VOWEL SIGN AU
+  { 0x0BCD, BIDI_NSM },  // TAMIL SIGN VIRAMA
+  { 0x0BD0, BIDI_L   },  // TAMIL OM
+  { 0x0BD7, BIDI_L   },  // TAMIL AU LENGTH MARK
+  { 0x0BE6, BIDI_L   },  // TAMIL DIGIT ZERO
+  { 0x0BE7, BIDI_L   },  // TAMIL DIGIT ONE
+  { 0x0BE8, BIDI_L   },  // TAMIL DIGIT TWO
+  { 0x0BE9, BIDI_L   },  // TAMIL DIGIT THREE
+  { 0x0BEA, BIDI_L   },  // TAMIL DIGIT FOUR
+  { 0x0BEB, BIDI_L   },  // TAMIL DIGIT FIVE
+  { 0x0BEC, BIDI_L   },  // TAMIL DIGIT SIX
+  { 0x0BED, BIDI_L   },  // TAMIL DIGIT SEVEN
+  { 0x0BEE, BIDI_L   },  // TAMIL DIGIT EIGHT
+  { 0x0BEF, BIDI_L   },  // TAMIL DIGIT NINE
+  { 0x0BF0, BIDI_L   },  // TAMIL NUMBER TEN
+  { 0x0BF1, BIDI_L   },  // TAMIL NUMBER ONE HUNDRED
+  { 0x0BF2, BIDI_L   },  // TAMIL NUMBER ONE THOUSAND
+  { 0x0BF3, BIDI_ON  },  // TAMIL DAY SIGN
+  { 0x0BF4, BIDI_ON  },  // TAMIL MONTH SIGN
+  { 0x0BF5, BIDI_ON  },  // TAMIL YEAR SIGN
+  { 0x0BF6, BIDI_ON  },  // TAMIL DEBIT SIGN
+  { 0x0BF7, BIDI_ON  },  // TAMIL CREDIT SIGN
+  { 0x0BF8, BIDI_ON  },  // TAMIL AS ABOVE SIGN
+  { 0x0BF9, BIDI_ET  },  // TAMIL RUPEE SIGN
+  { 0x0BFA, BIDI_ON  },  // TAMIL NUMBER SIGN
+  { 0x0C00, BIDI_NSM },  // TELUGU SIGN COMBINING CANDRABINDU ABOVE
+  { 0x0C01, BIDI_L   },  // TELUGU SIGN CANDRABINDU
+  { 0x0C02, BIDI_L   },  // TELUGU SIGN ANUSVARA
+  { 0x0C03, BIDI_L   },  // TELUGU SIGN VISARGA
+  { 0x0C05, BIDI_L   },  // TELUGU LETTER A
+  { 0x0C06, BIDI_L   },  // TELUGU LETTER AA
+  { 0x0C07, BIDI_L   },  // TELUGU LETTER I
+  { 0x0C08, BIDI_L   },  // TELUGU LETTER II
+  { 0x0C09, BIDI_L   },  // TELUGU LETTER U
+  { 0x0C0A, BIDI_L   },  // TELUGU LETTER UU
+  { 0x0C0B, BIDI_L   },  // TELUGU LETTER VOCALIC R
+  { 0x0C0C, BIDI_L   },  // TELUGU LETTER VOCALIC L
+  { 0x0C0E, BIDI_L   },  // TELUGU LETTER E
+  { 0x0C0F, BIDI_L   },  // TELUGU LETTER EE
+  { 0x0C10, BIDI_L   },  // TELUGU LETTER AI
+  { 0x0C12, BIDI_L   },  // TELUGU LETTER O
+  { 0x0C13, BIDI_L   },  // TELUGU LETTER OO
+  { 0x0C14, BIDI_L   },  // TELUGU LETTER AU
+  { 0x0C15, BIDI_L   },  // TELUGU LETTER KA
+  { 0x0C16, BIDI_L   },  // TELUGU LETTER KHA
+  { 0x0C17, BIDI_L   },  // TELUGU LETTER GA
+  { 0x0C18, BIDI_L   },  // TELUGU LETTER GHA
+  { 0x0C19, BIDI_L   },  // TELUGU LETTER NGA
+  { 0x0C1A, BIDI_L   },  // TELUGU LETTER CA
+  { 0x0C1B, BIDI_L   },  // TELUGU LETTER CHA
+  { 0x0C1C, BIDI_L   },  // TELUGU LETTER JA
+  { 0x0C1D, BIDI_L   },  // TELUGU LETTER JHA
+  { 0x0C1E, BIDI_L   },  // TELUGU LETTER NYA
+  { 0x0C1F, BIDI_L   },  // TELUGU LETTER TTA
+  { 0x0C20, BIDI_L   },  // TELUGU LETTER TTHA
+  { 0x0C21, BIDI_L   },  // TELUGU LETTER DDA
+  { 0x0C22, BIDI_L   },  // TELUGU LETTER DDHA
+  { 0x0C23, BIDI_L   },  // TELUGU LETTER NNA
+  { 0x0C24, BIDI_L   },  // TELUGU LETTER TA
+  { 0x0C25, BIDI_L   },  // TELUGU LETTER THA
+  { 0x0C26, BIDI_L   },  // TELUGU LETTER DA
+  { 0x0C27, BIDI_L   },  // TELUGU LETTER DHA
+  { 0x0C28, BIDI_L   },  // TELUGU LETTER NA
+  { 0x0C2A, BIDI_L   },  // TELUGU LETTER PA
+  { 0x0C2B, BIDI_L   },  // TELUGU LETTER PHA
+  { 0x0C2C, BIDI_L   },  // TELUGU LETTER BA
+  { 0x0C2D, BIDI_L   },  // TELUGU LETTER BHA
+  { 0x0C2E, BIDI_L   },  // TELUGU LETTER MA
+  { 0x0C2F, BIDI_L   },  // TELUGU LETTER YA
+  { 0x0C30, BIDI_L   },  // TELUGU LETTER RA
+  { 0x0C31, BIDI_L   },  // TELUGU LETTER RRA
+  { 0x0C32, BIDI_L   },  // TELUGU LETTER LA
+  { 0x0C33, BIDI_L   },  // TELUGU LETTER LLA
+  { 0x0C34, BIDI_L   },  // TELUGU LETTER LLLA
+  { 0x0C35, BIDI_L   },  // TELUGU LETTER VA
+  { 0x0C36, BIDI_L   },  // TELUGU LETTER SHA
+  { 0x0C37, BIDI_L   },  // TELUGU LETTER SSA
+  { 0x0C38, BIDI_L   },  // TELUGU LETTER SA
+  { 0x0C39, BIDI_L   },  // TELUGU LETTER HA
+  { 0x0C3D, BIDI_L   },  // TELUGU SIGN AVAGRAHA
+  { 0x0C3E, BIDI_NSM },  // TELUGU VOWEL SIGN AA
+  { 0x0C3F, BIDI_NSM },  // TELUGU VOWEL SIGN I
+  { 0x0C40, BIDI_NSM },  // TELUGU VOWEL SIGN II
+  { 0x0C41, BIDI_L   },  // TELUGU VOWEL SIGN U
+  { 0x0C42, BIDI_L   },  // TELUGU VOWEL SIGN UU
+  { 0x0C43, BIDI_L   },  // TELUGU VOWEL SIGN VOCALIC R
+  { 0x0C44, BIDI_L   },  // TELUGU VOWEL SIGN VOCALIC RR
+  { 0x0C46, BIDI_NSM },  // TELUGU VOWEL SIGN E
+  { 0x0C47, BIDI_NSM },  // TELUGU VOWEL SIGN EE
+  { 0x0C48, BIDI_NSM },  // TELUGU VOWEL SIGN AI
+  { 0x0C4A, BIDI_NSM },  // TELUGU VOWEL SIGN O
+  { 0x0C4B, BIDI_NSM },  // TELUGU VOWEL SIGN OO
+  { 0x0C4C, BIDI_NSM },  // TELUGU VOWEL SIGN AU
+  { 0x0C4D, BIDI_NSM },  // TELUGU SIGN VIRAMA
+  { 0x0C55, BIDI_NSM },  // TELUGU LENGTH MARK
+  { 0x0C56, BIDI_NSM },  // TELUGU AI LENGTH MARK
+  { 0x0C58, BIDI_L   },  // TELUGU LETTER TSA
+  { 0x0C59, BIDI_L   },  // TELUGU LETTER DZA
+  { 0x0C5A, BIDI_L   },  // TELUGU LETTER RRRA
+  { 0x0C60, BIDI_L   },  // TELUGU LETTER VOCALIC RR
+  { 0x0C61, BIDI_L   },  // TELUGU LETTER VOCALIC LL
+  { 0x0C62, BIDI_NSM },  // TELUGU VOWEL SIGN VOCALIC L
+  { 0x0C63, BIDI_NSM },  // TELUGU VOWEL SIGN VOCALIC LL
+  { 0x0C66, BIDI_L   },  // TELUGU DIGIT ZERO
+  { 0x0C67, BIDI_L   },  // TELUGU DIGIT ONE
+  { 0x0C68, BIDI_L   },  // TELUGU DIGIT TWO
+  { 0x0C69, BIDI_L   },  // TELUGU DIGIT THREE
+  { 0x0C6A, BIDI_L   },  // TELUGU DIGIT FOUR
+  { 0x0C6B, BIDI_L   },  // TELUGU DIGIT FIVE
+  { 0x0C6C, BIDI_L   },  // TELUGU DIGIT SIX
+  { 0x0C6D, BIDI_L   },  // TELUGU DIGIT SEVEN
+  { 0x0C6E, BIDI_L   },  // TELUGU DIGIT EIGHT
+  { 0x0C6F, BIDI_L   },  // TELUGU DIGIT NINE
+  { 0x0C78, BIDI_ON  },  // TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR
+  { 0x0C79, BIDI_ON  },  // TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR
+  { 0x0C7A, BIDI_ON  },  // TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR
+  { 0x0C7B, BIDI_ON  },  // TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR
+  { 0x0C7C, BIDI_ON  },  // TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR
+  { 0x0C7D, BIDI_ON  },  // TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR
+  { 0x0C7E, BIDI_ON  },  // TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+  { 0x0C7F, BIDI_L   },  // TELUGU SIGN TUUMU
+  { 0x0C81, BIDI_NSM },  // KANNADA SIGN CANDRABINDU
+  { 0x0C82, BIDI_L   },  // KANNADA SIGN ANUSVARA
+  { 0x0C83, BIDI_L   },  // KANNADA SIGN VISARGA
+  { 0x0C85, BIDI_L   },  // KANNADA LETTER A
+  { 0x0C86, BIDI_L   },  // KANNADA LETTER AA
+  { 0x0C87, BIDI_L   },  // KANNADA LETTER I
+  { 0x0C88, BIDI_L   },  // KANNADA LETTER II
+  { 0x0C89, BIDI_L   },  // KANNADA LETTER U
+  { 0x0C8A, BIDI_L   },  // KANNADA LETTER UU
+  { 0x0C8B, BIDI_L   },  // KANNADA LETTER VOCALIC R
+  { 0x0C8C, BIDI_L   },  // KANNADA LETTER VOCALIC L
+  { 0x0C8E, BIDI_L   },  // KANNADA LETTER E
+  { 0x0C8F, BIDI_L   },  // KANNADA LETTER EE
+  { 0x0C90, BIDI_L   },  // KANNADA LETTER AI
+  { 0x0C92, BIDI_L   },  // KANNADA LETTER O
+  { 0x0C93, BIDI_L   },  // KANNADA LETTER OO
+  { 0x0C94, BIDI_L   },  // KANNADA LETTER AU
+  { 0x0C95, BIDI_L   },  // KANNADA LETTER KA
+  { 0x0C96, BIDI_L   },  // KANNADA LETTER KHA
+  { 0x0C97, BIDI_L   },  // KANNADA LETTER GA
+  { 0x0C98, BIDI_L   },  // KANNADA LETTER GHA
+  { 0x0C99, BIDI_L   },  // KANNADA LETTER NGA
+  { 0x0C9A, BIDI_L   },  // KANNADA LETTER CA
+  { 0x0C9B, BIDI_L   },  // KANNADA LETTER CHA
+  { 0x0C9C, BIDI_L   },  // KANNADA LETTER JA
+  { 0x0C9D, BIDI_L   },  // KANNADA LETTER JHA
+  { 0x0C9E, BIDI_L   },  // KANNADA LETTER NYA
+  { 0x0C9F, BIDI_L   },  // KANNADA LETTER TTA
+  { 0x0CA0, BIDI_L   },  // KANNADA LETTER TTHA
+  { 0x0CA1, BIDI_L   },  // KANNADA LETTER DDA
+  { 0x0CA2, BIDI_L   },  // KANNADA LETTER DDHA
+  { 0x0CA3, BIDI_L   },  // KANNADA LETTER NNA
+  { 0x0CA4, BIDI_L   },  // KANNADA LETTER TA
+  { 0x0CA5, BIDI_L   },  // KANNADA LETTER THA
+  { 0x0CA6, BIDI_L   },  // KANNADA LETTER DA
+  { 0x0CA7, BIDI_L   },  // KANNADA LETTER DHA
+  { 0x0CA8, BIDI_L   },  // KANNADA LETTER NA
+  { 0x0CAA, BIDI_L   },  // KANNADA LETTER PA
+  { 0x0CAB, BIDI_L   },  // KANNADA LETTER PHA
+  { 0x0CAC, BIDI_L   },  // KANNADA LETTER BA
+  { 0x0CAD, BIDI_L   },  // KANNADA LETTER BHA
+  { 0x0CAE, BIDI_L   },  // KANNADA LETTER MA
+  { 0x0CAF, BIDI_L   },  // KANNADA LETTER YA
+  { 0x0CB0, BIDI_L   },  // KANNADA LETTER RA
+  { 0x0CB1, BIDI_L   },  // KANNADA LETTER RRA
+  { 0x0CB2, BIDI_L   },  // KANNADA LETTER LA
+  { 0x0CB3, BIDI_L   },  // KANNADA LETTER LLA
+  { 0x0CB5, BIDI_L   },  // KANNADA LETTER VA
+  { 0x0CB6, BIDI_L   },  // KANNADA LETTER SHA
+  { 0x0CB7, BIDI_L   },  // KANNADA LETTER SSA
+  { 0x0CB8, BIDI_L   },  // KANNADA LETTER SA
+  { 0x0CB9, BIDI_L   },  // KANNADA LETTER HA
+  { 0x0CBC, BIDI_NSM },  // KANNADA SIGN NUKTA
+  { 0x0CBD, BIDI_L   },  // KANNADA SIGN AVAGRAHA
+  { 0x0CBE, BIDI_L   },  // KANNADA VOWEL SIGN AA
+  { 0x0CBF, BIDI_L   },  // KANNADA VOWEL SIGN I
+  { 0x0CC0, BIDI_L   },  // KANNADA VOWEL SIGN II
+  { 0x0CC1, BIDI_L   },  // KANNADA VOWEL SIGN U
+  { 0x0CC2, BIDI_L   },  // KANNADA VOWEL SIGN UU
+  { 0x0CC3, BIDI_L   },  // KANNADA VOWEL SIGN VOCALIC R
+  { 0x0CC4, BIDI_L   },  // KANNADA VOWEL SIGN VOCALIC RR
+  { 0x0CC6, BIDI_L   },  // KANNADA VOWEL SIGN E
+  { 0x0CC7, BIDI_L   },  // KANNADA VOWEL SIGN EE
+  { 0x0CC8, BIDI_L   },  // KANNADA VOWEL SIGN AI
+  { 0x0CCA, BIDI_L   },  // KANNADA VOWEL SIGN O
+  { 0x0CCB, BIDI_L   },  // KANNADA VOWEL SIGN OO
+  { 0x0CCC, BIDI_NSM },  // KANNADA VOWEL SIGN AU
+  { 0x0CCD, BIDI_NSM },  // KANNADA SIGN VIRAMA
+  { 0x0CD5, BIDI_L   },  // KANNADA LENGTH MARK
+  { 0x0CD6, BIDI_L   },  // KANNADA AI LENGTH MARK
+  { 0x0CDE, BIDI_L   },  // KANNADA LETTER FA
+  { 0x0CE0, BIDI_L   },  // KANNADA LETTER VOCALIC RR
+  { 0x0CE1, BIDI_L   },  // KANNADA LETTER VOCALIC LL
+  { 0x0CE2, BIDI_NSM },  // KANNADA VOWEL SIGN VOCALIC L
+  { 0x0CE3, BIDI_NSM },  // KANNADA VOWEL SIGN VOCALIC LL
+  { 0x0CE6, BIDI_L   },  // KANNADA DIGIT ZERO
+  { 0x0CE7, BIDI_L   },  // KANNADA DIGIT ONE
+  { 0x0CE8, BIDI_L   },  // KANNADA DIGIT TWO
+  { 0x0CE9, BIDI_L   },  // KANNADA DIGIT THREE
+  { 0x0CEA, BIDI_L   },  // KANNADA DIGIT FOUR
+  { 0x0CEB, BIDI_L   },  // KANNADA DIGIT FIVE
+  { 0x0CEC, BIDI_L   },  // KANNADA DIGIT SIX
+  { 0x0CED, BIDI_L   },  // KANNADA DIGIT SEVEN
+  { 0x0CEE, BIDI_L   },  // KANNADA DIGIT EIGHT
+  { 0x0CEF, BIDI_L   },  // KANNADA DIGIT NINE
+  { 0x0CF1, BIDI_L   },  // KANNADA SIGN JIHVAMULIYA
+  { 0x0CF2, BIDI_L   },  // KANNADA SIGN UPADHMANIYA
+  { 0x0D01, BIDI_NSM },  // MALAYALAM SIGN CANDRABINDU
+  { 0x0D02, BIDI_L   },  // MALAYALAM SIGN ANUSVARA
+  { 0x0D03, BIDI_L   },  // MALAYALAM SIGN VISARGA
+  { 0x0D05, BIDI_L   },  // MALAYALAM LETTER A
+  { 0x0D06, BIDI_L   },  // MALAYALAM LETTER AA
+  { 0x0D07, BIDI_L   },  // MALAYALAM LETTER I
+  { 0x0D08, BIDI_L   },  // MALAYALAM LETTER II
+  { 0x0D09, BIDI_L   },  // MALAYALAM LETTER U
+  { 0x0D0A, BIDI_L   },  // MALAYALAM LETTER UU
+  { 0x0D0B, BIDI_L   },  // MALAYALAM LETTER VOCALIC R
+  { 0x0D0C, BIDI_L   },  // MALAYALAM LETTER VOCALIC L
+  { 0x0D0E, BIDI_L   },  // MALAYALAM LETTER E
+  { 0x0D0F, BIDI_L   },  // MALAYALAM LETTER EE
+  { 0x0D10, BIDI_L   },  // MALAYALAM LETTER AI
+  { 0x0D12, BIDI_L   },  // MALAYALAM LETTER O
+  { 0x0D13, BIDI_L   },  // MALAYALAM LETTER OO
+  { 0x0D14, BIDI_L   },  // MALAYALAM LETTER AU
+  { 0x0D15, BIDI_L   },  // MALAYALAM LETTER KA
+  { 0x0D16, BIDI_L   },  // MALAYALAM LETTER KHA
+  { 0x0D17, BIDI_L   },  // MALAYALAM LETTER GA
+  { 0x0D18, BIDI_L   },  // MALAYALAM LETTER GHA
+  { 0x0D19, BIDI_L   },  // MALAYALAM LETTER NGA
+  { 0x0D1A, BIDI_L   },  // MALAYALAM LETTER CA
+  { 0x0D1B, BIDI_L   },  // MALAYALAM LETTER CHA
+  { 0x0D1C, BIDI_L   },  // MALAYALAM LETTER JA
+  { 0x0D1D, BIDI_L   },  // MALAYALAM LETTER JHA
+  { 0x0D1E, BIDI_L   },  // MALAYALAM LETTER NYA
+  { 0x0D1F, BIDI_L   },  // MALAYALAM LETTER TTA
+  { 0x0D20, BIDI_L   },  // MALAYALAM LETTER TTHA
+  { 0x0D21, BIDI_L   },  // MALAYALAM LETTER DDA
+  { 0x0D22, BIDI_L   },  // MALAYALAM LETTER DDHA
+  { 0x0D23, BIDI_L   },  // MALAYALAM LETTER NNA
+  { 0x0D24, BIDI_L   },  // MALAYALAM LETTER TA
+  { 0x0D25, BIDI_L   },  // MALAYALAM LETTER THA
+  { 0x0D26, BIDI_L   },  // MALAYALAM LETTER DA
+  { 0x0D27, BIDI_L   },  // MALAYALAM LETTER DHA
+  { 0x0D28, BIDI_L   },  // MALAYALAM LETTER NA
+  { 0x0D29, BIDI_L   },  // MALAYALAM LETTER NNNA
+  { 0x0D2A, BIDI_L   },  // MALAYALAM LETTER PA
+  { 0x0D2B, BIDI_L   },  // MALAYALAM LETTER PHA
+  { 0x0D2C, BIDI_L   },  // MALAYALAM LETTER BA
+  { 0x0D2D, BIDI_L   },  // MALAYALAM LETTER BHA
+  { 0x0D2E, BIDI_L   },  // MALAYALAM LETTER MA
+  { 0x0D2F, BIDI_L   },  // MALAYALAM LETTER YA
+  { 0x0D30, BIDI_L   },  // MALAYALAM LETTER RA
+  { 0x0D31, BIDI_L   },  // MALAYALAM LETTER RRA
+  { 0x0D32, BIDI_L   },  // MALAYALAM LETTER LA
+  { 0x0D33, BIDI_L   },  // MALAYALAM LETTER LLA
+  { 0x0D34, BIDI_L   },  // MALAYALAM LETTER LLLA
+  { 0x0D35, BIDI_L   },  // MALAYALAM LETTER VA
+  { 0x0D36, BIDI_L   },  // MALAYALAM LETTER SHA
+  { 0x0D37, BIDI_L   },  // MALAYALAM LETTER SSA
+  { 0x0D38, BIDI_L   },  // MALAYALAM LETTER SA
+  { 0x0D39, BIDI_L   },  // MALAYALAM LETTER HA
+  { 0x0D3A, BIDI_L   },  // MALAYALAM LETTER TTTA
+  { 0x0D3D, BIDI_L   },  // MALAYALAM SIGN AVAGRAHA
+  { 0x0D3E, BIDI_L   },  // MALAYALAM VOWEL SIGN AA
+  { 0x0D3F, BIDI_L   },  // MALAYALAM VOWEL SIGN I
+  { 0x0D40, BIDI_L   },  // MALAYALAM VOWEL SIGN II
+  { 0x0D41, BIDI_NSM },  // MALAYALAM VOWEL SIGN U
+  { 0x0D42, BIDI_NSM },  // MALAYALAM VOWEL SIGN UU
+  { 0x0D43, BIDI_NSM },  // MALAYALAM VOWEL SIGN VOCALIC R
+  { 0x0D44, BIDI_NSM },  // MALAYALAM VOWEL SIGN VOCALIC RR
+  { 0x0D46, BIDI_L   },  // MALAYALAM VOWEL SIGN E
+  { 0x0D47, BIDI_L   },  // MALAYALAM VOWEL SIGN EE
+  { 0x0D48, BIDI_L   },  // MALAYALAM VOWEL SIGN AI
+  { 0x0D4A, BIDI_L   },  // MALAYALAM VOWEL SIGN O
+  { 0x0D4B, BIDI_L   },  // MALAYALAM VOWEL SIGN OO
+  { 0x0D4C, BIDI_L   },  // MALAYALAM VOWEL SIGN AU
+  { 0x0D4D, BIDI_NSM },  // MALAYALAM SIGN VIRAMA
+  { 0x0D4E, BIDI_L   },  // MALAYALAM LETTER DOT REPH
+  { 0x0D57, BIDI_L   },  // MALAYALAM AU LENGTH MARK
+  { 0x0D5F, BIDI_L   },  // MALAYALAM LETTER ARCHAIC II
+  { 0x0D60, BIDI_L   },  // MALAYALAM LETTER VOCALIC RR
+  { 0x0D61, BIDI_L   },  // MALAYALAM LETTER VOCALIC LL
+  { 0x0D62, BIDI_NSM },  // MALAYALAM VOWEL SIGN VOCALIC L
+  { 0x0D63, BIDI_NSM },  // MALAYALAM VOWEL SIGN VOCALIC LL
+  { 0x0D66, BIDI_L   },  // MALAYALAM DIGIT ZERO
+  { 0x0D67, BIDI_L   },  // MALAYALAM DIGIT ONE
+  { 0x0D68, BIDI_L   },  // MALAYALAM DIGIT TWO
+  { 0x0D69, BIDI_L   },  // MALAYALAM DIGIT THREE
+  { 0x0D6A, BIDI_L   },  // MALAYALAM DIGIT FOUR
+  { 0x0D6B, BIDI_L   },  // MALAYALAM DIGIT FIVE
+  { 0x0D6C, BIDI_L   },  // MALAYALAM DIGIT SIX
+  { 0x0D6D, BIDI_L   },  // MALAYALAM DIGIT SEVEN
+  { 0x0D6E, BIDI_L   },  // MALAYALAM DIGIT EIGHT
+  { 0x0D6F, BIDI_L   },  // MALAYALAM DIGIT NINE
+  { 0x0D70, BIDI_L   },  // MALAYALAM NUMBER TEN
+  { 0x0D71, BIDI_L   },  // MALAYALAM NUMBER ONE HUNDRED
+  { 0x0D72, BIDI_L   },  // MALAYALAM NUMBER ONE THOUSAND
+  { 0x0D73, BIDI_L   },  // MALAYALAM FRACTION ONE QUARTER
+  { 0x0D74, BIDI_L   },  // MALAYALAM FRACTION ONE HALF
+  { 0x0D75, BIDI_L   },  // MALAYALAM FRACTION THREE QUARTERS
+  { 0x0D79, BIDI_L   },  // MALAYALAM DATE MARK
+  { 0x0D7A, BIDI_L   },  // MALAYALAM LETTER CHILLU NN
+  { 0x0D7B, BIDI_L   },  // MALAYALAM LETTER CHILLU N
+  { 0x0D7C, BIDI_L   },  // MALAYALAM LETTER CHILLU RR
+  { 0x0D7D, BIDI_L   },  // MALAYALAM LETTER CHILLU L
+  { 0x0D7E, BIDI_L   },  // MALAYALAM LETTER CHILLU LL
+  { 0x0D7F, BIDI_L   },  // MALAYALAM LETTER CHILLU K
+  { 0x0D82, BIDI_L   },  // SINHALA SIGN ANUSVARAYA
+  { 0x0D83, BIDI_L   },  // SINHALA SIGN VISARGAYA
+  { 0x0D85, BIDI_L   },  // SINHALA LETTER AYANNA
+  { 0x0D86, BIDI_L   },  // SINHALA LETTER AAYANNA
+  { 0x0D87, BIDI_L   },  // SINHALA LETTER AEYANNA
+  { 0x0D88, BIDI_L   },  // SINHALA LETTER AEEYANNA
+  { 0x0D89, BIDI_L   },  // SINHALA LETTER IYANNA
+  { 0x0D8A, BIDI_L   },  // SINHALA LETTER IIYANNA
+  { 0x0D8B, BIDI_L   },  // SINHALA LETTER UYANNA
+  { 0x0D8C, BIDI_L   },  // SINHALA LETTER UUYANNA
+  { 0x0D8D, BIDI_L   },  // SINHALA LETTER IRUYANNA
+  { 0x0D8E, BIDI_L   },  // SINHALA LETTER IRUUYANNA
+  { 0x0D8F, BIDI_L   },  // SINHALA LETTER ILUYANNA
+  { 0x0D90, BIDI_L   },  // SINHALA LETTER ILUUYANNA
+  { 0x0D91, BIDI_L   },  // SINHALA LETTER EYANNA
+  { 0x0D92, BIDI_L   },  // SINHALA LETTER EEYANNA
+  { 0x0D93, BIDI_L   },  // SINHALA LETTER AIYANNA
+  { 0x0D94, BIDI_L   },  // SINHALA LETTER OYANNA
+  { 0x0D95, BIDI_L   },  // SINHALA LETTER OOYANNA
+  { 0x0D96, BIDI_L   },  // SINHALA LETTER AUYANNA
+  { 0x0D9A, BIDI_L   },  // SINHALA LETTER ALPAPRAANA KAYANNA
+  { 0x0D9B, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA KAYANNA
+  { 0x0D9C, BIDI_L   },  // SINHALA LETTER ALPAPRAANA GAYANNA
+  { 0x0D9D, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA GAYANNA
+  { 0x0D9E, BIDI_L   },  // SINHALA LETTER KANTAJA NAASIKYAYA
+  { 0x0D9F, BIDI_L   },  // SINHALA LETTER SANYAKA GAYANNA
+  { 0x0DA0, BIDI_L   },  // SINHALA LETTER ALPAPRAANA CAYANNA
+  { 0x0DA1, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA CAYANNA
+  { 0x0DA2, BIDI_L   },  // SINHALA LETTER ALPAPRAANA JAYANNA
+  { 0x0DA3, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA JAYANNA
+  { 0x0DA4, BIDI_L   },  // SINHALA LETTER TAALUJA NAASIKYAYA
+  { 0x0DA5, BIDI_L   },  // SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+  { 0x0DA6, BIDI_L   },  // SINHALA LETTER SANYAKA JAYANNA
+  { 0x0DA7, BIDI_L   },  // SINHALA LETTER ALPAPRAANA TTAYANNA
+  { 0x0DA8, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA TTAYANNA
+  { 0x0DA9, BIDI_L   },  // SINHALA LETTER ALPAPRAANA DDAYANNA
+  { 0x0DAA, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA DDAYANNA
+  { 0x0DAB, BIDI_L   },  // SINHALA LETTER MUURDHAJA NAYANNA
+  { 0x0DAC, BIDI_L   },  // SINHALA LETTER SANYAKA DDAYANNA
+  { 0x0DAD, BIDI_L   },  // SINHALA LETTER ALPAPRAANA TAYANNA
+  { 0x0DAE, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA TAYANNA
+  { 0x0DAF, BIDI_L   },  // SINHALA LETTER ALPAPRAANA DAYANNA
+  { 0x0DB0, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA DAYANNA
+  { 0x0DB1, BIDI_L   },  // SINHALA LETTER DANTAJA NAYANNA
+  { 0x0DB3, BIDI_L   },  // SINHALA LETTER SANYAKA DAYANNA
+  { 0x0DB4, BIDI_L   },  // SINHALA LETTER ALPAPRAANA PAYANNA
+  { 0x0DB5, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA PAYANNA
+  { 0x0DB6, BIDI_L   },  // SINHALA LETTER ALPAPRAANA BAYANNA
+  { 0x0DB7, BIDI_L   },  // SINHALA LETTER MAHAAPRAANA BAYANNA
+  { 0x0DB8, BIDI_L   },  // SINHALA LETTER MAYANNA
+  { 0x0DB9, BIDI_L   },  // SINHALA LETTER AMBA BAYANNA
+  { 0x0DBA, BIDI_L   },  // SINHALA LETTER YAYANNA
+  { 0x0DBB, BIDI_L   },  // SINHALA LETTER RAYANNA
+  { 0x0DBD, BIDI_L   },  // SINHALA LETTER DANTAJA LAYANNA
+  { 0x0DC0, BIDI_L   },  // SINHALA LETTER VAYANNA
+  { 0x0DC1, BIDI_L   },  // SINHALA LETTER TAALUJA SAYANNA
+  { 0x0DC2, BIDI_L   },  // SINHALA LETTER MUURDHAJA SAYANNA
+  { 0x0DC3, BIDI_L   },  // SINHALA LETTER DANTAJA SAYANNA
+  { 0x0DC4, BIDI_L   },  // SINHALA LETTER HAYANNA
+  { 0x0DC5, BIDI_L   },  // SINHALA LETTER MUURDHAJA LAYANNA
+  { 0x0DC6, BIDI_L   },  // SINHALA LETTER FAYANNA
+  { 0x0DCA, BIDI_NSM },  // SINHALA SIGN AL-LAKUNA
+  { 0x0DCF, BIDI_L   },  // SINHALA VOWEL SIGN AELA-PILLA
+  { 0x0DD0, BIDI_L   },  // SINHALA VOWEL SIGN KETTI AEDA-PILLA
+  { 0x0DD1, BIDI_L   },  // SINHALA VOWEL SIGN DIGA AEDA-PILLA
+  { 0x0DD2, BIDI_NSM },  // SINHALA VOWEL SIGN KETTI IS-PILLA
+  { 0x0DD3, BIDI_NSM },  // SINHALA VOWEL SIGN DIGA IS-PILLA
+  { 0x0DD4, BIDI_NSM },  // SINHALA VOWEL SIGN KETTI PAA-PILLA
+  { 0x0DD6, BIDI_NSM },  // SINHALA VOWEL SIGN DIGA PAA-PILLA
+  { 0x0DD8, BIDI_L   },  // SINHALA VOWEL SIGN GAETTA-PILLA
+  { 0x0DD9, BIDI_L   },  // SINHALA VOWEL SIGN KOMBUVA
+  { 0x0DDA, BIDI_L   },  // SINHALA VOWEL SIGN DIGA KOMBUVA
+  { 0x0DDB, BIDI_L   },  // SINHALA VOWEL SIGN KOMBU DEKA
+  { 0x0DDC, BIDI_L   },  // SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+  { 0x0DDD, BIDI_L   },  // SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+  { 0x0DDE, BIDI_L   },  // SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+  { 0x0DDF, BIDI_L   },  // SINHALA VOWEL SIGN GAYANUKITTA
+  { 0x0DE6, BIDI_L   },  // SINHALA LITH DIGIT ZERO
+  { 0x0DE7, BIDI_L   },  // SINHALA LITH DIGIT ONE
+  { 0x0DE8, BIDI_L   },  // SINHALA LITH DIGIT TWO
+  { 0x0DE9, BIDI_L   },  // SINHALA LITH DIGIT THREE
+  { 0x0DEA, BIDI_L   },  // SINHALA LITH DIGIT FOUR
+  { 0x0DEB, BIDI_L   },  // SINHALA LITH DIGIT FIVE
+  { 0x0DEC, BIDI_L   },  // SINHALA LITH DIGIT SIX
+  { 0x0DED, BIDI_L   },  // SINHALA LITH DIGIT SEVEN
+  { 0x0DEE, BIDI_L   },  // SINHALA LITH DIGIT EIGHT
+  { 0x0DEF, BIDI_L   },  // SINHALA LITH DIGIT NINE
+  { 0x0DF2, BIDI_L   },  // SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+  { 0x0DF3, BIDI_L   },  // SINHALA VOWEL SIGN DIGA GAYANUKITTA
+  { 0x0DF4, BIDI_L   },  // SINHALA PUNCTUATION KUNDDALIYA
+  { 0x0E01, BIDI_L   },  // THAI CHARACTER KO KAI
+  { 0x0E02, BIDI_L   },  // THAI CHARACTER KHO KHAI
+  { 0x0E03, BIDI_L   },  // THAI CHARACTER KHO KHUAT
+  { 0x0E04, BIDI_L   },  // THAI CHARACTER KHO KHWAI
+  { 0x0E05, BIDI_L   },  // THAI CHARACTER KHO KHON
+  { 0x0E06, BIDI_L   },  // THAI CHARACTER KHO RAKHANG
+  { 0x0E07, BIDI_L   },  // THAI CHARACTER NGO NGU
+  { 0x0E08, BIDI_L   },  // THAI CHARACTER CHO CHAN
+  { 0x0E09, BIDI_L   },  // THAI CHARACTER CHO CHING
+  { 0x0E0A, BIDI_L   },  // THAI CHARACTER CHO CHANG
+  { 0x0E0B, BIDI_L   },  // THAI CHARACTER SO SO
+  { 0x0E0C, BIDI_L   },  // THAI CHARACTER CHO CHOE
+  { 0x0E0D, BIDI_L   },  // THAI CHARACTER YO YING
+  { 0x0E0E, BIDI_L   },  // THAI CHARACTER DO CHADA
+  { 0x0E0F, BIDI_L   },  // THAI CHARACTER TO PATAK
+  { 0x0E10, BIDI_L   },  // THAI CHARACTER THO THAN
+  { 0x0E11, BIDI_L   },  // THAI CHARACTER THO NANGMONTHO
+  { 0x0E12, BIDI_L   },  // THAI CHARACTER THO PHUTHAO
+  { 0x0E13, BIDI_L   },  // THAI CHARACTER NO NEN
+  { 0x0E14, BIDI_L   },  // THAI CHARACTER DO DEK
+  { 0x0E15, BIDI_L   },  // THAI CHARACTER TO TAO
+  { 0x0E16, BIDI_L   },  // THAI CHARACTER THO THUNG
+  { 0x0E17, BIDI_L   },  // THAI CHARACTER THO THAHAN
+  { 0x0E18, BIDI_L   },  // THAI CHARACTER THO THONG
+  { 0x0E19, BIDI_L   },  // THAI CHARACTER NO NU
+  { 0x0E1A, BIDI_L   },  // THAI CHARACTER BO BAIMAI
+  { 0x0E1B, BIDI_L   },  // THAI CHARACTER PO PLA
+  { 0x0E1C, BIDI_L   },  // THAI CHARACTER PHO PHUNG
+  { 0x0E1D, BIDI_L   },  // THAI CHARACTER FO FA
+  { 0x0E1E, BIDI_L   },  // THAI CHARACTER PHO PHAN
+  { 0x0E1F, BIDI_L   },  // THAI CHARACTER FO FAN
+  { 0x0E20, BIDI_L   },  // THAI CHARACTER PHO SAMPHAO
+  { 0x0E21, BIDI_L   },  // THAI CHARACTER MO MA
+  { 0x0E22, BIDI_L   },  // THAI CHARACTER YO YAK
+  { 0x0E23, BIDI_L   },  // THAI CHARACTER RO RUA
+  { 0x0E24, BIDI_L   },  // THAI CHARACTER RU
+  { 0x0E25, BIDI_L   },  // THAI CHARACTER LO LING
+  { 0x0E26, BIDI_L   },  // THAI CHARACTER LU
+  { 0x0E27, BIDI_L   },  // THAI CHARACTER WO WAEN
+  { 0x0E28, BIDI_L   },  // THAI CHARACTER SO SALA
+  { 0x0E29, BIDI_L   },  // THAI CHARACTER SO RUSI
+  { 0x0E2A, BIDI_L   },  // THAI CHARACTER SO SUA
+  { 0x0E2B, BIDI_L   },  // THAI CHARACTER HO HIP
+  { 0x0E2C, BIDI_L   },  // THAI CHARACTER LO CHULA
+  { 0x0E2D, BIDI_L   },  // THAI CHARACTER O ANG
+  { 0x0E2E, BIDI_L   },  // THAI CHARACTER HO NOKHUK
+  { 0x0E2F, BIDI_L   },  // THAI CHARACTER PAIYANNOI
+  { 0x0E30, BIDI_L   },  // THAI CHARACTER SARA A
+  { 0x0E31, BIDI_NSM },  // THAI CHARACTER MAI HAN-AKAT
+  { 0x0E32, BIDI_L   },  // THAI CHARACTER SARA AA
+  { 0x0E33, BIDI_L   },  // THAI CHARACTER SARA AM
+  { 0x0E34, BIDI_NSM },  // THAI CHARACTER SARA I
+  { 0x0E35, BIDI_NSM },  // THAI CHARACTER SARA II
+  { 0x0E36, BIDI_NSM },  // THAI CHARACTER SARA UE
+  { 0x0E37, BIDI_NSM },  // THAI CHARACTER SARA UEE
+  { 0x0E38, BIDI_NSM },  // THAI CHARACTER SARA U
+  { 0x0E39, BIDI_NSM },  // THAI CHARACTER SARA UU
+  { 0x0E3A, BIDI_NSM },  // THAI CHARACTER PHINTHU
+  { 0x0E3F, BIDI_ET  },  // THAI CURRENCY SYMBOL BAHT
+  { 0x0E40, BIDI_L   },  // THAI CHARACTER SARA E
+  { 0x0E41, BIDI_L   },  // THAI CHARACTER SARA AE
+  { 0x0E42, BIDI_L   },  // THAI CHARACTER SARA O
+  { 0x0E43, BIDI_L   },  // THAI CHARACTER SARA AI MAIMUAN
+  { 0x0E44, BIDI_L   },  // THAI CHARACTER SARA AI MAIMALAI
+  { 0x0E45, BIDI_L   },  // THAI CHARACTER LAKKHANGYAO
+  { 0x0E46, BIDI_L   },  // THAI CHARACTER MAIYAMOK
+  { 0x0E47, BIDI_NSM },  // THAI CHARACTER MAITAIKHU
+  { 0x0E48, BIDI_NSM },  // THAI CHARACTER MAI EK
+  { 0x0E49, BIDI_NSM },  // THAI CHARACTER MAI THO
+  { 0x0E4A, BIDI_NSM },  // THAI CHARACTER MAI TRI
+  { 0x0E4B, BIDI_NSM },  // THAI CHARACTER MAI CHATTAWA
+  { 0x0E4C, BIDI_NSM },  // THAI CHARACTER THANTHAKHAT
+  { 0x0E4D, BIDI_NSM },  // THAI CHARACTER NIKHAHIT
+  { 0x0E4E, BIDI_NSM },  // THAI CHARACTER YAMAKKAN
+  { 0x0E4F, BIDI_L   },  // THAI CHARACTER FONGMAN
+  { 0x0E50, BIDI_L   },  // THAI DIGIT ZERO
+  { 0x0E51, BIDI_L   },  // THAI DIGIT ONE
+  { 0x0E52, BIDI_L   },  // THAI DIGIT TWO
+  { 0x0E53, BIDI_L   },  // THAI DIGIT THREE
+  { 0x0E54, BIDI_L   },  // THAI DIGIT FOUR
+  { 0x0E55, BIDI_L   },  // THAI DIGIT FIVE
+  { 0x0E56, BIDI_L   },  // THAI DIGIT SIX
+  { 0x0E57, BIDI_L   },  // THAI DIGIT SEVEN
+  { 0x0E58, BIDI_L   },  // THAI DIGIT EIGHT
+  { 0x0E59, BIDI_L   },  // THAI DIGIT NINE
+  { 0x0E5A, BIDI_L   },  // THAI CHARACTER ANGKHANKHU
+  { 0x0E5B, BIDI_L   },  // THAI CHARACTER KHOMUT
+  { 0x0E81, BIDI_L   },  // LAO LETTER KO
+  { 0x0E82, BIDI_L   },  // LAO LETTER KHO SUNG
+  { 0x0E84, BIDI_L   },  // LAO LETTER KHO TAM
+  { 0x0E87, BIDI_L   },  // LAO LETTER NGO
+  { 0x0E88, BIDI_L   },  // LAO LETTER CO
+  { 0x0E8A, BIDI_L   },  // LAO LETTER SO TAM
+  { 0x0E8D, BIDI_L   },  // LAO LETTER NYO
+  { 0x0E94, BIDI_L   },  // LAO LETTER DO
+  { 0x0E95, BIDI_L   },  // LAO LETTER TO
+  { 0x0E96, BIDI_L   },  // LAO LETTER THO SUNG
+  { 0x0E97, BIDI_L   },  // LAO LETTER THO TAM
+  { 0x0E99, BIDI_L   },  // LAO LETTER NO
+  { 0x0E9A, BIDI_L   },  // LAO LETTER BO
+  { 0x0E9B, BIDI_L   },  // LAO LETTER PO
+  { 0x0E9C, BIDI_L   },  // LAO LETTER PHO SUNG
+  { 0x0E9D, BIDI_L   },  // LAO LETTER FO TAM
+  { 0x0E9E, BIDI_L   },  // LAO LETTER PHO TAM
+  { 0x0E9F, BIDI_L   },  // LAO LETTER FO SUNG
+  { 0x0EA1, BIDI_L   },  // LAO LETTER MO
+  { 0x0EA2, BIDI_L   },  // LAO LETTER YO
+  { 0x0EA3, BIDI_L   },  // LAO LETTER LO LING
+  { 0x0EA5, BIDI_L   },  // LAO LETTER LO LOOT
+  { 0x0EA7, BIDI_L   },  // LAO LETTER WO
+  { 0x0EAA, BIDI_L   },  // LAO LETTER SO SUNG
+  { 0x0EAB, BIDI_L   },  // LAO LETTER HO SUNG
+  { 0x0EAD, BIDI_L   },  // LAO LETTER O
+  { 0x0EAE, BIDI_L   },  // LAO LETTER HO TAM
+  { 0x0EAF, BIDI_L   },  // LAO ELLIPSIS
+  { 0x0EB0, BIDI_L   },  // LAO VOWEL SIGN A
+  { 0x0EB1, BIDI_NSM },  // LAO VOWEL SIGN MAI KAN
+  { 0x0EB2, BIDI_L   },  // LAO VOWEL SIGN AA
+  { 0x0EB3, BIDI_L   },  // LAO VOWEL SIGN AM
+  { 0x0EB4, BIDI_NSM },  // LAO VOWEL SIGN I
+  { 0x0EB5, BIDI_NSM },  // LAO VOWEL SIGN II
+  { 0x0EB6, BIDI_NSM },  // LAO VOWEL SIGN Y
+  { 0x0EB7, BIDI_NSM },  // LAO VOWEL SIGN YY
+  { 0x0EB8, BIDI_NSM },  // LAO VOWEL SIGN U
+  { 0x0EB9, BIDI_NSM },  // LAO VOWEL SIGN UU
+  { 0x0EBB, BIDI_NSM },  // LAO VOWEL SIGN MAI KON
+  { 0x0EBC, BIDI_NSM },  // LAO SEMIVOWEL SIGN LO
+  { 0x0EBD, BIDI_L   },  // LAO SEMIVOWEL SIGN NYO
+  { 0x0EC0, BIDI_L   },  // LAO VOWEL SIGN E
+  { 0x0EC1, BIDI_L   },  // LAO VOWEL SIGN EI
+  { 0x0EC2, BIDI_L   },  // LAO VOWEL SIGN O
+  { 0x0EC3, BIDI_L   },  // LAO VOWEL SIGN AY
+  { 0x0EC4, BIDI_L   },  // LAO VOWEL SIGN AI
+  { 0x0EC6, BIDI_L   },  // LAO KO LA
+  { 0x0EC8, BIDI_NSM },  // LAO TONE MAI EK
+  { 0x0EC9, BIDI_NSM },  // LAO TONE MAI THO
+  { 0x0ECA, BIDI_NSM },  // LAO TONE MAI TI
+  { 0x0ECB, BIDI_NSM },  // LAO TONE MAI CATAWA
+  { 0x0ECC, BIDI_NSM },  // LAO CANCELLATION MARK
+  { 0x0ECD, BIDI_NSM },  // LAO NIGGAHITA
+  { 0x0ED0, BIDI_L   },  // LAO DIGIT ZERO
+  { 0x0ED1, BIDI_L   },  // LAO DIGIT ONE
+  { 0x0ED2, BIDI_L   },  // LAO DIGIT TWO
+  { 0x0ED3, BIDI_L   },  // LAO DIGIT THREE
+  { 0x0ED4, BIDI_L   },  // LAO DIGIT FOUR
+  { 0x0ED5, BIDI_L   },  // LAO DIGIT FIVE
+  { 0x0ED6, BIDI_L   },  // LAO DIGIT SIX
+  { 0x0ED7, BIDI_L   },  // LAO DIGIT SEVEN
+  { 0x0ED8, BIDI_L   },  // LAO DIGIT EIGHT
+  { 0x0ED9, BIDI_L   },  // LAO DIGIT NINE
+  { 0x0EDC, BIDI_L   },  // LAO HO NO
+  { 0x0EDD, BIDI_L   },  // LAO HO MO
+  { 0x0EDE, BIDI_L   },  // LAO LETTER KHMU GO
+  { 0x0EDF, BIDI_L   },  // LAO LETTER KHMU NYO
+  { 0x0F00, BIDI_L   },  // TIBETAN SYLLABLE OM
+  { 0x0F01, BIDI_L   },  // TIBETAN MARK GTER YIG MGO TRUNCATED A
+  { 0x0F02, BIDI_L   },  // TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+  { 0x0F03, BIDI_L   },  // TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+  { 0x0F04, BIDI_L   },  // TIBETAN MARK INITIAL YIG MGO MDUN MA
+  { 0x0F05, BIDI_L   },  // TIBETAN MARK CLOSING YIG MGO SGAB MA
+  { 0x0F06, BIDI_L   },  // TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+  { 0x0F07, BIDI_L   },  // TIBETAN MARK YIG MGO TSHEG SHAD MA
+  { 0x0F08, BIDI_L   },  // TIBETAN MARK SBRUL SHAD
+  { 0x0F09, BIDI_L   },  // TIBETAN MARK BSKUR YIG MGO
+  { 0x0F0A, BIDI_L   },  // TIBETAN MARK BKA- SHOG YIG MGO
+  { 0x0F0B, BIDI_L   },  // TIBETAN MARK INTERSYLLABIC TSHEG
+  { 0x0F0C, BIDI_L   },  // TIBETAN MARK DELIMITER TSHEG BSTAR
+  { 0x0F0D, BIDI_L   },  // TIBETAN MARK SHAD
+  { 0x0F0E, BIDI_L   },  // TIBETAN MARK NYIS SHAD
+  { 0x0F0F, BIDI_L   },  // TIBETAN MARK TSHEG SHAD
+  { 0x0F10, BIDI_L   },  // TIBETAN MARK NYIS TSHEG SHAD
+  { 0x0F11, BIDI_L   },  // TIBETAN MARK RIN CHEN SPUNGS SHAD
+  { 0x0F12, BIDI_L   },  // TIBETAN MARK RGYA GRAM SHAD
+  { 0x0F13, BIDI_L   },  // TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+  { 0x0F14, BIDI_L   },  // TIBETAN MARK GTER TSHEG
+  { 0x0F15, BIDI_L   },  // TIBETAN LOGOTYPE SIGN CHAD RTAGS
+  { 0x0F16, BIDI_L   },  // TIBETAN LOGOTYPE SIGN LHAG RTAGS
+  { 0x0F17, BIDI_L   },  // TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+  { 0x0F18, BIDI_NSM },  // TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+  { 0x0F19, BIDI_NSM },  // TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+  { 0x0F1A, BIDI_L   },  // TIBETAN SIGN RDEL DKAR GCIG
+  { 0x0F1B, BIDI_L   },  // TIBETAN SIGN RDEL DKAR GNYIS
+  { 0x0F1C, BIDI_L   },  // TIBETAN SIGN RDEL DKAR GSUM
+  { 0x0F1D, BIDI_L   },  // TIBETAN SIGN RDEL NAG GCIG
+  { 0x0F1E, BIDI_L   },  // TIBETAN SIGN RDEL NAG GNYIS
+  { 0x0F1F, BIDI_L   },  // TIBETAN SIGN RDEL DKAR RDEL NAG
+  { 0x0F20, BIDI_L   },  // TIBETAN DIGIT ZERO
+  { 0x0F21, BIDI_L   },  // TIBETAN DIGIT ONE
+  { 0x0F22, BIDI_L   },  // TIBETAN DIGIT TWO
+  { 0x0F23, BIDI_L   },  // TIBETAN DIGIT THREE
+  { 0x0F24, BIDI_L   },  // TIBETAN DIGIT FOUR
+  { 0x0F25, BIDI_L   },  // TIBETAN DIGIT FIVE
+  { 0x0F26, BIDI_L   },  // TIBETAN DIGIT SIX
+  { 0x0F27, BIDI_L   },  // TIBETAN DIGIT SEVEN
+  { 0x0F28, BIDI_L   },  // TIBETAN DIGIT EIGHT
+  { 0x0F29, BIDI_L   },  // TIBETAN DIGIT NINE
+  { 0x0F2A, BIDI_L   },  // TIBETAN DIGIT HALF ONE
+  { 0x0F2B, BIDI_L   },  // TIBETAN DIGIT HALF TWO
+  { 0x0F2C, BIDI_L   },  // TIBETAN DIGIT HALF THREE
+  { 0x0F2D, BIDI_L   },  // TIBETAN DIGIT HALF FOUR
+  { 0x0F2E, BIDI_L   },  // TIBETAN DIGIT HALF FIVE
+  { 0x0F2F, BIDI_L   },  // TIBETAN DIGIT HALF SIX
+  { 0x0F30, BIDI_L   },  // TIBETAN DIGIT HALF SEVEN
+  { 0x0F31, BIDI_L   },  // TIBETAN DIGIT HALF EIGHT
+  { 0x0F32, BIDI_L   },  // TIBETAN DIGIT HALF NINE
+  { 0x0F33, BIDI_L   },  // TIBETAN DIGIT HALF ZERO
+  { 0x0F34, BIDI_L   },  // TIBETAN MARK BSDUS RTAGS
+  { 0x0F35, BIDI_NSM },  // TIBETAN MARK NGAS BZUNG NYI ZLA
+  { 0x0F36, BIDI_L   },  // TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+  { 0x0F37, BIDI_NSM },  // TIBETAN MARK NGAS BZUNG SGOR RTAGS
+  { 0x0F38, BIDI_L   },  // TIBETAN MARK CHE MGO
+  { 0x0F39, BIDI_NSM },  // TIBETAN MARK TSA -PHRU
+  { 0x0F3A, BIDI_ON  },  // TIBETAN MARK GUG RTAGS GYON
+  { 0x0F3B, BIDI_ON  },  // TIBETAN MARK GUG RTAGS GYAS
+  { 0x0F3C, BIDI_ON  },  // TIBETAN MARK ANG KHANG GYON
+  { 0x0F3D, BIDI_ON  },  // TIBETAN MARK ANG KHANG GYAS
+  { 0x0F3E, BIDI_L   },  // TIBETAN SIGN YAR TSHES
+  { 0x0F3F, BIDI_L   },  // TIBETAN SIGN MAR TSHES
+  { 0x0F40, BIDI_L   },  // TIBETAN LETTER KA
+  { 0x0F41, BIDI_L   },  // TIBETAN LETTER KHA
+  { 0x0F42, BIDI_L   },  // TIBETAN LETTER GA
+  { 0x0F43, BIDI_L   },  // TIBETAN LETTER GHA
+  { 0x0F44, BIDI_L   },  // TIBETAN LETTER NGA
+  { 0x0F45, BIDI_L   },  // TIBETAN LETTER CA
+  { 0x0F46, BIDI_L   },  // TIBETAN LETTER CHA
+  { 0x0F47, BIDI_L   },  // TIBETAN LETTER JA
+  { 0x0F49, BIDI_L   },  // TIBETAN LETTER NYA
+  { 0x0F4A, BIDI_L   },  // TIBETAN LETTER TTA
+  { 0x0F4B, BIDI_L   },  // TIBETAN LETTER TTHA
+  { 0x0F4C, BIDI_L   },  // TIBETAN LETTER DDA
+  { 0x0F4D, BIDI_L   },  // TIBETAN LETTER DDHA
+  { 0x0F4E, BIDI_L   },  // TIBETAN LETTER NNA
+  { 0x0F4F, BIDI_L   },  // TIBETAN LETTER TA
+  { 0x0F50, BIDI_L   },  // TIBETAN LETTER THA
+  { 0x0F51, BIDI_L   },  // TIBETAN LETTER DA
+  { 0x0F52, BIDI_L   },  // TIBETAN LETTER DHA
+  { 0x0F53, BIDI_L   },  // TIBETAN LETTER NA
+  { 0x0F54, BIDI_L   },  // TIBETAN LETTER PA
+  { 0x0F55, BIDI_L   },  // TIBETAN LETTER PHA
+  { 0x0F56, BIDI_L   },  // TIBETAN LETTER BA
+  { 0x0F57, BIDI_L   },  // TIBETAN LETTER BHA
+  { 0x0F58, BIDI_L   },  // TIBETAN LETTER MA
+  { 0x0F59, BIDI_L   },  // TIBETAN LETTER TSA
+  { 0x0F5A, BIDI_L   },  // TIBETAN LETTER TSHA
+  { 0x0F5B, BIDI_L   },  // TIBETAN LETTER DZA
+  { 0x0F5C, BIDI_L   },  // TIBETAN LETTER DZHA
+  { 0x0F5D, BIDI_L   },  // TIBETAN LETTER WA
+  { 0x0F5E, BIDI_L   },  // TIBETAN LETTER ZHA
+  { 0x0F5F, BIDI_L   },  // TIBETAN LETTER ZA
+  { 0x0F60, BIDI_L   },  // TIBETAN LETTER -A
+  { 0x0F61, BIDI_L   },  // TIBETAN LETTER YA
+  { 0x0F62, BIDI_L   },  // TIBETAN LETTER RA
+  { 0x0F63, BIDI_L   },  // TIBETAN LETTER LA
+  { 0x0F64, BIDI_L   },  // TIBETAN LETTER SHA
+  { 0x0F65, BIDI_L   },  // TIBETAN LETTER SSA
+  { 0x0F66, BIDI_L   },  // TIBETAN LETTER SA
+  { 0x0F67, BIDI_L   },  // TIBETAN LETTER HA
+  { 0x0F68, BIDI_L   },  // TIBETAN LETTER A
+  { 0x0F69, BIDI_L   },  // TIBETAN LETTER KSSA
+  { 0x0F6A, BIDI_L   },  // TIBETAN LETTER FIXED-FORM RA
+  { 0x0F6B, BIDI_L   },  // TIBETAN LETTER KKA
+  { 0x0F6C, BIDI_L   },  // TIBETAN LETTER RRA
+  { 0x0F71, BIDI_NSM },  // TIBETAN VOWEL SIGN AA
+  { 0x0F72, BIDI_NSM },  // TIBETAN VOWEL SIGN I
+  { 0x0F73, BIDI_NSM },  // TIBETAN VOWEL SIGN II
+  { 0x0F74, BIDI_NSM },  // TIBETAN VOWEL SIGN U
+  { 0x0F75, BIDI_NSM },  // TIBETAN VOWEL SIGN UU
+  { 0x0F76, BIDI_NSM },  // TIBETAN VOWEL SIGN VOCALIC R
+  { 0x0F77, BIDI_NSM },  // TIBETAN VOWEL SIGN VOCALIC RR
+  { 0x0F78, BIDI_NSM },  // TIBETAN VOWEL SIGN VOCALIC L
+  { 0x0F79, BIDI_NSM },  // TIBETAN VOWEL SIGN VOCALIC LL
+  { 0x0F7A, BIDI_NSM },  // TIBETAN VOWEL SIGN E
+  { 0x0F7B, BIDI_NSM },  // TIBETAN VOWEL SIGN EE
+  { 0x0F7C, BIDI_NSM },  // TIBETAN VOWEL SIGN O
+  { 0x0F7D, BIDI_NSM },  // TIBETAN VOWEL SIGN OO
+  { 0x0F7E, BIDI_NSM },  // TIBETAN SIGN RJES SU NGA RO
+  { 0x0F7F, BIDI_L   },  // TIBETAN SIGN RNAM BCAD
+  { 0x0F80, BIDI_NSM },  // TIBETAN VOWEL SIGN REVERSED I
+  { 0x0F81, BIDI_NSM },  // TIBETAN VOWEL SIGN REVERSED II
+  { 0x0F82, BIDI_NSM },  // TIBETAN SIGN NYI ZLA NAA DA
+  { 0x0F83, BIDI_NSM },  // TIBETAN SIGN SNA LDAN
+  { 0x0F84, BIDI_NSM },  // TIBETAN MARK HALANTA
+  { 0x0F85, BIDI_L   },  // TIBETAN MARK PALUTA
+  { 0x0F86, BIDI_NSM },  // TIBETAN SIGN LCI RTAGS
+  { 0x0F87, BIDI_NSM },  // TIBETAN SIGN YANG RTAGS
+  { 0x0F88, BIDI_L   },  // TIBETAN SIGN LCE TSA CAN
+  { 0x0F89, BIDI_L   },  // TIBETAN SIGN MCHU CAN
+  { 0x0F8A, BIDI_L   },  // TIBETAN SIGN GRU CAN RGYINGS
+  { 0x0F8B, BIDI_L   },  // TIBETAN SIGN GRU MED RGYINGS
+  { 0x0F8C, BIDI_L   },  // TIBETAN SIGN INVERTED MCHU CAN
+  { 0x0F8D, BIDI_NSM },  // TIBETAN SUBJOINED SIGN LCE TSA CAN
+  { 0x0F8E, BIDI_NSM },  // TIBETAN SUBJOINED SIGN MCHU CAN
+  { 0x0F8F, BIDI_NSM },  // TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+  { 0x0F90, BIDI_NSM },  // TIBETAN SUBJOINED LETTER KA
+  { 0x0F91, BIDI_NSM },  // TIBETAN SUBJOINED LETTER KHA
+  { 0x0F92, BIDI_NSM },  // TIBETAN SUBJOINED LETTER GA
+  { 0x0F93, BIDI_NSM },  // TIBETAN SUBJOINED LETTER GHA
+  { 0x0F94, BIDI_NSM },  // TIBETAN SUBJOINED LETTER NGA
+  { 0x0F95, BIDI_NSM },  // TIBETAN SUBJOINED LETTER CA
+  { 0x0F96, BIDI_NSM },  // TIBETAN SUBJOINED LETTER CHA
+  { 0x0F97, BIDI_NSM },  // TIBETAN SUBJOINED LETTER JA
+  { 0x0F99, BIDI_NSM },  // TIBETAN SUBJOINED LETTER NYA
+  { 0x0F9A, BIDI_NSM },  // TIBETAN SUBJOINED LETTER TTA
+  { 0x0F9B, BIDI_NSM },  // TIBETAN SUBJOINED LETTER TTHA
+  { 0x0F9C, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DDA
+  { 0x0F9D, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DDHA
+  { 0x0F9E, BIDI_NSM },  // TIBETAN SUBJOINED LETTER NNA
+  { 0x0F9F, BIDI_NSM },  // TIBETAN SUBJOINED LETTER TA
+  { 0x0FA0, BIDI_NSM },  // TIBETAN SUBJOINED LETTER THA
+  { 0x0FA1, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DA
+  { 0x0FA2, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DHA
+  { 0x0FA3, BIDI_NSM },  // TIBETAN SUBJOINED LETTER NA
+  { 0x0FA4, BIDI_NSM },  // TIBETAN SUBJOINED LETTER PA
+  { 0x0FA5, BIDI_NSM },  // TIBETAN SUBJOINED LETTER PHA
+  { 0x0FA6, BIDI_NSM },  // TIBETAN SUBJOINED LETTER BA
+  { 0x0FA7, BIDI_NSM },  // TIBETAN SUBJOINED LETTER BHA
+  { 0x0FA8, BIDI_NSM },  // TIBETAN SUBJOINED LETTER MA
+  { 0x0FA9, BIDI_NSM },  // TIBETAN SUBJOINED LETTER TSA
+  { 0x0FAA, BIDI_NSM },  // TIBETAN SUBJOINED LETTER TSHA
+  { 0x0FAB, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DZA
+  { 0x0FAC, BIDI_NSM },  // TIBETAN SUBJOINED LETTER DZHA
+  { 0x0FAD, BIDI_NSM },  // TIBETAN SUBJOINED LETTER WA
+  { 0x0FAE, BIDI_NSM },  // TIBETAN SUBJOINED LETTER ZHA
+  { 0x0FAF, BIDI_NSM },  // TIBETAN SUBJOINED LETTER ZA
+  { 0x0FB0, BIDI_NSM },  // TIBETAN SUBJOINED LETTER -A
+  { 0x0FB1, BIDI_NSM },  // TIBETAN SUBJOINED LETTER YA
+  { 0x0FB2, BIDI_NSM },  // TIBETAN SUBJOINED LETTER RA
+  { 0x0FB3, BIDI_NSM },  // TIBETAN SUBJOINED LETTER LA
+  { 0x0FB4, BIDI_NSM },  // TIBETAN SUBJOINED LETTER SHA
+  { 0x0FB5, BIDI_NSM },  // TIBETAN SUBJOINED LETTER SSA
+  { 0x0FB6, BIDI_NSM },  // TIBETAN SUBJOINED LETTER SA
+  { 0x0FB7, BIDI_NSM },  // TIBETAN SUBJOINED LETTER HA
+  { 0x0FB8, BIDI_NSM },  // TIBETAN SUBJOINED LETTER A
+  { 0x0FB9, BIDI_NSM },  // TIBETAN SUBJOINED LETTER KSSA
+  { 0x0FBA, BIDI_NSM },  // TIBETAN SUBJOINED LETTER FIXED-FORM WA
+  { 0x0FBB, BIDI_NSM },  // TIBETAN SUBJOINED LETTER FIXED-FORM YA
+  { 0x0FBC, BIDI_NSM },  // TIBETAN SUBJOINED LETTER FIXED-FORM RA
+  { 0x0FBE, BIDI_L   },  // TIBETAN KU RU KHA
+  { 0x0FBF, BIDI_L   },  // TIBETAN KU RU KHA BZHI MIG CAN
+  { 0x0FC0, BIDI_L   },  // TIBETAN CANTILLATION SIGN HEAVY BEAT
+  { 0x0FC1, BIDI_L   },  // TIBETAN CANTILLATION SIGN LIGHT BEAT
+  { 0x0FC2, BIDI_L   },  // TIBETAN CANTILLATION SIGN CANG TE-U
+  { 0x0FC3, BIDI_L   },  // TIBETAN CANTILLATION SIGN SBUB -CHAL
+  { 0x0FC4, BIDI_L   },  // TIBETAN SYMBOL DRIL BU
+  { 0x0FC5, BIDI_L   },  // TIBETAN SYMBOL RDO RJE
+  { 0x0FC6, BIDI_NSM },  // TIBETAN SYMBOL PADMA GDAN
+  { 0x0FC7, BIDI_L   },  // TIBETAN SYMBOL RDO RJE RGYA GRAM
+  { 0x0FC8, BIDI_L   },  // TIBETAN SYMBOL PHUR PA
+  { 0x0FC9, BIDI_L   },  // TIBETAN SYMBOL NOR BU
+  { 0x0FCA, BIDI_L   },  // TIBETAN SYMBOL NOR BU NYIS -KHYIL
+  { 0x0FCB, BIDI_L   },  // TIBETAN SYMBOL NOR BU GSUM -KHYIL
+  { 0x0FCC, BIDI_L   },  // TIBETAN SYMBOL NOR BU BZHI -KHYIL
+  { 0x0FCE, BIDI_L   },  // TIBETAN SIGN RDEL NAG RDEL DKAR
+  { 0x0FCF, BIDI_L   },  // TIBETAN SIGN RDEL NAG GSUM
+  { 0x0FD0, BIDI_L   },  // TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+  { 0x0FD1, BIDI_L   },  // TIBETAN MARK MNYAM YIG GI MGO RGYAN
+  { 0x0FD2, BIDI_L   },  // TIBETAN MARK NYIS TSHEG
+  { 0x0FD3, BIDI_L   },  // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+  { 0x0FD4, BIDI_L   },  // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+  { 0x0FD5, BIDI_L   },  // RIGHT-FACING SVASTI SIGN
+  { 0x0FD6, BIDI_L   },  // LEFT-FACING SVASTI SIGN
+  { 0x0FD7, BIDI_L   },  // RIGHT-FACING SVASTI SIGN WITH DOTS
+  { 0x0FD8, BIDI_L   },  // LEFT-FACING SVASTI SIGN WITH DOTS
+  { 0x0FD9, BIDI_L   },  // TIBETAN MARK LEADING MCHAN RTAGS
+  { 0x0FDA, BIDI_L   },  // TIBETAN MARK TRAILING MCHAN RTAGS
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_1 == 1)
+
+  { 0x1000, BIDI_L   },  // MYANMAR LETTER KA
+  { 0x1001, BIDI_L   },  // MYANMAR LETTER KHA
+  { 0x1002, BIDI_L   },  // MYANMAR LETTER GA
+  { 0x1003, BIDI_L   },  // MYANMAR LETTER GHA
+  { 0x1004, BIDI_L   },  // MYANMAR LETTER NGA
+  { 0x1005, BIDI_L   },  // MYANMAR LETTER CA
+  { 0x1006, BIDI_L   },  // MYANMAR LETTER CHA
+  { 0x1007, BIDI_L   },  // MYANMAR LETTER JA
+  { 0x1008, BIDI_L   },  // MYANMAR LETTER JHA
+  { 0x1009, BIDI_L   },  // MYANMAR LETTER NYA
+  { 0x100A, BIDI_L   },  // MYANMAR LETTER NNYA
+  { 0x100B, BIDI_L   },  // MYANMAR LETTER TTA
+  { 0x100C, BIDI_L   },  // MYANMAR LETTER TTHA
+  { 0x100D, BIDI_L   },  // MYANMAR LETTER DDA
+  { 0x100E, BIDI_L   },  // MYANMAR LETTER DDHA
+  { 0x100F, BIDI_L   },  // MYANMAR LETTER NNA
+  { 0x1010, BIDI_L   },  // MYANMAR LETTER TA
+  { 0x1011, BIDI_L   },  // MYANMAR LETTER THA
+  { 0x1012, BIDI_L   },  // MYANMAR LETTER DA
+  { 0x1013, BIDI_L   },  // MYANMAR LETTER DHA
+  { 0x1014, BIDI_L   },  // MYANMAR LETTER NA
+  { 0x1015, BIDI_L   },  // MYANMAR LETTER PA
+  { 0x1016, BIDI_L   },  // MYANMAR LETTER PHA
+  { 0x1017, BIDI_L   },  // MYANMAR LETTER BA
+  { 0x1018, BIDI_L   },  // MYANMAR LETTER BHA
+  { 0x1019, BIDI_L   },  // MYANMAR LETTER MA
+  { 0x101A, BIDI_L   },  // MYANMAR LETTER YA
+  { 0x101B, BIDI_L   },  // MYANMAR LETTER RA
+  { 0x101C, BIDI_L   },  // MYANMAR LETTER LA
+  { 0x101D, BIDI_L   },  // MYANMAR LETTER WA
+  { 0x101E, BIDI_L   },  // MYANMAR LETTER SA
+  { 0x101F, BIDI_L   },  // MYANMAR LETTER HA
+  { 0x1020, BIDI_L   },  // MYANMAR LETTER LLA
+  { 0x1021, BIDI_L   },  // MYANMAR LETTER A
+  { 0x1022, BIDI_L   },  // MYANMAR LETTER SHAN A
+  { 0x1023, BIDI_L   },  // MYANMAR LETTER I
+  { 0x1024, BIDI_L   },  // MYANMAR LETTER II
+  { 0x1025, BIDI_L   },  // MYANMAR LETTER U
+  { 0x1026, BIDI_L   },  // MYANMAR LETTER UU
+  { 0x1027, BIDI_L   },  // MYANMAR LETTER E
+  { 0x1028, BIDI_L   },  // MYANMAR LETTER MON E
+  { 0x1029, BIDI_L   },  // MYANMAR LETTER O
+  { 0x102A, BIDI_L   },  // MYANMAR LETTER AU
+  { 0x102B, BIDI_L   },  // MYANMAR VOWEL SIGN TALL AA
+  { 0x102C, BIDI_L   },  // MYANMAR VOWEL SIGN AA
+  { 0x102D, BIDI_NSM },  // MYANMAR VOWEL SIGN I
+  { 0x102E, BIDI_NSM },  // MYANMAR VOWEL SIGN II
+  { 0x102F, BIDI_NSM },  // MYANMAR VOWEL SIGN U
+  { 0x1030, BIDI_NSM },  // MYANMAR VOWEL SIGN UU
+  { 0x1031, BIDI_L   },  // MYANMAR VOWEL SIGN E
+  { 0x1032, BIDI_NSM },  // MYANMAR VOWEL SIGN AI
+  { 0x1033, BIDI_NSM },  // MYANMAR VOWEL SIGN MON II
+  { 0x1034, BIDI_NSM },  // MYANMAR VOWEL SIGN MON O
+  { 0x1035, BIDI_NSM },  // MYANMAR VOWEL SIGN E ABOVE
+  { 0x1036, BIDI_NSM },  // MYANMAR SIGN ANUSVARA
+  { 0x1037, BIDI_NSM },  // MYANMAR SIGN DOT BELOW
+  { 0x1038, BIDI_L   },  // MYANMAR SIGN VISARGA
+  { 0x1039, BIDI_NSM },  // MYANMAR SIGN VIRAMA
+  { 0x103A, BIDI_NSM },  // MYANMAR SIGN ASAT
+  { 0x103B, BIDI_L   },  // MYANMAR CONSONANT SIGN MEDIAL YA
+  { 0x103C, BIDI_L   },  // MYANMAR CONSONANT SIGN MEDIAL RA
+  { 0x103D, BIDI_NSM },  // MYANMAR CONSONANT SIGN MEDIAL WA
+  { 0x103E, BIDI_NSM },  // MYANMAR CONSONANT SIGN MEDIAL HA
+  { 0x103F, BIDI_L   },  // MYANMAR LETTER GREAT SA
+  { 0x1040, BIDI_L   },  // MYANMAR DIGIT ZERO
+  { 0x1041, BIDI_L   },  // MYANMAR DIGIT ONE
+  { 0x1042, BIDI_L   },  // MYANMAR DIGIT TWO
+  { 0x1043, BIDI_L   },  // MYANMAR DIGIT THREE
+  { 0x1044, BIDI_L   },  // MYANMAR DIGIT FOUR
+  { 0x1045, BIDI_L   },  // MYANMAR DIGIT FIVE
+  { 0x1046, BIDI_L   },  // MYANMAR DIGIT SIX
+  { 0x1047, BIDI_L   },  // MYANMAR DIGIT SEVEN
+  { 0x1048, BIDI_L   },  // MYANMAR DIGIT EIGHT
+  { 0x1049, BIDI_L   },  // MYANMAR DIGIT NINE
+  { 0x104A, BIDI_L   },  // MYANMAR SIGN LITTLE SECTION
+  { 0x104B, BIDI_L   },  // MYANMAR SIGN SECTION
+  { 0x104C, BIDI_L   },  // MYANMAR SYMBOL LOCATIVE
+  { 0x104D, BIDI_L   },  // MYANMAR SYMBOL COMPLETED
+  { 0x104E, BIDI_L   },  // MYANMAR SYMBOL AFOREMENTIONED
+  { 0x104F, BIDI_L   },  // MYANMAR SYMBOL GENITIVE
+  { 0x1050, BIDI_L   },  // MYANMAR LETTER SHA
+  { 0x1051, BIDI_L   },  // MYANMAR LETTER SSA
+  { 0x1052, BIDI_L   },  // MYANMAR LETTER VOCALIC R
+  { 0x1053, BIDI_L   },  // MYANMAR LETTER VOCALIC RR
+  { 0x1054, BIDI_L   },  // MYANMAR LETTER VOCALIC L
+  { 0x1055, BIDI_L   },  // MYANMAR LETTER VOCALIC LL
+  { 0x1056, BIDI_L   },  // MYANMAR VOWEL SIGN VOCALIC R
+  { 0x1057, BIDI_L   },  // MYANMAR VOWEL SIGN VOCALIC RR
+  { 0x1058, BIDI_NSM },  // MYANMAR VOWEL SIGN VOCALIC L
+  { 0x1059, BIDI_NSM },  // MYANMAR VOWEL SIGN VOCALIC LL
+  { 0x105A, BIDI_L   },  // MYANMAR LETTER MON NGA
+  { 0x105B, BIDI_L   },  // MYANMAR LETTER MON JHA
+  { 0x105C, BIDI_L   },  // MYANMAR LETTER MON BBA
+  { 0x105D, BIDI_L   },  // MYANMAR LETTER MON BBE
+  { 0x105E, BIDI_NSM },  // MYANMAR CONSONANT SIGN MON MEDIAL NA
+  { 0x105F, BIDI_NSM },  // MYANMAR CONSONANT SIGN MON MEDIAL MA
+  { 0x1060, BIDI_NSM },  // MYANMAR CONSONANT SIGN MON MEDIAL LA
+  { 0x1061, BIDI_L   },  // MYANMAR LETTER SGAW KAREN SHA
+  { 0x1062, BIDI_L   },  // MYANMAR VOWEL SIGN SGAW KAREN EU
+  { 0x1063, BIDI_L   },  // MYANMAR TONE MARK SGAW KAREN HATHI
+  { 0x1064, BIDI_L   },  // MYANMAR TONE MARK SGAW KAREN KE PHO
+  { 0x1065, BIDI_L   },  // MYANMAR LETTER WESTERN PWO KAREN THA
+  { 0x1066, BIDI_L   },  // MYANMAR LETTER WESTERN PWO KAREN PWA
+  { 0x1067, BIDI_L   },  // MYANMAR VOWEL SIGN WESTERN PWO KAREN EU
+  { 0x1068, BIDI_L   },  // MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+  { 0x1069, BIDI_L   },  // MYANMAR SIGN WESTERN PWO KAREN TONE-1
+  { 0x106A, BIDI_L   },  // MYANMAR SIGN WESTERN PWO KAREN TONE-2
+  { 0x106B, BIDI_L   },  // MYANMAR SIGN WESTERN PWO KAREN TONE-3
+  { 0x106C, BIDI_L   },  // MYANMAR SIGN WESTERN PWO KAREN TONE-4
+  { 0x106D, BIDI_L   },  // MYANMAR SIGN WESTERN PWO KAREN TONE-5
+  { 0x106E, BIDI_L   },  // MYANMAR LETTER EASTERN PWO KAREN NNA
+  { 0x106F, BIDI_L   },  // MYANMAR LETTER EASTERN PWO KAREN YWA
+  { 0x1070, BIDI_L   },  // MYANMAR LETTER EASTERN PWO KAREN GHWA
+  { 0x1071, BIDI_NSM },  // MYANMAR VOWEL SIGN GEBA KAREN I
+  { 0x1072, BIDI_NSM },  // MYANMAR VOWEL SIGN KAYAH OE
+  { 0x1073, BIDI_NSM },  // MYANMAR VOWEL SIGN KAYAH U
+  { 0x1074, BIDI_NSM },  // MYANMAR VOWEL SIGN KAYAH EE
+  { 0x1075, BIDI_L   },  // MYANMAR LETTER SHAN KA
+  { 0x1076, BIDI_L   },  // MYANMAR LETTER SHAN KHA
+  { 0x1077, BIDI_L   },  // MYANMAR LETTER SHAN GA
+  { 0x1078, BIDI_L   },  // MYANMAR LETTER SHAN CA
+  { 0x1079, BIDI_L   },  // MYANMAR LETTER SHAN ZA
+  { 0x107A, BIDI_L   },  // MYANMAR LETTER SHAN NYA
+  { 0x107B, BIDI_L   },  // MYANMAR LETTER SHAN DA
+  { 0x107C, BIDI_L   },  // MYANMAR LETTER SHAN NA
+  { 0x107D, BIDI_L   },  // MYANMAR LETTER SHAN PHA
+  { 0x107E, BIDI_L   },  // MYANMAR LETTER SHAN FA
+  { 0x107F, BIDI_L   },  // MYANMAR LETTER SHAN BA
+  { 0x1080, BIDI_L   },  // MYANMAR LETTER SHAN THA
+  { 0x1081, BIDI_L   },  // MYANMAR LETTER SHAN HA
+  { 0x1082, BIDI_NSM },  // MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+  { 0x1083, BIDI_L   },  // MYANMAR VOWEL SIGN SHAN AA
+  { 0x1084, BIDI_L   },  // MYANMAR VOWEL SIGN SHAN E
+  { 0x1085, BIDI_NSM },  // MYANMAR VOWEL SIGN SHAN E ABOVE
+  { 0x1086, BIDI_NSM },  // MYANMAR VOWEL SIGN SHAN FINAL Y
+  { 0x1087, BIDI_L   },  // MYANMAR SIGN SHAN TONE-2
+  { 0x1088, BIDI_L   },  // MYANMAR SIGN SHAN TONE-3
+  { 0x1089, BIDI_L   },  // MYANMAR SIGN SHAN TONE-5
+  { 0x108A, BIDI_L   },  // MYANMAR SIGN SHAN TONE-6
+  { 0x108B, BIDI_L   },  // MYANMAR SIGN SHAN COUNCIL TONE-2
+  { 0x108C, BIDI_L   },  // MYANMAR SIGN SHAN COUNCIL TONE-3
+  { 0x108D, BIDI_NSM },  // MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+  { 0x108E, BIDI_L   },  // MYANMAR LETTER RUMAI PALAUNG FA
+  { 0x108F, BIDI_L   },  // MYANMAR SIGN RUMAI PALAUNG TONE-5
+  { 0x1090, BIDI_L   },  // MYANMAR SHAN DIGIT ZERO
+  { 0x1091, BIDI_L   },  // MYANMAR SHAN DIGIT ONE
+  { 0x1092, BIDI_L   },  // MYANMAR SHAN DIGIT TWO
+  { 0x1093, BIDI_L   },  // MYANMAR SHAN DIGIT THREE
+  { 0x1094, BIDI_L   },  // MYANMAR SHAN DIGIT FOUR
+  { 0x1095, BIDI_L   },  // MYANMAR SHAN DIGIT FIVE
+  { 0x1096, BIDI_L   },  // MYANMAR SHAN DIGIT SIX
+  { 0x1097, BIDI_L   },  // MYANMAR SHAN DIGIT SEVEN
+  { 0x1098, BIDI_L   },  // MYANMAR SHAN DIGIT EIGHT
+  { 0x1099, BIDI_L   },  // MYANMAR SHAN DIGIT NINE
+  { 0x109A, BIDI_L   },  // MYANMAR SIGN KHAMTI TONE-1
+  { 0x109B, BIDI_L   },  // MYANMAR SIGN KHAMTI TONE-3
+  { 0x109C, BIDI_L   },  // MYANMAR VOWEL SIGN AITON A
+  { 0x109D, BIDI_NSM },  // MYANMAR VOWEL SIGN AITON AI
+  { 0x109E, BIDI_L   },  // MYANMAR SYMBOL SHAN ONE
+  { 0x109F, BIDI_L   },  // MYANMAR SYMBOL SHAN EXCLAMATION
+  { 0x10A0, BIDI_L   },  // GEORGIAN CAPITAL LETTER AN
+  { 0x10A1, BIDI_L   },  // GEORGIAN CAPITAL LETTER BAN
+  { 0x10A2, BIDI_L   },  // GEORGIAN CAPITAL LETTER GAN
+  { 0x10A3, BIDI_L   },  // GEORGIAN CAPITAL LETTER DON
+  { 0x10A4, BIDI_L   },  // GEORGIAN CAPITAL LETTER EN
+  { 0x10A5, BIDI_L   },  // GEORGIAN CAPITAL LETTER VIN
+  { 0x10A6, BIDI_L   },  // GEORGIAN CAPITAL LETTER ZEN
+  { 0x10A7, BIDI_L   },  // GEORGIAN CAPITAL LETTER TAN
+  { 0x10A8, BIDI_L   },  // GEORGIAN CAPITAL LETTER IN
+  { 0x10A9, BIDI_L   },  // GEORGIAN CAPITAL LETTER KAN
+  { 0x10AA, BIDI_L   },  // GEORGIAN CAPITAL LETTER LAS
+  { 0x10AB, BIDI_L   },  // GEORGIAN CAPITAL LETTER MAN
+  { 0x10AC, BIDI_L   },  // GEORGIAN CAPITAL LETTER NAR
+  { 0x10AD, BIDI_L   },  // GEORGIAN CAPITAL LETTER ON
+  { 0x10AE, BIDI_L   },  // GEORGIAN CAPITAL LETTER PAR
+  { 0x10AF, BIDI_L   },  // GEORGIAN CAPITAL LETTER ZHAR
+  { 0x10B0, BIDI_L   },  // GEORGIAN CAPITAL LETTER RAE
+  { 0x10B1, BIDI_L   },  // GEORGIAN CAPITAL LETTER SAN
+  { 0x10B2, BIDI_L   },  // GEORGIAN CAPITAL LETTER TAR
+  { 0x10B3, BIDI_L   },  // GEORGIAN CAPITAL LETTER UN
+  { 0x10B4, BIDI_L   },  // GEORGIAN CAPITAL LETTER PHAR
+  { 0x10B5, BIDI_L   },  // GEORGIAN CAPITAL LETTER KHAR
+  { 0x10B6, BIDI_L   },  // GEORGIAN CAPITAL LETTER GHAN
+  { 0x10B7, BIDI_L   },  // GEORGIAN CAPITAL LETTER QAR
+  { 0x10B8, BIDI_L   },  // GEORGIAN CAPITAL LETTER SHIN
+  { 0x10B9, BIDI_L   },  // GEORGIAN CAPITAL LETTER CHIN
+  { 0x10BA, BIDI_L   },  // GEORGIAN CAPITAL LETTER CAN
+  { 0x10BB, BIDI_L   },  // GEORGIAN CAPITAL LETTER JIL
+  { 0x10BC, BIDI_L   },  // GEORGIAN CAPITAL LETTER CIL
+  { 0x10BD, BIDI_L   },  // GEORGIAN CAPITAL LETTER CHAR
+  { 0x10BE, BIDI_L   },  // GEORGIAN CAPITAL LETTER XAN
+  { 0x10BF, BIDI_L   },  // GEORGIAN CAPITAL LETTER JHAN
+  { 0x10C0, BIDI_L   },  // GEORGIAN CAPITAL LETTER HAE
+  { 0x10C1, BIDI_L   },  // GEORGIAN CAPITAL LETTER HE
+  { 0x10C2, BIDI_L   },  // GEORGIAN CAPITAL LETTER HIE
+  { 0x10C3, BIDI_L   },  // GEORGIAN CAPITAL LETTER WE
+  { 0x10C4, BIDI_L   },  // GEORGIAN CAPITAL LETTER HAR
+  { 0x10C5, BIDI_L   },  // GEORGIAN CAPITAL LETTER HOE
+  { 0x10C7, BIDI_L   },  // GEORGIAN CAPITAL LETTER YN
+  { 0x10CD, BIDI_L   },  // GEORGIAN CAPITAL LETTER AEN
+  { 0x10D0, BIDI_L   },  // GEORGIAN LETTER AN
+  { 0x10D1, BIDI_L   },  // GEORGIAN LETTER BAN
+  { 0x10D2, BIDI_L   },  // GEORGIAN LETTER GAN
+  { 0x10D3, BIDI_L   },  // GEORGIAN LETTER DON
+  { 0x10D4, BIDI_L   },  // GEORGIAN LETTER EN
+  { 0x10D5, BIDI_L   },  // GEORGIAN LETTER VIN
+  { 0x10D6, BIDI_L   },  // GEORGIAN LETTER ZEN
+  { 0x10D7, BIDI_L   },  // GEORGIAN LETTER TAN
+  { 0x10D8, BIDI_L   },  // GEORGIAN LETTER IN
+  { 0x10D9, BIDI_L   },  // GEORGIAN LETTER KAN
+  { 0x10DA, BIDI_L   },  // GEORGIAN LETTER LAS
+  { 0x10DB, BIDI_L   },  // GEORGIAN LETTER MAN
+  { 0x10DC, BIDI_L   },  // GEORGIAN LETTER NAR
+  { 0x10DD, BIDI_L   },  // GEORGIAN LETTER ON
+  { 0x10DE, BIDI_L   },  // GEORGIAN LETTER PAR
+  { 0x10DF, BIDI_L   },  // GEORGIAN LETTER ZHAR
+  { 0x10E0, BIDI_L   },  // GEORGIAN LETTER RAE
+  { 0x10E1, BIDI_L   },  // GEORGIAN LETTER SAN
+  { 0x10E2, BIDI_L   },  // GEORGIAN LETTER TAR
+  { 0x10E3, BIDI_L   },  // GEORGIAN LETTER UN
+  { 0x10E4, BIDI_L   },  // GEORGIAN LETTER PHAR
+  { 0x10E5, BIDI_L   },  // GEORGIAN LETTER KHAR
+  { 0x10E6, BIDI_L   },  // GEORGIAN LETTER GHAN
+  { 0x10E7, BIDI_L   },  // GEORGIAN LETTER QAR
+  { 0x10E8, BIDI_L   },  // GEORGIAN LETTER SHIN
+  { 0x10E9, BIDI_L   },  // GEORGIAN LETTER CHIN
+  { 0x10EA, BIDI_L   },  // GEORGIAN LETTER CAN
+  { 0x10EB, BIDI_L   },  // GEORGIAN LETTER JIL
+  { 0x10EC, BIDI_L   },  // GEORGIAN LETTER CIL
+  { 0x10ED, BIDI_L   },  // GEORGIAN LETTER CHAR
+  { 0x10EE, BIDI_L   },  // GEORGIAN LETTER XAN
+  { 0x10EF, BIDI_L   },  // GEORGIAN LETTER JHAN
+  { 0x10F0, BIDI_L   },  // GEORGIAN LETTER HAE
+  { 0x10F1, BIDI_L   },  // GEORGIAN LETTER HE
+  { 0x10F2, BIDI_L   },  // GEORGIAN LETTER HIE
+  { 0x10F3, BIDI_L   },  // GEORGIAN LETTER WE
+  { 0x10F4, BIDI_L   },  // GEORGIAN LETTER HAR
+  { 0x10F5, BIDI_L   },  // GEORGIAN LETTER HOE
+  { 0x10F6, BIDI_L   },  // GEORGIAN LETTER FI
+  { 0x10F7, BIDI_L   },  // GEORGIAN LETTER YN
+  { 0x10F8, BIDI_L   },  // GEORGIAN LETTER ELIFI
+  { 0x10F9, BIDI_L   },  // GEORGIAN LETTER TURNED GAN
+  { 0x10FA, BIDI_L   },  // GEORGIAN LETTER AIN
+  { 0x10FB, BIDI_L   },  // GEORGIAN PARAGRAPH SEPARATOR
+  { 0x10FC, BIDI_L   },  // MODIFIER LETTER GEORGIAN NAR
+  { 0x10FD, BIDI_L   },  // GEORGIAN LETTER AEN
+  { 0x10FE, BIDI_L   },  // GEORGIAN LETTER HARD SIGN
+  { 0x10FF, BIDI_L   },  // GEORGIAN LETTER LABIAL SIGN
+  { 0x1100, BIDI_L   },  // HANGUL CHOSEONG KIYEOK
+  { 0x1101, BIDI_L   },  // HANGUL CHOSEONG SSANGKIYEOK
+  { 0x1102, BIDI_L   },  // HANGUL CHOSEONG NIEUN
+  { 0x1103, BIDI_L   },  // HANGUL CHOSEONG TIKEUT
+  { 0x1104, BIDI_L   },  // HANGUL CHOSEONG SSANGTIKEUT
+  { 0x1105, BIDI_L   },  // HANGUL CHOSEONG RIEUL
+  { 0x1106, BIDI_L   },  // HANGUL CHOSEONG MIEUM
+  { 0x1107, BIDI_L   },  // HANGUL CHOSEONG PIEUP
+  { 0x1108, BIDI_L   },  // HANGUL CHOSEONG SSANGPIEUP
+  { 0x1109, BIDI_L   },  // HANGUL CHOSEONG SIOS
+  { 0x110A, BIDI_L   },  // HANGUL CHOSEONG SSANGSIOS
+  { 0x110B, BIDI_L   },  // HANGUL CHOSEONG IEUNG
+  { 0x110C, BIDI_L   },  // HANGUL CHOSEONG CIEUC
+  { 0x110D, BIDI_L   },  // HANGUL CHOSEONG SSANGCIEUC
+  { 0x110E, BIDI_L   },  // HANGUL CHOSEONG CHIEUCH
+  { 0x110F, BIDI_L   },  // HANGUL CHOSEONG KHIEUKH
+  { 0x1110, BIDI_L   },  // HANGUL CHOSEONG THIEUTH
+  { 0x1111, BIDI_L   },  // HANGUL CHOSEONG PHIEUPH
+  { 0x1112, BIDI_L   },  // HANGUL CHOSEONG HIEUH
+  { 0x1113, BIDI_L   },  // HANGUL CHOSEONG NIEUN-KIYEOK
+  { 0x1114, BIDI_L   },  // HANGUL CHOSEONG SSANGNIEUN
+  { 0x1115, BIDI_L   },  // HANGUL CHOSEONG NIEUN-TIKEUT
+  { 0x1116, BIDI_L   },  // HANGUL CHOSEONG NIEUN-PIEUP
+  { 0x1117, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-KIYEOK
+  { 0x1118, BIDI_L   },  // HANGUL CHOSEONG RIEUL-NIEUN
+  { 0x1119, BIDI_L   },  // HANGUL CHOSEONG SSANGRIEUL
+  { 0x111A, BIDI_L   },  // HANGUL CHOSEONG RIEUL-HIEUH
+  { 0x111B, BIDI_L   },  // HANGUL CHOSEONG KAPYEOUNRIEUL
+  { 0x111C, BIDI_L   },  // HANGUL CHOSEONG MIEUM-PIEUP
+  { 0x111D, BIDI_L   },  // HANGUL CHOSEONG KAPYEOUNMIEUM
+  { 0x111E, BIDI_L   },  // HANGUL CHOSEONG PIEUP-KIYEOK
+  { 0x111F, BIDI_L   },  // HANGUL CHOSEONG PIEUP-NIEUN
+  { 0x1120, BIDI_L   },  // HANGUL CHOSEONG PIEUP-TIKEUT
+  { 0x1121, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS
+  { 0x1122, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+  { 0x1123, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+  { 0x1124, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+  { 0x1125, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SSANGSIOS
+  { 0x1126, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+  { 0x1127, BIDI_L   },  // HANGUL CHOSEONG PIEUP-CIEUC
+  { 0x1128, BIDI_L   },  // HANGUL CHOSEONG PIEUP-CHIEUCH
+  { 0x1129, BIDI_L   },  // HANGUL CHOSEONG PIEUP-THIEUTH
+  { 0x112A, BIDI_L   },  // HANGUL CHOSEONG PIEUP-PHIEUPH
+  { 0x112B, BIDI_L   },  // HANGUL CHOSEONG KAPYEOUNPIEUP
+  { 0x112C, BIDI_L   },  // HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+  { 0x112D, BIDI_L   },  // HANGUL CHOSEONG SIOS-KIYEOK
+  { 0x112E, BIDI_L   },  // HANGUL CHOSEONG SIOS-NIEUN
+  { 0x112F, BIDI_L   },  // HANGUL CHOSEONG SIOS-TIKEUT
+  { 0x1130, BIDI_L   },  // HANGUL CHOSEONG SIOS-RIEUL
+  { 0x1131, BIDI_L   },  // HANGUL CHOSEONG SIOS-MIEUM
+  { 0x1132, BIDI_L   },  // HANGUL CHOSEONG SIOS-PIEUP
+  { 0x1133, BIDI_L   },  // HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+  { 0x1134, BIDI_L   },  // HANGUL CHOSEONG SIOS-SSANGSIOS
+  { 0x1135, BIDI_L   },  // HANGUL CHOSEONG SIOS-IEUNG
+  { 0x1136, BIDI_L   },  // HANGUL CHOSEONG SIOS-CIEUC
+  { 0x1137, BIDI_L   },  // HANGUL CHOSEONG SIOS-CHIEUCH
+  { 0x1138, BIDI_L   },  // HANGUL CHOSEONG SIOS-KHIEUKH
+  { 0x1139, BIDI_L   },  // HANGUL CHOSEONG SIOS-THIEUTH
+  { 0x113A, BIDI_L   },  // HANGUL CHOSEONG SIOS-PHIEUPH
+  { 0x113B, BIDI_L   },  // HANGUL CHOSEONG SIOS-HIEUH
+  { 0x113C, BIDI_L   },  // HANGUL CHOSEONG CHITUEUMSIOS
+  { 0x113D, BIDI_L   },  // HANGUL CHOSEONG CHITUEUMSSANGSIOS
+  { 0x113E, BIDI_L   },  // HANGUL CHOSEONG CEONGCHIEUMSIOS
+  { 0x113F, BIDI_L   },  // HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+  { 0x1140, BIDI_L   },  // HANGUL CHOSEONG PANSIOS
+  { 0x1141, BIDI_L   },  // HANGUL CHOSEONG IEUNG-KIYEOK
+  { 0x1142, BIDI_L   },  // HANGUL CHOSEONG IEUNG-TIKEUT
+  { 0x1143, BIDI_L   },  // HANGUL CHOSEONG IEUNG-MIEUM
+  { 0x1144, BIDI_L   },  // HANGUL CHOSEONG IEUNG-PIEUP
+  { 0x1145, BIDI_L   },  // HANGUL CHOSEONG IEUNG-SIOS
+  { 0x1146, BIDI_L   },  // HANGUL CHOSEONG IEUNG-PANSIOS
+  { 0x1147, BIDI_L   },  // HANGUL CHOSEONG SSANGIEUNG
+  { 0x1148, BIDI_L   },  // HANGUL CHOSEONG IEUNG-CIEUC
+  { 0x1149, BIDI_L   },  // HANGUL CHOSEONG IEUNG-CHIEUCH
+  { 0x114A, BIDI_L   },  // HANGUL CHOSEONG IEUNG-THIEUTH
+  { 0x114B, BIDI_L   },  // HANGUL CHOSEONG IEUNG-PHIEUPH
+  { 0x114C, BIDI_L   },  // HANGUL CHOSEONG YESIEUNG
+  { 0x114D, BIDI_L   },  // HANGUL CHOSEONG CIEUC-IEUNG
+  { 0x114E, BIDI_L   },  // HANGUL CHOSEONG CHITUEUMCIEUC
+  { 0x114F, BIDI_L   },  // HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+  { 0x1150, BIDI_L   },  // HANGUL CHOSEONG CEONGCHIEUMCIEUC
+  { 0x1151, BIDI_L   },  // HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+  { 0x1152, BIDI_L   },  // HANGUL CHOSEONG CHIEUCH-KHIEUKH
+  { 0x1153, BIDI_L   },  // HANGUL CHOSEONG CHIEUCH-HIEUH
+  { 0x1154, BIDI_L   },  // HANGUL CHOSEONG CHITUEUMCHIEUCH
+  { 0x1155, BIDI_L   },  // HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+  { 0x1156, BIDI_L   },  // HANGUL CHOSEONG PHIEUPH-PIEUP
+  { 0x1157, BIDI_L   },  // HANGUL CHOSEONG KAPYEOUNPHIEUPH
+  { 0x1158, BIDI_L   },  // HANGUL CHOSEONG SSANGHIEUH
+  { 0x1159, BIDI_L   },  // HANGUL CHOSEONG YEORINHIEUH
+  { 0x115A, BIDI_L   },  // HANGUL CHOSEONG KIYEOK-TIKEUT
+  { 0x115B, BIDI_L   },  // HANGUL CHOSEONG NIEUN-SIOS
+  { 0x115C, BIDI_L   },  // HANGUL CHOSEONG NIEUN-CIEUC
+  { 0x115D, BIDI_L   },  // HANGUL CHOSEONG NIEUN-HIEUH
+  { 0x115E, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-RIEUL
+  { 0x115F, BIDI_L   },  // HANGUL CHOSEONG FILLER
+  { 0x1160, BIDI_L   },  // HANGUL JUNGSEONG FILLER
+  { 0x1161, BIDI_L   },  // HANGUL JUNGSEONG A
+  { 0x1162, BIDI_L   },  // HANGUL JUNGSEONG AE
+  { 0x1163, BIDI_L   },  // HANGUL JUNGSEONG YA
+  { 0x1164, BIDI_L   },  // HANGUL JUNGSEONG YAE
+  { 0x1165, BIDI_L   },  // HANGUL JUNGSEONG EO
+  { 0x1166, BIDI_L   },  // HANGUL JUNGSEONG E
+  { 0x1167, BIDI_L   },  // HANGUL JUNGSEONG YEO
+  { 0x1168, BIDI_L   },  // HANGUL JUNGSEONG YE
+  { 0x1169, BIDI_L   },  // HANGUL JUNGSEONG O
+  { 0x116A, BIDI_L   },  // HANGUL JUNGSEONG WA
+  { 0x116B, BIDI_L   },  // HANGUL JUNGSEONG WAE
+  { 0x116C, BIDI_L   },  // HANGUL JUNGSEONG OE
+  { 0x116D, BIDI_L   },  // HANGUL JUNGSEONG YO
+  { 0x116E, BIDI_L   },  // HANGUL JUNGSEONG U
+  { 0x116F, BIDI_L   },  // HANGUL JUNGSEONG WEO
+  { 0x1170, BIDI_L   },  // HANGUL JUNGSEONG WE
+  { 0x1171, BIDI_L   },  // HANGUL JUNGSEONG WI
+  { 0x1172, BIDI_L   },  // HANGUL JUNGSEONG YU
+  { 0x1173, BIDI_L   },  // HANGUL JUNGSEONG EU
+  { 0x1174, BIDI_L   },  // HANGUL JUNGSEONG YI
+  { 0x1175, BIDI_L   },  // HANGUL JUNGSEONG I
+  { 0x1176, BIDI_L   },  // HANGUL JUNGSEONG A-O
+  { 0x1177, BIDI_L   },  // HANGUL JUNGSEONG A-U
+  { 0x1178, BIDI_L   },  // HANGUL JUNGSEONG YA-O
+  { 0x1179, BIDI_L   },  // HANGUL JUNGSEONG YA-YO
+  { 0x117A, BIDI_L   },  // HANGUL JUNGSEONG EO-O
+  { 0x117B, BIDI_L   },  // HANGUL JUNGSEONG EO-U
+  { 0x117C, BIDI_L   },  // HANGUL JUNGSEONG EO-EU
+  { 0x117D, BIDI_L   },  // HANGUL JUNGSEONG YEO-O
+  { 0x117E, BIDI_L   },  // HANGUL JUNGSEONG YEO-U
+  { 0x117F, BIDI_L   },  // HANGUL JUNGSEONG O-EO
+  { 0x1180, BIDI_L   },  // HANGUL JUNGSEONG O-E
+  { 0x1181, BIDI_L   },  // HANGUL JUNGSEONG O-YE
+  { 0x1182, BIDI_L   },  // HANGUL JUNGSEONG O-O
+  { 0x1183, BIDI_L   },  // HANGUL JUNGSEONG O-U
+  { 0x1184, BIDI_L   },  // HANGUL JUNGSEONG YO-YA
+  { 0x1185, BIDI_L   },  // HANGUL JUNGSEONG YO-YAE
+  { 0x1186, BIDI_L   },  // HANGUL JUNGSEONG YO-YEO
+  { 0x1187, BIDI_L   },  // HANGUL JUNGSEONG YO-O
+  { 0x1188, BIDI_L   },  // HANGUL JUNGSEONG YO-I
+  { 0x1189, BIDI_L   },  // HANGUL JUNGSEONG U-A
+  { 0x118A, BIDI_L   },  // HANGUL JUNGSEONG U-AE
+  { 0x118B, BIDI_L   },  // HANGUL JUNGSEONG U-EO-EU
+  { 0x118C, BIDI_L   },  // HANGUL JUNGSEONG U-YE
+  { 0x118D, BIDI_L   },  // HANGUL JUNGSEONG U-U
+  { 0x118E, BIDI_L   },  // HANGUL JUNGSEONG YU-A
+  { 0x118F, BIDI_L   },  // HANGUL JUNGSEONG YU-EO
+  { 0x1190, BIDI_L   },  // HANGUL JUNGSEONG YU-E
+  { 0x1191, BIDI_L   },  // HANGUL JUNGSEONG YU-YEO
+  { 0x1192, BIDI_L   },  // HANGUL JUNGSEONG YU-YE
+  { 0x1193, BIDI_L   },  // HANGUL JUNGSEONG YU-U
+  { 0x1194, BIDI_L   },  // HANGUL JUNGSEONG YU-I
+  { 0x1195, BIDI_L   },  // HANGUL JUNGSEONG EU-U
+  { 0x1196, BIDI_L   },  // HANGUL JUNGSEONG EU-EU
+  { 0x1197, BIDI_L   },  // HANGUL JUNGSEONG YI-U
+  { 0x1198, BIDI_L   },  // HANGUL JUNGSEONG I-A
+  { 0x1199, BIDI_L   },  // HANGUL JUNGSEONG I-YA
+  { 0x119A, BIDI_L   },  // HANGUL JUNGSEONG I-O
+  { 0x119B, BIDI_L   },  // HANGUL JUNGSEONG I-U
+  { 0x119C, BIDI_L   },  // HANGUL JUNGSEONG I-EU
+  { 0x119D, BIDI_L   },  // HANGUL JUNGSEONG I-ARAEA
+  { 0x119E, BIDI_L   },  // HANGUL JUNGSEONG ARAEA
+  { 0x119F, BIDI_L   },  // HANGUL JUNGSEONG ARAEA-EO
+  { 0x11A0, BIDI_L   },  // HANGUL JUNGSEONG ARAEA-U
+  { 0x11A1, BIDI_L   },  // HANGUL JUNGSEONG ARAEA-I
+  { 0x11A2, BIDI_L   },  // HANGUL JUNGSEONG SSANGARAEA
+  { 0x11A3, BIDI_L   },  // HANGUL JUNGSEONG A-EU
+  { 0x11A4, BIDI_L   },  // HANGUL JUNGSEONG YA-U
+  { 0x11A5, BIDI_L   },  // HANGUL JUNGSEONG YEO-YA
+  { 0x11A6, BIDI_L   },  // HANGUL JUNGSEONG O-YA
+  { 0x11A7, BIDI_L   },  // HANGUL JUNGSEONG O-YAE
+  { 0x11A8, BIDI_L   },  // HANGUL JONGSEONG KIYEOK
+  { 0x11A9, BIDI_L   },  // HANGUL JONGSEONG SSANGKIYEOK
+  { 0x11AA, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-SIOS
+  { 0x11AB, BIDI_L   },  // HANGUL JONGSEONG NIEUN
+  { 0x11AC, BIDI_L   },  // HANGUL JONGSEONG NIEUN-CIEUC
+  { 0x11AD, BIDI_L   },  // HANGUL JONGSEONG NIEUN-HIEUH
+  { 0x11AE, BIDI_L   },  // HANGUL JONGSEONG TIKEUT
+  { 0x11AF, BIDI_L   },  // HANGUL JONGSEONG RIEUL
+  { 0x11B0, BIDI_L   },  // HANGUL JONGSEONG RIEUL-KIYEOK
+  { 0x11B1, BIDI_L   },  // HANGUL JONGSEONG RIEUL-MIEUM
+  { 0x11B2, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PIEUP
+  { 0x11B3, BIDI_L   },  // HANGUL JONGSEONG RIEUL-SIOS
+  { 0x11B4, BIDI_L   },  // HANGUL JONGSEONG RIEUL-THIEUTH
+  { 0x11B5, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PHIEUPH
+  { 0x11B6, BIDI_L   },  // HANGUL JONGSEONG RIEUL-HIEUH
+  { 0x11B7, BIDI_L   },  // HANGUL JONGSEONG MIEUM
+  { 0x11B8, BIDI_L   },  // HANGUL JONGSEONG PIEUP
+  { 0x11B9, BIDI_L   },  // HANGUL JONGSEONG PIEUP-SIOS
+  { 0x11BA, BIDI_L   },  // HANGUL JONGSEONG SIOS
+  { 0x11BB, BIDI_L   },  // HANGUL JONGSEONG SSANGSIOS
+  { 0x11BC, BIDI_L   },  // HANGUL JONGSEONG IEUNG
+  { 0x11BD, BIDI_L   },  // HANGUL JONGSEONG CIEUC
+  { 0x11BE, BIDI_L   },  // HANGUL JONGSEONG CHIEUCH
+  { 0x11BF, BIDI_L   },  // HANGUL JONGSEONG KHIEUKH
+  { 0x11C0, BIDI_L   },  // HANGUL JONGSEONG THIEUTH
+  { 0x11C1, BIDI_L   },  // HANGUL JONGSEONG PHIEUPH
+  { 0x11C2, BIDI_L   },  // HANGUL JONGSEONG HIEUH
+  { 0x11C3, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-RIEUL
+  { 0x11C4, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+  { 0x11C5, BIDI_L   },  // HANGUL JONGSEONG NIEUN-KIYEOK
+  { 0x11C6, BIDI_L   },  // HANGUL JONGSEONG NIEUN-TIKEUT
+  { 0x11C7, BIDI_L   },  // HANGUL JONGSEONG NIEUN-SIOS
+  { 0x11C8, BIDI_L   },  // HANGUL JONGSEONG NIEUN-PANSIOS
+  { 0x11C9, BIDI_L   },  // HANGUL JONGSEONG NIEUN-THIEUTH
+  { 0x11CA, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-KIYEOK
+  { 0x11CB, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-RIEUL
+  { 0x11CC, BIDI_L   },  // HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+  { 0x11CD, BIDI_L   },  // HANGUL JONGSEONG RIEUL-NIEUN
+  { 0x11CE, BIDI_L   },  // HANGUL JONGSEONG RIEUL-TIKEUT
+  { 0x11CF, BIDI_L   },  // HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+  { 0x11D0, BIDI_L   },  // HANGUL JONGSEONG SSANGRIEUL
+  { 0x11D1, BIDI_L   },  // HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+  { 0x11D2, BIDI_L   },  // HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+  { 0x11D3, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+  { 0x11D4, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+  { 0x11D5, BIDI_L   },  // HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+  { 0x11D6, BIDI_L   },  // HANGUL JONGSEONG RIEUL-SSANGSIOS
+  { 0x11D7, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PANSIOS
+  { 0x11D8, BIDI_L   },  // HANGUL JONGSEONG RIEUL-KHIEUKH
+  { 0x11D9, BIDI_L   },  // HANGUL JONGSEONG RIEUL-YEORINHIEUH
+  { 0x11DA, BIDI_L   },  // HANGUL JONGSEONG MIEUM-KIYEOK
+  { 0x11DB, BIDI_L   },  // HANGUL JONGSEONG MIEUM-RIEUL
+  { 0x11DC, BIDI_L   },  // HANGUL JONGSEONG MIEUM-PIEUP
+  { 0x11DD, BIDI_L   },  // HANGUL JONGSEONG MIEUM-SIOS
+  { 0x11DE, BIDI_L   },  // HANGUL JONGSEONG MIEUM-SSANGSIOS
+  { 0x11DF, BIDI_L   },  // HANGUL JONGSEONG MIEUM-PANSIOS
+  { 0x11E0, BIDI_L   },  // HANGUL JONGSEONG MIEUM-CHIEUCH
+  { 0x11E1, BIDI_L   },  // HANGUL JONGSEONG MIEUM-HIEUH
+  { 0x11E2, BIDI_L   },  // HANGUL JONGSEONG KAPYEOUNMIEUM
+  { 0x11E3, BIDI_L   },  // HANGUL JONGSEONG PIEUP-RIEUL
+  { 0x11E4, BIDI_L   },  // HANGUL JONGSEONG PIEUP-PHIEUPH
+  { 0x11E5, BIDI_L   },  // HANGUL JONGSEONG PIEUP-HIEUH
+  { 0x11E6, BIDI_L   },  // HANGUL JONGSEONG KAPYEOUNPIEUP
+  { 0x11E7, BIDI_L   },  // HANGUL JONGSEONG SIOS-KIYEOK
+  { 0x11E8, BIDI_L   },  // HANGUL JONGSEONG SIOS-TIKEUT
+  { 0x11E9, BIDI_L   },  // HANGUL JONGSEONG SIOS-RIEUL
+  { 0x11EA, BIDI_L   },  // HANGUL JONGSEONG SIOS-PIEUP
+  { 0x11EB, BIDI_L   },  // HANGUL JONGSEONG PANSIOS
+  { 0x11EC, BIDI_L   },  // HANGUL JONGSEONG IEUNG-KIYEOK
+  { 0x11ED, BIDI_L   },  // HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+  { 0x11EE, BIDI_L   },  // HANGUL JONGSEONG SSANGIEUNG
+  { 0x11EF, BIDI_L   },  // HANGUL JONGSEONG IEUNG-KHIEUKH
+  { 0x11F0, BIDI_L   },  // HANGUL JONGSEONG YESIEUNG
+  { 0x11F1, BIDI_L   },  // HANGUL JONGSEONG YESIEUNG-SIOS
+  { 0x11F2, BIDI_L   },  // HANGUL JONGSEONG YESIEUNG-PANSIOS
+  { 0x11F3, BIDI_L   },  // HANGUL JONGSEONG PHIEUPH-PIEUP
+  { 0x11F4, BIDI_L   },  // HANGUL JONGSEONG KAPYEOUNPHIEUPH
+  { 0x11F5, BIDI_L   },  // HANGUL JONGSEONG HIEUH-NIEUN
+  { 0x11F6, BIDI_L   },  // HANGUL JONGSEONG HIEUH-RIEUL
+  { 0x11F7, BIDI_L   },  // HANGUL JONGSEONG HIEUH-MIEUM
+  { 0x11F8, BIDI_L   },  // HANGUL JONGSEONG HIEUH-PIEUP
+  { 0x11F9, BIDI_L   },  // HANGUL JONGSEONG YEORINHIEUH
+  { 0x11FA, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-NIEUN
+  { 0x11FB, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-PIEUP
+  { 0x11FC, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-CHIEUCH
+  { 0x11FD, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-KHIEUKH
+  { 0x11FE, BIDI_L   },  // HANGUL JONGSEONG KIYEOK-HIEUH
+  { 0x11FF, BIDI_L   },  // HANGUL JONGSEONG SSANGNIEUN
+  { 0x1200, BIDI_L   },  // ETHIOPIC SYLLABLE HA
+  { 0x1201, BIDI_L   },  // ETHIOPIC SYLLABLE HU
+  { 0x1202, BIDI_L   },  // ETHIOPIC SYLLABLE HI
+  { 0x1203, BIDI_L   },  // ETHIOPIC SYLLABLE HAA
+  { 0x1204, BIDI_L   },  // ETHIOPIC SYLLABLE HEE
+  { 0x1205, BIDI_L   },  // ETHIOPIC SYLLABLE HE
+  { 0x1206, BIDI_L   },  // ETHIOPIC SYLLABLE HO
+  { 0x1207, BIDI_L   },  // ETHIOPIC SYLLABLE HOA
+  { 0x1208, BIDI_L   },  // ETHIOPIC SYLLABLE LA
+  { 0x1209, BIDI_L   },  // ETHIOPIC SYLLABLE LU
+  { 0x120A, BIDI_L   },  // ETHIOPIC SYLLABLE LI
+  { 0x120B, BIDI_L   },  // ETHIOPIC SYLLABLE LAA
+  { 0x120C, BIDI_L   },  // ETHIOPIC SYLLABLE LEE
+  { 0x120D, BIDI_L   },  // ETHIOPIC SYLLABLE LE
+  { 0x120E, BIDI_L   },  // ETHIOPIC SYLLABLE LO
+  { 0x120F, BIDI_L   },  // ETHIOPIC SYLLABLE LWA
+  { 0x1210, BIDI_L   },  // ETHIOPIC SYLLABLE HHA
+  { 0x1211, BIDI_L   },  // ETHIOPIC SYLLABLE HHU
+  { 0x1212, BIDI_L   },  // ETHIOPIC SYLLABLE HHI
+  { 0x1213, BIDI_L   },  // ETHIOPIC SYLLABLE HHAA
+  { 0x1214, BIDI_L   },  // ETHIOPIC SYLLABLE HHEE
+  { 0x1215, BIDI_L   },  // ETHIOPIC SYLLABLE HHE
+  { 0x1216, BIDI_L   },  // ETHIOPIC SYLLABLE HHO
+  { 0x1217, BIDI_L   },  // ETHIOPIC SYLLABLE HHWA
+  { 0x1218, BIDI_L   },  // ETHIOPIC SYLLABLE MA
+  { 0x1219, BIDI_L   },  // ETHIOPIC SYLLABLE MU
+  { 0x121A, BIDI_L   },  // ETHIOPIC SYLLABLE MI
+  { 0x121B, BIDI_L   },  // ETHIOPIC SYLLABLE MAA
+  { 0x121C, BIDI_L   },  // ETHIOPIC SYLLABLE MEE
+  { 0x121D, BIDI_L   },  // ETHIOPIC SYLLABLE ME
+  { 0x121E, BIDI_L   },  // ETHIOPIC SYLLABLE MO
+  { 0x121F, BIDI_L   },  // ETHIOPIC SYLLABLE MWA
+  { 0x1220, BIDI_L   },  // ETHIOPIC SYLLABLE SZA
+  { 0x1221, BIDI_L   },  // ETHIOPIC SYLLABLE SZU
+  { 0x1222, BIDI_L   },  // ETHIOPIC SYLLABLE SZI
+  { 0x1223, BIDI_L   },  // ETHIOPIC SYLLABLE SZAA
+  { 0x1224, BIDI_L   },  // ETHIOPIC SYLLABLE SZEE
+  { 0x1225, BIDI_L   },  // ETHIOPIC SYLLABLE SZE
+  { 0x1226, BIDI_L   },  // ETHIOPIC SYLLABLE SZO
+  { 0x1227, BIDI_L   },  // ETHIOPIC SYLLABLE SZWA
+  { 0x1228, BIDI_L   },  // ETHIOPIC SYLLABLE RA
+  { 0x1229, BIDI_L   },  // ETHIOPIC SYLLABLE RU
+  { 0x122A, BIDI_L   },  // ETHIOPIC SYLLABLE RI
+  { 0x122B, BIDI_L   },  // ETHIOPIC SYLLABLE RAA
+  { 0x122C, BIDI_L   },  // ETHIOPIC SYLLABLE REE
+  { 0x122D, BIDI_L   },  // ETHIOPIC SYLLABLE RE
+  { 0x122E, BIDI_L   },  // ETHIOPIC SYLLABLE RO
+  { 0x122F, BIDI_L   },  // ETHIOPIC SYLLABLE RWA
+  { 0x1230, BIDI_L   },  // ETHIOPIC SYLLABLE SA
+  { 0x1231, BIDI_L   },  // ETHIOPIC SYLLABLE SU
+  { 0x1232, BIDI_L   },  // ETHIOPIC SYLLABLE SI
+  { 0x1233, BIDI_L   },  // ETHIOPIC SYLLABLE SAA
+  { 0x1234, BIDI_L   },  // ETHIOPIC SYLLABLE SEE
+  { 0x1235, BIDI_L   },  // ETHIOPIC SYLLABLE SE
+  { 0x1236, BIDI_L   },  // ETHIOPIC SYLLABLE SO
+  { 0x1237, BIDI_L   },  // ETHIOPIC SYLLABLE SWA
+  { 0x1238, BIDI_L   },  // ETHIOPIC SYLLABLE SHA
+  { 0x1239, BIDI_L   },  // ETHIOPIC SYLLABLE SHU
+  { 0x123A, BIDI_L   },  // ETHIOPIC SYLLABLE SHI
+  { 0x123B, BIDI_L   },  // ETHIOPIC SYLLABLE SHAA
+  { 0x123C, BIDI_L   },  // ETHIOPIC SYLLABLE SHEE
+  { 0x123D, BIDI_L   },  // ETHIOPIC SYLLABLE SHE
+  { 0x123E, BIDI_L   },  // ETHIOPIC SYLLABLE SHO
+  { 0x123F, BIDI_L   },  // ETHIOPIC SYLLABLE SHWA
+  { 0x1240, BIDI_L   },  // ETHIOPIC SYLLABLE QA
+  { 0x1241, BIDI_L   },  // ETHIOPIC SYLLABLE QU
+  { 0x1242, BIDI_L   },  // ETHIOPIC SYLLABLE QI
+  { 0x1243, BIDI_L   },  // ETHIOPIC SYLLABLE QAA
+  { 0x1244, BIDI_L   },  // ETHIOPIC SYLLABLE QEE
+  { 0x1245, BIDI_L   },  // ETHIOPIC SYLLABLE QE
+  { 0x1246, BIDI_L   },  // ETHIOPIC SYLLABLE QO
+  { 0x1247, BIDI_L   },  // ETHIOPIC SYLLABLE QOA
+  { 0x1248, BIDI_L   },  // ETHIOPIC SYLLABLE QWA
+  { 0x124A, BIDI_L   },  // ETHIOPIC SYLLABLE QWI
+  { 0x124B, BIDI_L   },  // ETHIOPIC SYLLABLE QWAA
+  { 0x124C, BIDI_L   },  // ETHIOPIC SYLLABLE QWEE
+  { 0x124D, BIDI_L   },  // ETHIOPIC SYLLABLE QWE
+  { 0x1250, BIDI_L   },  // ETHIOPIC SYLLABLE QHA
+  { 0x1251, BIDI_L   },  // ETHIOPIC SYLLABLE QHU
+  { 0x1252, BIDI_L   },  // ETHIOPIC SYLLABLE QHI
+  { 0x1253, BIDI_L   },  // ETHIOPIC SYLLABLE QHAA
+  { 0x1254, BIDI_L   },  // ETHIOPIC SYLLABLE QHEE
+  { 0x1255, BIDI_L   },  // ETHIOPIC SYLLABLE QHE
+  { 0x1256, BIDI_L   },  // ETHIOPIC SYLLABLE QHO
+  { 0x1258, BIDI_L   },  // ETHIOPIC SYLLABLE QHWA
+  { 0x125A, BIDI_L   },  // ETHIOPIC SYLLABLE QHWI
+  { 0x125B, BIDI_L   },  // ETHIOPIC SYLLABLE QHWAA
+  { 0x125C, BIDI_L   },  // ETHIOPIC SYLLABLE QHWEE
+  { 0x125D, BIDI_L   },  // ETHIOPIC SYLLABLE QHWE
+  { 0x1260, BIDI_L   },  // ETHIOPIC SYLLABLE BA
+  { 0x1261, BIDI_L   },  // ETHIOPIC SYLLABLE BU
+  { 0x1262, BIDI_L   },  // ETHIOPIC SYLLABLE BI
+  { 0x1263, BIDI_L   },  // ETHIOPIC SYLLABLE BAA
+  { 0x1264, BIDI_L   },  // ETHIOPIC SYLLABLE BEE
+  { 0x1265, BIDI_L   },  // ETHIOPIC SYLLABLE BE
+  { 0x1266, BIDI_L   },  // ETHIOPIC SYLLABLE BO
+  { 0x1267, BIDI_L   },  // ETHIOPIC SYLLABLE BWA
+  { 0x1268, BIDI_L   },  // ETHIOPIC SYLLABLE VA
+  { 0x1269, BIDI_L   },  // ETHIOPIC SYLLABLE VU
+  { 0x126A, BIDI_L   },  // ETHIOPIC SYLLABLE VI
+  { 0x126B, BIDI_L   },  // ETHIOPIC SYLLABLE VAA
+  { 0x126C, BIDI_L   },  // ETHIOPIC SYLLABLE VEE
+  { 0x126D, BIDI_L   },  // ETHIOPIC SYLLABLE VE
+  { 0x126E, BIDI_L   },  // ETHIOPIC SYLLABLE VO
+  { 0x126F, BIDI_L   },  // ETHIOPIC SYLLABLE VWA
+  { 0x1270, BIDI_L   },  // ETHIOPIC SYLLABLE TA
+  { 0x1271, BIDI_L   },  // ETHIOPIC SYLLABLE TU
+  { 0x1272, BIDI_L   },  // ETHIOPIC SYLLABLE TI
+  { 0x1273, BIDI_L   },  // ETHIOPIC SYLLABLE TAA
+  { 0x1274, BIDI_L   },  // ETHIOPIC SYLLABLE TEE
+  { 0x1275, BIDI_L   },  // ETHIOPIC SYLLABLE TE
+  { 0x1276, BIDI_L   },  // ETHIOPIC SYLLABLE TO
+  { 0x1277, BIDI_L   },  // ETHIOPIC SYLLABLE TWA
+  { 0x1278, BIDI_L   },  // ETHIOPIC SYLLABLE CA
+  { 0x1279, BIDI_L   },  // ETHIOPIC SYLLABLE CU
+  { 0x127A, BIDI_L   },  // ETHIOPIC SYLLABLE CI
+  { 0x127B, BIDI_L   },  // ETHIOPIC SYLLABLE CAA
+  { 0x127C, BIDI_L   },  // ETHIOPIC SYLLABLE CEE
+  { 0x127D, BIDI_L   },  // ETHIOPIC SYLLABLE CE
+  { 0x127E, BIDI_L   },  // ETHIOPIC SYLLABLE CO
+  { 0x127F, BIDI_L   },  // ETHIOPIC SYLLABLE CWA
+  { 0x1280, BIDI_L   },  // ETHIOPIC SYLLABLE XA
+  { 0x1281, BIDI_L   },  // ETHIOPIC SYLLABLE XU
+  { 0x1282, BIDI_L   },  // ETHIOPIC SYLLABLE XI
+  { 0x1283, BIDI_L   },  // ETHIOPIC SYLLABLE XAA
+  { 0x1284, BIDI_L   },  // ETHIOPIC SYLLABLE XEE
+  { 0x1285, BIDI_L   },  // ETHIOPIC SYLLABLE XE
+  { 0x1286, BIDI_L   },  // ETHIOPIC SYLLABLE XO
+  { 0x1287, BIDI_L   },  // ETHIOPIC SYLLABLE XOA
+  { 0x1288, BIDI_L   },  // ETHIOPIC SYLLABLE XWA
+  { 0x128A, BIDI_L   },  // ETHIOPIC SYLLABLE XWI
+  { 0x128B, BIDI_L   },  // ETHIOPIC SYLLABLE XWAA
+  { 0x128C, BIDI_L   },  // ETHIOPIC SYLLABLE XWEE
+  { 0x128D, BIDI_L   },  // ETHIOPIC SYLLABLE XWE
+  { 0x1290, BIDI_L   },  // ETHIOPIC SYLLABLE NA
+  { 0x1291, BIDI_L   },  // ETHIOPIC SYLLABLE NU
+  { 0x1292, BIDI_L   },  // ETHIOPIC SYLLABLE NI
+  { 0x1293, BIDI_L   },  // ETHIOPIC SYLLABLE NAA
+  { 0x1294, BIDI_L   },  // ETHIOPIC SYLLABLE NEE
+  { 0x1295, BIDI_L   },  // ETHIOPIC SYLLABLE NE
+  { 0x1296, BIDI_L   },  // ETHIOPIC SYLLABLE NO
+  { 0x1297, BIDI_L   },  // ETHIOPIC SYLLABLE NWA
+  { 0x1298, BIDI_L   },  // ETHIOPIC SYLLABLE NYA
+  { 0x1299, BIDI_L   },  // ETHIOPIC SYLLABLE NYU
+  { 0x129A, BIDI_L   },  // ETHIOPIC SYLLABLE NYI
+  { 0x129B, BIDI_L   },  // ETHIOPIC SYLLABLE NYAA
+  { 0x129C, BIDI_L   },  // ETHIOPIC SYLLABLE NYEE
+  { 0x129D, BIDI_L   },  // ETHIOPIC SYLLABLE NYE
+  { 0x129E, BIDI_L   },  // ETHIOPIC SYLLABLE NYO
+  { 0x129F, BIDI_L   },  // ETHIOPIC SYLLABLE NYWA
+  { 0x12A0, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL A
+  { 0x12A1, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL U
+  { 0x12A2, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL I
+  { 0x12A3, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL AA
+  { 0x12A4, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL EE
+  { 0x12A5, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL E
+  { 0x12A6, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL O
+  { 0x12A7, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL WA
+  { 0x12A8, BIDI_L   },  // ETHIOPIC SYLLABLE KA
+  { 0x12A9, BIDI_L   },  // ETHIOPIC SYLLABLE KU
+  { 0x12AA, BIDI_L   },  // ETHIOPIC SYLLABLE KI
+  { 0x12AB, BIDI_L   },  // ETHIOPIC SYLLABLE KAA
+  { 0x12AC, BIDI_L   },  // ETHIOPIC SYLLABLE KEE
+  { 0x12AD, BIDI_L   },  // ETHIOPIC SYLLABLE KE
+  { 0x12AE, BIDI_L   },  // ETHIOPIC SYLLABLE KO
+  { 0x12AF, BIDI_L   },  // ETHIOPIC SYLLABLE KOA
+  { 0x12B0, BIDI_L   },  // ETHIOPIC SYLLABLE KWA
+  { 0x12B2, BIDI_L   },  // ETHIOPIC SYLLABLE KWI
+  { 0x12B3, BIDI_L   },  // ETHIOPIC SYLLABLE KWAA
+  { 0x12B4, BIDI_L   },  // ETHIOPIC SYLLABLE KWEE
+  { 0x12B5, BIDI_L   },  // ETHIOPIC SYLLABLE KWE
+  { 0x12B8, BIDI_L   },  // ETHIOPIC SYLLABLE KXA
+  { 0x12B9, BIDI_L   },  // ETHIOPIC SYLLABLE KXU
+  { 0x12BA, BIDI_L   },  // ETHIOPIC SYLLABLE KXI
+  { 0x12BB, BIDI_L   },  // ETHIOPIC SYLLABLE KXAA
+  { 0x12BC, BIDI_L   },  // ETHIOPIC SYLLABLE KXEE
+  { 0x12BD, BIDI_L   },  // ETHIOPIC SYLLABLE KXE
+  { 0x12BE, BIDI_L   },  // ETHIOPIC SYLLABLE KXO
+  { 0x12C0, BIDI_L   },  // ETHIOPIC SYLLABLE KXWA
+  { 0x12C2, BIDI_L   },  // ETHIOPIC SYLLABLE KXWI
+  { 0x12C3, BIDI_L   },  // ETHIOPIC SYLLABLE KXWAA
+  { 0x12C4, BIDI_L   },  // ETHIOPIC SYLLABLE KXWEE
+  { 0x12C5, BIDI_L   },  // ETHIOPIC SYLLABLE KXWE
+  { 0x12C8, BIDI_L   },  // ETHIOPIC SYLLABLE WA
+  { 0x12C9, BIDI_L   },  // ETHIOPIC SYLLABLE WU
+  { 0x12CA, BIDI_L   },  // ETHIOPIC SYLLABLE WI
+  { 0x12CB, BIDI_L   },  // ETHIOPIC SYLLABLE WAA
+  { 0x12CC, BIDI_L   },  // ETHIOPIC SYLLABLE WEE
+  { 0x12CD, BIDI_L   },  // ETHIOPIC SYLLABLE WE
+  { 0x12CE, BIDI_L   },  // ETHIOPIC SYLLABLE WO
+  { 0x12CF, BIDI_L   },  // ETHIOPIC SYLLABLE WOA
+  { 0x12D0, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL A
+  { 0x12D1, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL U
+  { 0x12D2, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL I
+  { 0x12D3, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL AA
+  { 0x12D4, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL EE
+  { 0x12D5, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL E
+  { 0x12D6, BIDI_L   },  // ETHIOPIC SYLLABLE PHARYNGEAL O
+  { 0x12D8, BIDI_L   },  // ETHIOPIC SYLLABLE ZA
+  { 0x12D9, BIDI_L   },  // ETHIOPIC SYLLABLE ZU
+  { 0x12DA, BIDI_L   },  // ETHIOPIC SYLLABLE ZI
+  { 0x12DB, BIDI_L   },  // ETHIOPIC SYLLABLE ZAA
+  { 0x12DC, BIDI_L   },  // ETHIOPIC SYLLABLE ZEE
+  { 0x12DD, BIDI_L   },  // ETHIOPIC SYLLABLE ZE
+  { 0x12DE, BIDI_L   },  // ETHIOPIC SYLLABLE ZO
+  { 0x12DF, BIDI_L   },  // ETHIOPIC SYLLABLE ZWA
+  { 0x12E0, BIDI_L   },  // ETHIOPIC SYLLABLE ZHA
+  { 0x12E1, BIDI_L   },  // ETHIOPIC SYLLABLE ZHU
+  { 0x12E2, BIDI_L   },  // ETHIOPIC SYLLABLE ZHI
+  { 0x12E3, BIDI_L   },  // ETHIOPIC SYLLABLE ZHAA
+  { 0x12E4, BIDI_L   },  // ETHIOPIC SYLLABLE ZHEE
+  { 0x12E5, BIDI_L   },  // ETHIOPIC SYLLABLE ZHE
+  { 0x12E6, BIDI_L   },  // ETHIOPIC SYLLABLE ZHO
+  { 0x12E7, BIDI_L   },  // ETHIOPIC SYLLABLE ZHWA
+  { 0x12E8, BIDI_L   },  // ETHIOPIC SYLLABLE YA
+  { 0x12E9, BIDI_L   },  // ETHIOPIC SYLLABLE YU
+  { 0x12EA, BIDI_L   },  // ETHIOPIC SYLLABLE YI
+  { 0x12EB, BIDI_L   },  // ETHIOPIC SYLLABLE YAA
+  { 0x12EC, BIDI_L   },  // ETHIOPIC SYLLABLE YEE
+  { 0x12ED, BIDI_L   },  // ETHIOPIC SYLLABLE YE
+  { 0x12EE, BIDI_L   },  // ETHIOPIC SYLLABLE YO
+  { 0x12EF, BIDI_L   },  // ETHIOPIC SYLLABLE YOA
+  { 0x12F0, BIDI_L   },  // ETHIOPIC SYLLABLE DA
+  { 0x12F1, BIDI_L   },  // ETHIOPIC SYLLABLE DU
+  { 0x12F2, BIDI_L   },  // ETHIOPIC SYLLABLE DI
+  { 0x12F3, BIDI_L   },  // ETHIOPIC SYLLABLE DAA
+  { 0x12F4, BIDI_L   },  // ETHIOPIC SYLLABLE DEE
+  { 0x12F5, BIDI_L   },  // ETHIOPIC SYLLABLE DE
+  { 0x12F6, BIDI_L   },  // ETHIOPIC SYLLABLE DO
+  { 0x12F7, BIDI_L   },  // ETHIOPIC SYLLABLE DWA
+  { 0x12F8, BIDI_L   },  // ETHIOPIC SYLLABLE DDA
+  { 0x12F9, BIDI_L   },  // ETHIOPIC SYLLABLE DDU
+  { 0x12FA, BIDI_L   },  // ETHIOPIC SYLLABLE DDI
+  { 0x12FB, BIDI_L   },  // ETHIOPIC SYLLABLE DDAA
+  { 0x12FC, BIDI_L   },  // ETHIOPIC SYLLABLE DDEE
+  { 0x12FD, BIDI_L   },  // ETHIOPIC SYLLABLE DDE
+  { 0x12FE, BIDI_L   },  // ETHIOPIC SYLLABLE DDO
+  { 0x12FF, BIDI_L   },  // ETHIOPIC SYLLABLE DDWA
+  { 0x1300, BIDI_L   },  // ETHIOPIC SYLLABLE JA
+  { 0x1301, BIDI_L   },  // ETHIOPIC SYLLABLE JU
+  { 0x1302, BIDI_L   },  // ETHIOPIC SYLLABLE JI
+  { 0x1303, BIDI_L   },  // ETHIOPIC SYLLABLE JAA
+  { 0x1304, BIDI_L   },  // ETHIOPIC SYLLABLE JEE
+  { 0x1305, BIDI_L   },  // ETHIOPIC SYLLABLE JE
+  { 0x1306, BIDI_L   },  // ETHIOPIC SYLLABLE JO
+  { 0x1307, BIDI_L   },  // ETHIOPIC SYLLABLE JWA
+  { 0x1308, BIDI_L   },  // ETHIOPIC SYLLABLE GA
+  { 0x1309, BIDI_L   },  // ETHIOPIC SYLLABLE GU
+  { 0x130A, BIDI_L   },  // ETHIOPIC SYLLABLE GI
+  { 0x130B, BIDI_L   },  // ETHIOPIC SYLLABLE GAA
+  { 0x130C, BIDI_L   },  // ETHIOPIC SYLLABLE GEE
+  { 0x130D, BIDI_L   },  // ETHIOPIC SYLLABLE GE
+  { 0x130E, BIDI_L   },  // ETHIOPIC SYLLABLE GO
+  { 0x130F, BIDI_L   },  // ETHIOPIC SYLLABLE GOA
+  { 0x1310, BIDI_L   },  // ETHIOPIC SYLLABLE GWA
+  { 0x1312, BIDI_L   },  // ETHIOPIC SYLLABLE GWI
+  { 0x1313, BIDI_L   },  // ETHIOPIC SYLLABLE GWAA
+  { 0x1314, BIDI_L   },  // ETHIOPIC SYLLABLE GWEE
+  { 0x1315, BIDI_L   },  // ETHIOPIC SYLLABLE GWE
+  { 0x1318, BIDI_L   },  // ETHIOPIC SYLLABLE GGA
+  { 0x1319, BIDI_L   },  // ETHIOPIC SYLLABLE GGU
+  { 0x131A, BIDI_L   },  // ETHIOPIC SYLLABLE GGI
+  { 0x131B, BIDI_L   },  // ETHIOPIC SYLLABLE GGAA
+  { 0x131C, BIDI_L   },  // ETHIOPIC SYLLABLE GGEE
+  { 0x131D, BIDI_L   },  // ETHIOPIC SYLLABLE GGE
+  { 0x131E, BIDI_L   },  // ETHIOPIC SYLLABLE GGO
+  { 0x131F, BIDI_L   },  // ETHIOPIC SYLLABLE GGWAA
+  { 0x1320, BIDI_L   },  // ETHIOPIC SYLLABLE THA
+  { 0x1321, BIDI_L   },  // ETHIOPIC SYLLABLE THU
+  { 0x1322, BIDI_L   },  // ETHIOPIC SYLLABLE THI
+  { 0x1323, BIDI_L   },  // ETHIOPIC SYLLABLE THAA
+  { 0x1324, BIDI_L   },  // ETHIOPIC SYLLABLE THEE
+  { 0x1325, BIDI_L   },  // ETHIOPIC SYLLABLE THE
+  { 0x1326, BIDI_L   },  // ETHIOPIC SYLLABLE THO
+  { 0x1327, BIDI_L   },  // ETHIOPIC SYLLABLE THWA
+  { 0x1328, BIDI_L   },  // ETHIOPIC SYLLABLE CHA
+  { 0x1329, BIDI_L   },  // ETHIOPIC SYLLABLE CHU
+  { 0x132A, BIDI_L   },  // ETHIOPIC SYLLABLE CHI
+  { 0x132B, BIDI_L   },  // ETHIOPIC SYLLABLE CHAA
+  { 0x132C, BIDI_L   },  // ETHIOPIC SYLLABLE CHEE
+  { 0x132D, BIDI_L   },  // ETHIOPIC SYLLABLE CHE
+  { 0x132E, BIDI_L   },  // ETHIOPIC SYLLABLE CHO
+  { 0x132F, BIDI_L   },  // ETHIOPIC SYLLABLE CHWA
+  { 0x1330, BIDI_L   },  // ETHIOPIC SYLLABLE PHA
+  { 0x1331, BIDI_L   },  // ETHIOPIC SYLLABLE PHU
+  { 0x1332, BIDI_L   },  // ETHIOPIC SYLLABLE PHI
+  { 0x1333, BIDI_L   },  // ETHIOPIC SYLLABLE PHAA
+  { 0x1334, BIDI_L   },  // ETHIOPIC SYLLABLE PHEE
+  { 0x1335, BIDI_L   },  // ETHIOPIC SYLLABLE PHE
+  { 0x1336, BIDI_L   },  // ETHIOPIC SYLLABLE PHO
+  { 0x1337, BIDI_L   },  // ETHIOPIC SYLLABLE PHWA
+  { 0x1338, BIDI_L   },  // ETHIOPIC SYLLABLE TSA
+  { 0x1339, BIDI_L   },  // ETHIOPIC SYLLABLE TSU
+  { 0x133A, BIDI_L   },  // ETHIOPIC SYLLABLE TSI
+  { 0x133B, BIDI_L   },  // ETHIOPIC SYLLABLE TSAA
+  { 0x133C, BIDI_L   },  // ETHIOPIC SYLLABLE TSEE
+  { 0x133D, BIDI_L   },  // ETHIOPIC SYLLABLE TSE
+  { 0x133E, BIDI_L   },  // ETHIOPIC SYLLABLE TSO
+  { 0x133F, BIDI_L   },  // ETHIOPIC SYLLABLE TSWA
+  { 0x1340, BIDI_L   },  // ETHIOPIC SYLLABLE TZA
+  { 0x1341, BIDI_L   },  // ETHIOPIC SYLLABLE TZU
+  { 0x1342, BIDI_L   },  // ETHIOPIC SYLLABLE TZI
+  { 0x1343, BIDI_L   },  // ETHIOPIC SYLLABLE TZAA
+  { 0x1344, BIDI_L   },  // ETHIOPIC SYLLABLE TZEE
+  { 0x1345, BIDI_L   },  // ETHIOPIC SYLLABLE TZE
+  { 0x1346, BIDI_L   },  // ETHIOPIC SYLLABLE TZO
+  { 0x1347, BIDI_L   },  // ETHIOPIC SYLLABLE TZOA
+  { 0x1348, BIDI_L   },  // ETHIOPIC SYLLABLE FA
+  { 0x1349, BIDI_L   },  // ETHIOPIC SYLLABLE FU
+  { 0x134A, BIDI_L   },  // ETHIOPIC SYLLABLE FI
+  { 0x134B, BIDI_L   },  // ETHIOPIC SYLLABLE FAA
+  { 0x134C, BIDI_L   },  // ETHIOPIC SYLLABLE FEE
+  { 0x134D, BIDI_L   },  // ETHIOPIC SYLLABLE FE
+  { 0x134E, BIDI_L   },  // ETHIOPIC SYLLABLE FO
+  { 0x134F, BIDI_L   },  // ETHIOPIC SYLLABLE FWA
+  { 0x1350, BIDI_L   },  // ETHIOPIC SYLLABLE PA
+  { 0x1351, BIDI_L   },  // ETHIOPIC SYLLABLE PU
+  { 0x1352, BIDI_L   },  // ETHIOPIC SYLLABLE PI
+  { 0x1353, BIDI_L   },  // ETHIOPIC SYLLABLE PAA
+  { 0x1354, BIDI_L   },  // ETHIOPIC SYLLABLE PEE
+  { 0x1355, BIDI_L   },  // ETHIOPIC SYLLABLE PE
+  { 0x1356, BIDI_L   },  // ETHIOPIC SYLLABLE PO
+  { 0x1357, BIDI_L   },  // ETHIOPIC SYLLABLE PWA
+  { 0x1358, BIDI_L   },  // ETHIOPIC SYLLABLE RYA
+  { 0x1359, BIDI_L   },  // ETHIOPIC SYLLABLE MYA
+  { 0x135A, BIDI_L   },  // ETHIOPIC SYLLABLE FYA
+  { 0x135D, BIDI_NSM },  // ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK
+  { 0x135E, BIDI_NSM },  // ETHIOPIC COMBINING VOWEL LENGTH MARK
+  { 0x135F, BIDI_NSM },  // ETHIOPIC COMBINING GEMINATION MARK
+  { 0x1360, BIDI_L   },  // ETHIOPIC SECTION MARK
+  { 0x1361, BIDI_L   },  // ETHIOPIC WORDSPACE
+  { 0x1362, BIDI_L   },  // ETHIOPIC FULL STOP
+  { 0x1363, BIDI_L   },  // ETHIOPIC COMMA
+  { 0x1364, BIDI_L   },  // ETHIOPIC SEMICOLON
+  { 0x1365, BIDI_L   },  // ETHIOPIC COLON
+  { 0x1366, BIDI_L   },  // ETHIOPIC PREFACE COLON
+  { 0x1367, BIDI_L   },  // ETHIOPIC QUESTION MARK
+  { 0x1368, BIDI_L   },  // ETHIOPIC PARAGRAPH SEPARATOR
+  { 0x1369, BIDI_L   },  // ETHIOPIC DIGIT ONE
+  { 0x136A, BIDI_L   },  // ETHIOPIC DIGIT TWO
+  { 0x136B, BIDI_L   },  // ETHIOPIC DIGIT THREE
+  { 0x136C, BIDI_L   },  // ETHIOPIC DIGIT FOUR
+  { 0x136D, BIDI_L   },  // ETHIOPIC DIGIT FIVE
+  { 0x136E, BIDI_L   },  // ETHIOPIC DIGIT SIX
+  { 0x136F, BIDI_L   },  // ETHIOPIC DIGIT SEVEN
+  { 0x1370, BIDI_L   },  // ETHIOPIC DIGIT EIGHT
+  { 0x1371, BIDI_L   },  // ETHIOPIC DIGIT NINE
+  { 0x1372, BIDI_L   },  // ETHIOPIC NUMBER TEN
+  { 0x1373, BIDI_L   },  // ETHIOPIC NUMBER TWENTY
+  { 0x1374, BIDI_L   },  // ETHIOPIC NUMBER THIRTY
+  { 0x1375, BIDI_L   },  // ETHIOPIC NUMBER FORTY
+  { 0x1376, BIDI_L   },  // ETHIOPIC NUMBER FIFTY
+  { 0x1377, BIDI_L   },  // ETHIOPIC NUMBER SIXTY
+  { 0x1378, BIDI_L   },  // ETHIOPIC NUMBER SEVENTY
+  { 0x1379, BIDI_L   },  // ETHIOPIC NUMBER EIGHTY
+  { 0x137A, BIDI_L   },  // ETHIOPIC NUMBER NINETY
+  { 0x137B, BIDI_L   },  // ETHIOPIC NUMBER HUNDRED
+  { 0x137C, BIDI_L   },  // ETHIOPIC NUMBER TEN THOUSAND
+  { 0x1380, BIDI_L   },  // ETHIOPIC SYLLABLE SEBATBEIT MWA
+  { 0x1381, BIDI_L   },  // ETHIOPIC SYLLABLE MWI
+  { 0x1382, BIDI_L   },  // ETHIOPIC SYLLABLE MWEE
+  { 0x1383, BIDI_L   },  // ETHIOPIC SYLLABLE MWE
+  { 0x1384, BIDI_L   },  // ETHIOPIC SYLLABLE SEBATBEIT BWA
+  { 0x1385, BIDI_L   },  // ETHIOPIC SYLLABLE BWI
+  { 0x1386, BIDI_L   },  // ETHIOPIC SYLLABLE BWEE
+  { 0x1387, BIDI_L   },  // ETHIOPIC SYLLABLE BWE
+  { 0x1388, BIDI_L   },  // ETHIOPIC SYLLABLE SEBATBEIT FWA
+  { 0x1389, BIDI_L   },  // ETHIOPIC SYLLABLE FWI
+  { 0x138A, BIDI_L   },  // ETHIOPIC SYLLABLE FWEE
+  { 0x138B, BIDI_L   },  // ETHIOPIC SYLLABLE FWE
+  { 0x138C, BIDI_L   },  // ETHIOPIC SYLLABLE SEBATBEIT PWA
+  { 0x138D, BIDI_L   },  // ETHIOPIC SYLLABLE PWI
+  { 0x138E, BIDI_L   },  // ETHIOPIC SYLLABLE PWEE
+  { 0x138F, BIDI_L   },  // ETHIOPIC SYLLABLE PWE
+  { 0x1390, BIDI_ON  },  // ETHIOPIC TONAL MARK YIZET
+  { 0x1391, BIDI_ON  },  // ETHIOPIC TONAL MARK DERET
+  { 0x1392, BIDI_ON  },  // ETHIOPIC TONAL MARK RIKRIK
+  { 0x1393, BIDI_ON  },  // ETHIOPIC TONAL MARK SHORT RIKRIK
+  { 0x1394, BIDI_ON  },  // ETHIOPIC TONAL MARK DIFAT
+  { 0x1395, BIDI_ON  },  // ETHIOPIC TONAL MARK KENAT
+  { 0x1396, BIDI_ON  },  // ETHIOPIC TONAL MARK CHIRET
+  { 0x1397, BIDI_ON  },  // ETHIOPIC TONAL MARK HIDET
+  { 0x1398, BIDI_ON  },  // ETHIOPIC TONAL MARK DERET-HIDET
+  { 0x1399, BIDI_ON  },  // ETHIOPIC TONAL MARK KURT
+  { 0x13A0, BIDI_L   },  // CHEROKEE LETTER A
+  { 0x13A1, BIDI_L   },  // CHEROKEE LETTER E
+  { 0x13A2, BIDI_L   },  // CHEROKEE LETTER I
+  { 0x13A3, BIDI_L   },  // CHEROKEE LETTER O
+  { 0x13A4, BIDI_L   },  // CHEROKEE LETTER U
+  { 0x13A5, BIDI_L   },  // CHEROKEE LETTER V
+  { 0x13A6, BIDI_L   },  // CHEROKEE LETTER GA
+  { 0x13A7, BIDI_L   },  // CHEROKEE LETTER KA
+  { 0x13A8, BIDI_L   },  // CHEROKEE LETTER GE
+  { 0x13A9, BIDI_L   },  // CHEROKEE LETTER GI
+  { 0x13AA, BIDI_L   },  // CHEROKEE LETTER GO
+  { 0x13AB, BIDI_L   },  // CHEROKEE LETTER GU
+  { 0x13AC, BIDI_L   },  // CHEROKEE LETTER GV
+  { 0x13AD, BIDI_L   },  // CHEROKEE LETTER HA
+  { 0x13AE, BIDI_L   },  // CHEROKEE LETTER HE
+  { 0x13AF, BIDI_L   },  // CHEROKEE LETTER HI
+  { 0x13B0, BIDI_L   },  // CHEROKEE LETTER HO
+  { 0x13B1, BIDI_L   },  // CHEROKEE LETTER HU
+  { 0x13B2, BIDI_L   },  // CHEROKEE LETTER HV
+  { 0x13B3, BIDI_L   },  // CHEROKEE LETTER LA
+  { 0x13B4, BIDI_L   },  // CHEROKEE LETTER LE
+  { 0x13B5, BIDI_L   },  // CHEROKEE LETTER LI
+  { 0x13B6, BIDI_L   },  // CHEROKEE LETTER LO
+  { 0x13B7, BIDI_L   },  // CHEROKEE LETTER LU
+  { 0x13B8, BIDI_L   },  // CHEROKEE LETTER LV
+  { 0x13B9, BIDI_L   },  // CHEROKEE LETTER MA
+  { 0x13BA, BIDI_L   },  // CHEROKEE LETTER ME
+  { 0x13BB, BIDI_L   },  // CHEROKEE LETTER MI
+  { 0x13BC, BIDI_L   },  // CHEROKEE LETTER MO
+  { 0x13BD, BIDI_L   },  // CHEROKEE LETTER MU
+  { 0x13BE, BIDI_L   },  // CHEROKEE LETTER NA
+  { 0x13BF, BIDI_L   },  // CHEROKEE LETTER HNA
+  { 0x13C0, BIDI_L   },  // CHEROKEE LETTER NAH
+  { 0x13C1, BIDI_L   },  // CHEROKEE LETTER NE
+  { 0x13C2, BIDI_L   },  // CHEROKEE LETTER NI
+  { 0x13C3, BIDI_L   },  // CHEROKEE LETTER NO
+  { 0x13C4, BIDI_L   },  // CHEROKEE LETTER NU
+  { 0x13C5, BIDI_L   },  // CHEROKEE LETTER NV
+  { 0x13C6, BIDI_L   },  // CHEROKEE LETTER QUA
+  { 0x13C7, BIDI_L   },  // CHEROKEE LETTER QUE
+  { 0x13C8, BIDI_L   },  // CHEROKEE LETTER QUI
+  { 0x13C9, BIDI_L   },  // CHEROKEE LETTER QUO
+  { 0x13CA, BIDI_L   },  // CHEROKEE LETTER QUU
+  { 0x13CB, BIDI_L   },  // CHEROKEE LETTER QUV
+  { 0x13CC, BIDI_L   },  // CHEROKEE LETTER SA
+  { 0x13CD, BIDI_L   },  // CHEROKEE LETTER S
+  { 0x13CE, BIDI_L   },  // CHEROKEE LETTER SE
+  { 0x13CF, BIDI_L   },  // CHEROKEE LETTER SI
+  { 0x13D0, BIDI_L   },  // CHEROKEE LETTER SO
+  { 0x13D1, BIDI_L   },  // CHEROKEE LETTER SU
+  { 0x13D2, BIDI_L   },  // CHEROKEE LETTER SV
+  { 0x13D3, BIDI_L   },  // CHEROKEE LETTER DA
+  { 0x13D4, BIDI_L   },  // CHEROKEE LETTER TA
+  { 0x13D5, BIDI_L   },  // CHEROKEE LETTER DE
+  { 0x13D6, BIDI_L   },  // CHEROKEE LETTER TE
+  { 0x13D7, BIDI_L   },  // CHEROKEE LETTER DI
+  { 0x13D8, BIDI_L   },  // CHEROKEE LETTER TI
+  { 0x13D9, BIDI_L   },  // CHEROKEE LETTER DO
+  { 0x13DA, BIDI_L   },  // CHEROKEE LETTER DU
+  { 0x13DB, BIDI_L   },  // CHEROKEE LETTER DV
+  { 0x13DC, BIDI_L   },  // CHEROKEE LETTER DLA
+  { 0x13DD, BIDI_L   },  // CHEROKEE LETTER TLA
+  { 0x13DE, BIDI_L   },  // CHEROKEE LETTER TLE
+  { 0x13DF, BIDI_L   },  // CHEROKEE LETTER TLI
+  { 0x13E0, BIDI_L   },  // CHEROKEE LETTER TLO
+  { 0x13E1, BIDI_L   },  // CHEROKEE LETTER TLU
+  { 0x13E2, BIDI_L   },  // CHEROKEE LETTER TLV
+  { 0x13E3, BIDI_L   },  // CHEROKEE LETTER TSA
+  { 0x13E4, BIDI_L   },  // CHEROKEE LETTER TSE
+  { 0x13E5, BIDI_L   },  // CHEROKEE LETTER TSI
+  { 0x13E6, BIDI_L   },  // CHEROKEE LETTER TSO
+  { 0x13E7, BIDI_L   },  // CHEROKEE LETTER TSU
+  { 0x13E8, BIDI_L   },  // CHEROKEE LETTER TSV
+  { 0x13E9, BIDI_L   },  // CHEROKEE LETTER WA
+  { 0x13EA, BIDI_L   },  // CHEROKEE LETTER WE
+  { 0x13EB, BIDI_L   },  // CHEROKEE LETTER WI
+  { 0x13EC, BIDI_L   },  // CHEROKEE LETTER WO
+  { 0x13ED, BIDI_L   },  // CHEROKEE LETTER WU
+  { 0x13EE, BIDI_L   },  // CHEROKEE LETTER WV
+  { 0x13EF, BIDI_L   },  // CHEROKEE LETTER YA
+  { 0x13F0, BIDI_L   },  // CHEROKEE LETTER YE
+  { 0x13F1, BIDI_L   },  // CHEROKEE LETTER YI
+  { 0x13F2, BIDI_L   },  // CHEROKEE LETTER YO
+  { 0x13F3, BIDI_L   },  // CHEROKEE LETTER YU
+  { 0x13F4, BIDI_L   },  // CHEROKEE LETTER YV
+  { 0x13F5, BIDI_L   },  // CHEROKEE LETTER MV
+  { 0x13F8, BIDI_L   },  // CHEROKEE SMALL LETTER YE
+  { 0x13F9, BIDI_L   },  // CHEROKEE SMALL LETTER YI
+  { 0x13FA, BIDI_L   },  // CHEROKEE SMALL LETTER YO
+  { 0x13FB, BIDI_L   },  // CHEROKEE SMALL LETTER YU
+  { 0x13FC, BIDI_L   },  // CHEROKEE SMALL LETTER YV
+  { 0x13FD, BIDI_L   },  // CHEROKEE SMALL LETTER MV
+  { 0x1400, BIDI_ON  },  // CANADIAN SYLLABICS HYPHEN
+  { 0x1401, BIDI_L   },  // CANADIAN SYLLABICS E
+  { 0x1402, BIDI_L   },  // CANADIAN SYLLABICS AAI
+  { 0x1403, BIDI_L   },  // CANADIAN SYLLABICS I
+  { 0x1404, BIDI_L   },  // CANADIAN SYLLABICS II
+  { 0x1405, BIDI_L   },  // CANADIAN SYLLABICS O
+  { 0x1406, BIDI_L   },  // CANADIAN SYLLABICS OO
+  { 0x1407, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE OO
+  { 0x1408, BIDI_L   },  // CANADIAN SYLLABICS CARRIER EE
+  { 0x1409, BIDI_L   },  // CANADIAN SYLLABICS CARRIER I
+  { 0x140A, BIDI_L   },  // CANADIAN SYLLABICS A
+  { 0x140B, BIDI_L   },  // CANADIAN SYLLABICS AA
+  { 0x140C, BIDI_L   },  // CANADIAN SYLLABICS WE
+  { 0x140D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WE
+  { 0x140E, BIDI_L   },  // CANADIAN SYLLABICS WI
+  { 0x140F, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WI
+  { 0x1410, BIDI_L   },  // CANADIAN SYLLABICS WII
+  { 0x1411, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WII
+  { 0x1412, BIDI_L   },  // CANADIAN SYLLABICS WO
+  { 0x1413, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WO
+  { 0x1414, BIDI_L   },  // CANADIAN SYLLABICS WOO
+  { 0x1415, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WOO
+  { 0x1416, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI WOO
+  { 0x1417, BIDI_L   },  // CANADIAN SYLLABICS WA
+  { 0x1418, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WA
+  { 0x1419, BIDI_L   },  // CANADIAN SYLLABICS WAA
+  { 0x141A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE WAA
+  { 0x141B, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI WAA
+  { 0x141C, BIDI_L   },  // CANADIAN SYLLABICS AI
+  { 0x141D, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE W
+  { 0x141E, BIDI_L   },  // CANADIAN SYLLABICS GLOTTAL STOP
+  { 0x141F, BIDI_L   },  // CANADIAN SYLLABICS FINAL ACUTE
+  { 0x1420, BIDI_L   },  // CANADIAN SYLLABICS FINAL GRAVE
+  { 0x1421, BIDI_L   },  // CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+  { 0x1422, BIDI_L   },  // CANADIAN SYLLABICS FINAL TOP HALF RING
+  { 0x1423, BIDI_L   },  // CANADIAN SYLLABICS FINAL RIGHT HALF RING
+  { 0x1424, BIDI_L   },  // CANADIAN SYLLABICS FINAL RING
+  { 0x1425, BIDI_L   },  // CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+  { 0x1426, BIDI_L   },  // CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+  { 0x1427, BIDI_L   },  // CANADIAN SYLLABICS FINAL MIDDLE DOT
+  { 0x1428, BIDI_L   },  // CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+  { 0x1429, BIDI_L   },  // CANADIAN SYLLABICS FINAL PLUS
+  { 0x142A, BIDI_L   },  // CANADIAN SYLLABICS FINAL DOWN TACK
+  { 0x142B, BIDI_L   },  // CANADIAN SYLLABICS EN
+  { 0x142C, BIDI_L   },  // CANADIAN SYLLABICS IN
+  { 0x142D, BIDI_L   },  // CANADIAN SYLLABICS ON
+  { 0x142E, BIDI_L   },  // CANADIAN SYLLABICS AN
+  { 0x142F, BIDI_L   },  // CANADIAN SYLLABICS PE
+  { 0x1430, BIDI_L   },  // CANADIAN SYLLABICS PAAI
+  { 0x1431, BIDI_L   },  // CANADIAN SYLLABICS PI
+  { 0x1432, BIDI_L   },  // CANADIAN SYLLABICS PII
+  { 0x1433, BIDI_L   },  // CANADIAN SYLLABICS PO
+  { 0x1434, BIDI_L   },  // CANADIAN SYLLABICS POO
+  { 0x1435, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE POO
+  { 0x1436, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HEE
+  { 0x1437, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HI
+  { 0x1438, BIDI_L   },  // CANADIAN SYLLABICS PA
+  { 0x1439, BIDI_L   },  // CANADIAN SYLLABICS PAA
+  { 0x143A, BIDI_L   },  // CANADIAN SYLLABICS PWE
+  { 0x143B, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWE
+  { 0x143C, BIDI_L   },  // CANADIAN SYLLABICS PWI
+  { 0x143D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWI
+  { 0x143E, BIDI_L   },  // CANADIAN SYLLABICS PWII
+  { 0x143F, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWII
+  { 0x1440, BIDI_L   },  // CANADIAN SYLLABICS PWO
+  { 0x1441, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWO
+  { 0x1442, BIDI_L   },  // CANADIAN SYLLABICS PWOO
+  { 0x1443, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWOO
+  { 0x1444, BIDI_L   },  // CANADIAN SYLLABICS PWA
+  { 0x1445, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWA
+  { 0x1446, BIDI_L   },  // CANADIAN SYLLABICS PWAA
+  { 0x1447, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE PWAA
+  { 0x1448, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE PWAA
+  { 0x1449, BIDI_L   },  // CANADIAN SYLLABICS P
+  { 0x144A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE P
+  { 0x144B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER H
+  { 0x144C, BIDI_L   },  // CANADIAN SYLLABICS TE
+  { 0x144D, BIDI_L   },  // CANADIAN SYLLABICS TAAI
+  { 0x144E, BIDI_L   },  // CANADIAN SYLLABICS TI
+  { 0x144F, BIDI_L   },  // CANADIAN SYLLABICS TII
+  { 0x1450, BIDI_L   },  // CANADIAN SYLLABICS TO
+  { 0x1451, BIDI_L   },  // CANADIAN SYLLABICS TOO
+  { 0x1452, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE TOO
+  { 0x1453, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DEE
+  { 0x1454, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DI
+  { 0x1455, BIDI_L   },  // CANADIAN SYLLABICS TA
+  { 0x1456, BIDI_L   },  // CANADIAN SYLLABICS TAA
+  { 0x1457, BIDI_L   },  // CANADIAN SYLLABICS TWE
+  { 0x1458, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWE
+  { 0x1459, BIDI_L   },  // CANADIAN SYLLABICS TWI
+  { 0x145A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWI
+  { 0x145B, BIDI_L   },  // CANADIAN SYLLABICS TWII
+  { 0x145C, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWII
+  { 0x145D, BIDI_L   },  // CANADIAN SYLLABICS TWO
+  { 0x145E, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWO
+  { 0x145F, BIDI_L   },  // CANADIAN SYLLABICS TWOO
+  { 0x1460, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWOO
+  { 0x1461, BIDI_L   },  // CANADIAN SYLLABICS TWA
+  { 0x1462, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWA
+  { 0x1463, BIDI_L   },  // CANADIAN SYLLABICS TWAA
+  { 0x1464, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE TWAA
+  { 0x1465, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI TWAA
+  { 0x1466, BIDI_L   },  // CANADIAN SYLLABICS T
+  { 0x1467, BIDI_L   },  // CANADIAN SYLLABICS TTE
+  { 0x1468, BIDI_L   },  // CANADIAN SYLLABICS TTI
+  { 0x1469, BIDI_L   },  // CANADIAN SYLLABICS TTO
+  { 0x146A, BIDI_L   },  // CANADIAN SYLLABICS TTA
+  { 0x146B, BIDI_L   },  // CANADIAN SYLLABICS KE
+  { 0x146C, BIDI_L   },  // CANADIAN SYLLABICS KAAI
+  { 0x146D, BIDI_L   },  // CANADIAN SYLLABICS KI
+  { 0x146E, BIDI_L   },  // CANADIAN SYLLABICS KII
+  { 0x146F, BIDI_L   },  // CANADIAN SYLLABICS KO
+  { 0x1470, BIDI_L   },  // CANADIAN SYLLABICS KOO
+  { 0x1471, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE KOO
+  { 0x1472, BIDI_L   },  // CANADIAN SYLLABICS KA
+  { 0x1473, BIDI_L   },  // CANADIAN SYLLABICS KAA
+  { 0x1474, BIDI_L   },  // CANADIAN SYLLABICS KWE
+  { 0x1475, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWE
+  { 0x1476, BIDI_L   },  // CANADIAN SYLLABICS KWI
+  { 0x1477, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWI
+  { 0x1478, BIDI_L   },  // CANADIAN SYLLABICS KWII
+  { 0x1479, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWII
+  { 0x147A, BIDI_L   },  // CANADIAN SYLLABICS KWO
+  { 0x147B, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWO
+  { 0x147C, BIDI_L   },  // CANADIAN SYLLABICS KWOO
+  { 0x147D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWOO
+  { 0x147E, BIDI_L   },  // CANADIAN SYLLABICS KWA
+  { 0x147F, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWA
+  { 0x1480, BIDI_L   },  // CANADIAN SYLLABICS KWAA
+  { 0x1481, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE KWAA
+  { 0x1482, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI KWAA
+  { 0x1483, BIDI_L   },  // CANADIAN SYLLABICS K
+  { 0x1484, BIDI_L   },  // CANADIAN SYLLABICS KW
+  { 0x1485, BIDI_L   },  // CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+  { 0x1486, BIDI_L   },  // CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+  { 0x1487, BIDI_L   },  // CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+  { 0x1488, BIDI_L   },  // CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+  { 0x1489, BIDI_L   },  // CANADIAN SYLLABICS CE
+  { 0x148A, BIDI_L   },  // CANADIAN SYLLABICS CAAI
+  { 0x148B, BIDI_L   },  // CANADIAN SYLLABICS CI
+  { 0x148C, BIDI_L   },  // CANADIAN SYLLABICS CII
+  { 0x148D, BIDI_L   },  // CANADIAN SYLLABICS CO
+  { 0x148E, BIDI_L   },  // CANADIAN SYLLABICS COO
+  { 0x148F, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE COO
+  { 0x1490, BIDI_L   },  // CANADIAN SYLLABICS CA
+  { 0x1491, BIDI_L   },  // CANADIAN SYLLABICS CAA
+  { 0x1492, BIDI_L   },  // CANADIAN SYLLABICS CWE
+  { 0x1493, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWE
+  { 0x1494, BIDI_L   },  // CANADIAN SYLLABICS CWI
+  { 0x1495, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWI
+  { 0x1496, BIDI_L   },  // CANADIAN SYLLABICS CWII
+  { 0x1497, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWII
+  { 0x1498, BIDI_L   },  // CANADIAN SYLLABICS CWO
+  { 0x1499, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWO
+  { 0x149A, BIDI_L   },  // CANADIAN SYLLABICS CWOO
+  { 0x149B, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWOO
+  { 0x149C, BIDI_L   },  // CANADIAN SYLLABICS CWA
+  { 0x149D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWA
+  { 0x149E, BIDI_L   },  // CANADIAN SYLLABICS CWAA
+  { 0x149F, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE CWAA
+  { 0x14A0, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI CWAA
+  { 0x14A1, BIDI_L   },  // CANADIAN SYLLABICS C
+  { 0x14A2, BIDI_L   },  // CANADIAN SYLLABICS SAYISI TH
+  { 0x14A3, BIDI_L   },  // CANADIAN SYLLABICS ME
+  { 0x14A4, BIDI_L   },  // CANADIAN SYLLABICS MAAI
+  { 0x14A5, BIDI_L   },  // CANADIAN SYLLABICS MI
+  { 0x14A6, BIDI_L   },  // CANADIAN SYLLABICS MII
+  { 0x14A7, BIDI_L   },  // CANADIAN SYLLABICS MO
+  { 0x14A8, BIDI_L   },  // CANADIAN SYLLABICS MOO
+  { 0x14A9, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE MOO
+  { 0x14AA, BIDI_L   },  // CANADIAN SYLLABICS MA
+  { 0x14AB, BIDI_L   },  // CANADIAN SYLLABICS MAA
+  { 0x14AC, BIDI_L   },  // CANADIAN SYLLABICS MWE
+  { 0x14AD, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWE
+  { 0x14AE, BIDI_L   },  // CANADIAN SYLLABICS MWI
+  { 0x14AF, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWI
+  { 0x14B0, BIDI_L   },  // CANADIAN SYLLABICS MWII
+  { 0x14B1, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWII
+  { 0x14B2, BIDI_L   },  // CANADIAN SYLLABICS MWO
+  { 0x14B3, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWO
+  { 0x14B4, BIDI_L   },  // CANADIAN SYLLABICS MWOO
+  { 0x14B5, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWOO
+  { 0x14B6, BIDI_L   },  // CANADIAN SYLLABICS MWA
+  { 0x14B7, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWA
+  { 0x14B8, BIDI_L   },  // CANADIAN SYLLABICS MWAA
+  { 0x14B9, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE MWAA
+  { 0x14BA, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI MWAA
+  { 0x14BB, BIDI_L   },  // CANADIAN SYLLABICS M
+  { 0x14BC, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE M
+  { 0x14BD, BIDI_L   },  // CANADIAN SYLLABICS MH
+  { 0x14BE, BIDI_L   },  // CANADIAN SYLLABICS ATHAPASCAN M
+  { 0x14BF, BIDI_L   },  // CANADIAN SYLLABICS SAYISI M
+  { 0x14C0, BIDI_L   },  // CANADIAN SYLLABICS NE
+  { 0x14C1, BIDI_L   },  // CANADIAN SYLLABICS NAAI
+  { 0x14C2, BIDI_L   },  // CANADIAN SYLLABICS NI
+  { 0x14C3, BIDI_L   },  // CANADIAN SYLLABICS NII
+  { 0x14C4, BIDI_L   },  // CANADIAN SYLLABICS NO
+  { 0x14C5, BIDI_L   },  // CANADIAN SYLLABICS NOO
+  { 0x14C6, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE NOO
+  { 0x14C7, BIDI_L   },  // CANADIAN SYLLABICS NA
+  { 0x14C8, BIDI_L   },  // CANADIAN SYLLABICS NAA
+  { 0x14C9, BIDI_L   },  // CANADIAN SYLLABICS NWE
+  { 0x14CA, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE NWE
+  { 0x14CB, BIDI_L   },  // CANADIAN SYLLABICS NWA
+  { 0x14CC, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE NWA
+  { 0x14CD, BIDI_L   },  // CANADIAN SYLLABICS NWAA
+  { 0x14CE, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE NWAA
+  { 0x14CF, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI NWAA
+  { 0x14D0, BIDI_L   },  // CANADIAN SYLLABICS N
+  { 0x14D1, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NG
+  { 0x14D2, BIDI_L   },  // CANADIAN SYLLABICS NH
+  { 0x14D3, BIDI_L   },  // CANADIAN SYLLABICS LE
+  { 0x14D4, BIDI_L   },  // CANADIAN SYLLABICS LAAI
+  { 0x14D5, BIDI_L   },  // CANADIAN SYLLABICS LI
+  { 0x14D6, BIDI_L   },  // CANADIAN SYLLABICS LII
+  { 0x14D7, BIDI_L   },  // CANADIAN SYLLABICS LO
+  { 0x14D8, BIDI_L   },  // CANADIAN SYLLABICS LOO
+  { 0x14D9, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE LOO
+  { 0x14DA, BIDI_L   },  // CANADIAN SYLLABICS LA
+  { 0x14DB, BIDI_L   },  // CANADIAN SYLLABICS LAA
+  { 0x14DC, BIDI_L   },  // CANADIAN SYLLABICS LWE
+  { 0x14DD, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWE
+  { 0x14DE, BIDI_L   },  // CANADIAN SYLLABICS LWI
+  { 0x14DF, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWI
+  { 0x14E0, BIDI_L   },  // CANADIAN SYLLABICS LWII
+  { 0x14E1, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWII
+  { 0x14E2, BIDI_L   },  // CANADIAN SYLLABICS LWO
+  { 0x14E3, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWO
+  { 0x14E4, BIDI_L   },  // CANADIAN SYLLABICS LWOO
+  { 0x14E5, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWOO
+  { 0x14E6, BIDI_L   },  // CANADIAN SYLLABICS LWA
+  { 0x14E7, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWA
+  { 0x14E8, BIDI_L   },  // CANADIAN SYLLABICS LWAA
+  { 0x14E9, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LWAA
+  { 0x14EA, BIDI_L   },  // CANADIAN SYLLABICS L
+  { 0x14EB, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE L
+  { 0x14EC, BIDI_L   },  // CANADIAN SYLLABICS MEDIAL L
+  { 0x14ED, BIDI_L   },  // CANADIAN SYLLABICS SE
+  { 0x14EE, BIDI_L   },  // CANADIAN SYLLABICS SAAI
+  { 0x14EF, BIDI_L   },  // CANADIAN SYLLABICS SI
+  { 0x14F0, BIDI_L   },  // CANADIAN SYLLABICS SII
+  { 0x14F1, BIDI_L   },  // CANADIAN SYLLABICS SO
+  { 0x14F2, BIDI_L   },  // CANADIAN SYLLABICS SOO
+  { 0x14F3, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE SOO
+  { 0x14F4, BIDI_L   },  // CANADIAN SYLLABICS SA
+  { 0x14F5, BIDI_L   },  // CANADIAN SYLLABICS SAA
+  { 0x14F6, BIDI_L   },  // CANADIAN SYLLABICS SWE
+  { 0x14F7, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWE
+  { 0x14F8, BIDI_L   },  // CANADIAN SYLLABICS SWI
+  { 0x14F9, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWI
+  { 0x14FA, BIDI_L   },  // CANADIAN SYLLABICS SWII
+  { 0x14FB, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWII
+  { 0x14FC, BIDI_L   },  // CANADIAN SYLLABICS SWO
+  { 0x14FD, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWO
+  { 0x14FE, BIDI_L   },  // CANADIAN SYLLABICS SWOO
+  { 0x14FF, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWOO
+  { 0x1500, BIDI_L   },  // CANADIAN SYLLABICS SWA
+  { 0x1501, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWA
+  { 0x1502, BIDI_L   },  // CANADIAN SYLLABICS SWAA
+  { 0x1503, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SWAA
+  { 0x1504, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI SWAA
+  { 0x1505, BIDI_L   },  // CANADIAN SYLLABICS S
+  { 0x1506, BIDI_L   },  // CANADIAN SYLLABICS ATHAPASCAN S
+  { 0x1507, BIDI_L   },  // CANADIAN SYLLABICS SW
+  { 0x1508, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT S
+  { 0x1509, BIDI_L   },  // CANADIAN SYLLABICS MOOSE-CREE SK
+  { 0x150A, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI SKW
+  { 0x150B, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI S-W
+  { 0x150C, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI SPWA
+  { 0x150D, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI STWA
+  { 0x150E, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI SKWA
+  { 0x150F, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI SCWA
+  { 0x1510, BIDI_L   },  // CANADIAN SYLLABICS SHE
+  { 0x1511, BIDI_L   },  // CANADIAN SYLLABICS SHI
+  { 0x1512, BIDI_L   },  // CANADIAN SYLLABICS SHII
+  { 0x1513, BIDI_L   },  // CANADIAN SYLLABICS SHO
+  { 0x1514, BIDI_L   },  // CANADIAN SYLLABICS SHOO
+  { 0x1515, BIDI_L   },  // CANADIAN SYLLABICS SHA
+  { 0x1516, BIDI_L   },  // CANADIAN SYLLABICS SHAA
+  { 0x1517, BIDI_L   },  // CANADIAN SYLLABICS SHWE
+  { 0x1518, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWE
+  { 0x1519, BIDI_L   },  // CANADIAN SYLLABICS SHWI
+  { 0x151A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWI
+  { 0x151B, BIDI_L   },  // CANADIAN SYLLABICS SHWII
+  { 0x151C, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWII
+  { 0x151D, BIDI_L   },  // CANADIAN SYLLABICS SHWO
+  { 0x151E, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWO
+  { 0x151F, BIDI_L   },  // CANADIAN SYLLABICS SHWOO
+  { 0x1520, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWOO
+  { 0x1521, BIDI_L   },  // CANADIAN SYLLABICS SHWA
+  { 0x1522, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWA
+  { 0x1523, BIDI_L   },  // CANADIAN SYLLABICS SHWAA
+  { 0x1524, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE SHWAA
+  { 0x1525, BIDI_L   },  // CANADIAN SYLLABICS SH
+  { 0x1526, BIDI_L   },  // CANADIAN SYLLABICS YE
+  { 0x1527, BIDI_L   },  // CANADIAN SYLLABICS YAAI
+  { 0x1528, BIDI_L   },  // CANADIAN SYLLABICS YI
+  { 0x1529, BIDI_L   },  // CANADIAN SYLLABICS YII
+  { 0x152A, BIDI_L   },  // CANADIAN SYLLABICS YO
+  { 0x152B, BIDI_L   },  // CANADIAN SYLLABICS YOO
+  { 0x152C, BIDI_L   },  // CANADIAN SYLLABICS Y-CREE YOO
+  { 0x152D, BIDI_L   },  // CANADIAN SYLLABICS YA
+  { 0x152E, BIDI_L   },  // CANADIAN SYLLABICS YAA
+  { 0x152F, BIDI_L   },  // CANADIAN SYLLABICS YWE
+  { 0x1530, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWE
+  { 0x1531, BIDI_L   },  // CANADIAN SYLLABICS YWI
+  { 0x1532, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWI
+  { 0x1533, BIDI_L   },  // CANADIAN SYLLABICS YWII
+  { 0x1534, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWII
+  { 0x1535, BIDI_L   },  // CANADIAN SYLLABICS YWO
+  { 0x1536, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWO
+  { 0x1537, BIDI_L   },  // CANADIAN SYLLABICS YWOO
+  { 0x1538, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWOO
+  { 0x1539, BIDI_L   },  // CANADIAN SYLLABICS YWA
+  { 0x153A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWA
+  { 0x153B, BIDI_L   },  // CANADIAN SYLLABICS YWAA
+  { 0x153C, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE YWAA
+  { 0x153D, BIDI_L   },  // CANADIAN SYLLABICS NASKAPI YWAA
+  { 0x153E, BIDI_L   },  // CANADIAN SYLLABICS Y
+  { 0x153F, BIDI_L   },  // CANADIAN SYLLABICS BIBLE-CREE Y
+  { 0x1540, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE Y
+  { 0x1541, BIDI_L   },  // CANADIAN SYLLABICS SAYISI YI
+  { 0x1542, BIDI_L   },  // CANADIAN SYLLABICS RE
+  { 0x1543, BIDI_L   },  // CANADIAN SYLLABICS R-CREE RE
+  { 0x1544, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LE
+  { 0x1545, BIDI_L   },  // CANADIAN SYLLABICS RAAI
+  { 0x1546, BIDI_L   },  // CANADIAN SYLLABICS RI
+  { 0x1547, BIDI_L   },  // CANADIAN SYLLABICS RII
+  { 0x1548, BIDI_L   },  // CANADIAN SYLLABICS RO
+  { 0x1549, BIDI_L   },  // CANADIAN SYLLABICS ROO
+  { 0x154A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LO
+  { 0x154B, BIDI_L   },  // CANADIAN SYLLABICS RA
+  { 0x154C, BIDI_L   },  // CANADIAN SYLLABICS RAA
+  { 0x154D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LA
+  { 0x154E, BIDI_L   },  // CANADIAN SYLLABICS RWAA
+  { 0x154F, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE RWAA
+  { 0x1550, BIDI_L   },  // CANADIAN SYLLABICS R
+  { 0x1551, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE R
+  { 0x1552, BIDI_L   },  // CANADIAN SYLLABICS MEDIAL R
+  { 0x1553, BIDI_L   },  // CANADIAN SYLLABICS FE
+  { 0x1554, BIDI_L   },  // CANADIAN SYLLABICS FAAI
+  { 0x1555, BIDI_L   },  // CANADIAN SYLLABICS FI
+  { 0x1556, BIDI_L   },  // CANADIAN SYLLABICS FII
+  { 0x1557, BIDI_L   },  // CANADIAN SYLLABICS FO
+  { 0x1558, BIDI_L   },  // CANADIAN SYLLABICS FOO
+  { 0x1559, BIDI_L   },  // CANADIAN SYLLABICS FA
+  { 0x155A, BIDI_L   },  // CANADIAN SYLLABICS FAA
+  { 0x155B, BIDI_L   },  // CANADIAN SYLLABICS FWAA
+  { 0x155C, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE FWAA
+  { 0x155D, BIDI_L   },  // CANADIAN SYLLABICS F
+  { 0x155E, BIDI_L   },  // CANADIAN SYLLABICS THE
+  { 0x155F, BIDI_L   },  // CANADIAN SYLLABICS N-CREE THE
+  { 0x1560, BIDI_L   },  // CANADIAN SYLLABICS THI
+  { 0x1561, BIDI_L   },  // CANADIAN SYLLABICS N-CREE THI
+  { 0x1562, BIDI_L   },  // CANADIAN SYLLABICS THII
+  { 0x1563, BIDI_L   },  // CANADIAN SYLLABICS N-CREE THII
+  { 0x1564, BIDI_L   },  // CANADIAN SYLLABICS THO
+  { 0x1565, BIDI_L   },  // CANADIAN SYLLABICS THOO
+  { 0x1566, BIDI_L   },  // CANADIAN SYLLABICS THA
+  { 0x1567, BIDI_L   },  // CANADIAN SYLLABICS THAA
+  { 0x1568, BIDI_L   },  // CANADIAN SYLLABICS THWAA
+  { 0x1569, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE THWAA
+  { 0x156A, BIDI_L   },  // CANADIAN SYLLABICS TH
+  { 0x156B, BIDI_L   },  // CANADIAN SYLLABICS TTHE
+  { 0x156C, BIDI_L   },  // CANADIAN SYLLABICS TTHI
+  { 0x156D, BIDI_L   },  // CANADIAN SYLLABICS TTHO
+  { 0x156E, BIDI_L   },  // CANADIAN SYLLABICS TTHA
+  { 0x156F, BIDI_L   },  // CANADIAN SYLLABICS TTH
+  { 0x1570, BIDI_L   },  // CANADIAN SYLLABICS TYE
+  { 0x1571, BIDI_L   },  // CANADIAN SYLLABICS TYI
+  { 0x1572, BIDI_L   },  // CANADIAN SYLLABICS TYO
+  { 0x1573, BIDI_L   },  // CANADIAN SYLLABICS TYA
+  { 0x1574, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HE
+  { 0x1575, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HI
+  { 0x1576, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HII
+  { 0x1577, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HO
+  { 0x1578, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HOO
+  { 0x1579, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HA
+  { 0x157A, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK HAA
+  { 0x157B, BIDI_L   },  // CANADIAN SYLLABICS NUNAVIK H
+  { 0x157C, BIDI_L   },  // CANADIAN SYLLABICS NUNAVUT H
+  { 0x157D, BIDI_L   },  // CANADIAN SYLLABICS HK
+  { 0x157E, BIDI_L   },  // CANADIAN SYLLABICS QAAI
+  { 0x157F, BIDI_L   },  // CANADIAN SYLLABICS QI
+  { 0x1580, BIDI_L   },  // CANADIAN SYLLABICS QII
+  { 0x1581, BIDI_L   },  // CANADIAN SYLLABICS QO
+  { 0x1582, BIDI_L   },  // CANADIAN SYLLABICS QOO
+  { 0x1583, BIDI_L   },  // CANADIAN SYLLABICS QA
+  { 0x1584, BIDI_L   },  // CANADIAN SYLLABICS QAA
+  { 0x1585, BIDI_L   },  // CANADIAN SYLLABICS Q
+  { 0x1586, BIDI_L   },  // CANADIAN SYLLABICS TLHE
+  { 0x1587, BIDI_L   },  // CANADIAN SYLLABICS TLHI
+  { 0x1588, BIDI_L   },  // CANADIAN SYLLABICS TLHO
+  { 0x1589, BIDI_L   },  // CANADIAN SYLLABICS TLHA
+  { 0x158A, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE RE
+  { 0x158B, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE RI
+  { 0x158C, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE RO
+  { 0x158D, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE RA
+  { 0x158E, BIDI_L   },  // CANADIAN SYLLABICS NGAAI
+  { 0x158F, BIDI_L   },  // CANADIAN SYLLABICS NGI
+  { 0x1590, BIDI_L   },  // CANADIAN SYLLABICS NGII
+  { 0x1591, BIDI_L   },  // CANADIAN SYLLABICS NGO
+  { 0x1592, BIDI_L   },  // CANADIAN SYLLABICS NGOO
+  { 0x1593, BIDI_L   },  // CANADIAN SYLLABICS NGA
+  { 0x1594, BIDI_L   },  // CANADIAN SYLLABICS NGAA
+  { 0x1595, BIDI_L   },  // CANADIAN SYLLABICS NG
+  { 0x1596, BIDI_L   },  // CANADIAN SYLLABICS NNG
+  { 0x1597, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHE
+  { 0x1598, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHI
+  { 0x1599, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHO
+  { 0x159A, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHA
+  { 0x159B, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THE
+  { 0x159C, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THI
+  { 0x159D, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THO
+  { 0x159E, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THA
+  { 0x159F, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE TH
+  { 0x15A0, BIDI_L   },  // CANADIAN SYLLABICS LHI
+  { 0x15A1, BIDI_L   },  // CANADIAN SYLLABICS LHII
+  { 0x15A2, BIDI_L   },  // CANADIAN SYLLABICS LHO
+  { 0x15A3, BIDI_L   },  // CANADIAN SYLLABICS LHOO
+  { 0x15A4, BIDI_L   },  // CANADIAN SYLLABICS LHA
+  { 0x15A5, BIDI_L   },  // CANADIAN SYLLABICS LHAA
+  { 0x15A6, BIDI_L   },  // CANADIAN SYLLABICS LH
+  { 0x15A7, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THE
+  { 0x15A8, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THI
+  { 0x15A9, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THII
+  { 0x15AA, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THO
+  { 0x15AB, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THOO
+  { 0x15AC, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THA
+  { 0x15AD, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE THAA
+  { 0x15AE, BIDI_L   },  // CANADIAN SYLLABICS TH-CREE TH
+  { 0x15AF, BIDI_L   },  // CANADIAN SYLLABICS AIVILIK B
+  { 0x15B0, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT E
+  { 0x15B1, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT I
+  { 0x15B2, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT O
+  { 0x15B3, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT A
+  { 0x15B4, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT WE
+  { 0x15B5, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT WI
+  { 0x15B6, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT WO
+  { 0x15B7, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT WA
+  { 0x15B8, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT NE
+  { 0x15B9, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT NI
+  { 0x15BA, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT NO
+  { 0x15BB, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT NA
+  { 0x15BC, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT KE
+  { 0x15BD, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT KI
+  { 0x15BE, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT KO
+  { 0x15BF, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT KA
+  { 0x15C0, BIDI_L   },  // CANADIAN SYLLABICS SAYISI HE
+  { 0x15C1, BIDI_L   },  // CANADIAN SYLLABICS SAYISI HI
+  { 0x15C2, BIDI_L   },  // CANADIAN SYLLABICS SAYISI HO
+  { 0x15C3, BIDI_L   },  // CANADIAN SYLLABICS SAYISI HA
+  { 0x15C4, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHU
+  { 0x15C5, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHO
+  { 0x15C6, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHE
+  { 0x15C7, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHEE
+  { 0x15C8, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHI
+  { 0x15C9, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GHA
+  { 0x15CA, BIDI_L   },  // CANADIAN SYLLABICS CARRIER RU
+  { 0x15CB, BIDI_L   },  // CANADIAN SYLLABICS CARRIER RO
+  { 0x15CC, BIDI_L   },  // CANADIAN SYLLABICS CARRIER RE
+  { 0x15CD, BIDI_L   },  // CANADIAN SYLLABICS CARRIER REE
+  { 0x15CE, BIDI_L   },  // CANADIAN SYLLABICS CARRIER RI
+  { 0x15CF, BIDI_L   },  // CANADIAN SYLLABICS CARRIER RA
+  { 0x15D0, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WU
+  { 0x15D1, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WO
+  { 0x15D2, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WE
+  { 0x15D3, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WEE
+  { 0x15D4, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WI
+  { 0x15D5, BIDI_L   },  // CANADIAN SYLLABICS CARRIER WA
+  { 0x15D6, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWU
+  { 0x15D7, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWO
+  { 0x15D8, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWE
+  { 0x15D9, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWEE
+  { 0x15DA, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWI
+  { 0x15DB, BIDI_L   },  // CANADIAN SYLLABICS CARRIER HWA
+  { 0x15DC, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THU
+  { 0x15DD, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THO
+  { 0x15DE, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THE
+  { 0x15DF, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THEE
+  { 0x15E0, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THI
+  { 0x15E1, BIDI_L   },  // CANADIAN SYLLABICS CARRIER THA
+  { 0x15E2, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTU
+  { 0x15E3, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTO
+  { 0x15E4, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTE
+  { 0x15E5, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTEE
+  { 0x15E6, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTI
+  { 0x15E7, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTA
+  { 0x15E8, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PU
+  { 0x15E9, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PO
+  { 0x15EA, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PE
+  { 0x15EB, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PEE
+  { 0x15EC, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PI
+  { 0x15ED, BIDI_L   },  // CANADIAN SYLLABICS CARRIER PA
+  { 0x15EE, BIDI_L   },  // CANADIAN SYLLABICS CARRIER P
+  { 0x15EF, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GU
+  { 0x15F0, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GO
+  { 0x15F1, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GE
+  { 0x15F2, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GEE
+  { 0x15F3, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GI
+  { 0x15F4, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GA
+  { 0x15F5, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHU
+  { 0x15F6, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHO
+  { 0x15F7, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHE
+  { 0x15F8, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHEE
+  { 0x15F9, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHI
+  { 0x15FA, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KHA
+  { 0x15FB, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKU
+  { 0x15FC, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKO
+  { 0x15FD, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKE
+  { 0x15FE, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKEE
+  { 0x15FF, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKI
+  { 0x1600, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KKA
+  { 0x1601, BIDI_L   },  // CANADIAN SYLLABICS CARRIER KK
+  { 0x1602, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NU
+  { 0x1603, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NO
+  { 0x1604, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NE
+  { 0x1605, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NEE
+  { 0x1606, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NI
+  { 0x1607, BIDI_L   },  // CANADIAN SYLLABICS CARRIER NA
+  { 0x1608, BIDI_L   },  // CANADIAN SYLLABICS CARRIER MU
+  { 0x1609, BIDI_L   },  // CANADIAN SYLLABICS CARRIER MO
+  { 0x160A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ME
+  { 0x160B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER MEE
+  { 0x160C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER MI
+  { 0x160D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER MA
+  { 0x160E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YU
+  { 0x160F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YO
+  { 0x1610, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YE
+  { 0x1611, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YEE
+  { 0x1612, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YI
+  { 0x1613, BIDI_L   },  // CANADIAN SYLLABICS CARRIER YA
+  { 0x1614, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JU
+  { 0x1615, BIDI_L   },  // CANADIAN SYLLABICS SAYISI JU
+  { 0x1616, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JO
+  { 0x1617, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JE
+  { 0x1618, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JEE
+  { 0x1619, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JI
+  { 0x161A, BIDI_L   },  // CANADIAN SYLLABICS SAYISI JI
+  { 0x161B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JA
+  { 0x161C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJU
+  { 0x161D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJO
+  { 0x161E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJE
+  { 0x161F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJEE
+  { 0x1620, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJI
+  { 0x1621, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JJA
+  { 0x1622, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LU
+  { 0x1623, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LO
+  { 0x1624, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LE
+  { 0x1625, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LEE
+  { 0x1626, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LI
+  { 0x1627, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LA
+  { 0x1628, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLU
+  { 0x1629, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLO
+  { 0x162A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLE
+  { 0x162B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLEE
+  { 0x162C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLI
+  { 0x162D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DLA
+  { 0x162E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHU
+  { 0x162F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHO
+  { 0x1630, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHE
+  { 0x1631, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHEE
+  { 0x1632, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHI
+  { 0x1633, BIDI_L   },  // CANADIAN SYLLABICS CARRIER LHA
+  { 0x1634, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHU
+  { 0x1635, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHO
+  { 0x1636, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHE
+  { 0x1637, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHEE
+  { 0x1638, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHI
+  { 0x1639, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLHA
+  { 0x163A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLU
+  { 0x163B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLO
+  { 0x163C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLE
+  { 0x163D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLEE
+  { 0x163E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLI
+  { 0x163F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TLA
+  { 0x1640, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZU
+  { 0x1641, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZO
+  { 0x1642, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZE
+  { 0x1643, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZEE
+  { 0x1644, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZI
+  { 0x1645, BIDI_L   },  // CANADIAN SYLLABICS CARRIER ZA
+  { 0x1646, BIDI_L   },  // CANADIAN SYLLABICS CARRIER Z
+  { 0x1647, BIDI_L   },  // CANADIAN SYLLABICS CARRIER INITIAL Z
+  { 0x1648, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZU
+  { 0x1649, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZO
+  { 0x164A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZE
+  { 0x164B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZEE
+  { 0x164C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZI
+  { 0x164D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DZA
+  { 0x164E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SU
+  { 0x164F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SO
+  { 0x1650, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SE
+  { 0x1651, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SEE
+  { 0x1652, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SI
+  { 0x1653, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SA
+  { 0x1654, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHU
+  { 0x1655, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHO
+  { 0x1656, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHE
+  { 0x1657, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHEE
+  { 0x1658, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHI
+  { 0x1659, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SHA
+  { 0x165A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER SH
+  { 0x165B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSU
+  { 0x165C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSO
+  { 0x165D, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSE
+  { 0x165E, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSEE
+  { 0x165F, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSI
+  { 0x1660, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TSA
+  { 0x1661, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHU
+  { 0x1662, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHO
+  { 0x1663, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHE
+  { 0x1664, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHEE
+  { 0x1665, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHI
+  { 0x1666, BIDI_L   },  // CANADIAN SYLLABICS CARRIER CHA
+  { 0x1667, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSU
+  { 0x1668, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSO
+  { 0x1669, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSE
+  { 0x166A, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSEE
+  { 0x166B, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSI
+  { 0x166C, BIDI_L   },  // CANADIAN SYLLABICS CARRIER TTSA
+  { 0x166D, BIDI_L   },  // CANADIAN SYLLABICS CHI SIGN
+  { 0x166E, BIDI_L   },  // CANADIAN SYLLABICS FULL STOP
+  { 0x166F, BIDI_L   },  // CANADIAN SYLLABICS QAI
+  { 0x1670, BIDI_L   },  // CANADIAN SYLLABICS NGAI
+  { 0x1671, BIDI_L   },  // CANADIAN SYLLABICS NNGI
+  { 0x1672, BIDI_L   },  // CANADIAN SYLLABICS NNGII
+  { 0x1673, BIDI_L   },  // CANADIAN SYLLABICS NNGO
+  { 0x1674, BIDI_L   },  // CANADIAN SYLLABICS NNGOO
+  { 0x1675, BIDI_L   },  // CANADIAN SYLLABICS NNGA
+  { 0x1676, BIDI_L   },  // CANADIAN SYLLABICS NNGAA
+  { 0x1677, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWEE
+  { 0x1678, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWI
+  { 0x1679, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWII
+  { 0x167A, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWO
+  { 0x167B, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWOO
+  { 0x167C, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWA
+  { 0x167D, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE THWAA
+  { 0x167E, BIDI_L   },  // CANADIAN SYLLABICS WOODS-CREE FINAL TH
+  { 0x167F, BIDI_L   },  // CANADIAN SYLLABICS BLACKFOOT W
+  { 0x1680, BIDI_WS  },  // OGHAM SPACE MARK
+  { 0x1681, BIDI_L   },  // OGHAM LETTER BEITH
+  { 0x1682, BIDI_L   },  // OGHAM LETTER LUIS
+  { 0x1683, BIDI_L   },  // OGHAM LETTER FEARN
+  { 0x1684, BIDI_L   },  // OGHAM LETTER SAIL
+  { 0x1685, BIDI_L   },  // OGHAM LETTER NION
+  { 0x1686, BIDI_L   },  // OGHAM LETTER UATH
+  { 0x1687, BIDI_L   },  // OGHAM LETTER DAIR
+  { 0x1688, BIDI_L   },  // OGHAM LETTER TINNE
+  { 0x1689, BIDI_L   },  // OGHAM LETTER COLL
+  { 0x168A, BIDI_L   },  // OGHAM LETTER CEIRT
+  { 0x168B, BIDI_L   },  // OGHAM LETTER MUIN
+  { 0x168C, BIDI_L   },  // OGHAM LETTER GORT
+  { 0x168D, BIDI_L   },  // OGHAM LETTER NGEADAL
+  { 0x168E, BIDI_L   },  // OGHAM LETTER STRAIF
+  { 0x168F, BIDI_L   },  // OGHAM LETTER RUIS
+  { 0x1690, BIDI_L   },  // OGHAM LETTER AILM
+  { 0x1691, BIDI_L   },  // OGHAM LETTER ONN
+  { 0x1692, BIDI_L   },  // OGHAM LETTER UR
+  { 0x1693, BIDI_L   },  // OGHAM LETTER EADHADH
+  { 0x1694, BIDI_L   },  // OGHAM LETTER IODHADH
+  { 0x1695, BIDI_L   },  // OGHAM LETTER EABHADH
+  { 0x1696, BIDI_L   },  // OGHAM LETTER OR
+  { 0x1697, BIDI_L   },  // OGHAM LETTER UILLEANN
+  { 0x1698, BIDI_L   },  // OGHAM LETTER IFIN
+  { 0x1699, BIDI_L   },  // OGHAM LETTER EAMHANCHOLL
+  { 0x169A, BIDI_L   },  // OGHAM LETTER PEITH
+  { 0x169B, BIDI_ON  },  // OGHAM FEATHER MARK
+  { 0x169C, BIDI_ON  },  // OGHAM REVERSED FEATHER MARK
+  { 0x16A0, BIDI_L   },  // RUNIC LETTER FEHU FEOH FE F
+  { 0x16A1, BIDI_L   },  // RUNIC LETTER V
+  { 0x16A2, BIDI_L   },  // RUNIC LETTER URUZ UR U
+  { 0x16A3, BIDI_L   },  // RUNIC LETTER YR
+  { 0x16A4, BIDI_L   },  // RUNIC LETTER Y
+  { 0x16A5, BIDI_L   },  // RUNIC LETTER W
+  { 0x16A6, BIDI_L   },  // RUNIC LETTER THURISAZ THURS THORN
+  { 0x16A7, BIDI_L   },  // RUNIC LETTER ETH
+  { 0x16A8, BIDI_L   },  // RUNIC LETTER ANSUZ A
+  { 0x16A9, BIDI_L   },  // RUNIC LETTER OS O
+  { 0x16AA, BIDI_L   },  // RUNIC LETTER AC A
+  { 0x16AB, BIDI_L   },  // RUNIC LETTER AESC
+  { 0x16AC, BIDI_L   },  // RUNIC LETTER LONG-BRANCH-OSS O
+  { 0x16AD, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-OSS O
+  { 0x16AE, BIDI_L   },  // RUNIC LETTER O
+  { 0x16AF, BIDI_L   },  // RUNIC LETTER OE
+  { 0x16B0, BIDI_L   },  // RUNIC LETTER ON
+  { 0x16B1, BIDI_L   },  // RUNIC LETTER RAIDO RAD REID R
+  { 0x16B2, BIDI_L   },  // RUNIC LETTER KAUNA
+  { 0x16B3, BIDI_L   },  // RUNIC LETTER CEN
+  { 0x16B4, BIDI_L   },  // RUNIC LETTER KAUN K
+  { 0x16B5, BIDI_L   },  // RUNIC LETTER G
+  { 0x16B6, BIDI_L   },  // RUNIC LETTER ENG
+  { 0x16B7, BIDI_L   },  // RUNIC LETTER GEBO GYFU G
+  { 0x16B8, BIDI_L   },  // RUNIC LETTER GAR
+  { 0x16B9, BIDI_L   },  // RUNIC LETTER WUNJO WYNN W
+  { 0x16BA, BIDI_L   },  // RUNIC LETTER HAGLAZ H
+  { 0x16BB, BIDI_L   },  // RUNIC LETTER HAEGL H
+  { 0x16BC, BIDI_L   },  // RUNIC LETTER LONG-BRANCH-HAGALL H
+  { 0x16BD, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-HAGALL H
+  { 0x16BE, BIDI_L   },  // RUNIC LETTER NAUDIZ NYD NAUD N
+  { 0x16BF, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-NAUD N
+  { 0x16C0, BIDI_L   },  // RUNIC LETTER DOTTED-N
+  { 0x16C1, BIDI_L   },  // RUNIC LETTER ISAZ IS ISS I
+  { 0x16C2, BIDI_L   },  // RUNIC LETTER E
+  { 0x16C3, BIDI_L   },  // RUNIC LETTER JERAN J
+  { 0x16C4, BIDI_L   },  // RUNIC LETTER GER
+  { 0x16C5, BIDI_L   },  // RUNIC LETTER LONG-BRANCH-AR AE
+  { 0x16C6, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-AR A
+  { 0x16C7, BIDI_L   },  // RUNIC LETTER IWAZ EOH
+  { 0x16C8, BIDI_L   },  // RUNIC LETTER PERTHO PEORTH P
+  { 0x16C9, BIDI_L   },  // RUNIC LETTER ALGIZ EOLHX
+  { 0x16CA, BIDI_L   },  // RUNIC LETTER SOWILO S
+  { 0x16CB, BIDI_L   },  // RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+  { 0x16CC, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-SOL S
+  { 0x16CD, BIDI_L   },  // RUNIC LETTER C
+  { 0x16CE, BIDI_L   },  // RUNIC LETTER Z
+  { 0x16CF, BIDI_L   },  // RUNIC LETTER TIWAZ TIR TYR T
+  { 0x16D0, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-TYR T
+  { 0x16D1, BIDI_L   },  // RUNIC LETTER D
+  { 0x16D2, BIDI_L   },  // RUNIC LETTER BERKANAN BEORC BJARKAN B
+  { 0x16D3, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-BJARKAN B
+  { 0x16D4, BIDI_L   },  // RUNIC LETTER DOTTED-P
+  { 0x16D5, BIDI_L   },  // RUNIC LETTER OPEN-P
+  { 0x16D6, BIDI_L   },  // RUNIC LETTER EHWAZ EH E
+  { 0x16D7, BIDI_L   },  // RUNIC LETTER MANNAZ MAN M
+  { 0x16D8, BIDI_L   },  // RUNIC LETTER LONG-BRANCH-MADR M
+  { 0x16D9, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-MADR M
+  { 0x16DA, BIDI_L   },  // RUNIC LETTER LAUKAZ LAGU LOGR L
+  { 0x16DB, BIDI_L   },  // RUNIC LETTER DOTTED-L
+  { 0x16DC, BIDI_L   },  // RUNIC LETTER INGWAZ
+  { 0x16DD, BIDI_L   },  // RUNIC LETTER ING
+  { 0x16DE, BIDI_L   },  // RUNIC LETTER DAGAZ DAEG D
+  { 0x16DF, BIDI_L   },  // RUNIC LETTER OTHALAN ETHEL O
+  { 0x16E0, BIDI_L   },  // RUNIC LETTER EAR
+  { 0x16E1, BIDI_L   },  // RUNIC LETTER IOR
+  { 0x16E2, BIDI_L   },  // RUNIC LETTER CWEORTH
+  { 0x16E3, BIDI_L   },  // RUNIC LETTER CALC
+  { 0x16E4, BIDI_L   },  // RUNIC LETTER CEALC
+  { 0x16E5, BIDI_L   },  // RUNIC LETTER STAN
+  { 0x16E6, BIDI_L   },  // RUNIC LETTER LONG-BRANCH-YR
+  { 0x16E7, BIDI_L   },  // RUNIC LETTER SHORT-TWIG-YR
+  { 0x16E8, BIDI_L   },  // RUNIC LETTER ICELANDIC-YR
+  { 0x16E9, BIDI_L   },  // RUNIC LETTER Q
+  { 0x16EA, BIDI_L   },  // RUNIC LETTER X
+  { 0x16EB, BIDI_L   },  // RUNIC SINGLE PUNCTUATION
+  { 0x16EC, BIDI_L   },  // RUNIC MULTIPLE PUNCTUATION
+  { 0x16ED, BIDI_L   },  // RUNIC CROSS PUNCTUATION
+  { 0x16EE, BIDI_L   },  // RUNIC ARLAUG SYMBOL
+  { 0x16EF, BIDI_L   },  // RUNIC TVIMADUR SYMBOL
+  { 0x16F0, BIDI_L   },  // RUNIC BELGTHOR SYMBOL
+  { 0x16F1, BIDI_L   },  // RUNIC LETTER K
+  { 0x16F2, BIDI_L   },  // RUNIC LETTER SH
+  { 0x16F3, BIDI_L   },  // RUNIC LETTER OO
+  { 0x16F4, BIDI_L   },  // RUNIC LETTER FRANKS CASKET OS
+  { 0x16F5, BIDI_L   },  // RUNIC LETTER FRANKS CASKET IS
+  { 0x16F6, BIDI_L   },  // RUNIC LETTER FRANKS CASKET EH
+  { 0x16F7, BIDI_L   },  // RUNIC LETTER FRANKS CASKET AC
+  { 0x16F8, BIDI_L   },  // RUNIC LETTER FRANKS CASKET AESC
+  { 0x1700, BIDI_L   },  // TAGALOG LETTER A
+  { 0x1701, BIDI_L   },  // TAGALOG LETTER I
+  { 0x1702, BIDI_L   },  // TAGALOG LETTER U
+  { 0x1703, BIDI_L   },  // TAGALOG LETTER KA
+  { 0x1704, BIDI_L   },  // TAGALOG LETTER GA
+  { 0x1705, BIDI_L   },  // TAGALOG LETTER NGA
+  { 0x1706, BIDI_L   },  // TAGALOG LETTER TA
+  { 0x1707, BIDI_L   },  // TAGALOG LETTER DA
+  { 0x1708, BIDI_L   },  // TAGALOG LETTER NA
+  { 0x1709, BIDI_L   },  // TAGALOG LETTER PA
+  { 0x170A, BIDI_L   },  // TAGALOG LETTER BA
+  { 0x170B, BIDI_L   },  // TAGALOG LETTER MA
+  { 0x170C, BIDI_L   },  // TAGALOG LETTER YA
+  { 0x170E, BIDI_L   },  // TAGALOG LETTER LA
+  { 0x170F, BIDI_L   },  // TAGALOG LETTER WA
+  { 0x1710, BIDI_L   },  // TAGALOG LETTER SA
+  { 0x1711, BIDI_L   },  // TAGALOG LETTER HA
+  { 0x1712, BIDI_NSM },  // TAGALOG VOWEL SIGN I
+  { 0x1713, BIDI_NSM },  // TAGALOG VOWEL SIGN U
+  { 0x1714, BIDI_NSM },  // TAGALOG SIGN VIRAMA
+  { 0x1720, BIDI_L   },  // HANUNOO LETTER A
+  { 0x1721, BIDI_L   },  // HANUNOO LETTER I
+  { 0x1722, BIDI_L   },  // HANUNOO LETTER U
+  { 0x1723, BIDI_L   },  // HANUNOO LETTER KA
+  { 0x1724, BIDI_L   },  // HANUNOO LETTER GA
+  { 0x1725, BIDI_L   },  // HANUNOO LETTER NGA
+  { 0x1726, BIDI_L   },  // HANUNOO LETTER TA
+  { 0x1727, BIDI_L   },  // HANUNOO LETTER DA
+  { 0x1728, BIDI_L   },  // HANUNOO LETTER NA
+  { 0x1729, BIDI_L   },  // HANUNOO LETTER PA
+  { 0x172A, BIDI_L   },  // HANUNOO LETTER BA
+  { 0x172B, BIDI_L   },  // HANUNOO LETTER MA
+  { 0x172C, BIDI_L   },  // HANUNOO LETTER YA
+  { 0x172D, BIDI_L   },  // HANUNOO LETTER RA
+  { 0x172E, BIDI_L   },  // HANUNOO LETTER LA
+  { 0x172F, BIDI_L   },  // HANUNOO LETTER WA
+  { 0x1730, BIDI_L   },  // HANUNOO LETTER SA
+  { 0x1731, BIDI_L   },  // HANUNOO LETTER HA
+  { 0x1732, BIDI_NSM },  // HANUNOO VOWEL SIGN I
+  { 0x1733, BIDI_NSM },  // HANUNOO VOWEL SIGN U
+  { 0x1734, BIDI_NSM },  // HANUNOO SIGN PAMUDPOD
+  { 0x1735, BIDI_L   },  // PHILIPPINE SINGLE PUNCTUATION
+  { 0x1736, BIDI_L   },  // PHILIPPINE DOUBLE PUNCTUATION
+  { 0x1740, BIDI_L   },  // BUHID LETTER A
+  { 0x1741, BIDI_L   },  // BUHID LETTER I
+  { 0x1742, BIDI_L   },  // BUHID LETTER U
+  { 0x1743, BIDI_L   },  // BUHID LETTER KA
+  { 0x1744, BIDI_L   },  // BUHID LETTER GA
+  { 0x1745, BIDI_L   },  // BUHID LETTER NGA
+  { 0x1746, BIDI_L   },  // BUHID LETTER TA
+  { 0x1747, BIDI_L   },  // BUHID LETTER DA
+  { 0x1748, BIDI_L   },  // BUHID LETTER NA
+  { 0x1749, BIDI_L   },  // BUHID LETTER PA
+  { 0x174A, BIDI_L   },  // BUHID LETTER BA
+  { 0x174B, BIDI_L   },  // BUHID LETTER MA
+  { 0x174C, BIDI_L   },  // BUHID LETTER YA
+  { 0x174D, BIDI_L   },  // BUHID LETTER RA
+  { 0x174E, BIDI_L   },  // BUHID LETTER LA
+  { 0x174F, BIDI_L   },  // BUHID LETTER WA
+  { 0x1750, BIDI_L   },  // BUHID LETTER SA
+  { 0x1751, BIDI_L   },  // BUHID LETTER HA
+  { 0x1752, BIDI_NSM },  // BUHID VOWEL SIGN I
+  { 0x1753, BIDI_NSM },  // BUHID VOWEL SIGN U
+  { 0x1760, BIDI_L   },  // TAGBANWA LETTER A
+  { 0x1761, BIDI_L   },  // TAGBANWA LETTER I
+  { 0x1762, BIDI_L   },  // TAGBANWA LETTER U
+  { 0x1763, BIDI_L   },  // TAGBANWA LETTER KA
+  { 0x1764, BIDI_L   },  // TAGBANWA LETTER GA
+  { 0x1765, BIDI_L   },  // TAGBANWA LETTER NGA
+  { 0x1766, BIDI_L   },  // TAGBANWA LETTER TA
+  { 0x1767, BIDI_L   },  // TAGBANWA LETTER DA
+  { 0x1768, BIDI_L   },  // TAGBANWA LETTER NA
+  { 0x1769, BIDI_L   },  // TAGBANWA LETTER PA
+  { 0x176A, BIDI_L   },  // TAGBANWA LETTER BA
+  { 0x176B, BIDI_L   },  // TAGBANWA LETTER MA
+  { 0x176C, BIDI_L   },  // TAGBANWA LETTER YA
+  { 0x176E, BIDI_L   },  // TAGBANWA LETTER LA
+  { 0x176F, BIDI_L   },  // TAGBANWA LETTER WA
+  { 0x1770, BIDI_L   },  // TAGBANWA LETTER SA
+  { 0x1772, BIDI_NSM },  // TAGBANWA VOWEL SIGN I
+  { 0x1773, BIDI_NSM },  // TAGBANWA VOWEL SIGN U
+  { 0x1780, BIDI_L   },  // KHMER LETTER KA
+  { 0x1781, BIDI_L   },  // KHMER LETTER KHA
+  { 0x1782, BIDI_L   },  // KHMER LETTER KO
+  { 0x1783, BIDI_L   },  // KHMER LETTER KHO
+  { 0x1784, BIDI_L   },  // KHMER LETTER NGO
+  { 0x1785, BIDI_L   },  // KHMER LETTER CA
+  { 0x1786, BIDI_L   },  // KHMER LETTER CHA
+  { 0x1787, BIDI_L   },  // KHMER LETTER CO
+  { 0x1788, BIDI_L   },  // KHMER LETTER CHO
+  { 0x1789, BIDI_L   },  // KHMER LETTER NYO
+  { 0x178A, BIDI_L   },  // KHMER LETTER DA
+  { 0x178B, BIDI_L   },  // KHMER LETTER TTHA
+  { 0x178C, BIDI_L   },  // KHMER LETTER DO
+  { 0x178D, BIDI_L   },  // KHMER LETTER TTHO
+  { 0x178E, BIDI_L   },  // KHMER LETTER NNO
+  { 0x178F, BIDI_L   },  // KHMER LETTER TA
+  { 0x1790, BIDI_L   },  // KHMER LETTER THA
+  { 0x1791, BIDI_L   },  // KHMER LETTER TO
+  { 0x1792, BIDI_L   },  // KHMER LETTER THO
+  { 0x1793, BIDI_L   },  // KHMER LETTER NO
+  { 0x1794, BIDI_L   },  // KHMER LETTER BA
+  { 0x1795, BIDI_L   },  // KHMER LETTER PHA
+  { 0x1796, BIDI_L   },  // KHMER LETTER PO
+  { 0x1797, BIDI_L   },  // KHMER LETTER PHO
+  { 0x1798, BIDI_L   },  // KHMER LETTER MO
+  { 0x1799, BIDI_L   },  // KHMER LETTER YO
+  { 0x179A, BIDI_L   },  // KHMER LETTER RO
+  { 0x179B, BIDI_L   },  // KHMER LETTER LO
+  { 0x179C, BIDI_L   },  // KHMER LETTER VO
+  { 0x179D, BIDI_L   },  // KHMER LETTER SHA
+  { 0x179E, BIDI_L   },  // KHMER LETTER SSO
+  { 0x179F, BIDI_L   },  // KHMER LETTER SA
+  { 0x17A0, BIDI_L   },  // KHMER LETTER HA
+  { 0x17A1, BIDI_L   },  // KHMER LETTER LA
+  { 0x17A2, BIDI_L   },  // KHMER LETTER QA
+  { 0x17A3, BIDI_L   },  // KHMER INDEPENDENT VOWEL QAQ
+  { 0x17A4, BIDI_L   },  // KHMER INDEPENDENT VOWEL QAA
+  { 0x17A5, BIDI_L   },  // KHMER INDEPENDENT VOWEL QI
+  { 0x17A6, BIDI_L   },  // KHMER INDEPENDENT VOWEL QII
+  { 0x17A7, BIDI_L   },  // KHMER INDEPENDENT VOWEL QU
+  { 0x17A8, BIDI_L   },  // KHMER INDEPENDENT VOWEL QUK
+  { 0x17A9, BIDI_L   },  // KHMER INDEPENDENT VOWEL QUU
+  { 0x17AA, BIDI_L   },  // KHMER INDEPENDENT VOWEL QUUV
+  { 0x17AB, BIDI_L   },  // KHMER INDEPENDENT VOWEL RY
+  { 0x17AC, BIDI_L   },  // KHMER INDEPENDENT VOWEL RYY
+  { 0x17AD, BIDI_L   },  // KHMER INDEPENDENT VOWEL LY
+  { 0x17AE, BIDI_L   },  // KHMER INDEPENDENT VOWEL LYY
+  { 0x17AF, BIDI_L   },  // KHMER INDEPENDENT VOWEL QE
+  { 0x17B0, BIDI_L   },  // KHMER INDEPENDENT VOWEL QAI
+  { 0x17B1, BIDI_L   },  // KHMER INDEPENDENT VOWEL QOO TYPE ONE
+  { 0x17B2, BIDI_L   },  // KHMER INDEPENDENT VOWEL QOO TYPE TWO
+  { 0x17B3, BIDI_L   },  // KHMER INDEPENDENT VOWEL QAU
+  { 0x17B4, BIDI_NSM },  // KHMER VOWEL INHERENT AQ
+  { 0x17B5, BIDI_NSM },  // KHMER VOWEL INHERENT AA
+  { 0x17B6, BIDI_L   },  // KHMER VOWEL SIGN AA
+  { 0x17B7, BIDI_NSM },  // KHMER VOWEL SIGN I
+  { 0x17B8, BIDI_NSM },  // KHMER VOWEL SIGN II
+  { 0x17B9, BIDI_NSM },  // KHMER VOWEL SIGN Y
+  { 0x17BA, BIDI_NSM },  // KHMER VOWEL SIGN YY
+  { 0x17BB, BIDI_NSM },  // KHMER VOWEL SIGN U
+  { 0x17BC, BIDI_NSM },  // KHMER VOWEL SIGN UU
+  { 0x17BD, BIDI_NSM },  // KHMER VOWEL SIGN UA
+  { 0x17BE, BIDI_L   },  // KHMER VOWEL SIGN OE
+  { 0x17BF, BIDI_L   },  // KHMER VOWEL SIGN YA
+  { 0x17C0, BIDI_L   },  // KHMER VOWEL SIGN IE
+  { 0x17C1, BIDI_L   },  // KHMER VOWEL SIGN E
+  { 0x17C2, BIDI_L   },  // KHMER VOWEL SIGN AE
+  { 0x17C3, BIDI_L   },  // KHMER VOWEL SIGN AI
+  { 0x17C4, BIDI_L   },  // KHMER VOWEL SIGN OO
+  { 0x17C5, BIDI_L   },  // KHMER VOWEL SIGN AU
+  { 0x17C6, BIDI_NSM },  // KHMER SIGN NIKAHIT
+  { 0x17C7, BIDI_L   },  // KHMER SIGN REAHMUK
+  { 0x17C8, BIDI_L   },  // KHMER SIGN YUUKALEAPINTU
+  { 0x17C9, BIDI_NSM },  // KHMER SIGN MUUSIKATOAN
+  { 0x17CA, BIDI_NSM },  // KHMER SIGN TRIISAP
+  { 0x17CB, BIDI_NSM },  // KHMER SIGN BANTOC
+  { 0x17CC, BIDI_NSM },  // KHMER SIGN ROBAT
+  { 0x17CD, BIDI_NSM },  // KHMER SIGN TOANDAKHIAT
+  { 0x17CE, BIDI_NSM },  // KHMER SIGN KAKABAT
+  { 0x17CF, BIDI_NSM },  // KHMER SIGN AHSDA
+  { 0x17D0, BIDI_NSM },  // KHMER SIGN SAMYOK SANNYA
+  { 0x17D1, BIDI_NSM },  // KHMER SIGN VIRIAM
+  { 0x17D2, BIDI_NSM },  // KHMER SIGN COENG
+  { 0x17D3, BIDI_NSM },  // KHMER SIGN BATHAMASAT
+  { 0x17D4, BIDI_L   },  // KHMER SIGN KHAN
+  { 0x17D5, BIDI_L   },  // KHMER SIGN BARIYOOSAN
+  { 0x17D6, BIDI_L   },  // KHMER SIGN CAMNUC PII KUUH
+  { 0x17D7, BIDI_L   },  // KHMER SIGN LEK TOO
+  { 0x17D8, BIDI_L   },  // KHMER SIGN BEYYAL
+  { 0x17D9, BIDI_L   },  // KHMER SIGN PHNAEK MUAN
+  { 0x17DA, BIDI_L   },  // KHMER SIGN KOOMUUT
+  { 0x17DB, BIDI_ET  },  // KHMER CURRENCY SYMBOL RIEL
+  { 0x17DC, BIDI_L   },  // KHMER SIGN AVAKRAHASANYA
+  { 0x17DD, BIDI_NSM },  // KHMER SIGN ATTHACAN
+  { 0x17E0, BIDI_L   },  // KHMER DIGIT ZERO
+  { 0x17E1, BIDI_L   },  // KHMER DIGIT ONE
+  { 0x17E2, BIDI_L   },  // KHMER DIGIT TWO
+  { 0x17E3, BIDI_L   },  // KHMER DIGIT THREE
+  { 0x17E4, BIDI_L   },  // KHMER DIGIT FOUR
+  { 0x17E5, BIDI_L   },  // KHMER DIGIT FIVE
+  { 0x17E6, BIDI_L   },  // KHMER DIGIT SIX
+  { 0x17E7, BIDI_L   },  // KHMER DIGIT SEVEN
+  { 0x17E8, BIDI_L   },  // KHMER DIGIT EIGHT
+  { 0x17E9, BIDI_L   },  // KHMER DIGIT NINE
+  { 0x17F0, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK SON
+  { 0x17F1, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK MUOY
+  { 0x17F2, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PII
+  { 0x17F3, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK BEI
+  { 0x17F4, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK BUON
+  { 0x17F5, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PRAM
+  { 0x17F6, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PRAM-MUOY
+  { 0x17F7, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PRAM-PII
+  { 0x17F8, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PRAM-BEI
+  { 0x17F9, BIDI_ON  },  // KHMER SYMBOL LEK ATTAK PRAM-BUON
+  { 0x1800, BIDI_ON  },  // MONGOLIAN BIRGA
+  { 0x1801, BIDI_ON  },  // MONGOLIAN ELLIPSIS
+  { 0x1802, BIDI_ON  },  // MONGOLIAN COMMA
+  { 0x1803, BIDI_ON  },  // MONGOLIAN FULL STOP
+  { 0x1804, BIDI_ON  },  // MONGOLIAN COLON
+  { 0x1805, BIDI_ON  },  // MONGOLIAN FOUR DOTS
+  { 0x1806, BIDI_ON  },  // MONGOLIAN TODO SOFT HYPHEN
+  { 0x1807, BIDI_ON  },  // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+  { 0x1808, BIDI_ON  },  // MONGOLIAN MANCHU COMMA
+  { 0x1809, BIDI_ON  },  // MONGOLIAN MANCHU FULL STOP
+  { 0x180A, BIDI_ON  },  // MONGOLIAN NIRUGU
+  { 0x180B, BIDI_NSM },  // MONGOLIAN FREE VARIATION SELECTOR ONE
+  { 0x180C, BIDI_NSM },  // MONGOLIAN FREE VARIATION SELECTOR TWO
+  { 0x180D, BIDI_NSM },  // MONGOLIAN FREE VARIATION SELECTOR THREE
+  { 0x180E, BIDI_BN  },  // MONGOLIAN VOWEL SEPARATOR
+  { 0x1810, BIDI_L   },  // MONGOLIAN DIGIT ZERO
+  { 0x1811, BIDI_L   },  // MONGOLIAN DIGIT ONE
+  { 0x1812, BIDI_L   },  // MONGOLIAN DIGIT TWO
+  { 0x1813, BIDI_L   },  // MONGOLIAN DIGIT THREE
+  { 0x1814, BIDI_L   },  // MONGOLIAN DIGIT FOUR
+  { 0x1815, BIDI_L   },  // MONGOLIAN DIGIT FIVE
+  { 0x1816, BIDI_L   },  // MONGOLIAN DIGIT SIX
+  { 0x1817, BIDI_L   },  // MONGOLIAN DIGIT SEVEN
+  { 0x1818, BIDI_L   },  // MONGOLIAN DIGIT EIGHT
+  { 0x1819, BIDI_L   },  // MONGOLIAN DIGIT NINE
+  { 0x1820, BIDI_L   },  // MONGOLIAN LETTER A
+  { 0x1821, BIDI_L   },  // MONGOLIAN LETTER E
+  { 0x1822, BIDI_L   },  // MONGOLIAN LETTER I
+  { 0x1823, BIDI_L   },  // MONGOLIAN LETTER O
+  { 0x1824, BIDI_L   },  // MONGOLIAN LETTER U
+  { 0x1825, BIDI_L   },  // MONGOLIAN LETTER OE
+  { 0x1826, BIDI_L   },  // MONGOLIAN LETTER UE
+  { 0x1827, BIDI_L   },  // MONGOLIAN LETTER EE
+  { 0x1828, BIDI_L   },  // MONGOLIAN LETTER NA
+  { 0x1829, BIDI_L   },  // MONGOLIAN LETTER ANG
+  { 0x182A, BIDI_L   },  // MONGOLIAN LETTER BA
+  { 0x182B, BIDI_L   },  // MONGOLIAN LETTER PA
+  { 0x182C, BIDI_L   },  // MONGOLIAN LETTER QA
+  { 0x182D, BIDI_L   },  // MONGOLIAN LETTER GA
+  { 0x182E, BIDI_L   },  // MONGOLIAN LETTER MA
+  { 0x182F, BIDI_L   },  // MONGOLIAN LETTER LA
+  { 0x1830, BIDI_L   },  // MONGOLIAN LETTER SA
+  { 0x1831, BIDI_L   },  // MONGOLIAN LETTER SHA
+  { 0x1832, BIDI_L   },  // MONGOLIAN LETTER TA
+  { 0x1833, BIDI_L   },  // MONGOLIAN LETTER DA
+  { 0x1834, BIDI_L   },  // MONGOLIAN LETTER CHA
+  { 0x1835, BIDI_L   },  // MONGOLIAN LETTER JA
+  { 0x1836, BIDI_L   },  // MONGOLIAN LETTER YA
+  { 0x1837, BIDI_L   },  // MONGOLIAN LETTER RA
+  { 0x1838, BIDI_L   },  // MONGOLIAN LETTER WA
+  { 0x1839, BIDI_L   },  // MONGOLIAN LETTER FA
+  { 0x183A, BIDI_L   },  // MONGOLIAN LETTER KA
+  { 0x183B, BIDI_L   },  // MONGOLIAN LETTER KHA
+  { 0x183C, BIDI_L   },  // MONGOLIAN LETTER TSA
+  { 0x183D, BIDI_L   },  // MONGOLIAN LETTER ZA
+  { 0x183E, BIDI_L   },  // MONGOLIAN LETTER HAA
+  { 0x183F, BIDI_L   },  // MONGOLIAN LETTER ZRA
+  { 0x1840, BIDI_L   },  // MONGOLIAN LETTER LHA
+  { 0x1841, BIDI_L   },  // MONGOLIAN LETTER ZHI
+  { 0x1842, BIDI_L   },  // MONGOLIAN LETTER CHI
+  { 0x1843, BIDI_L   },  // MONGOLIAN LETTER TODO LONG VOWEL SIGN
+  { 0x1844, BIDI_L   },  // MONGOLIAN LETTER TODO E
+  { 0x1845, BIDI_L   },  // MONGOLIAN LETTER TODO I
+  { 0x1846, BIDI_L   },  // MONGOLIAN LETTER TODO O
+  { 0x1847, BIDI_L   },  // MONGOLIAN LETTER TODO U
+  { 0x1848, BIDI_L   },  // MONGOLIAN LETTER TODO OE
+  { 0x1849, BIDI_L   },  // MONGOLIAN LETTER TODO UE
+  { 0x184A, BIDI_L   },  // MONGOLIAN LETTER TODO ANG
+  { 0x184B, BIDI_L   },  // MONGOLIAN LETTER TODO BA
+  { 0x184C, BIDI_L   },  // MONGOLIAN LETTER TODO PA
+  { 0x184D, BIDI_L   },  // MONGOLIAN LETTER TODO QA
+  { 0x184E, BIDI_L   },  // MONGOLIAN LETTER TODO GA
+  { 0x184F, BIDI_L   },  // MONGOLIAN LETTER TODO MA
+  { 0x1850, BIDI_L   },  // MONGOLIAN LETTER TODO TA
+  { 0x1851, BIDI_L   },  // MONGOLIAN LETTER TODO DA
+  { 0x1852, BIDI_L   },  // MONGOLIAN LETTER TODO CHA
+  { 0x1853, BIDI_L   },  // MONGOLIAN LETTER TODO JA
+  { 0x1854, BIDI_L   },  // MONGOLIAN LETTER TODO TSA
+  { 0x1855, BIDI_L   },  // MONGOLIAN LETTER TODO YA
+  { 0x1856, BIDI_L   },  // MONGOLIAN LETTER TODO WA
+  { 0x1857, BIDI_L   },  // MONGOLIAN LETTER TODO KA
+  { 0x1858, BIDI_L   },  // MONGOLIAN LETTER TODO GAA
+  { 0x1859, BIDI_L   },  // MONGOLIAN LETTER TODO HAA
+  { 0x185A, BIDI_L   },  // MONGOLIAN LETTER TODO JIA
+  { 0x185B, BIDI_L   },  // MONGOLIAN LETTER TODO NIA
+  { 0x185C, BIDI_L   },  // MONGOLIAN LETTER TODO DZA
+  { 0x185D, BIDI_L   },  // MONGOLIAN LETTER SIBE E
+  { 0x185E, BIDI_L   },  // MONGOLIAN LETTER SIBE I
+  { 0x185F, BIDI_L   },  // MONGOLIAN LETTER SIBE IY
+  { 0x1860, BIDI_L   },  // MONGOLIAN LETTER SIBE UE
+  { 0x1861, BIDI_L   },  // MONGOLIAN LETTER SIBE U
+  { 0x1862, BIDI_L   },  // MONGOLIAN LETTER SIBE ANG
+  { 0x1863, BIDI_L   },  // MONGOLIAN LETTER SIBE KA
+  { 0x1864, BIDI_L   },  // MONGOLIAN LETTER SIBE GA
+  { 0x1865, BIDI_L   },  // MONGOLIAN LETTER SIBE HA
+  { 0x1866, BIDI_L   },  // MONGOLIAN LETTER SIBE PA
+  { 0x1867, BIDI_L   },  // MONGOLIAN LETTER SIBE SHA
+  { 0x1868, BIDI_L   },  // MONGOLIAN LETTER SIBE TA
+  { 0x1869, BIDI_L   },  // MONGOLIAN LETTER SIBE DA
+  { 0x186A, BIDI_L   },  // MONGOLIAN LETTER SIBE JA
+  { 0x186B, BIDI_L   },  // MONGOLIAN LETTER SIBE FA
+  { 0x186C, BIDI_L   },  // MONGOLIAN LETTER SIBE GAA
+  { 0x186D, BIDI_L   },  // MONGOLIAN LETTER SIBE HAA
+  { 0x186E, BIDI_L   },  // MONGOLIAN LETTER SIBE TSA
+  { 0x186F, BIDI_L   },  // MONGOLIAN LETTER SIBE ZA
+  { 0x1870, BIDI_L   },  // MONGOLIAN LETTER SIBE RAA
+  { 0x1871, BIDI_L   },  // MONGOLIAN LETTER SIBE CHA
+  { 0x1872, BIDI_L   },  // MONGOLIAN LETTER SIBE ZHA
+  { 0x1873, BIDI_L   },  // MONGOLIAN LETTER MANCHU I
+  { 0x1874, BIDI_L   },  // MONGOLIAN LETTER MANCHU KA
+  { 0x1875, BIDI_L   },  // MONGOLIAN LETTER MANCHU RA
+  { 0x1876, BIDI_L   },  // MONGOLIAN LETTER MANCHU FA
+  { 0x1877, BIDI_L   },  // MONGOLIAN LETTER MANCHU ZHA
+  { 0x1880, BIDI_L   },  // MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+  { 0x1881, BIDI_L   },  // MONGOLIAN LETTER ALI GALI VISARGA ONE
+  { 0x1882, BIDI_L   },  // MONGOLIAN LETTER ALI GALI DAMARU
+  { 0x1883, BIDI_L   },  // MONGOLIAN LETTER ALI GALI UBADAMA
+  { 0x1884, BIDI_L   },  // MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+  { 0x1885, BIDI_L   },  // MONGOLIAN LETTER ALI GALI BALUDA
+  { 0x1886, BIDI_L   },  // MONGOLIAN LETTER ALI GALI THREE BALUDA
+  { 0x1887, BIDI_L   },  // MONGOLIAN LETTER ALI GALI A
+  { 0x1888, BIDI_L   },  // MONGOLIAN LETTER ALI GALI I
+  { 0x1889, BIDI_L   },  // MONGOLIAN LETTER ALI GALI KA
+  { 0x188A, BIDI_L   },  // MONGOLIAN LETTER ALI GALI NGA
+  { 0x188B, BIDI_L   },  // MONGOLIAN LETTER ALI GALI CA
+  { 0x188C, BIDI_L   },  // MONGOLIAN LETTER ALI GALI TTA
+  { 0x188D, BIDI_L   },  // MONGOLIAN LETTER ALI GALI TTHA
+  { 0x188E, BIDI_L   },  // MONGOLIAN LETTER ALI GALI DDA
+  { 0x188F, BIDI_L   },  // MONGOLIAN LETTER ALI GALI NNA
+  { 0x1890, BIDI_L   },  // MONGOLIAN LETTER ALI GALI TA
+  { 0x1891, BIDI_L   },  // MONGOLIAN LETTER ALI GALI DA
+  { 0x1892, BIDI_L   },  // MONGOLIAN LETTER ALI GALI PA
+  { 0x1893, BIDI_L   },  // MONGOLIAN LETTER ALI GALI PHA
+  { 0x1894, BIDI_L   },  // MONGOLIAN LETTER ALI GALI SSA
+  { 0x1895, BIDI_L   },  // MONGOLIAN LETTER ALI GALI ZHA
+  { 0x1896, BIDI_L   },  // MONGOLIAN LETTER ALI GALI ZA
+  { 0x1897, BIDI_L   },  // MONGOLIAN LETTER ALI GALI AH
+  { 0x1898, BIDI_L   },  // MONGOLIAN LETTER TODO ALI GALI TA
+  { 0x1899, BIDI_L   },  // MONGOLIAN LETTER TODO ALI GALI ZHA
+  { 0x189A, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI GHA
+  { 0x189B, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI NGA
+  { 0x189C, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI CA
+  { 0x189D, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI JHA
+  { 0x189E, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI TTA
+  { 0x189F, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI DDHA
+  { 0x18A0, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI TA
+  { 0x18A1, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI DHA
+  { 0x18A2, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI SSA
+  { 0x18A3, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI CYA
+  { 0x18A4, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI ZHA
+  { 0x18A5, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI ZA
+  { 0x18A6, BIDI_L   },  // MONGOLIAN LETTER ALI GALI HALF U
+  { 0x18A7, BIDI_L   },  // MONGOLIAN LETTER ALI GALI HALF YA
+  { 0x18A8, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI BHA
+  { 0x18A9, BIDI_NSM },  // MONGOLIAN LETTER ALI GALI DAGALGA
+  { 0x18AA, BIDI_L   },  // MONGOLIAN LETTER MANCHU ALI GALI LHA
+  { 0x18B0, BIDI_L   },  // CANADIAN SYLLABICS OY
+  { 0x18B1, BIDI_L   },  // CANADIAN SYLLABICS AY
+  { 0x18B2, BIDI_L   },  // CANADIAN SYLLABICS AAY
+  { 0x18B3, BIDI_L   },  // CANADIAN SYLLABICS WAY
+  { 0x18B4, BIDI_L   },  // CANADIAN SYLLABICS POY
+  { 0x18B5, BIDI_L   },  // CANADIAN SYLLABICS PAY
+  { 0x18B6, BIDI_L   },  // CANADIAN SYLLABICS PWOY
+  { 0x18B7, BIDI_L   },  // CANADIAN SYLLABICS TAY
+  { 0x18B8, BIDI_L   },  // CANADIAN SYLLABICS KAY
+  { 0x18B9, BIDI_L   },  // CANADIAN SYLLABICS KWAY
+  { 0x18BA, BIDI_L   },  // CANADIAN SYLLABICS MAY
+  { 0x18BB, BIDI_L   },  // CANADIAN SYLLABICS NOY
+  { 0x18BC, BIDI_L   },  // CANADIAN SYLLABICS NAY
+  { 0x18BD, BIDI_L   },  // CANADIAN SYLLABICS LAY
+  { 0x18BE, BIDI_L   },  // CANADIAN SYLLABICS SOY
+  { 0x18BF, BIDI_L   },  // CANADIAN SYLLABICS SAY
+  { 0x18C0, BIDI_L   },  // CANADIAN SYLLABICS SHOY
+  { 0x18C1, BIDI_L   },  // CANADIAN SYLLABICS SHAY
+  { 0x18C2, BIDI_L   },  // CANADIAN SYLLABICS SHWOY
+  { 0x18C3, BIDI_L   },  // CANADIAN SYLLABICS YOY
+  { 0x18C4, BIDI_L   },  // CANADIAN SYLLABICS YAY
+  { 0x18C5, BIDI_L   },  // CANADIAN SYLLABICS RAY
+  { 0x18C6, BIDI_L   },  // CANADIAN SYLLABICS NWI
+  { 0x18C7, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY NWI
+  { 0x18C8, BIDI_L   },  // CANADIAN SYLLABICS NWII
+  { 0x18C9, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY NWII
+  { 0x18CA, BIDI_L   },  // CANADIAN SYLLABICS NWO
+  { 0x18CB, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY NWO
+  { 0x18CC, BIDI_L   },  // CANADIAN SYLLABICS NWOO
+  { 0x18CD, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY NWOO
+  { 0x18CE, BIDI_L   },  // CANADIAN SYLLABICS RWEE
+  { 0x18CF, BIDI_L   },  // CANADIAN SYLLABICS RWI
+  { 0x18D0, BIDI_L   },  // CANADIAN SYLLABICS RWII
+  { 0x18D1, BIDI_L   },  // CANADIAN SYLLABICS RWO
+  { 0x18D2, BIDI_L   },  // CANADIAN SYLLABICS RWOO
+  { 0x18D3, BIDI_L   },  // CANADIAN SYLLABICS RWA
+  { 0x18D4, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY P
+  { 0x18D5, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY T
+  { 0x18D6, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY K
+  { 0x18D7, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY C
+  { 0x18D8, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY M
+  { 0x18D9, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY N
+  { 0x18DA, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY S
+  { 0x18DB, BIDI_L   },  // CANADIAN SYLLABICS OJIBWAY SH
+  { 0x18DC, BIDI_L   },  // CANADIAN SYLLABICS EASTERN W
+  { 0x18DD, BIDI_L   },  // CANADIAN SYLLABICS WESTERN W
+  { 0x18DE, BIDI_L   },  // CANADIAN SYLLABICS FINAL SMALL RING
+  { 0x18DF, BIDI_L   },  // CANADIAN SYLLABICS FINAL RAISED DOT
+  { 0x18E0, BIDI_L   },  // CANADIAN SYLLABICS R-CREE RWE
+  { 0x18E1, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LOO
+  { 0x18E2, BIDI_L   },  // CANADIAN SYLLABICS WEST-CREE LAA
+  { 0x18E3, BIDI_L   },  // CANADIAN SYLLABICS THWE
+  { 0x18E4, BIDI_L   },  // CANADIAN SYLLABICS THWA
+  { 0x18E5, BIDI_L   },  // CANADIAN SYLLABICS TTHWE
+  { 0x18E6, BIDI_L   },  // CANADIAN SYLLABICS TTHOO
+  { 0x18E7, BIDI_L   },  // CANADIAN SYLLABICS TTHAA
+  { 0x18E8, BIDI_L   },  // CANADIAN SYLLABICS TLHWE
+  { 0x18E9, BIDI_L   },  // CANADIAN SYLLABICS TLHOO
+  { 0x18EA, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHWE
+  { 0x18EB, BIDI_L   },  // CANADIAN SYLLABICS SAYISI SHOO
+  { 0x18EC, BIDI_L   },  // CANADIAN SYLLABICS SAYISI HOO
+  { 0x18ED, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GWU
+  { 0x18EE, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DENE GEE
+  { 0x18EF, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GAA
+  { 0x18F0, BIDI_L   },  // CANADIAN SYLLABICS CARRIER GWA
+  { 0x18F1, BIDI_L   },  // CANADIAN SYLLABICS SAYISI JUU
+  { 0x18F2, BIDI_L   },  // CANADIAN SYLLABICS CARRIER JWA
+  { 0x18F3, BIDI_L   },  // CANADIAN SYLLABICS BEAVER DENE L
+  { 0x18F4, BIDI_L   },  // CANADIAN SYLLABICS BEAVER DENE R
+  { 0x18F5, BIDI_L   },  // CANADIAN SYLLABICS CARRIER DENTAL S
+  { 0x1900, BIDI_L   },  // LIMBU VOWEL-CARRIER LETTER
+  { 0x1901, BIDI_L   },  // LIMBU LETTER KA
+  { 0x1902, BIDI_L   },  // LIMBU LETTER KHA
+  { 0x1903, BIDI_L   },  // LIMBU LETTER GA
+  { 0x1904, BIDI_L   },  // LIMBU LETTER GHA
+  { 0x1905, BIDI_L   },  // LIMBU LETTER NGA
+  { 0x1906, BIDI_L   },  // LIMBU LETTER CA
+  { 0x1907, BIDI_L   },  // LIMBU LETTER CHA
+  { 0x1908, BIDI_L   },  // LIMBU LETTER JA
+  { 0x1909, BIDI_L   },  // LIMBU LETTER JHA
+  { 0x190A, BIDI_L   },  // LIMBU LETTER YAN
+  { 0x190B, BIDI_L   },  // LIMBU LETTER TA
+  { 0x190C, BIDI_L   },  // LIMBU LETTER THA
+  { 0x190D, BIDI_L   },  // LIMBU LETTER DA
+  { 0x190E, BIDI_L   },  // LIMBU LETTER DHA
+  { 0x190F, BIDI_L   },  // LIMBU LETTER NA
+  { 0x1910, BIDI_L   },  // LIMBU LETTER PA
+  { 0x1911, BIDI_L   },  // LIMBU LETTER PHA
+  { 0x1912, BIDI_L   },  // LIMBU LETTER BA
+  { 0x1913, BIDI_L   },  // LIMBU LETTER BHA
+  { 0x1914, BIDI_L   },  // LIMBU LETTER MA
+  { 0x1915, BIDI_L   },  // LIMBU LETTER YA
+  { 0x1916, BIDI_L   },  // LIMBU LETTER RA
+  { 0x1917, BIDI_L   },  // LIMBU LETTER LA
+  { 0x1918, BIDI_L   },  // LIMBU LETTER WA
+  { 0x1919, BIDI_L   },  // LIMBU LETTER SHA
+  { 0x191A, BIDI_L   },  // LIMBU LETTER SSA
+  { 0x191B, BIDI_L   },  // LIMBU LETTER SA
+  { 0x191C, BIDI_L   },  // LIMBU LETTER HA
+  { 0x191D, BIDI_L   },  // LIMBU LETTER GYAN
+  { 0x191E, BIDI_L   },  // LIMBU LETTER TRA
+  { 0x1920, BIDI_NSM },  // LIMBU VOWEL SIGN A
+  { 0x1921, BIDI_NSM },  // LIMBU VOWEL SIGN I
+  { 0x1922, BIDI_NSM },  // LIMBU VOWEL SIGN U
+  { 0x1923, BIDI_L   },  // LIMBU VOWEL SIGN EE
+  { 0x1924, BIDI_L   },  // LIMBU VOWEL SIGN AI
+  { 0x1925, BIDI_L   },  // LIMBU VOWEL SIGN OO
+  { 0x1926, BIDI_L   },  // LIMBU VOWEL SIGN AU
+  { 0x1927, BIDI_NSM },  // LIMBU VOWEL SIGN E
+  { 0x1928, BIDI_NSM },  // LIMBU VOWEL SIGN O
+  { 0x1929, BIDI_L   },  // LIMBU SUBJOINED LETTER YA
+  { 0x192A, BIDI_L   },  // LIMBU SUBJOINED LETTER RA
+  { 0x192B, BIDI_L   },  // LIMBU SUBJOINED LETTER WA
+  { 0x1930, BIDI_L   },  // LIMBU SMALL LETTER KA
+  { 0x1931, BIDI_L   },  // LIMBU SMALL LETTER NGA
+  { 0x1932, BIDI_NSM },  // LIMBU SMALL LETTER ANUSVARA
+  { 0x1933, BIDI_L   },  // LIMBU SMALL LETTER TA
+  { 0x1934, BIDI_L   },  // LIMBU SMALL LETTER NA
+  { 0x1935, BIDI_L   },  // LIMBU SMALL LETTER PA
+  { 0x1936, BIDI_L   },  // LIMBU SMALL LETTER MA
+  { 0x1937, BIDI_L   },  // LIMBU SMALL LETTER RA
+  { 0x1938, BIDI_L   },  // LIMBU SMALL LETTER LA
+  { 0x1939, BIDI_NSM },  // LIMBU SIGN MUKPHRENG
+  { 0x193A, BIDI_NSM },  // LIMBU SIGN KEMPHRENG
+  { 0x193B, BIDI_NSM },  // LIMBU SIGN SA-I
+  { 0x1940, BIDI_ON  },  // LIMBU SIGN LOO
+  { 0x1944, BIDI_ON  },  // LIMBU EXCLAMATION MARK
+  { 0x1945, BIDI_ON  },  // LIMBU QUESTION MARK
+  { 0x1946, BIDI_L   },  // LIMBU DIGIT ZERO
+  { 0x1947, BIDI_L   },  // LIMBU DIGIT ONE
+  { 0x1948, BIDI_L   },  // LIMBU DIGIT TWO
+  { 0x1949, BIDI_L   },  // LIMBU DIGIT THREE
+  { 0x194A, BIDI_L   },  // LIMBU DIGIT FOUR
+  { 0x194B, BIDI_L   },  // LIMBU DIGIT FIVE
+  { 0x194C, BIDI_L   },  // LIMBU DIGIT SIX
+  { 0x194D, BIDI_L   },  // LIMBU DIGIT SEVEN
+  { 0x194E, BIDI_L   },  // LIMBU DIGIT EIGHT
+  { 0x194F, BIDI_L   },  // LIMBU DIGIT NINE
+  { 0x1950, BIDI_L   },  // TAI LE LETTER KA
+  { 0x1951, BIDI_L   },  // TAI LE LETTER XA
+  { 0x1952, BIDI_L   },  // TAI LE LETTER NGA
+  { 0x1953, BIDI_L   },  // TAI LE LETTER TSA
+  { 0x1954, BIDI_L   },  // TAI LE LETTER SA
+  { 0x1955, BIDI_L   },  // TAI LE LETTER YA
+  { 0x1956, BIDI_L   },  // TAI LE LETTER TA
+  { 0x1957, BIDI_L   },  // TAI LE LETTER THA
+  { 0x1958, BIDI_L   },  // TAI LE LETTER LA
+  { 0x1959, BIDI_L   },  // TAI LE LETTER PA
+  { 0x195A, BIDI_L   },  // TAI LE LETTER PHA
+  { 0x195B, BIDI_L   },  // TAI LE LETTER MA
+  { 0x195C, BIDI_L   },  // TAI LE LETTER FA
+  { 0x195D, BIDI_L   },  // TAI LE LETTER VA
+  { 0x195E, BIDI_L   },  // TAI LE LETTER HA
+  { 0x195F, BIDI_L   },  // TAI LE LETTER QA
+  { 0x1960, BIDI_L   },  // TAI LE LETTER KHA
+  { 0x1961, BIDI_L   },  // TAI LE LETTER TSHA
+  { 0x1962, BIDI_L   },  // TAI LE LETTER NA
+  { 0x1963, BIDI_L   },  // TAI LE LETTER A
+  { 0x1964, BIDI_L   },  // TAI LE LETTER I
+  { 0x1965, BIDI_L   },  // TAI LE LETTER EE
+  { 0x1966, BIDI_L   },  // TAI LE LETTER EH
+  { 0x1967, BIDI_L   },  // TAI LE LETTER U
+  { 0x1968, BIDI_L   },  // TAI LE LETTER OO
+  { 0x1969, BIDI_L   },  // TAI LE LETTER O
+  { 0x196A, BIDI_L   },  // TAI LE LETTER UE
+  { 0x196B, BIDI_L   },  // TAI LE LETTER E
+  { 0x196C, BIDI_L   },  // TAI LE LETTER AUE
+  { 0x196D, BIDI_L   },  // TAI LE LETTER AI
+  { 0x1970, BIDI_L   },  // TAI LE LETTER TONE-2
+  { 0x1971, BIDI_L   },  // TAI LE LETTER TONE-3
+  { 0x1972, BIDI_L   },  // TAI LE LETTER TONE-4
+  { 0x1973, BIDI_L   },  // TAI LE LETTER TONE-5
+  { 0x1974, BIDI_L   },  // TAI LE LETTER TONE-6
+  { 0x1980, BIDI_L   },  // NEW TAI LUE LETTER HIGH QA
+  { 0x1981, BIDI_L   },  // NEW TAI LUE LETTER LOW QA
+  { 0x1982, BIDI_L   },  // NEW TAI LUE LETTER HIGH KA
+  { 0x1983, BIDI_L   },  // NEW TAI LUE LETTER HIGH XA
+  { 0x1984, BIDI_L   },  // NEW TAI LUE LETTER HIGH NGA
+  { 0x1985, BIDI_L   },  // NEW TAI LUE LETTER LOW KA
+  { 0x1986, BIDI_L   },  // NEW TAI LUE LETTER LOW XA
+  { 0x1987, BIDI_L   },  // NEW TAI LUE LETTER LOW NGA
+  { 0x1988, BIDI_L   },  // NEW TAI LUE LETTER HIGH TSA
+  { 0x1989, BIDI_L   },  // NEW TAI LUE LETTER HIGH SA
+  { 0x198A, BIDI_L   },  // NEW TAI LUE LETTER HIGH YA
+  { 0x198B, BIDI_L   },  // NEW TAI LUE LETTER LOW TSA
+  { 0x198C, BIDI_L   },  // NEW TAI LUE LETTER LOW SA
+  { 0x198D, BIDI_L   },  // NEW TAI LUE LETTER LOW YA
+  { 0x198E, BIDI_L   },  // NEW TAI LUE LETTER HIGH TA
+  { 0x198F, BIDI_L   },  // NEW TAI LUE LETTER HIGH THA
+  { 0x1990, BIDI_L   },  // NEW TAI LUE LETTER HIGH NA
+  { 0x1991, BIDI_L   },  // NEW TAI LUE LETTER LOW TA
+  { 0x1992, BIDI_L   },  // NEW TAI LUE LETTER LOW THA
+  { 0x1993, BIDI_L   },  // NEW TAI LUE LETTER LOW NA
+  { 0x1994, BIDI_L   },  // NEW TAI LUE LETTER HIGH PA
+  { 0x1995, BIDI_L   },  // NEW TAI LUE LETTER HIGH PHA
+  { 0x1996, BIDI_L   },  // NEW TAI LUE LETTER HIGH MA
+  { 0x1997, BIDI_L   },  // NEW TAI LUE LETTER LOW PA
+  { 0x1998, BIDI_L   },  // NEW TAI LUE LETTER LOW PHA
+  { 0x1999, BIDI_L   },  // NEW TAI LUE LETTER LOW MA
+  { 0x199A, BIDI_L   },  // NEW TAI LUE LETTER HIGH FA
+  { 0x199B, BIDI_L   },  // NEW TAI LUE LETTER HIGH VA
+  { 0x199C, BIDI_L   },  // NEW TAI LUE LETTER HIGH LA
+  { 0x199D, BIDI_L   },  // NEW TAI LUE LETTER LOW FA
+  { 0x199E, BIDI_L   },  // NEW TAI LUE LETTER LOW VA
+  { 0x199F, BIDI_L   },  // NEW TAI LUE LETTER LOW LA
+  { 0x19A0, BIDI_L   },  // NEW TAI LUE LETTER HIGH HA
+  { 0x19A1, BIDI_L   },  // NEW TAI LUE LETTER HIGH DA
+  { 0x19A2, BIDI_L   },  // NEW TAI LUE LETTER HIGH BA
+  { 0x19A3, BIDI_L   },  // NEW TAI LUE LETTER LOW HA
+  { 0x19A4, BIDI_L   },  // NEW TAI LUE LETTER LOW DA
+  { 0x19A5, BIDI_L   },  // NEW TAI LUE LETTER LOW BA
+  { 0x19A6, BIDI_L   },  // NEW TAI LUE LETTER HIGH KVA
+  { 0x19A7, BIDI_L   },  // NEW TAI LUE LETTER HIGH XVA
+  { 0x19A8, BIDI_L   },  // NEW TAI LUE LETTER LOW KVA
+  { 0x19A9, BIDI_L   },  // NEW TAI LUE LETTER LOW XVA
+  { 0x19AA, BIDI_L   },  // NEW TAI LUE LETTER HIGH SUA
+  { 0x19AB, BIDI_L   },  // NEW TAI LUE LETTER LOW SUA
+  { 0x19B0, BIDI_L   },  // NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+  { 0x19B1, BIDI_L   },  // NEW TAI LUE VOWEL SIGN AA
+  { 0x19B2, BIDI_L   },  // NEW TAI LUE VOWEL SIGN II
+  { 0x19B3, BIDI_L   },  // NEW TAI LUE VOWEL SIGN U
+  { 0x19B4, BIDI_L   },  // NEW TAI LUE VOWEL SIGN UU
+  { 0x19B5, BIDI_L   },  // NEW TAI LUE VOWEL SIGN E
+  { 0x19B6, BIDI_L   },  // NEW TAI LUE VOWEL SIGN AE
+  { 0x19B7, BIDI_L   },  // NEW TAI LUE VOWEL SIGN O
+  { 0x19B8, BIDI_L   },  // NEW TAI LUE VOWEL SIGN OA
+  { 0x19B9, BIDI_L   },  // NEW TAI LUE VOWEL SIGN UE
+  { 0x19BA, BIDI_L   },  // NEW TAI LUE VOWEL SIGN AY
+  { 0x19BB, BIDI_L   },  // NEW TAI LUE VOWEL SIGN AAY
+  { 0x19BC, BIDI_L   },  // NEW TAI LUE VOWEL SIGN UY
+  { 0x19BD, BIDI_L   },  // NEW TAI LUE VOWEL SIGN OY
+  { 0x19BE, BIDI_L   },  // NEW TAI LUE VOWEL SIGN OAY
+  { 0x19BF, BIDI_L   },  // NEW TAI LUE VOWEL SIGN UEY
+  { 0x19C0, BIDI_L   },  // NEW TAI LUE VOWEL SIGN IY
+  { 0x19C1, BIDI_L   },  // NEW TAI LUE LETTER FINAL V
+  { 0x19C2, BIDI_L   },  // NEW TAI LUE LETTER FINAL NG
+  { 0x19C3, BIDI_L   },  // NEW TAI LUE LETTER FINAL N
+  { 0x19C4, BIDI_L   },  // NEW TAI LUE LETTER FINAL M
+  { 0x19C5, BIDI_L   },  // NEW TAI LUE LETTER FINAL K
+  { 0x19C6, BIDI_L   },  // NEW TAI LUE LETTER FINAL D
+  { 0x19C7, BIDI_L   },  // NEW TAI LUE LETTER FINAL B
+  { 0x19C8, BIDI_L   },  // NEW TAI LUE TONE MARK-1
+  { 0x19C9, BIDI_L   },  // NEW TAI LUE TONE MARK-2
+  { 0x19D0, BIDI_L   },  // NEW TAI LUE DIGIT ZERO
+  { 0x19D1, BIDI_L   },  // NEW TAI LUE DIGIT ONE
+  { 0x19D2, BIDI_L   },  // NEW TAI LUE DIGIT TWO
+  { 0x19D3, BIDI_L   },  // NEW TAI LUE DIGIT THREE
+  { 0x19D4, BIDI_L   },  // NEW TAI LUE DIGIT FOUR
+  { 0x19D5, BIDI_L   },  // NEW TAI LUE DIGIT FIVE
+  { 0x19D6, BIDI_L   },  // NEW TAI LUE DIGIT SIX
+  { 0x19D7, BIDI_L   },  // NEW TAI LUE DIGIT SEVEN
+  { 0x19D8, BIDI_L   },  // NEW TAI LUE DIGIT EIGHT
+  { 0x19D9, BIDI_L   },  // NEW TAI LUE DIGIT NINE
+  { 0x19DA, BIDI_L   },  // NEW TAI LUE THAM DIGIT ONE
+  { 0x19DE, BIDI_ON  },  // NEW TAI LUE SIGN LAE
+  { 0x19DF, BIDI_ON  },  // NEW TAI LUE SIGN LAEV
+  { 0x19E0, BIDI_ON  },  // KHMER SYMBOL PATHAMASAT
+  { 0x19E1, BIDI_ON  },  // KHMER SYMBOL MUOY KOET
+  { 0x19E2, BIDI_ON  },  // KHMER SYMBOL PII KOET
+  { 0x19E3, BIDI_ON  },  // KHMER SYMBOL BEI KOET
+  { 0x19E4, BIDI_ON  },  // KHMER SYMBOL BUON KOET
+  { 0x19E5, BIDI_ON  },  // KHMER SYMBOL PRAM KOET
+  { 0x19E6, BIDI_ON  },  // KHMER SYMBOL PRAM-MUOY KOET
+  { 0x19E7, BIDI_ON  },  // KHMER SYMBOL PRAM-PII KOET
+  { 0x19E8, BIDI_ON  },  // KHMER SYMBOL PRAM-BEI KOET
+  { 0x19E9, BIDI_ON  },  // KHMER SYMBOL PRAM-BUON KOET
+  { 0x19EA, BIDI_ON  },  // KHMER SYMBOL DAP KOET
+  { 0x19EB, BIDI_ON  },  // KHMER SYMBOL DAP-MUOY KOET
+  { 0x19EC, BIDI_ON  },  // KHMER SYMBOL DAP-PII KOET
+  { 0x19ED, BIDI_ON  },  // KHMER SYMBOL DAP-BEI KOET
+  { 0x19EE, BIDI_ON  },  // KHMER SYMBOL DAP-BUON KOET
+  { 0x19EF, BIDI_ON  },  // KHMER SYMBOL DAP-PRAM KOET
+  { 0x19F0, BIDI_ON  },  // KHMER SYMBOL TUTEYASAT
+  { 0x19F1, BIDI_ON  },  // KHMER SYMBOL MUOY ROC
+  { 0x19F2, BIDI_ON  },  // KHMER SYMBOL PII ROC
+  { 0x19F3, BIDI_ON  },  // KHMER SYMBOL BEI ROC
+  { 0x19F4, BIDI_ON  },  // KHMER SYMBOL BUON ROC
+  { 0x19F5, BIDI_ON  },  // KHMER SYMBOL PRAM ROC
+  { 0x19F6, BIDI_ON  },  // KHMER SYMBOL PRAM-MUOY ROC
+  { 0x19F7, BIDI_ON  },  // KHMER SYMBOL PRAM-PII ROC
+  { 0x19F8, BIDI_ON  },  // KHMER SYMBOL PRAM-BEI ROC
+  { 0x19F9, BIDI_ON  },  // KHMER SYMBOL PRAM-BUON ROC
+  { 0x19FA, BIDI_ON  },  // KHMER SYMBOL DAP ROC
+  { 0x19FB, BIDI_ON  },  // KHMER SYMBOL DAP-MUOY ROC
+  { 0x19FC, BIDI_ON  },  // KHMER SYMBOL DAP-PII ROC
+  { 0x19FD, BIDI_ON  },  // KHMER SYMBOL DAP-BEI ROC
+  { 0x19FE, BIDI_ON  },  // KHMER SYMBOL DAP-BUON ROC
+  { 0x19FF, BIDI_ON  },  // KHMER SYMBOL DAP-PRAM ROC
+  { 0x1A00, BIDI_L   },  // BUGINESE LETTER KA
+  { 0x1A01, BIDI_L   },  // BUGINESE LETTER GA
+  { 0x1A02, BIDI_L   },  // BUGINESE LETTER NGA
+  { 0x1A03, BIDI_L   },  // BUGINESE LETTER NGKA
+  { 0x1A04, BIDI_L   },  // BUGINESE LETTER PA
+  { 0x1A05, BIDI_L   },  // BUGINESE LETTER BA
+  { 0x1A06, BIDI_L   },  // BUGINESE LETTER MA
+  { 0x1A07, BIDI_L   },  // BUGINESE LETTER MPA
+  { 0x1A08, BIDI_L   },  // BUGINESE LETTER TA
+  { 0x1A09, BIDI_L   },  // BUGINESE LETTER DA
+  { 0x1A0A, BIDI_L   },  // BUGINESE LETTER NA
+  { 0x1A0B, BIDI_L   },  // BUGINESE LETTER NRA
+  { 0x1A0C, BIDI_L   },  // BUGINESE LETTER CA
+  { 0x1A0D, BIDI_L   },  // BUGINESE LETTER JA
+  { 0x1A0E, BIDI_L   },  // BUGINESE LETTER NYA
+  { 0x1A0F, BIDI_L   },  // BUGINESE LETTER NYCA
+  { 0x1A10, BIDI_L   },  // BUGINESE LETTER YA
+  { 0x1A11, BIDI_L   },  // BUGINESE LETTER RA
+  { 0x1A12, BIDI_L   },  // BUGINESE LETTER LA
+  { 0x1A13, BIDI_L   },  // BUGINESE LETTER VA
+  { 0x1A14, BIDI_L   },  // BUGINESE LETTER SA
+  { 0x1A15, BIDI_L   },  // BUGINESE LETTER A
+  { 0x1A16, BIDI_L   },  // BUGINESE LETTER HA
+  { 0x1A17, BIDI_NSM },  // BUGINESE VOWEL SIGN I
+  { 0x1A18, BIDI_NSM },  // BUGINESE VOWEL SIGN U
+  { 0x1A19, BIDI_L   },  // BUGINESE VOWEL SIGN E
+  { 0x1A1A, BIDI_L   },  // BUGINESE VOWEL SIGN O
+  { 0x1A1B, BIDI_NSM },  // BUGINESE VOWEL SIGN AE
+  { 0x1A1E, BIDI_L   },  // BUGINESE PALLAWA
+  { 0x1A1F, BIDI_L   },  // BUGINESE END OF SECTION
+  { 0x1A20, BIDI_L   },  // TAI THAM LETTER HIGH KA
+  { 0x1A21, BIDI_L   },  // TAI THAM LETTER HIGH KHA
+  { 0x1A22, BIDI_L   },  // TAI THAM LETTER HIGH KXA
+  { 0x1A23, BIDI_L   },  // TAI THAM LETTER LOW KA
+  { 0x1A24, BIDI_L   },  // TAI THAM LETTER LOW KXA
+  { 0x1A25, BIDI_L   },  // TAI THAM LETTER LOW KHA
+  { 0x1A26, BIDI_L   },  // TAI THAM LETTER NGA
+  { 0x1A27, BIDI_L   },  // TAI THAM LETTER HIGH CA
+  { 0x1A28, BIDI_L   },  // TAI THAM LETTER HIGH CHA
+  { 0x1A29, BIDI_L   },  // TAI THAM LETTER LOW CA
+  { 0x1A2A, BIDI_L   },  // TAI THAM LETTER LOW SA
+  { 0x1A2B, BIDI_L   },  // TAI THAM LETTER LOW CHA
+  { 0x1A2C, BIDI_L   },  // TAI THAM LETTER NYA
+  { 0x1A2D, BIDI_L   },  // TAI THAM LETTER RATA
+  { 0x1A2E, BIDI_L   },  // TAI THAM LETTER HIGH RATHA
+  { 0x1A2F, BIDI_L   },  // TAI THAM LETTER DA
+  { 0x1A30, BIDI_L   },  // TAI THAM LETTER LOW RATHA
+  { 0x1A31, BIDI_L   },  // TAI THAM LETTER RANA
+  { 0x1A32, BIDI_L   },  // TAI THAM LETTER HIGH TA
+  { 0x1A33, BIDI_L   },  // TAI THAM LETTER HIGH THA
+  { 0x1A34, BIDI_L   },  // TAI THAM LETTER LOW TA
+  { 0x1A35, BIDI_L   },  // TAI THAM LETTER LOW THA
+  { 0x1A36, BIDI_L   },  // TAI THAM LETTER NA
+  { 0x1A37, BIDI_L   },  // TAI THAM LETTER BA
+  { 0x1A38, BIDI_L   },  // TAI THAM LETTER HIGH PA
+  { 0x1A39, BIDI_L   },  // TAI THAM LETTER HIGH PHA
+  { 0x1A3A, BIDI_L   },  // TAI THAM LETTER HIGH FA
+  { 0x1A3B, BIDI_L   },  // TAI THAM LETTER LOW PA
+  { 0x1A3C, BIDI_L   },  // TAI THAM LETTER LOW FA
+  { 0x1A3D, BIDI_L   },  // TAI THAM LETTER LOW PHA
+  { 0x1A3E, BIDI_L   },  // TAI THAM LETTER MA
+  { 0x1A3F, BIDI_L   },  // TAI THAM LETTER LOW YA
+  { 0x1A40, BIDI_L   },  // TAI THAM LETTER HIGH YA
+  { 0x1A41, BIDI_L   },  // TAI THAM LETTER RA
+  { 0x1A42, BIDI_L   },  // TAI THAM LETTER RUE
+  { 0x1A43, BIDI_L   },  // TAI THAM LETTER LA
+  { 0x1A44, BIDI_L   },  // TAI THAM LETTER LUE
+  { 0x1A45, BIDI_L   },  // TAI THAM LETTER WA
+  { 0x1A46, BIDI_L   },  // TAI THAM LETTER HIGH SHA
+  { 0x1A47, BIDI_L   },  // TAI THAM LETTER HIGH SSA
+  { 0x1A48, BIDI_L   },  // TAI THAM LETTER HIGH SA
+  { 0x1A49, BIDI_L   },  // TAI THAM LETTER HIGH HA
+  { 0x1A4A, BIDI_L   },  // TAI THAM LETTER LLA
+  { 0x1A4B, BIDI_L   },  // TAI THAM LETTER A
+  { 0x1A4C, BIDI_L   },  // TAI THAM LETTER LOW HA
+  { 0x1A4D, BIDI_L   },  // TAI THAM LETTER I
+  { 0x1A4E, BIDI_L   },  // TAI THAM LETTER II
+  { 0x1A4F, BIDI_L   },  // TAI THAM LETTER U
+  { 0x1A50, BIDI_L   },  // TAI THAM LETTER UU
+  { 0x1A51, BIDI_L   },  // TAI THAM LETTER EE
+  { 0x1A52, BIDI_L   },  // TAI THAM LETTER OO
+  { 0x1A53, BIDI_L   },  // TAI THAM LETTER LAE
+  { 0x1A54, BIDI_L   },  // TAI THAM LETTER GREAT SA
+  { 0x1A55, BIDI_L   },  // TAI THAM CONSONANT SIGN MEDIAL RA
+  { 0x1A56, BIDI_NSM },  // TAI THAM CONSONANT SIGN MEDIAL LA
+  { 0x1A57, BIDI_L   },  // TAI THAM CONSONANT SIGN LA TANG LAI
+  { 0x1A58, BIDI_NSM },  // TAI THAM SIGN MAI KANG LAI
+  { 0x1A59, BIDI_NSM },  // TAI THAM CONSONANT SIGN FINAL NGA
+  { 0x1A5A, BIDI_NSM },  // TAI THAM CONSONANT SIGN LOW PA
+  { 0x1A5B, BIDI_NSM },  // TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
+  { 0x1A5C, BIDI_NSM },  // TAI THAM CONSONANT SIGN MA
+  { 0x1A5D, BIDI_NSM },  // TAI THAM CONSONANT SIGN BA
+  { 0x1A5E, BIDI_NSM },  // TAI THAM CONSONANT SIGN SA
+  { 0x1A60, BIDI_NSM },  // TAI THAM SIGN SAKOT
+  { 0x1A61, BIDI_L   },  // TAI THAM VOWEL SIGN A
+  { 0x1A62, BIDI_NSM },  // TAI THAM VOWEL SIGN MAI SAT
+  { 0x1A63, BIDI_L   },  // TAI THAM VOWEL SIGN AA
+  { 0x1A64, BIDI_L   },  // TAI THAM VOWEL SIGN TALL AA
+  { 0x1A65, BIDI_NSM },  // TAI THAM VOWEL SIGN I
+  { 0x1A66, BIDI_NSM },  // TAI THAM VOWEL SIGN II
+  { 0x1A67, BIDI_NSM },  // TAI THAM VOWEL SIGN UE
+  { 0x1A68, BIDI_NSM },  // TAI THAM VOWEL SIGN UUE
+  { 0x1A69, BIDI_NSM },  // TAI THAM VOWEL SIGN U
+  { 0x1A6A, BIDI_NSM },  // TAI THAM VOWEL SIGN UU
+  { 0x1A6B, BIDI_NSM },  // TAI THAM VOWEL SIGN O
+  { 0x1A6C, BIDI_NSM },  // TAI THAM VOWEL SIGN OA BELOW
+  { 0x1A6D, BIDI_L   },  // TAI THAM VOWEL SIGN OY
+  { 0x1A6E, BIDI_L   },  // TAI THAM VOWEL SIGN E
+  { 0x1A6F, BIDI_L   },  // TAI THAM VOWEL SIGN AE
+  { 0x1A70, BIDI_L   },  // TAI THAM VOWEL SIGN OO
+  { 0x1A71, BIDI_L   },  // TAI THAM VOWEL SIGN AI
+  { 0x1A72, BIDI_L   },  // TAI THAM VOWEL SIGN THAM AI
+  { 0x1A73, BIDI_NSM },  // TAI THAM VOWEL SIGN OA ABOVE
+  { 0x1A74, BIDI_NSM },  // TAI THAM SIGN MAI KANG
+  { 0x1A75, BIDI_NSM },  // TAI THAM SIGN TONE-1
+  { 0x1A76, BIDI_NSM },  // TAI THAM SIGN TONE-2
+  { 0x1A77, BIDI_NSM },  // TAI THAM SIGN KHUEN TONE-3
+  { 0x1A78, BIDI_NSM },  // TAI THAM SIGN KHUEN TONE-4
+  { 0x1A79, BIDI_NSM },  // TAI THAM SIGN KHUEN TONE-5
+  { 0x1A7A, BIDI_NSM },  // TAI THAM SIGN RA HAAM
+  { 0x1A7B, BIDI_NSM },  // TAI THAM SIGN MAI SAM
+  { 0x1A7C, BIDI_NSM },  // TAI THAM SIGN KHUEN-LUE KARAN
+  { 0x1A7F, BIDI_NSM },  // TAI THAM COMBINING CRYPTOGRAMMIC DOT
+  { 0x1A80, BIDI_L   },  // TAI THAM HORA DIGIT ZERO
+  { 0x1A81, BIDI_L   },  // TAI THAM HORA DIGIT ONE
+  { 0x1A82, BIDI_L   },  // TAI THAM HORA DIGIT TWO
+  { 0x1A83, BIDI_L   },  // TAI THAM HORA DIGIT THREE
+  { 0x1A84, BIDI_L   },  // TAI THAM HORA DIGIT FOUR
+  { 0x1A85, BIDI_L   },  // TAI THAM HORA DIGIT FIVE
+  { 0x1A86, BIDI_L   },  // TAI THAM HORA DIGIT SIX
+  { 0x1A87, BIDI_L   },  // TAI THAM HORA DIGIT SEVEN
+  { 0x1A88, BIDI_L   },  // TAI THAM HORA DIGIT EIGHT
+  { 0x1A89, BIDI_L   },  // TAI THAM HORA DIGIT NINE
+  { 0x1A90, BIDI_L   },  // TAI THAM THAM DIGIT ZERO
+  { 0x1A91, BIDI_L   },  // TAI THAM THAM DIGIT ONE
+  { 0x1A92, BIDI_L   },  // TAI THAM THAM DIGIT TWO
+  { 0x1A93, BIDI_L   },  // TAI THAM THAM DIGIT THREE
+  { 0x1A94, BIDI_L   },  // TAI THAM THAM DIGIT FOUR
+  { 0x1A95, BIDI_L   },  // TAI THAM THAM DIGIT FIVE
+  { 0x1A96, BIDI_L   },  // TAI THAM THAM DIGIT SIX
+  { 0x1A97, BIDI_L   },  // TAI THAM THAM DIGIT SEVEN
+  { 0x1A98, BIDI_L   },  // TAI THAM THAM DIGIT EIGHT
+  { 0x1A99, BIDI_L   },  // TAI THAM THAM DIGIT NINE
+  { 0x1AA0, BIDI_L   },  // TAI THAM SIGN WIANG
+  { 0x1AA1, BIDI_L   },  // TAI THAM SIGN WIANGWAAK
+  { 0x1AA2, BIDI_L   },  // TAI THAM SIGN SAWAN
+  { 0x1AA3, BIDI_L   },  // TAI THAM SIGN KEOW
+  { 0x1AA4, BIDI_L   },  // TAI THAM SIGN HOY
+  { 0x1AA5, BIDI_L   },  // TAI THAM SIGN DOKMAI
+  { 0x1AA6, BIDI_L   },  // TAI THAM SIGN REVERSED ROTATED RANA
+  { 0x1AA7, BIDI_L   },  // TAI THAM SIGN MAI YAMOK
+  { 0x1AA8, BIDI_L   },  // TAI THAM SIGN KAAN
+  { 0x1AA9, BIDI_L   },  // TAI THAM SIGN KAANKUU
+  { 0x1AAA, BIDI_L   },  // TAI THAM SIGN SATKAAN
+  { 0x1AAB, BIDI_L   },  // TAI THAM SIGN SATKAANKUU
+  { 0x1AAC, BIDI_L   },  // TAI THAM SIGN HANG
+  { 0x1AAD, BIDI_L   },  // TAI THAM SIGN CAANG
+  { 0x1AB0, BIDI_NSM },  // COMBINING DOUBLED CIRCUMFLEX ACCENT
+  { 0x1AB1, BIDI_NSM },  // COMBINING DIAERESIS-RING
+  { 0x1AB2, BIDI_NSM },  // COMBINING INFINITY
+  { 0x1AB3, BIDI_NSM },  // COMBINING DOWNWARDS ARROW
+  { 0x1AB4, BIDI_NSM },  // COMBINING TRIPLE DOT
+  { 0x1AB5, BIDI_NSM },  // COMBINING X-X BELOW
+  { 0x1AB6, BIDI_NSM },  // COMBINING WIGGLY LINE BELOW
+  { 0x1AB7, BIDI_NSM },  // COMBINING OPEN MARK BELOW
+  { 0x1AB8, BIDI_NSM },  // COMBINING DOUBLE OPEN MARK BELOW
+  { 0x1AB9, BIDI_NSM },  // COMBINING LIGHT CENTRALIZATION STROKE BELOW
+  { 0x1ABA, BIDI_NSM },  // COMBINING STRONG CENTRALIZATION STROKE BELOW
+  { 0x1ABB, BIDI_NSM },  // COMBINING PARENTHESES ABOVE
+  { 0x1ABC, BIDI_NSM },  // COMBINING DOUBLE PARENTHESES ABOVE
+  { 0x1ABD, BIDI_NSM },  // COMBINING PARENTHESES BELOW
+  { 0x1ABE, BIDI_NSM },  // COMBINING PARENTHESES OVERLAY
+  { 0x1B00, BIDI_NSM },  // BALINESE SIGN ULU RICEM
+  { 0x1B01, BIDI_NSM },  // BALINESE SIGN ULU CANDRA
+  { 0x1B02, BIDI_NSM },  // BALINESE SIGN CECEK
+  { 0x1B03, BIDI_NSM },  // BALINESE SIGN SURANG
+  { 0x1B04, BIDI_L   },  // BALINESE SIGN BISAH
+  { 0x1B05, BIDI_L   },  // BALINESE LETTER AKARA
+  { 0x1B06, BIDI_L   },  // BALINESE LETTER AKARA TEDUNG
+  { 0x1B07, BIDI_L   },  // BALINESE LETTER IKARA
+  { 0x1B08, BIDI_L   },  // BALINESE LETTER IKARA TEDUNG
+  { 0x1B09, BIDI_L   },  // BALINESE LETTER UKARA
+  { 0x1B0A, BIDI_L   },  // BALINESE LETTER UKARA TEDUNG
+  { 0x1B0B, BIDI_L   },  // BALINESE LETTER RA REPA
+  { 0x1B0C, BIDI_L   },  // BALINESE LETTER RA REPA TEDUNG
+  { 0x1B0D, BIDI_L   },  // BALINESE LETTER LA LENGA
+  { 0x1B0E, BIDI_L   },  // BALINESE LETTER LA LENGA TEDUNG
+  { 0x1B0F, BIDI_L   },  // BALINESE LETTER EKARA
+  { 0x1B10, BIDI_L   },  // BALINESE LETTER AIKARA
+  { 0x1B11, BIDI_L   },  // BALINESE LETTER OKARA
+  { 0x1B12, BIDI_L   },  // BALINESE LETTER OKARA TEDUNG
+  { 0x1B13, BIDI_L   },  // BALINESE LETTER KA
+  { 0x1B14, BIDI_L   },  // BALINESE LETTER KA MAHAPRANA
+  { 0x1B15, BIDI_L   },  // BALINESE LETTER GA
+  { 0x1B16, BIDI_L   },  // BALINESE LETTER GA GORA
+  { 0x1B17, BIDI_L   },  // BALINESE LETTER NGA
+  { 0x1B18, BIDI_L   },  // BALINESE LETTER CA
+  { 0x1B19, BIDI_L   },  // BALINESE LETTER CA LACA
+  { 0x1B1A, BIDI_L   },  // BALINESE LETTER JA
+  { 0x1B1B, BIDI_L   },  // BALINESE LETTER JA JERA
+  { 0x1B1C, BIDI_L   },  // BALINESE LETTER NYA
+  { 0x1B1D, BIDI_L   },  // BALINESE LETTER TA LATIK
+  { 0x1B1E, BIDI_L   },  // BALINESE LETTER TA MURDA MAHAPRANA
+  { 0x1B1F, BIDI_L   },  // BALINESE LETTER DA MURDA ALPAPRANA
+  { 0x1B20, BIDI_L   },  // BALINESE LETTER DA MURDA MAHAPRANA
+  { 0x1B21, BIDI_L   },  // BALINESE LETTER NA RAMBAT
+  { 0x1B22, BIDI_L   },  // BALINESE LETTER TA
+  { 0x1B23, BIDI_L   },  // BALINESE LETTER TA TAWA
+  { 0x1B24, BIDI_L   },  // BALINESE LETTER DA
+  { 0x1B25, BIDI_L   },  // BALINESE LETTER DA MADU
+  { 0x1B26, BIDI_L   },  // BALINESE LETTER NA
+  { 0x1B27, BIDI_L   },  // BALINESE LETTER PA
+  { 0x1B28, BIDI_L   },  // BALINESE LETTER PA KAPAL
+  { 0x1B29, BIDI_L   },  // BALINESE LETTER BA
+  { 0x1B2A, BIDI_L   },  // BALINESE LETTER BA KEMBANG
+  { 0x1B2B, BIDI_L   },  // BALINESE LETTER MA
+  { 0x1B2C, BIDI_L   },  // BALINESE LETTER YA
+  { 0x1B2D, BIDI_L   },  // BALINESE LETTER RA
+  { 0x1B2E, BIDI_L   },  // BALINESE LETTER LA
+  { 0x1B2F, BIDI_L   },  // BALINESE LETTER WA
+  { 0x1B30, BIDI_L   },  // BALINESE LETTER SA SAGA
+  { 0x1B31, BIDI_L   },  // BALINESE LETTER SA SAPA
+  { 0x1B32, BIDI_L   },  // BALINESE LETTER SA
+  { 0x1B33, BIDI_L   },  // BALINESE LETTER HA
+  { 0x1B34, BIDI_NSM },  // BALINESE SIGN REREKAN
+  { 0x1B35, BIDI_L   },  // BALINESE VOWEL SIGN TEDUNG
+  { 0x1B36, BIDI_NSM },  // BALINESE VOWEL SIGN ULU
+  { 0x1B37, BIDI_NSM },  // BALINESE VOWEL SIGN ULU SARI
+  { 0x1B38, BIDI_NSM },  // BALINESE VOWEL SIGN SUKU
+  { 0x1B39, BIDI_NSM },  // BALINESE VOWEL SIGN SUKU ILUT
+  { 0x1B3A, BIDI_NSM },  // BALINESE VOWEL SIGN RA REPA
+  { 0x1B3B, BIDI_L   },  // BALINESE VOWEL SIGN RA REPA TEDUNG
+  { 0x1B3C, BIDI_NSM },  // BALINESE VOWEL SIGN LA LENGA
+  { 0x1B3D, BIDI_L   },  // BALINESE VOWEL SIGN LA LENGA TEDUNG
+  { 0x1B3E, BIDI_L   },  // BALINESE VOWEL SIGN TALING
+  { 0x1B3F, BIDI_L   },  // BALINESE VOWEL SIGN TALING REPA
+  { 0x1B40, BIDI_L   },  // BALINESE VOWEL SIGN TALING TEDUNG
+  { 0x1B41, BIDI_L   },  // BALINESE VOWEL SIGN TALING REPA TEDUNG
+  { 0x1B42, BIDI_NSM },  // BALINESE VOWEL SIGN PEPET
+  { 0x1B43, BIDI_L   },  // BALINESE VOWEL SIGN PEPET TEDUNG
+  { 0x1B44, BIDI_L   },  // BALINESE ADEG ADEG
+  { 0x1B45, BIDI_L   },  // BALINESE LETTER KAF SASAK
+  { 0x1B46, BIDI_L   },  // BALINESE LETTER KHOT SASAK
+  { 0x1B47, BIDI_L   },  // BALINESE LETTER TZIR SASAK
+  { 0x1B48, BIDI_L   },  // BALINESE LETTER EF SASAK
+  { 0x1B49, BIDI_L   },  // BALINESE LETTER VE SASAK
+  { 0x1B4A, BIDI_L   },  // BALINESE LETTER ZAL SASAK
+  { 0x1B4B, BIDI_L   },  // BALINESE LETTER ASYURA SASAK
+  { 0x1B50, BIDI_L   },  // BALINESE DIGIT ZERO
+  { 0x1B51, BIDI_L   },  // BALINESE DIGIT ONE
+  { 0x1B52, BIDI_L   },  // BALINESE DIGIT TWO
+  { 0x1B53, BIDI_L   },  // BALINESE DIGIT THREE
+  { 0x1B54, BIDI_L   },  // BALINESE DIGIT FOUR
+  { 0x1B55, BIDI_L   },  // BALINESE DIGIT FIVE
+  { 0x1B56, BIDI_L   },  // BALINESE DIGIT SIX
+  { 0x1B57, BIDI_L   },  // BALINESE DIGIT SEVEN
+  { 0x1B58, BIDI_L   },  // BALINESE DIGIT EIGHT
+  { 0x1B59, BIDI_L   },  // BALINESE DIGIT NINE
+  { 0x1B5A, BIDI_L   },  // BALINESE PANTI
+  { 0x1B5B, BIDI_L   },  // BALINESE PAMADA
+  { 0x1B5C, BIDI_L   },  // BALINESE WINDU
+  { 0x1B5D, BIDI_L   },  // BALINESE CARIK PAMUNGKAH
+  { 0x1B5E, BIDI_L   },  // BALINESE CARIK SIKI
+  { 0x1B5F, BIDI_L   },  // BALINESE CARIK PAREREN
+  { 0x1B60, BIDI_L   },  // BALINESE PAMENENG
+  { 0x1B61, BIDI_L   },  // BALINESE MUSICAL SYMBOL DONG
+  { 0x1B62, BIDI_L   },  // BALINESE MUSICAL SYMBOL DENG
+  { 0x1B63, BIDI_L   },  // BALINESE MUSICAL SYMBOL DUNG
+  { 0x1B64, BIDI_L   },  // BALINESE MUSICAL SYMBOL DANG
+  { 0x1B65, BIDI_L   },  // BALINESE MUSICAL SYMBOL DANG SURANG
+  { 0x1B66, BIDI_L   },  // BALINESE MUSICAL SYMBOL DING
+  { 0x1B67, BIDI_L   },  // BALINESE MUSICAL SYMBOL DAENG
+  { 0x1B68, BIDI_L   },  // BALINESE MUSICAL SYMBOL DEUNG
+  { 0x1B69, BIDI_L   },  // BALINESE MUSICAL SYMBOL DAING
+  { 0x1B6A, BIDI_L   },  // BALINESE MUSICAL SYMBOL DANG GEDE
+  { 0x1B6B, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING TEGEH
+  { 0x1B6C, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING ENDEP
+  { 0x1B6D, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING KEMPUL
+  { 0x1B6E, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING KEMPLI
+  { 0x1B6F, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING JEGOGAN
+  { 0x1B70, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN
+  { 0x1B71, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN
+  { 0x1B72, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING BENDE
+  { 0x1B73, BIDI_NSM },  // BALINESE MUSICAL SYMBOL COMBINING GONG
+  { 0x1B74, BIDI_L   },  // BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
+  { 0x1B75, BIDI_L   },  // BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG
+  { 0x1B76, BIDI_L   },  // BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK
+  { 0x1B77, BIDI_L   },  // BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK
+  { 0x1B78, BIDI_L   },  // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG
+  { 0x1B79, BIDI_L   },  // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG
+  { 0x1B7A, BIDI_L   },  // BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK
+  { 0x1B7B, BIDI_L   },  // BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK
+  { 0x1B7C, BIDI_L   },  // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+  { 0x1B80, BIDI_NSM },  // SUNDANESE SIGN PANYECEK
+  { 0x1B81, BIDI_NSM },  // SUNDANESE SIGN PANGLAYAR
+  { 0x1B82, BIDI_L   },  // SUNDANESE SIGN PANGWISAD
+  { 0x1B83, BIDI_L   },  // SUNDANESE LETTER A
+  { 0x1B84, BIDI_L   },  // SUNDANESE LETTER I
+  { 0x1B85, BIDI_L   },  // SUNDANESE LETTER U
+  { 0x1B86, BIDI_L   },  // SUNDANESE LETTER AE
+  { 0x1B87, BIDI_L   },  // SUNDANESE LETTER O
+  { 0x1B88, BIDI_L   },  // SUNDANESE LETTER E
+  { 0x1B89, BIDI_L   },  // SUNDANESE LETTER EU
+  { 0x1B8A, BIDI_L   },  // SUNDANESE LETTER KA
+  { 0x1B8B, BIDI_L   },  // SUNDANESE LETTER QA
+  { 0x1B8C, BIDI_L   },  // SUNDANESE LETTER GA
+  { 0x1B8D, BIDI_L   },  // SUNDANESE LETTER NGA
+  { 0x1B8E, BIDI_L   },  // SUNDANESE LETTER CA
+  { 0x1B8F, BIDI_L   },  // SUNDANESE LETTER JA
+  { 0x1B90, BIDI_L   },  // SUNDANESE LETTER ZA
+  { 0x1B91, BIDI_L   },  // SUNDANESE LETTER NYA
+  { 0x1B92, BIDI_L   },  // SUNDANESE LETTER TA
+  { 0x1B93, BIDI_L   },  // SUNDANESE LETTER DA
+  { 0x1B94, BIDI_L   },  // SUNDANESE LETTER NA
+  { 0x1B95, BIDI_L   },  // SUNDANESE LETTER PA
+  { 0x1B96, BIDI_L   },  // SUNDANESE LETTER FA
+  { 0x1B97, BIDI_L   },  // SUNDANESE LETTER VA
+  { 0x1B98, BIDI_L   },  // SUNDANESE LETTER BA
+  { 0x1B99, BIDI_L   },  // SUNDANESE LETTER MA
+  { 0x1B9A, BIDI_L   },  // SUNDANESE LETTER YA
+  { 0x1B9B, BIDI_L   },  // SUNDANESE LETTER RA
+  { 0x1B9C, BIDI_L   },  // SUNDANESE LETTER LA
+  { 0x1B9D, BIDI_L   },  // SUNDANESE LETTER WA
+  { 0x1B9E, BIDI_L   },  // SUNDANESE LETTER SA
+  { 0x1B9F, BIDI_L   },  // SUNDANESE LETTER XA
+  { 0x1BA0, BIDI_L   },  // SUNDANESE LETTER HA
+  { 0x1BA1, BIDI_L   },  // SUNDANESE CONSONANT SIGN PAMINGKAL
+  { 0x1BA2, BIDI_NSM },  // SUNDANESE CONSONANT SIGN PANYAKRA
+  { 0x1BA3, BIDI_NSM },  // SUNDANESE CONSONANT SIGN PANYIKU
+  { 0x1BA4, BIDI_NSM },  // SUNDANESE VOWEL SIGN PANGHULU
+  { 0x1BA5, BIDI_NSM },  // SUNDANESE VOWEL SIGN PANYUKU
+  { 0x1BA6, BIDI_L   },  // SUNDANESE VOWEL SIGN PANAELAENG
+  { 0x1BA7, BIDI_L   },  // SUNDANESE VOWEL SIGN PANOLONG
+  { 0x1BA8, BIDI_NSM },  // SUNDANESE VOWEL SIGN PAMEPET
+  { 0x1BA9, BIDI_NSM },  // SUNDANESE VOWEL SIGN PANEULEUNG
+  { 0x1BAA, BIDI_L   },  // SUNDANESE SIGN PAMAAEH
+  { 0x1BAB, BIDI_NSM },  // SUNDANESE SIGN VIRAMA
+  { 0x1BAC, BIDI_NSM },  // SUNDANESE CONSONANT SIGN PASANGAN MA
+  { 0x1BAD, BIDI_NSM },  // SUNDANESE CONSONANT SIGN PASANGAN WA
+  { 0x1BAE, BIDI_L   },  // SUNDANESE LETTER KHA
+  { 0x1BAF, BIDI_L   },  // SUNDANESE LETTER SYA
+  { 0x1BB0, BIDI_L   },  // SUNDANESE DIGIT ZERO
+  { 0x1BB1, BIDI_L   },  // SUNDANESE DIGIT ONE
+  { 0x1BB2, BIDI_L   },  // SUNDANESE DIGIT TWO
+  { 0x1BB3, BIDI_L   },  // SUNDANESE DIGIT THREE
+  { 0x1BB4, BIDI_L   },  // SUNDANESE DIGIT FOUR
+  { 0x1BB5, BIDI_L   },  // SUNDANESE DIGIT FIVE
+  { 0x1BB6, BIDI_L   },  // SUNDANESE DIGIT SIX
+  { 0x1BB7, BIDI_L   },  // SUNDANESE DIGIT SEVEN
+  { 0x1BB8, BIDI_L   },  // SUNDANESE DIGIT EIGHT
+  { 0x1BB9, BIDI_L   },  // SUNDANESE DIGIT NINE
+  { 0x1BBA, BIDI_L   },  // SUNDANESE AVAGRAHA
+  { 0x1BBB, BIDI_L   },  // SUNDANESE LETTER REU
+  { 0x1BBC, BIDI_L   },  // SUNDANESE LETTER LEU
+  { 0x1BBD, BIDI_L   },  // SUNDANESE LETTER BHA
+  { 0x1BBE, BIDI_L   },  // SUNDANESE LETTER FINAL K
+  { 0x1BBF, BIDI_L   },  // SUNDANESE LETTER FINAL M
+  { 0x1BC0, BIDI_L   },  // BATAK LETTER A
+  { 0x1BC1, BIDI_L   },  // BATAK LETTER SIMALUNGUN A
+  { 0x1BC2, BIDI_L   },  // BATAK LETTER HA
+  { 0x1BC3, BIDI_L   },  // BATAK LETTER SIMALUNGUN HA
+  { 0x1BC4, BIDI_L   },  // BATAK LETTER MANDAILING HA
+  { 0x1BC5, BIDI_L   },  // BATAK LETTER BA
+  { 0x1BC6, BIDI_L   },  // BATAK LETTER KARO BA
+  { 0x1BC7, BIDI_L   },  // BATAK LETTER PA
+  { 0x1BC8, BIDI_L   },  // BATAK LETTER SIMALUNGUN PA
+  { 0x1BC9, BIDI_L   },  // BATAK LETTER NA
+  { 0x1BCA, BIDI_L   },  // BATAK LETTER MANDAILING NA
+  { 0x1BCB, BIDI_L   },  // BATAK LETTER WA
+  { 0x1BCC, BIDI_L   },  // BATAK LETTER SIMALUNGUN WA
+  { 0x1BCD, BIDI_L   },  // BATAK LETTER PAKPAK WA
+  { 0x1BCE, BIDI_L   },  // BATAK LETTER GA
+  { 0x1BCF, BIDI_L   },  // BATAK LETTER SIMALUNGUN GA
+  { 0x1BD0, BIDI_L   },  // BATAK LETTER JA
+  { 0x1BD1, BIDI_L   },  // BATAK LETTER DA
+  { 0x1BD2, BIDI_L   },  // BATAK LETTER RA
+  { 0x1BD3, BIDI_L   },  // BATAK LETTER SIMALUNGUN RA
+  { 0x1BD4, BIDI_L   },  // BATAK LETTER MA
+  { 0x1BD5, BIDI_L   },  // BATAK LETTER SIMALUNGUN MA
+  { 0x1BD6, BIDI_L   },  // BATAK LETTER SOUTHERN TA
+  { 0x1BD7, BIDI_L   },  // BATAK LETTER NORTHERN TA
+  { 0x1BD8, BIDI_L   },  // BATAK LETTER SA
+  { 0x1BD9, BIDI_L   },  // BATAK LETTER SIMALUNGUN SA
+  { 0x1BDA, BIDI_L   },  // BATAK LETTER MANDAILING SA
+  { 0x1BDB, BIDI_L   },  // BATAK LETTER YA
+  { 0x1BDC, BIDI_L   },  // BATAK LETTER SIMALUNGUN YA
+  { 0x1BDD, BIDI_L   },  // BATAK LETTER NGA
+  { 0x1BDE, BIDI_L   },  // BATAK LETTER LA
+  { 0x1BDF, BIDI_L   },  // BATAK LETTER SIMALUNGUN LA
+  { 0x1BE0, BIDI_L   },  // BATAK LETTER NYA
+  { 0x1BE1, BIDI_L   },  // BATAK LETTER CA
+  { 0x1BE2, BIDI_L   },  // BATAK LETTER NDA
+  { 0x1BE3, BIDI_L   },  // BATAK LETTER MBA
+  { 0x1BE4, BIDI_L   },  // BATAK LETTER I
+  { 0x1BE5, BIDI_L   },  // BATAK LETTER U
+  { 0x1BE6, BIDI_NSM },  // BATAK SIGN TOMPI
+  { 0x1BE7, BIDI_L   },  // BATAK VOWEL SIGN E
+  { 0x1BE8, BIDI_NSM },  // BATAK VOWEL SIGN PAKPAK E
+  { 0x1BE9, BIDI_NSM },  // BATAK VOWEL SIGN EE
+  { 0x1BEA, BIDI_L   },  // BATAK VOWEL SIGN I
+  { 0x1BEB, BIDI_L   },  // BATAK VOWEL SIGN KARO I
+  { 0x1BEC, BIDI_L   },  // BATAK VOWEL SIGN O
+  { 0x1BED, BIDI_NSM },  // BATAK VOWEL SIGN KARO O
+  { 0x1BEE, BIDI_L   },  // BATAK VOWEL SIGN U
+  { 0x1BEF, BIDI_NSM },  // BATAK VOWEL SIGN U FOR SIMALUNGUN SA
+  { 0x1BF0, BIDI_NSM },  // BATAK CONSONANT SIGN NG
+  { 0x1BF1, BIDI_NSM },  // BATAK CONSONANT SIGN H
+  { 0x1BF2, BIDI_L   },  // BATAK PANGOLAT
+  { 0x1BF3, BIDI_L   },  // BATAK PANONGONAN
+  { 0x1BFC, BIDI_L   },  // BATAK SYMBOL BINDU NA METEK
+  { 0x1BFD, BIDI_L   },  // BATAK SYMBOL BINDU PINARBORAS
+  { 0x1BFE, BIDI_L   },  // BATAK SYMBOL BINDU JUDUL
+  { 0x1BFF, BIDI_L   },  // BATAK SYMBOL BINDU PANGOLAT
+  { 0x1C00, BIDI_L   },  // LEPCHA LETTER KA
+  { 0x1C01, BIDI_L   },  // LEPCHA LETTER KLA
+  { 0x1C02, BIDI_L   },  // LEPCHA LETTER KHA
+  { 0x1C03, BIDI_L   },  // LEPCHA LETTER GA
+  { 0x1C04, BIDI_L   },  // LEPCHA LETTER GLA
+  { 0x1C05, BIDI_L   },  // LEPCHA LETTER NGA
+  { 0x1C06, BIDI_L   },  // LEPCHA LETTER CA
+  { 0x1C07, BIDI_L   },  // LEPCHA LETTER CHA
+  { 0x1C08, BIDI_L   },  // LEPCHA LETTER JA
+  { 0x1C09, BIDI_L   },  // LEPCHA LETTER NYA
+  { 0x1C0A, BIDI_L   },  // LEPCHA LETTER TA
+  { 0x1C0B, BIDI_L   },  // LEPCHA LETTER THA
+  { 0x1C0C, BIDI_L   },  // LEPCHA LETTER DA
+  { 0x1C0D, BIDI_L   },  // LEPCHA LETTER NA
+  { 0x1C0E, BIDI_L   },  // LEPCHA LETTER PA
+  { 0x1C0F, BIDI_L   },  // LEPCHA LETTER PLA
+  { 0x1C10, BIDI_L   },  // LEPCHA LETTER PHA
+  { 0x1C11, BIDI_L   },  // LEPCHA LETTER FA
+  { 0x1C12, BIDI_L   },  // LEPCHA LETTER FLA
+  { 0x1C13, BIDI_L   },  // LEPCHA LETTER BA
+  { 0x1C14, BIDI_L   },  // LEPCHA LETTER BLA
+  { 0x1C15, BIDI_L   },  // LEPCHA LETTER MA
+  { 0x1C16, BIDI_L   },  // LEPCHA LETTER MLA
+  { 0x1C17, BIDI_L   },  // LEPCHA LETTER TSA
+  { 0x1C18, BIDI_L   },  // LEPCHA LETTER TSHA
+  { 0x1C19, BIDI_L   },  // LEPCHA LETTER DZA
+  { 0x1C1A, BIDI_L   },  // LEPCHA LETTER YA
+  { 0x1C1B, BIDI_L   },  // LEPCHA LETTER RA
+  { 0x1C1C, BIDI_L   },  // LEPCHA LETTER LA
+  { 0x1C1D, BIDI_L   },  // LEPCHA LETTER HA
+  { 0x1C1E, BIDI_L   },  // LEPCHA LETTER HLA
+  { 0x1C1F, BIDI_L   },  // LEPCHA LETTER VA
+  { 0x1C20, BIDI_L   },  // LEPCHA LETTER SA
+  { 0x1C21, BIDI_L   },  // LEPCHA LETTER SHA
+  { 0x1C22, BIDI_L   },  // LEPCHA LETTER WA
+  { 0x1C23, BIDI_L   },  // LEPCHA LETTER A
+  { 0x1C24, BIDI_L   },  // LEPCHA SUBJOINED LETTER YA
+  { 0x1C25, BIDI_L   },  // LEPCHA SUBJOINED LETTER RA
+  { 0x1C26, BIDI_L   },  // LEPCHA VOWEL SIGN AA
+  { 0x1C27, BIDI_L   },  // LEPCHA VOWEL SIGN I
+  { 0x1C28, BIDI_L   },  // LEPCHA VOWEL SIGN O
+  { 0x1C29, BIDI_L   },  // LEPCHA VOWEL SIGN OO
+  { 0x1C2A, BIDI_L   },  // LEPCHA VOWEL SIGN U
+  { 0x1C2B, BIDI_L   },  // LEPCHA VOWEL SIGN UU
+  { 0x1C2C, BIDI_NSM },  // LEPCHA VOWEL SIGN E
+  { 0x1C2D, BIDI_NSM },  // LEPCHA CONSONANT SIGN K
+  { 0x1C2E, BIDI_NSM },  // LEPCHA CONSONANT SIGN M
+  { 0x1C2F, BIDI_NSM },  // LEPCHA CONSONANT SIGN L
+  { 0x1C30, BIDI_NSM },  // LEPCHA CONSONANT SIGN N
+  { 0x1C31, BIDI_NSM },  // LEPCHA CONSONANT SIGN P
+  { 0x1C32, BIDI_NSM },  // LEPCHA CONSONANT SIGN R
+  { 0x1C33, BIDI_NSM },  // LEPCHA CONSONANT SIGN T
+  { 0x1C34, BIDI_L   },  // LEPCHA CONSONANT SIGN NYIN-DO
+  { 0x1C35, BIDI_L   },  // LEPCHA CONSONANT SIGN KANG
+  { 0x1C36, BIDI_NSM },  // LEPCHA SIGN RAN
+  { 0x1C37, BIDI_NSM },  // LEPCHA SIGN NUKTA
+  { 0x1C3B, BIDI_L   },  // LEPCHA PUNCTUATION TA-ROL
+  { 0x1C3C, BIDI_L   },  // LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+  { 0x1C3D, BIDI_L   },  // LEPCHA PUNCTUATION CER-WA
+  { 0x1C3E, BIDI_L   },  // LEPCHA PUNCTUATION TSHOOK CER-WA
+  { 0x1C3F, BIDI_L   },  // LEPCHA PUNCTUATION TSHOOK
+  { 0x1C40, BIDI_L   },  // LEPCHA DIGIT ZERO
+  { 0x1C41, BIDI_L   },  // LEPCHA DIGIT ONE
+  { 0x1C42, BIDI_L   },  // LEPCHA DIGIT TWO
+  { 0x1C43, BIDI_L   },  // LEPCHA DIGIT THREE
+  { 0x1C44, BIDI_L   },  // LEPCHA DIGIT FOUR
+  { 0x1C45, BIDI_L   },  // LEPCHA DIGIT FIVE
+  { 0x1C46, BIDI_L   },  // LEPCHA DIGIT SIX
+  { 0x1C47, BIDI_L   },  // LEPCHA DIGIT SEVEN
+  { 0x1C48, BIDI_L   },  // LEPCHA DIGIT EIGHT
+  { 0x1C49, BIDI_L   },  // LEPCHA DIGIT NINE
+  { 0x1C4D, BIDI_L   },  // LEPCHA LETTER TTA
+  { 0x1C4E, BIDI_L   },  // LEPCHA LETTER TTHA
+  { 0x1C4F, BIDI_L   },  // LEPCHA LETTER DDA
+  { 0x1C50, BIDI_L   },  // OL CHIKI DIGIT ZERO
+  { 0x1C51, BIDI_L   },  // OL CHIKI DIGIT ONE
+  { 0x1C52, BIDI_L   },  // OL CHIKI DIGIT TWO
+  { 0x1C53, BIDI_L   },  // OL CHIKI DIGIT THREE
+  { 0x1C54, BIDI_L   },  // OL CHIKI DIGIT FOUR
+  { 0x1C55, BIDI_L   },  // OL CHIKI DIGIT FIVE
+  { 0x1C56, BIDI_L   },  // OL CHIKI DIGIT SIX
+  { 0x1C57, BIDI_L   },  // OL CHIKI DIGIT SEVEN
+  { 0x1C58, BIDI_L   },  // OL CHIKI DIGIT EIGHT
+  { 0x1C59, BIDI_L   },  // OL CHIKI DIGIT NINE
+  { 0x1C5A, BIDI_L   },  // OL CHIKI LETTER LA
+  { 0x1C5B, BIDI_L   },  // OL CHIKI LETTER AT
+  { 0x1C5C, BIDI_L   },  // OL CHIKI LETTER AG
+  { 0x1C5D, BIDI_L   },  // OL CHIKI LETTER ANG
+  { 0x1C5E, BIDI_L   },  // OL CHIKI LETTER AL
+  { 0x1C5F, BIDI_L   },  // OL CHIKI LETTER LAA
+  { 0x1C60, BIDI_L   },  // OL CHIKI LETTER AAK
+  { 0x1C61, BIDI_L   },  // OL CHIKI LETTER AAJ
+  { 0x1C62, BIDI_L   },  // OL CHIKI LETTER AAM
+  { 0x1C63, BIDI_L   },  // OL CHIKI LETTER AAW
+  { 0x1C64, BIDI_L   },  // OL CHIKI LETTER LI
+  { 0x1C65, BIDI_L   },  // OL CHIKI LETTER IS
+  { 0x1C66, BIDI_L   },  // OL CHIKI LETTER IH
+  { 0x1C67, BIDI_L   },  // OL CHIKI LETTER INY
+  { 0x1C68, BIDI_L   },  // OL CHIKI LETTER IR
+  { 0x1C69, BIDI_L   },  // OL CHIKI LETTER LU
+  { 0x1C6A, BIDI_L   },  // OL CHIKI LETTER UC
+  { 0x1C6B, BIDI_L   },  // OL CHIKI LETTER UD
+  { 0x1C6C, BIDI_L   },  // OL CHIKI LETTER UNN
+  { 0x1C6D, BIDI_L   },  // OL CHIKI LETTER UY
+  { 0x1C6E, BIDI_L   },  // OL CHIKI LETTER LE
+  { 0x1C6F, BIDI_L   },  // OL CHIKI LETTER EP
+  { 0x1C70, BIDI_L   },  // OL CHIKI LETTER EDD
+  { 0x1C71, BIDI_L   },  // OL CHIKI LETTER EN
+  { 0x1C72, BIDI_L   },  // OL CHIKI LETTER ERR
+  { 0x1C73, BIDI_L   },  // OL CHIKI LETTER LO
+  { 0x1C74, BIDI_L   },  // OL CHIKI LETTER OTT
+  { 0x1C75, BIDI_L   },  // OL CHIKI LETTER OB
+  { 0x1C76, BIDI_L   },  // OL CHIKI LETTER OV
+  { 0x1C77, BIDI_L   },  // OL CHIKI LETTER OH
+  { 0x1C78, BIDI_L   },  // OL CHIKI MU TTUDDAG
+  { 0x1C79, BIDI_L   },  // OL CHIKI GAAHLAA TTUDDAAG
+  { 0x1C7A, BIDI_L   },  // OL CHIKI MU-GAAHLAA TTUDDAAG
+  { 0x1C7B, BIDI_L   },  // OL CHIKI RELAA
+  { 0x1C7C, BIDI_L   },  // OL CHIKI PHAARKAA
+  { 0x1C7D, BIDI_L   },  // OL CHIKI AHAD
+  { 0x1C7E, BIDI_L   },  // OL CHIKI PUNCTUATION MUCAAD
+  { 0x1C7F, BIDI_L   },  // OL CHIKI PUNCTUATION DOUBLE MUCAAD
+  { 0x1CC0, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU SURYA
+  { 0x1CC1, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU PANGLONG
+  { 0x1CC2, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU PURNAMA
+  { 0x1CC3, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU CAKRA
+  { 0x1CC4, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU LEU SATANGA
+  { 0x1CC5, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU KA SATANGA
+  { 0x1CC6, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU DA SATANGA
+  { 0x1CC7, BIDI_L   },  // SUNDANESE PUNCTUATION BINDU BA SATANGA
+  { 0x1CD0, BIDI_NSM },  // VEDIC TONE KARSHANA
+  { 0x1CD1, BIDI_NSM },  // VEDIC TONE SHARA
+  { 0x1CD2, BIDI_NSM },  // VEDIC TONE PRENKHA
+  { 0x1CD3, BIDI_L   },  // VEDIC SIGN NIHSHVASA
+  { 0x1CD4, BIDI_NSM },  // VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+  { 0x1CD5, BIDI_NSM },  // VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
+  { 0x1CD6, BIDI_NSM },  // VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
+  { 0x1CD7, BIDI_NSM },  // VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
+  { 0x1CD8, BIDI_NSM },  // VEDIC TONE CANDRA BELOW
+  { 0x1CD9, BIDI_NSM },  // VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+  { 0x1CDA, BIDI_NSM },  // VEDIC TONE DOUBLE SVARITA
+  { 0x1CDB, BIDI_NSM },  // VEDIC TONE TRIPLE SVARITA
+  { 0x1CDC, BIDI_NSM },  // VEDIC TONE KATHAKA ANUDATTA
+  { 0x1CDD, BIDI_NSM },  // VEDIC TONE DOT BELOW
+  { 0x1CDE, BIDI_NSM },  // VEDIC TONE TWO DOTS BELOW
+  { 0x1CDF, BIDI_NSM },  // VEDIC TONE THREE DOTS BELOW
+  { 0x1CE0, BIDI_NSM },  // VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+  { 0x1CE1, BIDI_L   },  // VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+  { 0x1CE2, BIDI_NSM },  // VEDIC SIGN VISARGA SVARITA
+  { 0x1CE3, BIDI_NSM },  // VEDIC SIGN VISARGA UDATTA
+  { 0x1CE4, BIDI_NSM },  // VEDIC SIGN REVERSED VISARGA UDATTA
+  { 0x1CE5, BIDI_NSM },  // VEDIC SIGN VISARGA ANUDATTA
+  { 0x1CE6, BIDI_NSM },  // VEDIC SIGN REVERSED VISARGA ANUDATTA
+  { 0x1CE7, BIDI_NSM },  // VEDIC SIGN VISARGA UDATTA WITH TAIL
+  { 0x1CE8, BIDI_NSM },  // VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+  { 0x1CE9, BIDI_L   },  // VEDIC SIGN ANUSVARA ANTARGOMUKHA
+  { 0x1CEA, BIDI_L   },  // VEDIC SIGN ANUSVARA BAHIRGOMUKHA
+  { 0x1CEB, BIDI_L   },  // VEDIC SIGN ANUSVARA VAMAGOMUKHA
+  { 0x1CEC, BIDI_L   },  // VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+  { 0x1CED, BIDI_NSM },  // VEDIC SIGN TIRYAK
+  { 0x1CEE, BIDI_L   },  // VEDIC SIGN HEXIFORM LONG ANUSVARA
+  { 0x1CEF, BIDI_L   },  // VEDIC SIGN LONG ANUSVARA
+  { 0x1CF0, BIDI_L   },  // VEDIC SIGN RTHANG LONG ANUSVARA
+  { 0x1CF1, BIDI_L   },  // VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+  { 0x1CF2, BIDI_L   },  // VEDIC SIGN ARDHAVISARGA
+  { 0x1CF3, BIDI_L   },  // VEDIC SIGN ROTATED ARDHAVISARGA
+  { 0x1CF4, BIDI_NSM },  // VEDIC TONE CANDRA ABOVE
+  { 0x1CF5, BIDI_L   },  // VEDIC SIGN JIHVAMULIYA
+  { 0x1CF6, BIDI_L   },  // VEDIC SIGN UPADHMANIYA
+  { 0x1CF8, BIDI_NSM },  // VEDIC TONE RING ABOVE
+  { 0x1CF9, BIDI_NSM },  // VEDIC TONE DOUBLE RING ABOVE
+  { 0x1D00, BIDI_L   },  // LATIN LETTER SMALL CAPITAL A
+  { 0x1D01, BIDI_L   },  // LATIN LETTER SMALL CAPITAL AE
+  { 0x1D02, BIDI_L   },  // LATIN SMALL LETTER TURNED AE
+  { 0x1D03, BIDI_L   },  // LATIN LETTER SMALL CAPITAL BARRED B
+  { 0x1D04, BIDI_L   },  // LATIN LETTER SMALL CAPITAL C
+  { 0x1D05, BIDI_L   },  // LATIN LETTER SMALL CAPITAL D
+  { 0x1D06, BIDI_L   },  // LATIN LETTER SMALL CAPITAL ETH
+  { 0x1D07, BIDI_L   },  // LATIN LETTER SMALL CAPITAL E
+  { 0x1D08, BIDI_L   },  // LATIN SMALL LETTER TURNED OPEN E
+  { 0x1D09, BIDI_L   },  // LATIN SMALL LETTER TURNED I
+  { 0x1D0A, BIDI_L   },  // LATIN LETTER SMALL CAPITAL J
+  { 0x1D0B, BIDI_L   },  // LATIN LETTER SMALL CAPITAL K
+  { 0x1D0C, BIDI_L   },  // LATIN LETTER SMALL CAPITAL L WITH STROKE
+  { 0x1D0D, BIDI_L   },  // LATIN LETTER SMALL CAPITAL M
+  { 0x1D0E, BIDI_L   },  // LATIN LETTER SMALL CAPITAL REVERSED N
+  { 0x1D0F, BIDI_L   },  // LATIN LETTER SMALL CAPITAL O
+  { 0x1D10, BIDI_L   },  // LATIN LETTER SMALL CAPITAL OPEN O
+  { 0x1D11, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS O
+  { 0x1D12, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS OPEN O
+  { 0x1D13, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+  { 0x1D14, BIDI_L   },  // LATIN SMALL LETTER TURNED OE
+  { 0x1D15, BIDI_L   },  // LATIN LETTER SMALL CAPITAL OU
+  { 0x1D16, BIDI_L   },  // LATIN SMALL LETTER TOP HALF O
+  { 0x1D17, BIDI_L   },  // LATIN SMALL LETTER BOTTOM HALF O
+  { 0x1D18, BIDI_L   },  // LATIN LETTER SMALL CAPITAL P
+  { 0x1D19, BIDI_L   },  // LATIN LETTER SMALL CAPITAL REVERSED R
+  { 0x1D1A, BIDI_L   },  // LATIN LETTER SMALL CAPITAL TURNED R
+  { 0x1D1B, BIDI_L   },  // LATIN LETTER SMALL CAPITAL T
+  { 0x1D1C, BIDI_L   },  // LATIN LETTER SMALL CAPITAL U
+  { 0x1D1D, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS U
+  { 0x1D1E, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+  { 0x1D1F, BIDI_L   },  // LATIN SMALL LETTER SIDEWAYS TURNED M
+  { 0x1D20, BIDI_L   },  // LATIN LETTER SMALL CAPITAL V
+  { 0x1D21, BIDI_L   },  // LATIN LETTER SMALL CAPITAL W
+  { 0x1D22, BIDI_L   },  // LATIN LETTER SMALL CAPITAL Z
+  { 0x1D23, BIDI_L   },  // LATIN LETTER SMALL CAPITAL EZH
+  { 0x1D24, BIDI_L   },  // LATIN LETTER VOICED LARYNGEAL SPIRANT
+  { 0x1D25, BIDI_L   },  // LATIN LETTER AIN
+  { 0x1D26, BIDI_L   },  // GREEK LETTER SMALL CAPITAL GAMMA
+  { 0x1D27, BIDI_L   },  // GREEK LETTER SMALL CAPITAL LAMDA
+  { 0x1D28, BIDI_L   },  // GREEK LETTER SMALL CAPITAL PI
+  { 0x1D29, BIDI_L   },  // GREEK LETTER SMALL CAPITAL RHO
+  { 0x1D2A, BIDI_L   },  // GREEK LETTER SMALL CAPITAL PSI
+  { 0x1D2B, BIDI_L   },  // CYRILLIC LETTER SMALL CAPITAL EL
+  { 0x1D2C, BIDI_L   },  // MODIFIER LETTER CAPITAL A
+  { 0x1D2D, BIDI_L   },  // MODIFIER LETTER CAPITAL AE
+  { 0x1D2E, BIDI_L   },  // MODIFIER LETTER CAPITAL B
+  { 0x1D2F, BIDI_L   },  // MODIFIER LETTER CAPITAL BARRED B
+  { 0x1D30, BIDI_L   },  // MODIFIER LETTER CAPITAL D
+  { 0x1D31, BIDI_L   },  // MODIFIER LETTER CAPITAL E
+  { 0x1D32, BIDI_L   },  // MODIFIER LETTER CAPITAL REVERSED E
+  { 0x1D33, BIDI_L   },  // MODIFIER LETTER CAPITAL G
+  { 0x1D34, BIDI_L   },  // MODIFIER LETTER CAPITAL H
+  { 0x1D35, BIDI_L   },  // MODIFIER LETTER CAPITAL I
+  { 0x1D36, BIDI_L   },  // MODIFIER LETTER CAPITAL J
+  { 0x1D37, BIDI_L   },  // MODIFIER LETTER CAPITAL K
+  { 0x1D38, BIDI_L   },  // MODIFIER LETTER CAPITAL L
+  { 0x1D39, BIDI_L   },  // MODIFIER LETTER CAPITAL M
+  { 0x1D3A, BIDI_L   },  // MODIFIER LETTER CAPITAL N
+  { 0x1D3B, BIDI_L   },  // MODIFIER LETTER CAPITAL REVERSED N
+  { 0x1D3C, BIDI_L   },  // MODIFIER LETTER CAPITAL O
+  { 0x1D3D, BIDI_L   },  // MODIFIER LETTER CAPITAL OU
+  { 0x1D3E, BIDI_L   },  // MODIFIER LETTER CAPITAL P
+  { 0x1D3F, BIDI_L   },  // MODIFIER LETTER CAPITAL R
+  { 0x1D40, BIDI_L   },  // MODIFIER LETTER CAPITAL T
+  { 0x1D41, BIDI_L   },  // MODIFIER LETTER CAPITAL U
+  { 0x1D42, BIDI_L   },  // MODIFIER LETTER CAPITAL W
+  { 0x1D43, BIDI_L   },  // MODIFIER LETTER SMALL A
+  { 0x1D44, BIDI_L   },  // MODIFIER LETTER SMALL TURNED A
+  { 0x1D45, BIDI_L   },  // MODIFIER LETTER SMALL ALPHA
+  { 0x1D46, BIDI_L   },  // MODIFIER LETTER SMALL TURNED AE
+  { 0x1D47, BIDI_L   },  // MODIFIER LETTER SMALL B
+  { 0x1D48, BIDI_L   },  // MODIFIER LETTER SMALL D
+  { 0x1D49, BIDI_L   },  // MODIFIER LETTER SMALL E
+  { 0x1D4A, BIDI_L   },  // MODIFIER LETTER SMALL SCHWA
+  { 0x1D4B, BIDI_L   },  // MODIFIER LETTER SMALL OPEN E
+  { 0x1D4C, BIDI_L   },  // MODIFIER LETTER SMALL TURNED OPEN E
+  { 0x1D4D, BIDI_L   },  // MODIFIER LETTER SMALL G
+  { 0x1D4E, BIDI_L   },  // MODIFIER LETTER SMALL TURNED I
+  { 0x1D4F, BIDI_L   },  // MODIFIER LETTER SMALL K
+  { 0x1D50, BIDI_L   },  // MODIFIER LETTER SMALL M
+  { 0x1D51, BIDI_L   },  // MODIFIER LETTER SMALL ENG
+  { 0x1D52, BIDI_L   },  // MODIFIER LETTER SMALL O
+  { 0x1D53, BIDI_L   },  // MODIFIER LETTER SMALL OPEN O
+  { 0x1D54, BIDI_L   },  // MODIFIER LETTER SMALL TOP HALF O
+  { 0x1D55, BIDI_L   },  // MODIFIER LETTER SMALL BOTTOM HALF O
+  { 0x1D56, BIDI_L   },  // MODIFIER LETTER SMALL P
+  { 0x1D57, BIDI_L   },  // MODIFIER LETTER SMALL T
+  { 0x1D58, BIDI_L   },  // MODIFIER LETTER SMALL U
+  { 0x1D59, BIDI_L   },  // MODIFIER LETTER SMALL SIDEWAYS U
+  { 0x1D5A, BIDI_L   },  // MODIFIER LETTER SMALL TURNED M
+  { 0x1D5B, BIDI_L   },  // MODIFIER LETTER SMALL V
+  { 0x1D5C, BIDI_L   },  // MODIFIER LETTER SMALL AIN
+  { 0x1D5D, BIDI_L   },  // MODIFIER LETTER SMALL BETA
+  { 0x1D5E, BIDI_L   },  // MODIFIER LETTER SMALL GREEK GAMMA
+  { 0x1D5F, BIDI_L   },  // MODIFIER LETTER SMALL DELTA
+  { 0x1D60, BIDI_L   },  // MODIFIER LETTER SMALL GREEK PHI
+  { 0x1D61, BIDI_L   },  // MODIFIER LETTER SMALL CHI
+  { 0x1D62, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER I
+  { 0x1D63, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER R
+  { 0x1D64, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER U
+  { 0x1D65, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER V
+  { 0x1D66, BIDI_L   },  // GREEK SUBSCRIPT SMALL LETTER BETA
+  { 0x1D67, BIDI_L   },  // GREEK SUBSCRIPT SMALL LETTER GAMMA
+  { 0x1D68, BIDI_L   },  // GREEK SUBSCRIPT SMALL LETTER RHO
+  { 0x1D69, BIDI_L   },  // GREEK SUBSCRIPT SMALL LETTER PHI
+  { 0x1D6A, BIDI_L   },  // GREEK SUBSCRIPT SMALL LETTER CHI
+  { 0x1D6B, BIDI_L   },  // LATIN SMALL LETTER UE
+  { 0x1D6C, BIDI_L   },  // LATIN SMALL LETTER B WITH MIDDLE TILDE
+  { 0x1D6D, BIDI_L   },  // LATIN SMALL LETTER D WITH MIDDLE TILDE
+  { 0x1D6E, BIDI_L   },  // LATIN SMALL LETTER F WITH MIDDLE TILDE
+  { 0x1D6F, BIDI_L   },  // LATIN SMALL LETTER M WITH MIDDLE TILDE
+  { 0x1D70, BIDI_L   },  // LATIN SMALL LETTER N WITH MIDDLE TILDE
+  { 0x1D71, BIDI_L   },  // LATIN SMALL LETTER P WITH MIDDLE TILDE
+  { 0x1D72, BIDI_L   },  // LATIN SMALL LETTER R WITH MIDDLE TILDE
+  { 0x1D73, BIDI_L   },  // LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+  { 0x1D74, BIDI_L   },  // LATIN SMALL LETTER S WITH MIDDLE TILDE
+  { 0x1D75, BIDI_L   },  // LATIN SMALL LETTER T WITH MIDDLE TILDE
+  { 0x1D76, BIDI_L   },  // LATIN SMALL LETTER Z WITH MIDDLE TILDE
+  { 0x1D77, BIDI_L   },  // LATIN SMALL LETTER TURNED G
+  { 0x1D78, BIDI_L   },  // MODIFIER LETTER CYRILLIC EN
+  { 0x1D79, BIDI_L   },  // LATIN SMALL LETTER INSULAR G
+  { 0x1D7A, BIDI_L   },  // LATIN SMALL LETTER TH WITH STRIKETHROUGH
+  { 0x1D7B, BIDI_L   },  // LATIN SMALL CAPITAL LETTER I WITH STROKE
+  { 0x1D7C, BIDI_L   },  // LATIN SMALL LETTER IOTA WITH STROKE
+  { 0x1D7D, BIDI_L   },  // LATIN SMALL LETTER P WITH STROKE
+  { 0x1D7E, BIDI_L   },  // LATIN SMALL CAPITAL LETTER U WITH STROKE
+  { 0x1D7F, BIDI_L   },  // LATIN SMALL LETTER UPSILON WITH STROKE
+  { 0x1D80, BIDI_L   },  // LATIN SMALL LETTER B WITH PALATAL HOOK
+  { 0x1D81, BIDI_L   },  // LATIN SMALL LETTER D WITH PALATAL HOOK
+  { 0x1D82, BIDI_L   },  // LATIN SMALL LETTER F WITH PALATAL HOOK
+  { 0x1D83, BIDI_L   },  // LATIN SMALL LETTER G WITH PALATAL HOOK
+  { 0x1D84, BIDI_L   },  // LATIN SMALL LETTER K WITH PALATAL HOOK
+  { 0x1D85, BIDI_L   },  // LATIN SMALL LETTER L WITH PALATAL HOOK
+  { 0x1D86, BIDI_L   },  // LATIN SMALL LETTER M WITH PALATAL HOOK
+  { 0x1D87, BIDI_L   },  // LATIN SMALL LETTER N WITH PALATAL HOOK
+  { 0x1D88, BIDI_L   },  // LATIN SMALL LETTER P WITH PALATAL HOOK
+  { 0x1D89, BIDI_L   },  // LATIN SMALL LETTER R WITH PALATAL HOOK
+  { 0x1D8A, BIDI_L   },  // LATIN SMALL LETTER S WITH PALATAL HOOK
+  { 0x1D8B, BIDI_L   },  // LATIN SMALL LETTER ESH WITH PALATAL HOOK
+  { 0x1D8C, BIDI_L   },  // LATIN SMALL LETTER V WITH PALATAL HOOK
+  { 0x1D8D, BIDI_L   },  // LATIN SMALL LETTER X WITH PALATAL HOOK
+  { 0x1D8E, BIDI_L   },  // LATIN SMALL LETTER Z WITH PALATAL HOOK
+  { 0x1D8F, BIDI_L   },  // LATIN SMALL LETTER A WITH RETROFLEX HOOK
+  { 0x1D90, BIDI_L   },  // LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+  { 0x1D91, BIDI_L   },  // LATIN SMALL LETTER D WITH HOOK AND TAIL
+  { 0x1D92, BIDI_L   },  // LATIN SMALL LETTER E WITH RETROFLEX HOOK
+  { 0x1D93, BIDI_L   },  // LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+  { 0x1D94, BIDI_L   },  // LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+  { 0x1D95, BIDI_L   },  // LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+  { 0x1D96, BIDI_L   },  // LATIN SMALL LETTER I WITH RETROFLEX HOOK
+  { 0x1D97, BIDI_L   },  // LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+  { 0x1D98, BIDI_L   },  // LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+  { 0x1D99, BIDI_L   },  // LATIN SMALL LETTER U WITH RETROFLEX HOOK
+  { 0x1D9A, BIDI_L   },  // LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+  { 0x1D9B, BIDI_L   },  // MODIFIER LETTER SMALL TURNED ALPHA
+  { 0x1D9C, BIDI_L   },  // MODIFIER LETTER SMALL C
+  { 0x1D9D, BIDI_L   },  // MODIFIER LETTER SMALL C WITH CURL
+  { 0x1D9E, BIDI_L   },  // MODIFIER LETTER SMALL ETH
+  { 0x1D9F, BIDI_L   },  // MODIFIER LETTER SMALL REVERSED OPEN E
+  { 0x1DA0, BIDI_L   },  // MODIFIER LETTER SMALL F
+  { 0x1DA1, BIDI_L   },  // MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+  { 0x1DA2, BIDI_L   },  // MODIFIER LETTER SMALL SCRIPT G
+  { 0x1DA3, BIDI_L   },  // MODIFIER LETTER SMALL TURNED H
+  { 0x1DA4, BIDI_L   },  // MODIFIER LETTER SMALL I WITH STROKE
+  { 0x1DA5, BIDI_L   },  // MODIFIER LETTER SMALL IOTA
+  { 0x1DA6, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL I
+  { 0x1DA7, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+  { 0x1DA8, BIDI_L   },  // MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+  { 0x1DA9, BIDI_L   },  // MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+  { 0x1DAA, BIDI_L   },  // MODIFIER LETTER SMALL L WITH PALATAL HOOK
+  { 0x1DAB, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL L
+  { 0x1DAC, BIDI_L   },  // MODIFIER LETTER SMALL M WITH HOOK
+  { 0x1DAD, BIDI_L   },  // MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+  { 0x1DAE, BIDI_L   },  // MODIFIER LETTER SMALL N WITH LEFT HOOK
+  { 0x1DAF, BIDI_L   },  // MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+  { 0x1DB0, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL N
+  { 0x1DB1, BIDI_L   },  // MODIFIER LETTER SMALL BARRED O
+  { 0x1DB2, BIDI_L   },  // MODIFIER LETTER SMALL PHI
+  { 0x1DB3, BIDI_L   },  // MODIFIER LETTER SMALL S WITH HOOK
+  { 0x1DB4, BIDI_L   },  // MODIFIER LETTER SMALL ESH
+  { 0x1DB5, BIDI_L   },  // MODIFIER LETTER SMALL T WITH PALATAL HOOK
+  { 0x1DB6, BIDI_L   },  // MODIFIER LETTER SMALL U BAR
+  { 0x1DB7, BIDI_L   },  // MODIFIER LETTER SMALL UPSILON
+  { 0x1DB8, BIDI_L   },  // MODIFIER LETTER SMALL CAPITAL U
+  { 0x1DB9, BIDI_L   },  // MODIFIER LETTER SMALL V WITH HOOK
+  { 0x1DBA, BIDI_L   },  // MODIFIER LETTER SMALL TURNED V
+  { 0x1DBB, BIDI_L   },  // MODIFIER LETTER SMALL Z
+  { 0x1DBC, BIDI_L   },  // MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+  { 0x1DBD, BIDI_L   },  // MODIFIER LETTER SMALL Z WITH CURL
+  { 0x1DBE, BIDI_L   },  // MODIFIER LETTER SMALL EZH
+  { 0x1DBF, BIDI_L   },  // MODIFIER LETTER SMALL THETA
+  { 0x1DC0, BIDI_NSM },  // COMBINING DOTTED GRAVE ACCENT
+  { 0x1DC1, BIDI_NSM },  // COMBINING DOTTED ACUTE ACCENT
+  { 0x1DC2, BIDI_NSM },  // COMBINING SNAKE BELOW
+  { 0x1DC3, BIDI_NSM },  // COMBINING SUSPENSION MARK
+  { 0x1DC4, BIDI_NSM },  // COMBINING MACRON-ACUTE
+  { 0x1DC5, BIDI_NSM },  // COMBINING GRAVE-MACRON
+  { 0x1DC6, BIDI_NSM },  // COMBINING MACRON-GRAVE
+  { 0x1DC7, BIDI_NSM },  // COMBINING ACUTE-MACRON
+  { 0x1DC8, BIDI_NSM },  // COMBINING GRAVE-ACUTE-GRAVE
+  { 0x1DC9, BIDI_NSM },  // COMBINING ACUTE-GRAVE-ACUTE
+  { 0x1DCA, BIDI_NSM },  // COMBINING LATIN SMALL LETTER R BELOW
+  { 0x1DCB, BIDI_NSM },  // COMBINING BREVE-MACRON
+  { 0x1DCC, BIDI_NSM },  // COMBINING MACRON-BREVE
+  { 0x1DCD, BIDI_NSM },  // COMBINING DOUBLE CIRCUMFLEX ABOVE
+  { 0x1DCE, BIDI_NSM },  // COMBINING OGONEK ABOVE
+  { 0x1DCF, BIDI_NSM },  // COMBINING ZIGZAG BELOW
+  { 0x1DD0, BIDI_NSM },  // COMBINING IS BELOW
+  { 0x1DD1, BIDI_NSM },  // COMBINING UR ABOVE
+  { 0x1DD2, BIDI_NSM },  // COMBINING US ABOVE
+  { 0x1DD3, BIDI_NSM },  // COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE
+  { 0x1DD4, BIDI_NSM },  // COMBINING LATIN SMALL LETTER AE
+  { 0x1DD5, BIDI_NSM },  // COMBINING LATIN SMALL LETTER AO
+  { 0x1DD6, BIDI_NSM },  // COMBINING LATIN SMALL LETTER AV
+  { 0x1DD7, BIDI_NSM },  // COMBINING LATIN SMALL LETTER C CEDILLA
+  { 0x1DD8, BIDI_NSM },  // COMBINING LATIN SMALL LETTER INSULAR D
+  { 0x1DD9, BIDI_NSM },  // COMBINING LATIN SMALL LETTER ETH
+  { 0x1DDA, BIDI_NSM },  // COMBINING LATIN SMALL LETTER G
+  { 0x1DDB, BIDI_NSM },  // COMBINING LATIN LETTER SMALL CAPITAL G
+  { 0x1DDC, BIDI_NSM },  // COMBINING LATIN SMALL LETTER K
+  { 0x1DDD, BIDI_NSM },  // COMBINING LATIN SMALL LETTER L
+  { 0x1DDE, BIDI_NSM },  // COMBINING LATIN LETTER SMALL CAPITAL L
+  { 0x1DDF, BIDI_NSM },  // COMBINING LATIN LETTER SMALL CAPITAL M
+  { 0x1DE0, BIDI_NSM },  // COMBINING LATIN SMALL LETTER N
+  { 0x1DE1, BIDI_NSM },  // COMBINING LATIN LETTER SMALL CAPITAL N
+  { 0x1DE2, BIDI_NSM },  // COMBINING LATIN LETTER SMALL CAPITAL R
+  { 0x1DE3, BIDI_NSM },  // COMBINING LATIN SMALL LETTER R ROTUNDA
+  { 0x1DE4, BIDI_NSM },  // COMBINING LATIN SMALL LETTER S
+  { 0x1DE5, BIDI_NSM },  // COMBINING LATIN SMALL LETTER LONG S
+  { 0x1DE6, BIDI_NSM },  // COMBINING LATIN SMALL LETTER Z
+  { 0x1DE7, BIDI_NSM },  // COMBINING LATIN SMALL LETTER ALPHA
+  { 0x1DE8, BIDI_NSM },  // COMBINING LATIN SMALL LETTER B
+  { 0x1DE9, BIDI_NSM },  // COMBINING LATIN SMALL LETTER BETA
+  { 0x1DEA, BIDI_NSM },  // COMBINING LATIN SMALL LETTER SCHWA
+  { 0x1DEB, BIDI_NSM },  // COMBINING LATIN SMALL LETTER F
+  { 0x1DEC, BIDI_NSM },  // COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+  { 0x1DED, BIDI_NSM },  // COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE
+  { 0x1DEE, BIDI_NSM },  // COMBINING LATIN SMALL LETTER P
+  { 0x1DEF, BIDI_NSM },  // COMBINING LATIN SMALL LETTER ESH
+  { 0x1DF0, BIDI_NSM },  // COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE
+  { 0x1DF1, BIDI_NSM },  // COMBINING LATIN SMALL LETTER W
+  { 0x1DF2, BIDI_NSM },  // COMBINING LATIN SMALL LETTER A WITH DIAERESIS
+  { 0x1DF3, BIDI_NSM },  // COMBINING LATIN SMALL LETTER O WITH DIAERESIS
+  { 0x1DF4, BIDI_NSM },  // COMBINING LATIN SMALL LETTER U WITH DIAERESIS
+  { 0x1DF5, BIDI_NSM },  // COMBINING UP TACK ABOVE
+  { 0x1DFC, BIDI_NSM },  // COMBINING DOUBLE INVERTED BREVE BELOW
+  { 0x1DFD, BIDI_NSM },  // COMBINING ALMOST EQUAL TO BELOW
+  { 0x1DFE, BIDI_NSM },  // COMBINING LEFT ARROWHEAD ABOVE
+  { 0x1DFF, BIDI_NSM },  // COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+  { 0x1E00, BIDI_L   },  // LATIN CAPITAL LETTER A WITH RING BELOW
+  { 0x1E01, BIDI_L   },  // LATIN SMALL LETTER A WITH RING BELOW
+  { 0x1E02, BIDI_L   },  // LATIN CAPITAL LETTER B WITH DOT ABOVE
+  { 0x1E03, BIDI_L   },  // LATIN SMALL LETTER B WITH DOT ABOVE
+  { 0x1E04, BIDI_L   },  // LATIN CAPITAL LETTER B WITH DOT BELOW
+  { 0x1E05, BIDI_L   },  // LATIN SMALL LETTER B WITH DOT BELOW
+  { 0x1E06, BIDI_L   },  // LATIN CAPITAL LETTER B WITH LINE BELOW
+  { 0x1E07, BIDI_L   },  // LATIN SMALL LETTER B WITH LINE BELOW
+  { 0x1E08, BIDI_L   },  // LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+  { 0x1E09, BIDI_L   },  // LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+  { 0x1E0A, BIDI_L   },  // LATIN CAPITAL LETTER D WITH DOT ABOVE
+  { 0x1E0B, BIDI_L   },  // LATIN SMALL LETTER D WITH DOT ABOVE
+  { 0x1E0C, BIDI_L   },  // LATIN CAPITAL LETTER D WITH DOT BELOW
+  { 0x1E0D, BIDI_L   },  // LATIN SMALL LETTER D WITH DOT BELOW
+  { 0x1E0E, BIDI_L   },  // LATIN CAPITAL LETTER D WITH LINE BELOW
+  { 0x1E0F, BIDI_L   },  // LATIN SMALL LETTER D WITH LINE BELOW
+  { 0x1E10, BIDI_L   },  // LATIN CAPITAL LETTER D WITH CEDILLA
+  { 0x1E11, BIDI_L   },  // LATIN SMALL LETTER D WITH CEDILLA
+  { 0x1E12, BIDI_L   },  // LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+  { 0x1E13, BIDI_L   },  // LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+  { 0x1E14, BIDI_L   },  // LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+  { 0x1E15, BIDI_L   },  // LATIN SMALL LETTER E WITH MACRON AND GRAVE
+  { 0x1E16, BIDI_L   },  // LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+  { 0x1E17, BIDI_L   },  // LATIN SMALL LETTER E WITH MACRON AND ACUTE
+  { 0x1E18, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+  { 0x1E19, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+  { 0x1E1A, BIDI_L   },  // LATIN CAPITAL LETTER E WITH TILDE BELOW
+  { 0x1E1B, BIDI_L   },  // LATIN SMALL LETTER E WITH TILDE BELOW
+  { 0x1E1C, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+  { 0x1E1D, BIDI_L   },  // LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+  { 0x1E1E, BIDI_L   },  // LATIN CAPITAL LETTER F WITH DOT ABOVE
+  { 0x1E1F, BIDI_L   },  // LATIN SMALL LETTER F WITH DOT ABOVE
+  { 0x1E20, BIDI_L   },  // LATIN CAPITAL LETTER G WITH MACRON
+  { 0x1E21, BIDI_L   },  // LATIN SMALL LETTER G WITH MACRON
+  { 0x1E22, BIDI_L   },  // LATIN CAPITAL LETTER H WITH DOT ABOVE
+  { 0x1E23, BIDI_L   },  // LATIN SMALL LETTER H WITH DOT ABOVE
+  { 0x1E24, BIDI_L   },  // LATIN CAPITAL LETTER H WITH DOT BELOW
+  { 0x1E25, BIDI_L   },  // LATIN SMALL LETTER H WITH DOT BELOW
+  { 0x1E26, BIDI_L   },  // LATIN CAPITAL LETTER H WITH DIAERESIS
+  { 0x1E27, BIDI_L   },  // LATIN SMALL LETTER H WITH DIAERESIS
+  { 0x1E28, BIDI_L   },  // LATIN CAPITAL LETTER H WITH CEDILLA
+  { 0x1E29, BIDI_L   },  // LATIN SMALL LETTER H WITH CEDILLA
+  { 0x1E2A, BIDI_L   },  // LATIN CAPITAL LETTER H WITH BREVE BELOW
+  { 0x1E2B, BIDI_L   },  // LATIN SMALL LETTER H WITH BREVE BELOW
+  { 0x1E2C, BIDI_L   },  // LATIN CAPITAL LETTER I WITH TILDE BELOW
+  { 0x1E2D, BIDI_L   },  // LATIN SMALL LETTER I WITH TILDE BELOW
+  { 0x1E2E, BIDI_L   },  // LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+  { 0x1E2F, BIDI_L   },  // LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+  { 0x1E30, BIDI_L   },  // LATIN CAPITAL LETTER K WITH ACUTE
+  { 0x1E31, BIDI_L   },  // LATIN SMALL LETTER K WITH ACUTE
+  { 0x1E32, BIDI_L   },  // LATIN CAPITAL LETTER K WITH DOT BELOW
+  { 0x1E33, BIDI_L   },  // LATIN SMALL LETTER K WITH DOT BELOW
+  { 0x1E34, BIDI_L   },  // LATIN CAPITAL LETTER K WITH LINE BELOW
+  { 0x1E35, BIDI_L   },  // LATIN SMALL LETTER K WITH LINE BELOW
+  { 0x1E36, BIDI_L   },  // LATIN CAPITAL LETTER L WITH DOT BELOW
+  { 0x1E37, BIDI_L   },  // LATIN SMALL LETTER L WITH DOT BELOW
+  { 0x1E38, BIDI_L   },  // LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+  { 0x1E39, BIDI_L   },  // LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+  { 0x1E3A, BIDI_L   },  // LATIN CAPITAL LETTER L WITH LINE BELOW
+  { 0x1E3B, BIDI_L   },  // LATIN SMALL LETTER L WITH LINE BELOW
+  { 0x1E3C, BIDI_L   },  // LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+  { 0x1E3D, BIDI_L   },  // LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+  { 0x1E3E, BIDI_L   },  // LATIN CAPITAL LETTER M WITH ACUTE
+  { 0x1E3F, BIDI_L   },  // LATIN SMALL LETTER M WITH ACUTE
+  { 0x1E40, BIDI_L   },  // LATIN CAPITAL LETTER M WITH DOT ABOVE
+  { 0x1E41, BIDI_L   },  // LATIN SMALL LETTER M WITH DOT ABOVE
+  { 0x1E42, BIDI_L   },  // LATIN CAPITAL LETTER M WITH DOT BELOW
+  { 0x1E43, BIDI_L   },  // LATIN SMALL LETTER M WITH DOT BELOW
+  { 0x1E44, BIDI_L   },  // LATIN CAPITAL LETTER N WITH DOT ABOVE
+  { 0x1E45, BIDI_L   },  // LATIN SMALL LETTER N WITH DOT ABOVE
+  { 0x1E46, BIDI_L   },  // LATIN CAPITAL LETTER N WITH DOT BELOW
+  { 0x1E47, BIDI_L   },  // LATIN SMALL LETTER N WITH DOT BELOW
+  { 0x1E48, BIDI_L   },  // LATIN CAPITAL LETTER N WITH LINE BELOW
+  { 0x1E49, BIDI_L   },  // LATIN SMALL LETTER N WITH LINE BELOW
+  { 0x1E4A, BIDI_L   },  // LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+  { 0x1E4B, BIDI_L   },  // LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+  { 0x1E4C, BIDI_L   },  // LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+  { 0x1E4D, BIDI_L   },  // LATIN SMALL LETTER O WITH TILDE AND ACUTE
+  { 0x1E4E, BIDI_L   },  // LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+  { 0x1E4F, BIDI_L   },  // LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+  { 0x1E50, BIDI_L   },  // LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+  { 0x1E51, BIDI_L   },  // LATIN SMALL LETTER O WITH MACRON AND GRAVE
+  { 0x1E52, BIDI_L   },  // LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+  { 0x1E53, BIDI_L   },  // LATIN SMALL LETTER O WITH MACRON AND ACUTE
+  { 0x1E54, BIDI_L   },  // LATIN CAPITAL LETTER P WITH ACUTE
+  { 0x1E55, BIDI_L   },  // LATIN SMALL LETTER P WITH ACUTE
+  { 0x1E56, BIDI_L   },  // LATIN CAPITAL LETTER P WITH DOT ABOVE
+  { 0x1E57, BIDI_L   },  // LATIN SMALL LETTER P WITH DOT ABOVE
+  { 0x1E58, BIDI_L   },  // LATIN CAPITAL LETTER R WITH DOT ABOVE
+  { 0x1E59, BIDI_L   },  // LATIN SMALL LETTER R WITH DOT ABOVE
+  { 0x1E5A, BIDI_L   },  // LATIN CAPITAL LETTER R WITH DOT BELOW
+  { 0x1E5B, BIDI_L   },  // LATIN SMALL LETTER R WITH DOT BELOW
+  { 0x1E5C, BIDI_L   },  // LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+  { 0x1E5D, BIDI_L   },  // LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+  { 0x1E5E, BIDI_L   },  // LATIN CAPITAL LETTER R WITH LINE BELOW
+  { 0x1E5F, BIDI_L   },  // LATIN SMALL LETTER R WITH LINE BELOW
+  { 0x1E60, BIDI_L   },  // LATIN CAPITAL LETTER S WITH DOT ABOVE
+  { 0x1E61, BIDI_L   },  // LATIN SMALL LETTER S WITH DOT ABOVE
+  { 0x1E62, BIDI_L   },  // LATIN CAPITAL LETTER S WITH DOT BELOW
+  { 0x1E63, BIDI_L   },  // LATIN SMALL LETTER S WITH DOT BELOW
+  { 0x1E64, BIDI_L   },  // LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+  { 0x1E65, BIDI_L   },  // LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+  { 0x1E66, BIDI_L   },  // LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+  { 0x1E67, BIDI_L   },  // LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+  { 0x1E68, BIDI_L   },  // LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+  { 0x1E69, BIDI_L   },  // LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+  { 0x1E6A, BIDI_L   },  // LATIN CAPITAL LETTER T WITH DOT ABOVE
+  { 0x1E6B, BIDI_L   },  // LATIN SMALL LETTER T WITH DOT ABOVE
+  { 0x1E6C, BIDI_L   },  // LATIN CAPITAL LETTER T WITH DOT BELOW
+  { 0x1E6D, BIDI_L   },  // LATIN SMALL LETTER T WITH DOT BELOW
+  { 0x1E6E, BIDI_L   },  // LATIN CAPITAL LETTER T WITH LINE BELOW
+  { 0x1E6F, BIDI_L   },  // LATIN SMALL LETTER T WITH LINE BELOW
+  { 0x1E70, BIDI_L   },  // LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+  { 0x1E71, BIDI_L   },  // LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+  { 0x1E72, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+  { 0x1E73, BIDI_L   },  // LATIN SMALL LETTER U WITH DIAERESIS BELOW
+  { 0x1E74, BIDI_L   },  // LATIN CAPITAL LETTER U WITH TILDE BELOW
+  { 0x1E75, BIDI_L   },  // LATIN SMALL LETTER U WITH TILDE BELOW
+  { 0x1E76, BIDI_L   },  // LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+  { 0x1E77, BIDI_L   },  // LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+  { 0x1E78, BIDI_L   },  // LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+  { 0x1E79, BIDI_L   },  // LATIN SMALL LETTER U WITH TILDE AND ACUTE
+  { 0x1E7A, BIDI_L   },  // LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+  { 0x1E7B, BIDI_L   },  // LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+  { 0x1E7C, BIDI_L   },  // LATIN CAPITAL LETTER V WITH TILDE
+  { 0x1E7D, BIDI_L   },  // LATIN SMALL LETTER V WITH TILDE
+  { 0x1E7E, BIDI_L   },  // LATIN CAPITAL LETTER V WITH DOT BELOW
+  { 0x1E7F, BIDI_L   },  // LATIN SMALL LETTER V WITH DOT BELOW
+  { 0x1E80, BIDI_L   },  // LATIN CAPITAL LETTER W WITH GRAVE
+  { 0x1E81, BIDI_L   },  // LATIN SMALL LETTER W WITH GRAVE
+  { 0x1E82, BIDI_L   },  // LATIN CAPITAL LETTER W WITH ACUTE
+  { 0x1E83, BIDI_L   },  // LATIN SMALL LETTER W WITH ACUTE
+  { 0x1E84, BIDI_L   },  // LATIN CAPITAL LETTER W WITH DIAERESIS
+  { 0x1E85, BIDI_L   },  // LATIN SMALL LETTER W WITH DIAERESIS
+  { 0x1E86, BIDI_L   },  // LATIN CAPITAL LETTER W WITH DOT ABOVE
+  { 0x1E87, BIDI_L   },  // LATIN SMALL LETTER W WITH DOT ABOVE
+  { 0x1E88, BIDI_L   },  // LATIN CAPITAL LETTER W WITH DOT BELOW
+  { 0x1E89, BIDI_L   },  // LATIN SMALL LETTER W WITH DOT BELOW
+  { 0x1E8A, BIDI_L   },  // LATIN CAPITAL LETTER X WITH DOT ABOVE
+  { 0x1E8B, BIDI_L   },  // LATIN SMALL LETTER X WITH DOT ABOVE
+  { 0x1E8C, BIDI_L   },  // LATIN CAPITAL LETTER X WITH DIAERESIS
+  { 0x1E8D, BIDI_L   },  // LATIN SMALL LETTER X WITH DIAERESIS
+  { 0x1E8E, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH DOT ABOVE
+  { 0x1E8F, BIDI_L   },  // LATIN SMALL LETTER Y WITH DOT ABOVE
+  { 0x1E90, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+  { 0x1E91, BIDI_L   },  // LATIN SMALL LETTER Z WITH CIRCUMFLEX
+  { 0x1E92, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH DOT BELOW
+  { 0x1E93, BIDI_L   },  // LATIN SMALL LETTER Z WITH DOT BELOW
+  { 0x1E94, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH LINE BELOW
+  { 0x1E95, BIDI_L   },  // LATIN SMALL LETTER Z WITH LINE BELOW
+  { 0x1E96, BIDI_L   },  // LATIN SMALL LETTER H WITH LINE BELOW
+  { 0x1E97, BIDI_L   },  // LATIN SMALL LETTER T WITH DIAERESIS
+  { 0x1E98, BIDI_L   },  // LATIN SMALL LETTER W WITH RING ABOVE
+  { 0x1E99, BIDI_L   },  // LATIN SMALL LETTER Y WITH RING ABOVE
+  { 0x1E9A, BIDI_L   },  // LATIN SMALL LETTER A WITH RIGHT HALF RING
+  { 0x1E9B, BIDI_L   },  // LATIN SMALL LETTER LONG S WITH DOT ABOVE
+  { 0x1E9C, BIDI_L   },  // LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
+  { 0x1E9D, BIDI_L   },  // LATIN SMALL LETTER LONG S WITH HIGH STROKE
+  { 0x1E9E, BIDI_L   },  // LATIN CAPITAL LETTER SHARP S
+  { 0x1E9F, BIDI_L   },  // LATIN SMALL LETTER DELTA
+  { 0x1EA0, BIDI_L   },  // LATIN CAPITAL LETTER A WITH DOT BELOW
+  { 0x1EA1, BIDI_L   },  // LATIN SMALL LETTER A WITH DOT BELOW
+  { 0x1EA2, BIDI_L   },  // LATIN CAPITAL LETTER A WITH HOOK ABOVE
+  { 0x1EA3, BIDI_L   },  // LATIN SMALL LETTER A WITH HOOK ABOVE
+  { 0x1EA4, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+  { 0x1EA5, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+  { 0x1EA6, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+  { 0x1EA7, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+  { 0x1EA8, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1EA9, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1EAA, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+  { 0x1EAB, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+  { 0x1EAC, BIDI_L   },  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1EAD, BIDI_L   },  // LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1EAE, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+  { 0x1EAF, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE AND ACUTE
+  { 0x1EB0, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+  { 0x1EB1, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE AND GRAVE
+  { 0x1EB2, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+  { 0x1EB3, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+  { 0x1EB4, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+  { 0x1EB5, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE AND TILDE
+  { 0x1EB6, BIDI_L   },  // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+  { 0x1EB7, BIDI_L   },  // LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+  { 0x1EB8, BIDI_L   },  // LATIN CAPITAL LETTER E WITH DOT BELOW
+  { 0x1EB9, BIDI_L   },  // LATIN SMALL LETTER E WITH DOT BELOW
+  { 0x1EBA, BIDI_L   },  // LATIN CAPITAL LETTER E WITH HOOK ABOVE
+  { 0x1EBB, BIDI_L   },  // LATIN SMALL LETTER E WITH HOOK ABOVE
+  { 0x1EBC, BIDI_L   },  // LATIN CAPITAL LETTER E WITH TILDE
+  { 0x1EBD, BIDI_L   },  // LATIN SMALL LETTER E WITH TILDE
+  { 0x1EBE, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+  { 0x1EBF, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+  { 0x1EC0, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+  { 0x1EC1, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+  { 0x1EC2, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1EC3, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1EC4, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+  { 0x1EC5, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+  { 0x1EC6, BIDI_L   },  // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1EC7, BIDI_L   },  // LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1EC8, BIDI_L   },  // LATIN CAPITAL LETTER I WITH HOOK ABOVE
+  { 0x1EC9, BIDI_L   },  // LATIN SMALL LETTER I WITH HOOK ABOVE
+  { 0x1ECA, BIDI_L   },  // LATIN CAPITAL LETTER I WITH DOT BELOW
+  { 0x1ECB, BIDI_L   },  // LATIN SMALL LETTER I WITH DOT BELOW
+  { 0x1ECC, BIDI_L   },  // LATIN CAPITAL LETTER O WITH DOT BELOW
+  { 0x1ECD, BIDI_L   },  // LATIN SMALL LETTER O WITH DOT BELOW
+  { 0x1ECE, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HOOK ABOVE
+  { 0x1ECF, BIDI_L   },  // LATIN SMALL LETTER O WITH HOOK ABOVE
+  { 0x1ED0, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+  { 0x1ED1, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+  { 0x1ED2, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+  { 0x1ED3, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+  { 0x1ED4, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1ED5, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+  { 0x1ED6, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+  { 0x1ED7, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+  { 0x1ED8, BIDI_L   },  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1ED9, BIDI_L   },  // LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+  { 0x1EDA, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+  { 0x1EDB, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN AND ACUTE
+  { 0x1EDC, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+  { 0x1EDD, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN AND GRAVE
+  { 0x1EDE, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+  { 0x1EDF, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+  { 0x1EE0, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN AND TILDE
+  { 0x1EE1, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN AND TILDE
+  { 0x1EE2, BIDI_L   },  // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+  { 0x1EE3, BIDI_L   },  // LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+  { 0x1EE4, BIDI_L   },  // LATIN CAPITAL LETTER U WITH DOT BELOW
+  { 0x1EE5, BIDI_L   },  // LATIN SMALL LETTER U WITH DOT BELOW
+  { 0x1EE6, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HOOK ABOVE
+  { 0x1EE7, BIDI_L   },  // LATIN SMALL LETTER U WITH HOOK ABOVE
+  { 0x1EE8, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+  { 0x1EE9, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN AND ACUTE
+  { 0x1EEA, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+  { 0x1EEB, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN AND GRAVE
+  { 0x1EEC, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+  { 0x1EED, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+  { 0x1EEE, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN AND TILDE
+  { 0x1EEF, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN AND TILDE
+  { 0x1EF0, BIDI_L   },  // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+  { 0x1EF1, BIDI_L   },  // LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+  { 0x1EF2, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH GRAVE
+  { 0x1EF3, BIDI_L   },  // LATIN SMALL LETTER Y WITH GRAVE
+  { 0x1EF4, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH DOT BELOW
+  { 0x1EF5, BIDI_L   },  // LATIN SMALL LETTER Y WITH DOT BELOW
+  { 0x1EF6, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+  { 0x1EF7, BIDI_L   },  // LATIN SMALL LETTER Y WITH HOOK ABOVE
+  { 0x1EF8, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH TILDE
+  { 0x1EF9, BIDI_L   },  // LATIN SMALL LETTER Y WITH TILDE
+  { 0x1EFA, BIDI_L   },  // LATIN CAPITAL LETTER MIDDLE-WELSH LL
+  { 0x1EFB, BIDI_L   },  // LATIN SMALL LETTER MIDDLE-WELSH LL
+  { 0x1EFC, BIDI_L   },  // LATIN CAPITAL LETTER MIDDLE-WELSH V
+  { 0x1EFD, BIDI_L   },  // LATIN SMALL LETTER MIDDLE-WELSH V
+  { 0x1EFE, BIDI_L   },  // LATIN CAPITAL LETTER Y WITH LOOP
+  { 0x1EFF, BIDI_L   },  // LATIN SMALL LETTER Y WITH LOOP
+  { 0x1F00, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI
+  { 0x1F01, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA
+  { 0x1F02, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+  { 0x1F03, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+  { 0x1F04, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+  { 0x1F05, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+  { 0x1F06, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+  { 0x1F07, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+  { 0x1F08, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI
+  { 0x1F09, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA
+  { 0x1F0A, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+  { 0x1F0B, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+  { 0x1F0C, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+  { 0x1F0D, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+  { 0x1F0E, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+  { 0x1F0F, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+  { 0x1F10, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH PSILI
+  { 0x1F11, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH DASIA
+  { 0x1F12, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+  { 0x1F13, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+  { 0x1F14, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+  { 0x1F15, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+  { 0x1F18, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH PSILI
+  { 0x1F19, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH DASIA
+  { 0x1F1A, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+  { 0x1F1B, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+  { 0x1F1C, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+  { 0x1F1D, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+  { 0x1F20, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI
+  { 0x1F21, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA
+  { 0x1F22, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+  { 0x1F23, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+  { 0x1F24, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+  { 0x1F25, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+  { 0x1F26, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+  { 0x1F27, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+  { 0x1F28, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI
+  { 0x1F29, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA
+  { 0x1F2A, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+  { 0x1F2B, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+  { 0x1F2C, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+  { 0x1F2D, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+  { 0x1F2E, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+  { 0x1F2F, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+  { 0x1F30, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH PSILI
+  { 0x1F31, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DASIA
+  { 0x1F32, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+  { 0x1F33, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+  { 0x1F34, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+  { 0x1F35, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+  { 0x1F36, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+  { 0x1F37, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+  { 0x1F38, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH PSILI
+  { 0x1F39, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH DASIA
+  { 0x1F3A, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+  { 0x1F3B, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+  { 0x1F3C, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+  { 0x1F3D, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+  { 0x1F3E, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+  { 0x1F3F, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+  { 0x1F40, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH PSILI
+  { 0x1F41, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH DASIA
+  { 0x1F42, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+  { 0x1F43, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+  { 0x1F44, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+  { 0x1F45, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+  { 0x1F48, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH PSILI
+  { 0x1F49, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH DASIA
+  { 0x1F4A, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+  { 0x1F4B, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+  { 0x1F4C, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+  { 0x1F4D, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+  { 0x1F50, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH PSILI
+  { 0x1F51, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DASIA
+  { 0x1F52, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+  { 0x1F53, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+  { 0x1F54, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+  { 0x1F55, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+  { 0x1F56, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+  { 0x1F57, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+  { 0x1F59, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH DASIA
+  { 0x1F5B, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+  { 0x1F5D, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+  { 0x1F5F, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+  { 0x1F60, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI
+  { 0x1F61, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA
+  { 0x1F62, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+  { 0x1F63, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+  { 0x1F64, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+  { 0x1F65, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+  { 0x1F66, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+  { 0x1F67, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+  { 0x1F68, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI
+  { 0x1F69, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA
+  { 0x1F6A, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+  { 0x1F6B, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+  { 0x1F6C, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+  { 0x1F6D, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+  { 0x1F6E, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+  { 0x1F6F, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+  { 0x1F70, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH VARIA
+  { 0x1F71, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH OXIA
+  { 0x1F72, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH VARIA
+  { 0x1F73, BIDI_L   },  // GREEK SMALL LETTER EPSILON WITH OXIA
+  { 0x1F74, BIDI_L   },  // GREEK SMALL LETTER ETA WITH VARIA
+  { 0x1F75, BIDI_L   },  // GREEK SMALL LETTER ETA WITH OXIA
+  { 0x1F76, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH VARIA
+  { 0x1F77, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH OXIA
+  { 0x1F78, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH VARIA
+  { 0x1F79, BIDI_L   },  // GREEK SMALL LETTER OMICRON WITH OXIA
+  { 0x1F7A, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH VARIA
+  { 0x1F7B, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH OXIA
+  { 0x1F7C, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH VARIA
+  { 0x1F7D, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH OXIA
+  { 0x1F80, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+  { 0x1F81, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+  { 0x1F82, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+  { 0x1F83, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+  { 0x1F84, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+  { 0x1F85, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+  { 0x1F86, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1F87, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1F88, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+  { 0x1F89, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+  { 0x1F8A, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+  { 0x1F8B, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+  { 0x1F8C, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+  { 0x1F8D, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+  { 0x1F8E, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1F8F, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1F90, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+  { 0x1F91, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+  { 0x1F92, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+  { 0x1F93, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+  { 0x1F94, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+  { 0x1F95, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+  { 0x1F96, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1F97, BIDI_L   },  // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1F98, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+  { 0x1F99, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+  { 0x1F9A, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+  { 0x1F9B, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+  { 0x1F9C, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+  { 0x1F9D, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+  { 0x1F9E, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1F9F, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1FA0, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+  { 0x1FA1, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+  { 0x1FA2, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+  { 0x1FA3, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+  { 0x1FA4, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+  { 0x1FA5, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+  { 0x1FA6, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1FA7, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1FA8, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+  { 0x1FA9, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+  { 0x1FAA, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+  { 0x1FAB, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+  { 0x1FAC, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+  { 0x1FAD, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+  { 0x1FAE, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1FAF, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+  { 0x1FB0, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH VRACHY
+  { 0x1FB1, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH MACRON
+  { 0x1FB2, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+  { 0x1FB3, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+  { 0x1FB4, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+  { 0x1FB6, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+  { 0x1FB7, BIDI_L   },  // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1FB8, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH VRACHY
+  { 0x1FB9, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH MACRON
+  { 0x1FBA, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH VARIA
+  { 0x1FBB, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH OXIA
+  { 0x1FBC, BIDI_L   },  // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+  { 0x1FBD, BIDI_ON  },  // GREEK KORONIS
+  { 0x1FBE, BIDI_L   },  // GREEK PROSGEGRAMMENI
+  { 0x1FBF, BIDI_ON  },  // GREEK PSILI
+  { 0x1FC0, BIDI_ON  },  // GREEK PERISPOMENI
+  { 0x1FC1, BIDI_ON  },  // GREEK DIALYTIKA AND PERISPOMENI
+  { 0x1FC2, BIDI_L   },  // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+  { 0x1FC3, BIDI_L   },  // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+  { 0x1FC4, BIDI_L   },  // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+  { 0x1FC6, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PERISPOMENI
+  { 0x1FC7, BIDI_L   },  // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1FC8, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH VARIA
+  { 0x1FC9, BIDI_L   },  // GREEK CAPITAL LETTER EPSILON WITH OXIA
+  { 0x1FCA, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH VARIA
+  { 0x1FCB, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH OXIA
+  { 0x1FCC, BIDI_L   },  // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+  { 0x1FCD, BIDI_ON  },  // GREEK PSILI AND VARIA
+  { 0x1FCE, BIDI_ON  },  // GREEK PSILI AND OXIA
+  { 0x1FCF, BIDI_ON  },  // GREEK PSILI AND PERISPOMENI
+  { 0x1FD0, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH VRACHY
+  { 0x1FD1, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH MACRON
+  { 0x1FD2, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+  { 0x1FD3, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+  { 0x1FD6, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH PERISPOMENI
+  { 0x1FD7, BIDI_L   },  // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+  { 0x1FD8, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH VRACHY
+  { 0x1FD9, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH MACRON
+  { 0x1FDA, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH VARIA
+  { 0x1FDB, BIDI_L   },  // GREEK CAPITAL LETTER IOTA WITH OXIA
+  { 0x1FDD, BIDI_ON  },  // GREEK DASIA AND VARIA
+  { 0x1FDE, BIDI_ON  },  // GREEK DASIA AND OXIA
+  { 0x1FDF, BIDI_ON  },  // GREEK DASIA AND PERISPOMENI
+  { 0x1FE0, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH VRACHY
+  { 0x1FE1, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH MACRON
+  { 0x1FE2, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+  { 0x1FE3, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+  { 0x1FE4, BIDI_L   },  // GREEK SMALL LETTER RHO WITH PSILI
+  { 0x1FE5, BIDI_L   },  // GREEK SMALL LETTER RHO WITH DASIA
+  { 0x1FE6, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+  { 0x1FE7, BIDI_L   },  // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+  { 0x1FE8, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH VRACHY
+  { 0x1FE9, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH MACRON
+  { 0x1FEA, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH VARIA
+  { 0x1FEB, BIDI_L   },  // GREEK CAPITAL LETTER UPSILON WITH OXIA
+  { 0x1FEC, BIDI_L   },  // GREEK CAPITAL LETTER RHO WITH DASIA
+  { 0x1FED, BIDI_ON  },  // GREEK DIALYTIKA AND VARIA
+  { 0x1FEE, BIDI_ON  },  // GREEK DIALYTIKA AND OXIA
+  { 0x1FEF, BIDI_ON  },  // GREEK VARIA
+  { 0x1FF2, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+  { 0x1FF3, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+  { 0x1FF4, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+  { 0x1FF6, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+  { 0x1FF7, BIDI_L   },  // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+  { 0x1FF8, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH VARIA
+  { 0x1FF9, BIDI_L   },  // GREEK CAPITAL LETTER OMICRON WITH OXIA
+  { 0x1FFA, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH VARIA
+  { 0x1FFB, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH OXIA
+  { 0x1FFC, BIDI_L   },  // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+  { 0x1FFD, BIDI_ON  },  // GREEK OXIA
+  { 0x1FFE, BIDI_ON  },  // GREEK DASIA
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_2 == 1)
+
+  { 0x2000, BIDI_WS  },  // EN QUAD
+  { 0x2001, BIDI_WS  },  // EM QUAD
+  { 0x2002, BIDI_WS  },  // EN SPACE
+  { 0x2003, BIDI_WS  },  // EM SPACE
+  { 0x2004, BIDI_WS  },  // THREE-PER-EM SPACE
+  { 0x2005, BIDI_WS  },  // FOUR-PER-EM SPACE
+  { 0x2006, BIDI_WS  },  // SIX-PER-EM SPACE
+  { 0x2007, BIDI_WS  },  // FIGURE SPACE
+  { 0x2008, BIDI_WS  },  // PUNCTUATION SPACE
+  { 0x2009, BIDI_WS  },  // THIN SPACE
+  { 0x200A, BIDI_WS  },  // HAIR SPACE
+  { 0x200B, BIDI_BN  },  // ZERO WIDTH SPACE
+  { 0x200C, BIDI_BN  },  // ZERO WIDTH NON-JOINER
+  { 0x200D, BIDI_BN  },  // ZERO WIDTH JOINER
+  { 0x200E, BIDI_L   },  // LEFT-TO-RIGHT MARK
+  { 0x200F, BIDI_R   },  // RIGHT-TO-LEFT MARK
+  { 0x2010, BIDI_ON  },  // HYPHEN
+  { 0x2011, BIDI_ON  },  // NON-BREAKING HYPHEN
+  { 0x2012, BIDI_ON  },  // FIGURE DASH
+  { 0x2013, BIDI_ON  },  // EN DASH
+  { 0x2014, BIDI_ON  },  // EM DASH
+  { 0x2015, BIDI_ON  },  // HORIZONTAL BAR
+  { 0x2016, BIDI_ON  },  // DOUBLE VERTICAL LINE
+  { 0x2017, BIDI_ON  },  // DOUBLE LOW LINE
+  { 0x2018, BIDI_ON  },  // LEFT SINGLE QUOTATION MARK
+  { 0x2019, BIDI_ON  },  // RIGHT SINGLE QUOTATION MARK
+  { 0x201A, BIDI_ON  },  // SINGLE LOW-9 QUOTATION MARK
+  { 0x201B, BIDI_ON  },  // SINGLE HIGH-REVERSED-9 QUOTATION MARK
+  { 0x201C, BIDI_ON  },  // LEFT DOUBLE QUOTATION MARK
+  { 0x201D, BIDI_ON  },  // RIGHT DOUBLE QUOTATION MARK
+  { 0x201E, BIDI_ON  },  // DOUBLE LOW-9 QUOTATION MARK
+  { 0x201F, BIDI_ON  },  // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+  { 0x2020, BIDI_ON  },  // DAGGER
+  { 0x2021, BIDI_ON  },  // DOUBLE DAGGER
+  { 0x2022, BIDI_ON  },  // BULLET
+  { 0x2023, BIDI_ON  },  // TRIANGULAR BULLET
+  { 0x2024, BIDI_ON  },  // ONE DOT LEADER
+  { 0x2025, BIDI_ON  },  // TWO DOT LEADER
+  { 0x2026, BIDI_ON  },  // HORIZONTAL ELLIPSIS
+  { 0x2027, BIDI_ON  },  // HYPHENATION POINT
+  { 0x2028, BIDI_WS  },  // LINE SEPARATOR
+  { 0x2029, BIDI_B   },  // PARAGRAPH SEPARATOR
+  { 0x202A, BIDI_LRE },  // LEFT-TO-RIGHT EMBEDDING
+  { 0x202B, BIDI_RLE },  // RIGHT-TO-LEFT EMBEDDING
+  { 0x202C, BIDI_PDF },  // POP DIRECTIONAL FORMATTING
+  { 0x202D, BIDI_LRO },  // LEFT-TO-RIGHT OVERRIDE
+  { 0x202E, BIDI_RLO },  // RIGHT-TO-LEFT OVERRIDE
+  { 0x202F, BIDI_CS  },  // NARROW NO-BREAK SPACE
+  { 0x2030, BIDI_ET  },  // PER MILLE SIGN
+  { 0x2031, BIDI_ET  },  // PER TEN THOUSAND SIGN
+  { 0x2032, BIDI_ET  },  // PRIME
+  { 0x2033, BIDI_ET  },  // DOUBLE PRIME
+  { 0x2034, BIDI_ET  },  // TRIPLE PRIME
+  { 0x2035, BIDI_ON  },  // REVERSED PRIME
+  { 0x2036, BIDI_ON  },  // REVERSED DOUBLE PRIME
+  { 0x2037, BIDI_ON  },  // REVERSED TRIPLE PRIME
+  { 0x2038, BIDI_ON  },  // CARET
+  { 0x2039, BIDI_ON  },  // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+  { 0x203A, BIDI_ON  },  // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+  { 0x203B, BIDI_ON  },  // REFERENCE MARK
+  { 0x203C, BIDI_ON  },  // DOUBLE EXCLAMATION MARK
+  { 0x203D, BIDI_ON  },  // INTERROBANG
+  { 0x203E, BIDI_ON  },  // OVERLINE
+  { 0x203F, BIDI_ON  },  // UNDERTIE
+  { 0x2040, BIDI_ON  },  // CHARACTER TIE
+  { 0x2041, BIDI_ON  },  // CARET INSERTION POINT
+  { 0x2042, BIDI_ON  },  // ASTERISM
+  { 0x2043, BIDI_ON  },  // HYPHEN BULLET
+  { 0x2044, BIDI_CS  },  // FRACTION SLASH
+  { 0x2045, BIDI_ON  },  // LEFT SQUARE BRACKET WITH QUILL
+  { 0x2046, BIDI_ON  },  // RIGHT SQUARE BRACKET WITH QUILL
+  { 0x2047, BIDI_ON  },  // DOUBLE QUESTION MARK
+  { 0x2048, BIDI_ON  },  // QUESTION EXCLAMATION MARK
+  { 0x2049, BIDI_ON  },  // EXCLAMATION QUESTION MARK
+  { 0x204A, BIDI_ON  },  // TIRONIAN SIGN ET
+  { 0x204B, BIDI_ON  },  // REVERSED PILCROW SIGN
+  { 0x204C, BIDI_ON  },  // BLACK LEFTWARDS BULLET
+  { 0x204D, BIDI_ON  },  // BLACK RIGHTWARDS BULLET
+  { 0x204E, BIDI_ON  },  // LOW ASTERISK
+  { 0x204F, BIDI_ON  },  // REVERSED SEMICOLON
+  { 0x2050, BIDI_ON  },  // CLOSE UP
+  { 0x2051, BIDI_ON  },  // TWO ASTERISKS ALIGNED VERTICALLY
+  { 0x2052, BIDI_ON  },  // COMMERCIAL MINUS SIGN
+  { 0x2053, BIDI_ON  },  // SWUNG DASH
+  { 0x2054, BIDI_ON  },  // INVERTED UNDERTIE
+  { 0x2055, BIDI_ON  },  // FLOWER PUNCTUATION MARK
+  { 0x2056, BIDI_ON  },  // THREE DOT PUNCTUATION
+  { 0x2057, BIDI_ON  },  // QUADRUPLE PRIME
+  { 0x2058, BIDI_ON  },  // FOUR DOT PUNCTUATION
+  { 0x2059, BIDI_ON  },  // FIVE DOT PUNCTUATION
+  { 0x205A, BIDI_ON  },  // TWO DOT PUNCTUATION
+  { 0x205B, BIDI_ON  },  // FOUR DOT MARK
+  { 0x205C, BIDI_ON  },  // DOTTED CROSS
+  { 0x205D, BIDI_ON  },  // TRICOLON
+  { 0x205E, BIDI_ON  },  // VERTICAL FOUR DOTS
+  { 0x205F, BIDI_WS  },  // MEDIUM MATHEMATICAL SPACE
+  { 0x2060, BIDI_BN  },  // WORD JOINER
+  { 0x2061, BIDI_BN  },  // FUNCTION APPLICATION
+  { 0x2062, BIDI_BN  },  // INVISIBLE TIMES
+  { 0x2063, BIDI_BN  },  // INVISIBLE SEPARATOR
+  { 0x2064, BIDI_BN  },  // INVISIBLE PLUS
+  { 0x2066, BIDI_LRI },  // LEFT-TO-RIGHT ISOLATE
+  { 0x2067, BIDI_RLI },  // RIGHT-TO-LEFT ISOLATE
+  { 0x2068, BIDI_FSI },  // FIRST STRONG ISOLATE
+  { 0x2069, BIDI_PDI },  // POP DIRECTIONAL ISOLATE
+  { 0x206A, BIDI_BN  },  // INHIBIT SYMMETRIC SWAPPING
+  { 0x206B, BIDI_BN  },  // ACTIVATE SYMMETRIC SWAPPING
+  { 0x206C, BIDI_BN  },  // INHIBIT ARABIC FORM SHAPING
+  { 0x206D, BIDI_BN  },  // ACTIVATE ARABIC FORM SHAPING
+  { 0x206E, BIDI_BN  },  // NATIONAL DIGIT SHAPES
+  { 0x206F, BIDI_BN  },  // NOMINAL DIGIT SHAPES
+  { 0x2070, BIDI_EN  },  // SUPERSCRIPT ZERO
+  { 0x2071, BIDI_L   },  // SUPERSCRIPT LATIN SMALL LETTER I
+  { 0x2074, BIDI_EN  },  // SUPERSCRIPT FOUR
+  { 0x2075, BIDI_EN  },  // SUPERSCRIPT FIVE
+  { 0x2076, BIDI_EN  },  // SUPERSCRIPT SIX
+  { 0x2077, BIDI_EN  },  // SUPERSCRIPT SEVEN
+  { 0x2078, BIDI_EN  },  // SUPERSCRIPT EIGHT
+  { 0x2079, BIDI_EN  },  // SUPERSCRIPT NINE
+  { 0x207A, BIDI_ES  },  // SUPERSCRIPT PLUS SIGN
+  { 0x207B, BIDI_ES  },  // SUPERSCRIPT MINUS
+  { 0x207C, BIDI_ON  },  // SUPERSCRIPT EQUALS SIGN
+  { 0x207D, BIDI_ON  },  // SUPERSCRIPT LEFT PARENTHESIS
+  { 0x207E, BIDI_ON  },  // SUPERSCRIPT RIGHT PARENTHESIS
+  { 0x207F, BIDI_L   },  // SUPERSCRIPT LATIN SMALL LETTER N
+  { 0x2080, BIDI_EN  },  // SUBSCRIPT ZERO
+  { 0x2081, BIDI_EN  },  // SUBSCRIPT ONE
+  { 0x2082, BIDI_EN  },  // SUBSCRIPT TWO
+  { 0x2083, BIDI_EN  },  // SUBSCRIPT THREE
+  { 0x2084, BIDI_EN  },  // SUBSCRIPT FOUR
+  { 0x2085, BIDI_EN  },  // SUBSCRIPT FIVE
+  { 0x2086, BIDI_EN  },  // SUBSCRIPT SIX
+  { 0x2087, BIDI_EN  },  // SUBSCRIPT SEVEN
+  { 0x2088, BIDI_EN  },  // SUBSCRIPT EIGHT
+  { 0x2089, BIDI_EN  },  // SUBSCRIPT NINE
+  { 0x208A, BIDI_ES  },  // SUBSCRIPT PLUS SIGN
+  { 0x208B, BIDI_ES  },  // SUBSCRIPT MINUS
+  { 0x208C, BIDI_ON  },  // SUBSCRIPT EQUALS SIGN
+  { 0x208D, BIDI_ON  },  // SUBSCRIPT LEFT PARENTHESIS
+  { 0x208E, BIDI_ON  },  // SUBSCRIPT RIGHT PARENTHESIS
+  { 0x2090, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER A
+  { 0x2091, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER E
+  { 0x2092, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER O
+  { 0x2093, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER X
+  { 0x2094, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER SCHWA
+  { 0x2095, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER H
+  { 0x2096, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER K
+  { 0x2097, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER L
+  { 0x2098, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER M
+  { 0x2099, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER N
+  { 0x209A, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER P
+  { 0x209B, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER S
+  { 0x209C, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER T
+  { 0x20A0, BIDI_ET  },  // EURO-CURRENCY SIGN
+  { 0x20A1, BIDI_ET  },  // COLON SIGN
+  { 0x20A2, BIDI_ET  },  // CRUZEIRO SIGN
+  { 0x20A3, BIDI_ET  },  // FRENCH FRANC SIGN
+  { 0x20A4, BIDI_ET  },  // LIRA SIGN
+  { 0x20A5, BIDI_ET  },  // MILL SIGN
+  { 0x20A6, BIDI_ET  },  // NAIRA SIGN
+  { 0x20A7, BIDI_ET  },  // PESETA SIGN
+  { 0x20A8, BIDI_ET  },  // RUPEE SIGN
+  { 0x20A9, BIDI_ET  },  // WON SIGN
+  { 0x20AA, BIDI_ET  },  // NEW SHEQEL SIGN
+  { 0x20AB, BIDI_ET  },  // DONG SIGN
+  { 0x20AC, BIDI_ET  },  // EURO SIGN
+  { 0x20AD, BIDI_ET  },  // KIP SIGN
+  { 0x20AE, BIDI_ET  },  // TUGRIK SIGN
+  { 0x20AF, BIDI_ET  },  // DRACHMA SIGN
+  { 0x20B0, BIDI_ET  },  // GERMAN PENNY SIGN
+  { 0x20B1, BIDI_ET  },  // PESO SIGN
+  { 0x20B2, BIDI_ET  },  // GUARANI SIGN
+  { 0x20B3, BIDI_ET  },  // AUSTRAL SIGN
+  { 0x20B4, BIDI_ET  },  // HRYVNIA SIGN
+  { 0x20B5, BIDI_ET  },  // CEDI SIGN
+  { 0x20B6, BIDI_ET  },  // LIVRE TOURNOIS SIGN
+  { 0x20B7, BIDI_ET  },  // SPESMILO SIGN
+  { 0x20B8, BIDI_ET  },  // TENGE SIGN
+  { 0x20B9, BIDI_ET  },  // INDIAN RUPEE SIGN
+  { 0x20BA, BIDI_ET  },  // TURKISH LIRA SIGN
+  { 0x20BB, BIDI_ET  },  // NORDIC MARK SIGN
+  { 0x20BC, BIDI_ET  },  // MANAT SIGN
+  { 0x20BD, BIDI_ET  },  // RUBLE SIGN
+  { 0x20BE, BIDI_ET  },  // LARI SIGN
+  { 0x20D0, BIDI_NSM },  // COMBINING LEFT HARPOON ABOVE
+  { 0x20D1, BIDI_NSM },  // COMBINING RIGHT HARPOON ABOVE
+  { 0x20D2, BIDI_NSM },  // COMBINING LONG VERTICAL LINE OVERLAY
+  { 0x20D3, BIDI_NSM },  // COMBINING SHORT VERTICAL LINE OVERLAY
+  { 0x20D4, BIDI_NSM },  // COMBINING ANTICLOCKWISE ARROW ABOVE
+  { 0x20D5, BIDI_NSM },  // COMBINING CLOCKWISE ARROW ABOVE
+  { 0x20D6, BIDI_NSM },  // COMBINING LEFT ARROW ABOVE
+  { 0x20D7, BIDI_NSM },  // COMBINING RIGHT ARROW ABOVE
+  { 0x20D8, BIDI_NSM },  // COMBINING RING OVERLAY
+  { 0x20D9, BIDI_NSM },  // COMBINING CLOCKWISE RING OVERLAY
+  { 0x20DA, BIDI_NSM },  // COMBINING ANTICLOCKWISE RING OVERLAY
+  { 0x20DB, BIDI_NSM },  // COMBINING THREE DOTS ABOVE
+  { 0x20DC, BIDI_NSM },  // COMBINING FOUR DOTS ABOVE
+  { 0x20DD, BIDI_NSM },  // COMBINING ENCLOSING CIRCLE
+  { 0x20DE, BIDI_NSM },  // COMBINING ENCLOSING SQUARE
+  { 0x20DF, BIDI_NSM },  // COMBINING ENCLOSING DIAMOND
+  { 0x20E0, BIDI_NSM },  // COMBINING ENCLOSING CIRCLE BACKSLASH
+  { 0x20E1, BIDI_NSM },  // COMBINING LEFT RIGHT ARROW ABOVE
+  { 0x20E2, BIDI_NSM },  // COMBINING ENCLOSING SCREEN
+  { 0x20E3, BIDI_NSM },  // COMBINING ENCLOSING KEYCAP
+  { 0x20E4, BIDI_NSM },  // COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+  { 0x20E5, BIDI_NSM },  // COMBINING REVERSE SOLIDUS OVERLAY
+  { 0x20E6, BIDI_NSM },  // COMBINING DOUBLE VERTICAL STROKE OVERLAY
+  { 0x20E7, BIDI_NSM },  // COMBINING ANNUITY SYMBOL
+  { 0x20E8, BIDI_NSM },  // COMBINING TRIPLE UNDERDOT
+  { 0x20E9, BIDI_NSM },  // COMBINING WIDE BRIDGE ABOVE
+  { 0x20EA, BIDI_NSM },  // COMBINING LEFTWARDS ARROW OVERLAY
+  { 0x20EB, BIDI_NSM },  // COMBINING LONG DOUBLE SOLIDUS OVERLAY
+  { 0x20EC, BIDI_NSM },  // COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+  { 0x20ED, BIDI_NSM },  // COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
+  { 0x20EE, BIDI_NSM },  // COMBINING LEFT ARROW BELOW
+  { 0x20EF, BIDI_NSM },  // COMBINING RIGHT ARROW BELOW
+  { 0x20F0, BIDI_NSM },  // COMBINING ASTERISK ABOVE
+  { 0x2100, BIDI_ON  },  // ACCOUNT OF
+  { 0x2101, BIDI_ON  },  // ADDRESSED TO THE SUBJECT
+  { 0x2102, BIDI_L   },  // DOUBLE-STRUCK CAPITAL C
+  { 0x2103, BIDI_ON  },  // DEGREE CELSIUS
+  { 0x2104, BIDI_ON  },  // CENTRE LINE SYMBOL
+  { 0x2105, BIDI_ON  },  // CARE OF
+  { 0x2106, BIDI_ON  },  // CADA UNA
+  { 0x2107, BIDI_L   },  // EULER CONSTANT
+  { 0x2108, BIDI_ON  },  // SCRUPLE
+  { 0x2109, BIDI_ON  },  // DEGREE FAHRENHEIT
+  { 0x210A, BIDI_L   },  // SCRIPT SMALL G
+  { 0x210B, BIDI_L   },  // SCRIPT CAPITAL H
+  { 0x210C, BIDI_L   },  // BLACK-LETTER CAPITAL H
+  { 0x210D, BIDI_L   },  // DOUBLE-STRUCK CAPITAL H
+  { 0x210E, BIDI_L   },  // PLANCK CONSTANT
+  { 0x210F, BIDI_L   },  // PLANCK CONSTANT OVER TWO PI
+  { 0x2110, BIDI_L   },  // SCRIPT CAPITAL I
+  { 0x2111, BIDI_L   },  // BLACK-LETTER CAPITAL I
+  { 0x2112, BIDI_L   },  // SCRIPT CAPITAL L
+  { 0x2113, BIDI_L   },  // SCRIPT SMALL L
+  { 0x2114, BIDI_ON  },  // L B BAR SYMBOL
+  { 0x2115, BIDI_L   },  // DOUBLE-STRUCK CAPITAL N
+  { 0x2116, BIDI_ON  },  // NUMERO SIGN
+  { 0x2117, BIDI_ON  },  // SOUND RECORDING COPYRIGHT
+  { 0x2118, BIDI_ON  },  // SCRIPT CAPITAL P
+  { 0x2119, BIDI_L   },  // DOUBLE-STRUCK CAPITAL P
+  { 0x211A, BIDI_L   },  // DOUBLE-STRUCK CAPITAL Q
+  { 0x211B, BIDI_L   },  // SCRIPT CAPITAL R
+  { 0x211C, BIDI_L   },  // BLACK-LETTER CAPITAL R
+  { 0x211D, BIDI_L   },  // DOUBLE-STRUCK CAPITAL R
+  { 0x211E, BIDI_ON  },  // PRESCRIPTION TAKE
+  { 0x211F, BIDI_ON  },  // RESPONSE
+  { 0x2120, BIDI_ON  },  // SERVICE MARK
+  { 0x2121, BIDI_ON  },  // TELEPHONE SIGN
+  { 0x2122, BIDI_ON  },  // TRADE MARK SIGN
+  { 0x2123, BIDI_ON  },  // VERSICLE
+  { 0x2124, BIDI_L   },  // DOUBLE-STRUCK CAPITAL Z
+  { 0x2125, BIDI_ON  },  // OUNCE SIGN
+  { 0x2126, BIDI_L   },  // OHM SIGN
+  { 0x2127, BIDI_ON  },  // INVERTED OHM SIGN
+  { 0x2128, BIDI_L   },  // BLACK-LETTER CAPITAL Z
+  { 0x2129, BIDI_ON  },  // TURNED GREEK SMALL LETTER IOTA
+  { 0x212A, BIDI_L   },  // KELVIN SIGN
+  { 0x212B, BIDI_L   },  // ANGSTROM SIGN
+  { 0x212C, BIDI_L   },  // SCRIPT CAPITAL B
+  { 0x212D, BIDI_L   },  // BLACK-LETTER CAPITAL C
+  { 0x212E, BIDI_ET  },  // ESTIMATED SYMBOL
+  { 0x212F, BIDI_L   },  // SCRIPT SMALL E
+  { 0x2130, BIDI_L   },  // SCRIPT CAPITAL E
+  { 0x2131, BIDI_L   },  // SCRIPT CAPITAL F
+  { 0x2132, BIDI_L   },  // TURNED CAPITAL F
+  { 0x2133, BIDI_L   },  // SCRIPT CAPITAL M
+  { 0x2134, BIDI_L   },  // SCRIPT SMALL O
+  { 0x2135, BIDI_L   },  // ALEF SYMBOL
+  { 0x2136, BIDI_L   },  // BET SYMBOL
+  { 0x2137, BIDI_L   },  // GIMEL SYMBOL
+  { 0x2138, BIDI_L   },  // DALET SYMBOL
+  { 0x2139, BIDI_L   },  // INFORMATION SOURCE
+  { 0x213A, BIDI_ON  },  // ROTATED CAPITAL Q
+  { 0x213B, BIDI_ON  },  // FACSIMILE SIGN
+  { 0x213C, BIDI_L   },  // DOUBLE-STRUCK SMALL PI
+  { 0x213D, BIDI_L   },  // DOUBLE-STRUCK SMALL GAMMA
+  { 0x213E, BIDI_L   },  // DOUBLE-STRUCK CAPITAL GAMMA
+  { 0x213F, BIDI_L   },  // DOUBLE-STRUCK CAPITAL PI
+  { 0x2140, BIDI_ON  },  // DOUBLE-STRUCK N-ARY SUMMATION
+  { 0x2141, BIDI_ON  },  // TURNED SANS-SERIF CAPITAL G
+  { 0x2142, BIDI_ON  },  // TURNED SANS-SERIF CAPITAL L
+  { 0x2143, BIDI_ON  },  // REVERSED SANS-SERIF CAPITAL L
+  { 0x2144, BIDI_ON  },  // TURNED SANS-SERIF CAPITAL Y
+  { 0x2145, BIDI_L   },  // DOUBLE-STRUCK ITALIC CAPITAL D
+  { 0x2146, BIDI_L   },  // DOUBLE-STRUCK ITALIC SMALL D
+  { 0x2147, BIDI_L   },  // DOUBLE-STRUCK ITALIC SMALL E
+  { 0x2148, BIDI_L   },  // DOUBLE-STRUCK ITALIC SMALL I
+  { 0x2149, BIDI_L   },  // DOUBLE-STRUCK ITALIC SMALL J
+  { 0x214A, BIDI_ON  },  // PROPERTY LINE
+  { 0x214B, BIDI_ON  },  // TURNED AMPERSAND
+  { 0x214C, BIDI_ON  },  // PER SIGN
+  { 0x214D, BIDI_ON  },  // AKTIESELSKAB
+  { 0x214E, BIDI_L   },  // TURNED SMALL F
+  { 0x214F, BIDI_L   },  // SYMBOL FOR SAMARITAN SOURCE
+  { 0x2150, BIDI_ON  },  // VULGAR FRACTION ONE SEVENTH
+  { 0x2151, BIDI_ON  },  // VULGAR FRACTION ONE NINTH
+  { 0x2152, BIDI_ON  },  // VULGAR FRACTION ONE TENTH
+  { 0x2153, BIDI_ON  },  // VULGAR FRACTION ONE THIRD
+  { 0x2154, BIDI_ON  },  // VULGAR FRACTION TWO THIRDS
+  { 0x2155, BIDI_ON  },  // VULGAR FRACTION ONE FIFTH
+  { 0x2156, BIDI_ON  },  // VULGAR FRACTION TWO FIFTHS
+  { 0x2157, BIDI_ON  },  // VULGAR FRACTION THREE FIFTHS
+  { 0x2158, BIDI_ON  },  // VULGAR FRACTION FOUR FIFTHS
+  { 0x2159, BIDI_ON  },  // VULGAR FRACTION ONE SIXTH
+  { 0x215A, BIDI_ON  },  // VULGAR FRACTION FIVE SIXTHS
+  { 0x215B, BIDI_ON  },  // VULGAR FRACTION ONE EIGHTH
+  { 0x215C, BIDI_ON  },  // VULGAR FRACTION THREE EIGHTHS
+  { 0x215D, BIDI_ON  },  // VULGAR FRACTION FIVE EIGHTHS
+  { 0x215E, BIDI_ON  },  // VULGAR FRACTION SEVEN EIGHTHS
+  { 0x215F, BIDI_ON  },  // FRACTION NUMERATOR ONE
+  { 0x2160, BIDI_L   },  // ROMAN NUMERAL ONE
+  { 0x2161, BIDI_L   },  // ROMAN NUMERAL TWO
+  { 0x2162, BIDI_L   },  // ROMAN NUMERAL THREE
+  { 0x2163, BIDI_L   },  // ROMAN NUMERAL FOUR
+  { 0x2164, BIDI_L   },  // ROMAN NUMERAL FIVE
+  { 0x2165, BIDI_L   },  // ROMAN NUMERAL SIX
+  { 0x2166, BIDI_L   },  // ROMAN NUMERAL SEVEN
+  { 0x2167, BIDI_L   },  // ROMAN NUMERAL EIGHT
+  { 0x2168, BIDI_L   },  // ROMAN NUMERAL NINE
+  { 0x2169, BIDI_L   },  // ROMAN NUMERAL TEN
+  { 0x216A, BIDI_L   },  // ROMAN NUMERAL ELEVEN
+  { 0x216B, BIDI_L   },  // ROMAN NUMERAL TWELVE
+  { 0x216C, BIDI_L   },  // ROMAN NUMERAL FIFTY
+  { 0x216D, BIDI_L   },  // ROMAN NUMERAL ONE HUNDRED
+  { 0x216E, BIDI_L   },  // ROMAN NUMERAL FIVE HUNDRED
+  { 0x216F, BIDI_L   },  // ROMAN NUMERAL ONE THOUSAND
+  { 0x2170, BIDI_L   },  // SMALL ROMAN NUMERAL ONE
+  { 0x2171, BIDI_L   },  // SMALL ROMAN NUMERAL TWO
+  { 0x2172, BIDI_L   },  // SMALL ROMAN NUMERAL THREE
+  { 0x2173, BIDI_L   },  // SMALL ROMAN NUMERAL FOUR
+  { 0x2174, BIDI_L   },  // SMALL ROMAN NUMERAL FIVE
+  { 0x2175, BIDI_L   },  // SMALL ROMAN NUMERAL SIX
+  { 0x2176, BIDI_L   },  // SMALL ROMAN NUMERAL SEVEN
+  { 0x2177, BIDI_L   },  // SMALL ROMAN NUMERAL EIGHT
+  { 0x2178, BIDI_L   },  // SMALL ROMAN NUMERAL NINE
+  { 0x2179, BIDI_L   },  // SMALL ROMAN NUMERAL TEN
+  { 0x217A, BIDI_L   },  // SMALL ROMAN NUMERAL ELEVEN
+  { 0x217B, BIDI_L   },  // SMALL ROMAN NUMERAL TWELVE
+  { 0x217C, BIDI_L   },  // SMALL ROMAN NUMERAL FIFTY
+  { 0x217D, BIDI_L   },  // SMALL ROMAN NUMERAL ONE HUNDRED
+  { 0x217E, BIDI_L   },  // SMALL ROMAN NUMERAL FIVE HUNDRED
+  { 0x217F, BIDI_L   },  // SMALL ROMAN NUMERAL ONE THOUSAND
+  { 0x2180, BIDI_L   },  // ROMAN NUMERAL ONE THOUSAND C D
+  { 0x2181, BIDI_L   },  // ROMAN NUMERAL FIVE THOUSAND
+  { 0x2182, BIDI_L   },  // ROMAN NUMERAL TEN THOUSAND
+  { 0x2183, BIDI_L   },  // ROMAN NUMERAL REVERSED ONE HUNDRED
+  { 0x2184, BIDI_L   },  // LATIN SMALL LETTER REVERSED C
+  { 0x2185, BIDI_L   },  // ROMAN NUMERAL SIX LATE FORM
+  { 0x2186, BIDI_L   },  // ROMAN NUMERAL FIFTY EARLY FORM
+  { 0x2187, BIDI_L   },  // ROMAN NUMERAL FIFTY THOUSAND
+  { 0x2188, BIDI_L   },  // ROMAN NUMERAL ONE HUNDRED THOUSAND
+  { 0x2189, BIDI_ON  },  // VULGAR FRACTION ZERO THIRDS
+  { 0x218A, BIDI_ON  },  // TURNED DIGIT TWO
+  { 0x218B, BIDI_ON  },  // TURNED DIGIT THREE
+  { 0x2190, BIDI_ON  },  // LEFTWARDS ARROW
+  { 0x2191, BIDI_ON  },  // UPWARDS ARROW
+  { 0x2192, BIDI_ON  },  // RIGHTWARDS ARROW
+  { 0x2193, BIDI_ON  },  // DOWNWARDS ARROW
+  { 0x2194, BIDI_ON  },  // LEFT RIGHT ARROW
+  { 0x2195, BIDI_ON  },  // UP DOWN ARROW
+  { 0x2196, BIDI_ON  },  // NORTH WEST ARROW
+  { 0x2197, BIDI_ON  },  // NORTH EAST ARROW
+  { 0x2198, BIDI_ON  },  // SOUTH EAST ARROW
+  { 0x2199, BIDI_ON  },  // SOUTH WEST ARROW
+  { 0x219A, BIDI_ON  },  // LEFTWARDS ARROW WITH STROKE
+  { 0x219B, BIDI_ON  },  // RIGHTWARDS ARROW WITH STROKE
+  { 0x219C, BIDI_ON  },  // LEFTWARDS WAVE ARROW
+  { 0x219D, BIDI_ON  },  // RIGHTWARDS WAVE ARROW
+  { 0x219E, BIDI_ON  },  // LEFTWARDS TWO HEADED ARROW
+  { 0x219F, BIDI_ON  },  // UPWARDS TWO HEADED ARROW
+  { 0x21A0, BIDI_ON  },  // RIGHTWARDS TWO HEADED ARROW
+  { 0x21A1, BIDI_ON  },  // DOWNWARDS TWO HEADED ARROW
+  { 0x21A2, BIDI_ON  },  // LEFTWARDS ARROW WITH TAIL
+  { 0x21A3, BIDI_ON  },  // RIGHTWARDS ARROW WITH TAIL
+  { 0x21A4, BIDI_ON  },  // LEFTWARDS ARROW FROM BAR
+  { 0x21A5, BIDI_ON  },  // UPWARDS ARROW FROM BAR
+  { 0x21A6, BIDI_ON  },  // RIGHTWARDS ARROW FROM BAR
+  { 0x21A7, BIDI_ON  },  // DOWNWARDS ARROW FROM BAR
+  { 0x21A8, BIDI_ON  },  // UP DOWN ARROW WITH BASE
+  { 0x21A9, BIDI_ON  },  // LEFTWARDS ARROW WITH HOOK
+  { 0x21AA, BIDI_ON  },  // RIGHTWARDS ARROW WITH HOOK
+  { 0x21AB, BIDI_ON  },  // LEFTWARDS ARROW WITH LOOP
+  { 0x21AC, BIDI_ON  },  // RIGHTWARDS ARROW WITH LOOP
+  { 0x21AD, BIDI_ON  },  // LEFT RIGHT WAVE ARROW
+  { 0x21AE, BIDI_ON  },  // LEFT RIGHT ARROW WITH STROKE
+  { 0x21AF, BIDI_ON  },  // DOWNWARDS ZIGZAG ARROW
+  { 0x21B0, BIDI_ON  },  // UPWARDS ARROW WITH TIP LEFTWARDS
+  { 0x21B1, BIDI_ON  },  // UPWARDS ARROW WITH TIP RIGHTWARDS
+  { 0x21B2, BIDI_ON  },  // DOWNWARDS ARROW WITH TIP LEFTWARDS
+  { 0x21B3, BIDI_ON  },  // DOWNWARDS ARROW WITH TIP RIGHTWARDS
+  { 0x21B4, BIDI_ON  },  // RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+  { 0x21B5, BIDI_ON  },  // DOWNWARDS ARROW WITH CORNER LEFTWARDS
+  { 0x21B6, BIDI_ON  },  // ANTICLOCKWISE TOP SEMICIRCLE ARROW
+  { 0x21B7, BIDI_ON  },  // CLOCKWISE TOP SEMICIRCLE ARROW
+  { 0x21B8, BIDI_ON  },  // NORTH WEST ARROW TO LONG BAR
+  { 0x21B9, BIDI_ON  },  // LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+  { 0x21BA, BIDI_ON  },  // ANTICLOCKWISE OPEN CIRCLE ARROW
+  { 0x21BB, BIDI_ON  },  // CLOCKWISE OPEN CIRCLE ARROW
+  { 0x21BC, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UPWARDS
+  { 0x21BD, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB DOWNWARDS
+  { 0x21BE, BIDI_ON  },  // UPWARDS HARPOON WITH BARB RIGHTWARDS
+  { 0x21BF, BIDI_ON  },  // UPWARDS HARPOON WITH BARB LEFTWARDS
+  { 0x21C0, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UPWARDS
+  { 0x21C1, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+  { 0x21C2, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+  { 0x21C3, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB LEFTWARDS
+  { 0x21C4, BIDI_ON  },  // RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+  { 0x21C5, BIDI_ON  },  // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+  { 0x21C6, BIDI_ON  },  // LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+  { 0x21C7, BIDI_ON  },  // LEFTWARDS PAIRED ARROWS
+  { 0x21C8, BIDI_ON  },  // UPWARDS PAIRED ARROWS
+  { 0x21C9, BIDI_ON  },  // RIGHTWARDS PAIRED ARROWS
+  { 0x21CA, BIDI_ON  },  // DOWNWARDS PAIRED ARROWS
+  { 0x21CB, BIDI_ON  },  // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+  { 0x21CC, BIDI_ON  },  // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+  { 0x21CD, BIDI_ON  },  // LEFTWARDS DOUBLE ARROW WITH STROKE
+  { 0x21CE, BIDI_ON  },  // LEFT RIGHT DOUBLE ARROW WITH STROKE
+  { 0x21CF, BIDI_ON  },  // RIGHTWARDS DOUBLE ARROW WITH STROKE
+  { 0x21D0, BIDI_ON  },  // LEFTWARDS DOUBLE ARROW
+  { 0x21D1, BIDI_ON  },  // UPWARDS DOUBLE ARROW
+  { 0x21D2, BIDI_ON  },  // RIGHTWARDS DOUBLE ARROW
+  { 0x21D3, BIDI_ON  },  // DOWNWARDS DOUBLE ARROW
+  { 0x21D4, BIDI_ON  },  // LEFT RIGHT DOUBLE ARROW
+  { 0x21D5, BIDI_ON  },  // UP DOWN DOUBLE ARROW
+  { 0x21D6, BIDI_ON  },  // NORTH WEST DOUBLE ARROW
+  { 0x21D7, BIDI_ON  },  // NORTH EAST DOUBLE ARROW
+  { 0x21D8, BIDI_ON  },  // SOUTH EAST DOUBLE ARROW
+  { 0x21D9, BIDI_ON  },  // SOUTH WEST DOUBLE ARROW
+  { 0x21DA, BIDI_ON  },  // LEFTWARDS TRIPLE ARROW
+  { 0x21DB, BIDI_ON  },  // RIGHTWARDS TRIPLE ARROW
+  { 0x21DC, BIDI_ON  },  // LEFTWARDS SQUIGGLE ARROW
+  { 0x21DD, BIDI_ON  },  // RIGHTWARDS SQUIGGLE ARROW
+  { 0x21DE, BIDI_ON  },  // UPWARDS ARROW WITH DOUBLE STROKE
+  { 0x21DF, BIDI_ON  },  // DOWNWARDS ARROW WITH DOUBLE STROKE
+  { 0x21E0, BIDI_ON  },  // LEFTWARDS DASHED ARROW
+  { 0x21E1, BIDI_ON  },  // UPWARDS DASHED ARROW
+  { 0x21E2, BIDI_ON  },  // RIGHTWARDS DASHED ARROW
+  { 0x21E3, BIDI_ON  },  // DOWNWARDS DASHED ARROW
+  { 0x21E4, BIDI_ON  },  // LEFTWARDS ARROW TO BAR
+  { 0x21E5, BIDI_ON  },  // RIGHTWARDS ARROW TO BAR
+  { 0x21E6, BIDI_ON  },  // LEFTWARDS WHITE ARROW
+  { 0x21E7, BIDI_ON  },  // UPWARDS WHITE ARROW
+  { 0x21E8, BIDI_ON  },  // RIGHTWARDS WHITE ARROW
+  { 0x21E9, BIDI_ON  },  // DOWNWARDS WHITE ARROW
+  { 0x21EA, BIDI_ON  },  // UPWARDS WHITE ARROW FROM BAR
+  { 0x21EB, BIDI_ON  },  // UPWARDS WHITE ARROW ON PEDESTAL
+  { 0x21EC, BIDI_ON  },  // UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+  { 0x21ED, BIDI_ON  },  // UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+  { 0x21EE, BIDI_ON  },  // UPWARDS WHITE DOUBLE ARROW
+  { 0x21EF, BIDI_ON  },  // UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+  { 0x21F0, BIDI_ON  },  // RIGHTWARDS WHITE ARROW FROM WALL
+  { 0x21F1, BIDI_ON  },  // NORTH WEST ARROW TO CORNER
+  { 0x21F2, BIDI_ON  },  // SOUTH EAST ARROW TO CORNER
+  { 0x21F3, BIDI_ON  },  // UP DOWN WHITE ARROW
+  { 0x21F4, BIDI_ON  },  // RIGHT ARROW WITH SMALL CIRCLE
+  { 0x21F5, BIDI_ON  },  // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+  { 0x21F6, BIDI_ON  },  // THREE RIGHTWARDS ARROWS
+  { 0x21F7, BIDI_ON  },  // LEFTWARDS ARROW WITH VERTICAL STROKE
+  { 0x21F8, BIDI_ON  },  // RIGHTWARDS ARROW WITH VERTICAL STROKE
+  { 0x21F9, BIDI_ON  },  // LEFT RIGHT ARROW WITH VERTICAL STROKE
+  { 0x21FA, BIDI_ON  },  // LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+  { 0x21FB, BIDI_ON  },  // RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+  { 0x21FC, BIDI_ON  },  // LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+  { 0x21FD, BIDI_ON  },  // LEFTWARDS OPEN-HEADED ARROW
+  { 0x21FE, BIDI_ON  },  // RIGHTWARDS OPEN-HEADED ARROW
+  { 0x21FF, BIDI_ON  },  // LEFT RIGHT OPEN-HEADED ARROW
+  { 0x2200, BIDI_ON  },  // FOR ALL
+  { 0x2201, BIDI_ON  },  // COMPLEMENT
+  { 0x2202, BIDI_ON  },  // PARTIAL DIFFERENTIAL
+  { 0x2203, BIDI_ON  },  // THERE EXISTS
+  { 0x2204, BIDI_ON  },  // THERE DOES NOT EXIST
+  { 0x2205, BIDI_ON  },  // EMPTY SET
+  { 0x2206, BIDI_ON  },  // INCREMENT
+  { 0x2207, BIDI_ON  },  // NABLA
+  { 0x2208, BIDI_ON  },  // ELEMENT OF
+  { 0x2209, BIDI_ON  },  // NOT AN ELEMENT OF
+  { 0x220A, BIDI_ON  },  // SMALL ELEMENT OF
+  { 0x220B, BIDI_ON  },  // CONTAINS AS MEMBER
+  { 0x220C, BIDI_ON  },  // DOES NOT CONTAIN AS MEMBER
+  { 0x220D, BIDI_ON  },  // SMALL CONTAINS AS MEMBER
+  { 0x220E, BIDI_ON  },  // END OF PROOF
+  { 0x220F, BIDI_ON  },  // N-ARY PRODUCT
+  { 0x2210, BIDI_ON  },  // N-ARY COPRODUCT
+  { 0x2211, BIDI_ON  },  // N-ARY SUMMATION
+  { 0x2212, BIDI_ES  },  // MINUS SIGN
+  { 0x2213, BIDI_ET  },  // MINUS-OR-PLUS SIGN
+  { 0x2214, BIDI_ON  },  // DOT PLUS
+  { 0x2215, BIDI_ON  },  // DIVISION SLASH
+  { 0x2216, BIDI_ON  },  // SET MINUS
+  { 0x2217, BIDI_ON  },  // ASTERISK OPERATOR
+  { 0x2218, BIDI_ON  },  // RING OPERATOR
+  { 0x2219, BIDI_ON  },  // BULLET OPERATOR
+  { 0x221A, BIDI_ON  },  // SQUARE ROOT
+  { 0x221B, BIDI_ON  },  // CUBE ROOT
+  { 0x221C, BIDI_ON  },  // FOURTH ROOT
+  { 0x221D, BIDI_ON  },  // PROPORTIONAL TO
+  { 0x221E, BIDI_ON  },  // INFINITY
+  { 0x221F, BIDI_ON  },  // RIGHT ANGLE
+  { 0x2220, BIDI_ON  },  // ANGLE
+  { 0x2221, BIDI_ON  },  // MEASURED ANGLE
+  { 0x2222, BIDI_ON  },  // SPHERICAL ANGLE
+  { 0x2223, BIDI_ON  },  // DIVIDES
+  { 0x2224, BIDI_ON  },  // DOES NOT DIVIDE
+  { 0x2225, BIDI_ON  },  // PARALLEL TO
+  { 0x2226, BIDI_ON  },  // NOT PARALLEL TO
+  { 0x2227, BIDI_ON  },  // LOGICAL AND
+  { 0x2228, BIDI_ON  },  // LOGICAL OR
+  { 0x2229, BIDI_ON  },  // INTERSECTION
+  { 0x222A, BIDI_ON  },  // UNION
+  { 0x222B, BIDI_ON  },  // INTEGRAL
+  { 0x222C, BIDI_ON  },  // DOUBLE INTEGRAL
+  { 0x222D, BIDI_ON  },  // TRIPLE INTEGRAL
+  { 0x222E, BIDI_ON  },  // CONTOUR INTEGRAL
+  { 0x222F, BIDI_ON  },  // SURFACE INTEGRAL
+  { 0x2230, BIDI_ON  },  // VOLUME INTEGRAL
+  { 0x2231, BIDI_ON  },  // CLOCKWISE INTEGRAL
+  { 0x2232, BIDI_ON  },  // CLOCKWISE CONTOUR INTEGRAL
+  { 0x2233, BIDI_ON  },  // ANTICLOCKWISE CONTOUR INTEGRAL
+  { 0x2234, BIDI_ON  },  // THEREFORE
+  { 0x2235, BIDI_ON  },  // BECAUSE
+  { 0x2236, BIDI_ON  },  // RATIO
+  { 0x2237, BIDI_ON  },  // PROPORTION
+  { 0x2238, BIDI_ON  },  // DOT MINUS
+  { 0x2239, BIDI_ON  },  // EXCESS
+  { 0x223A, BIDI_ON  },  // GEOMETRIC PROPORTION
+  { 0x223B, BIDI_ON  },  // HOMOTHETIC
+  { 0x223C, BIDI_ON  },  // TILDE OPERATOR
+  { 0x223D, BIDI_ON  },  // REVERSED TILDE
+  { 0x223E, BIDI_ON  },  // INVERTED LAZY S
+  { 0x223F, BIDI_ON  },  // SINE WAVE
+  { 0x2240, BIDI_ON  },  // WREATH PRODUCT
+  { 0x2241, BIDI_ON  },  // NOT TILDE
+  { 0x2242, BIDI_ON  },  // MINUS TILDE
+  { 0x2243, BIDI_ON  },  // ASYMPTOTICALLY EQUAL TO
+  { 0x2244, BIDI_ON  },  // NOT ASYMPTOTICALLY EQUAL TO
+  { 0x2245, BIDI_ON  },  // APPROXIMATELY EQUAL TO
+  { 0x2246, BIDI_ON  },  // APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+  { 0x2247, BIDI_ON  },  // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+  { 0x2248, BIDI_ON  },  // ALMOST EQUAL TO
+  { 0x2249, BIDI_ON  },  // NOT ALMOST EQUAL TO
+  { 0x224A, BIDI_ON  },  // ALMOST EQUAL OR EQUAL TO
+  { 0x224B, BIDI_ON  },  // TRIPLE TILDE
+  { 0x224C, BIDI_ON  },  // ALL EQUAL TO
+  { 0x224D, BIDI_ON  },  // EQUIVALENT TO
+  { 0x224E, BIDI_ON  },  // GEOMETRICALLY EQUIVALENT TO
+  { 0x224F, BIDI_ON  },  // DIFFERENCE BETWEEN
+  { 0x2250, BIDI_ON  },  // APPROACHES THE LIMIT
+  { 0x2251, BIDI_ON  },  // GEOMETRICALLY EQUAL TO
+  { 0x2252, BIDI_ON  },  // APPROXIMATELY EQUAL TO OR THE IMAGE OF
+  { 0x2253, BIDI_ON  },  // IMAGE OF OR APPROXIMATELY EQUAL TO
+  { 0x2254, BIDI_ON  },  // COLON EQUALS
+  { 0x2255, BIDI_ON  },  // EQUALS COLON
+  { 0x2256, BIDI_ON  },  // RING IN EQUAL TO
+  { 0x2257, BIDI_ON  },  // RING EQUAL TO
+  { 0x2258, BIDI_ON  },  // CORRESPONDS TO
+  { 0x2259, BIDI_ON  },  // ESTIMATES
+  { 0x225A, BIDI_ON  },  // EQUIANGULAR TO
+  { 0x225B, BIDI_ON  },  // STAR EQUALS
+  { 0x225C, BIDI_ON  },  // DELTA EQUAL TO
+  { 0x225D, BIDI_ON  },  // EQUAL TO BY DEFINITION
+  { 0x225E, BIDI_ON  },  // MEASURED BY
+  { 0x225F, BIDI_ON  },  // QUESTIONED EQUAL TO
+  { 0x2260, BIDI_ON  },  // NOT EQUAL TO
+  { 0x2261, BIDI_ON  },  // IDENTICAL TO
+  { 0x2262, BIDI_ON  },  // NOT IDENTICAL TO
+  { 0x2263, BIDI_ON  },  // STRICTLY EQUIVALENT TO
+  { 0x2264, BIDI_ON  },  // LESS-THAN OR EQUAL TO
+  { 0x2265, BIDI_ON  },  // GREATER-THAN OR EQUAL TO
+  { 0x2266, BIDI_ON  },  // LESS-THAN OVER EQUAL TO
+  { 0x2267, BIDI_ON  },  // GREATER-THAN OVER EQUAL TO
+  { 0x2268, BIDI_ON  },  // LESS-THAN BUT NOT EQUAL TO
+  { 0x2269, BIDI_ON  },  // GREATER-THAN BUT NOT EQUAL TO
+  { 0x226A, BIDI_ON  },  // MUCH LESS-THAN
+  { 0x226B, BIDI_ON  },  // MUCH GREATER-THAN
+  { 0x226C, BIDI_ON  },  // BETWEEN
+  { 0x226D, BIDI_ON  },  // NOT EQUIVALENT TO
+  { 0x226E, BIDI_ON  },  // NOT LESS-THAN
+  { 0x226F, BIDI_ON  },  // NOT GREATER-THAN
+  { 0x2270, BIDI_ON  },  // NEITHER LESS-THAN NOR EQUAL TO
+  { 0x2271, BIDI_ON  },  // NEITHER GREATER-THAN NOR EQUAL TO
+  { 0x2272, BIDI_ON  },  // LESS-THAN OR EQUIVALENT TO
+  { 0x2273, BIDI_ON  },  // GREATER-THAN OR EQUIVALENT TO
+  { 0x2274, BIDI_ON  },  // NEITHER LESS-THAN NOR EQUIVALENT TO
+  { 0x2275, BIDI_ON  },  // NEITHER GREATER-THAN NOR EQUIVALENT TO
+  { 0x2276, BIDI_ON  },  // LESS-THAN OR GREATER-THAN
+  { 0x2277, BIDI_ON  },  // GREATER-THAN OR LESS-THAN
+  { 0x2278, BIDI_ON  },  // NEITHER LESS-THAN NOR GREATER-THAN
+  { 0x2279, BIDI_ON  },  // NEITHER GREATER-THAN NOR LESS-THAN
+  { 0x227A, BIDI_ON  },  // PRECEDES
+  { 0x227B, BIDI_ON  },  // SUCCEEDS
+  { 0x227C, BIDI_ON  },  // PRECEDES OR EQUAL TO
+  { 0x227D, BIDI_ON  },  // SUCCEEDS OR EQUAL TO
+  { 0x227E, BIDI_ON  },  // PRECEDES OR EQUIVALENT TO
+  { 0x227F, BIDI_ON  },  // SUCCEEDS OR EQUIVALENT TO
+  { 0x2280, BIDI_ON  },  // DOES NOT PRECEDE
+  { 0x2281, BIDI_ON  },  // DOES NOT SUCCEED
+  { 0x2282, BIDI_ON  },  // SUBSET OF
+  { 0x2283, BIDI_ON  },  // SUPERSET OF
+  { 0x2284, BIDI_ON  },  // NOT A SUBSET OF
+  { 0x2285, BIDI_ON  },  // NOT A SUPERSET OF
+  { 0x2286, BIDI_ON  },  // SUBSET OF OR EQUAL TO
+  { 0x2287, BIDI_ON  },  // SUPERSET OF OR EQUAL TO
+  { 0x2288, BIDI_ON  },  // NEITHER A SUBSET OF NOR EQUAL TO
+  { 0x2289, BIDI_ON  },  // NEITHER A SUPERSET OF NOR EQUAL TO
+  { 0x228A, BIDI_ON  },  // SUBSET OF WITH NOT EQUAL TO
+  { 0x228B, BIDI_ON  },  // SUPERSET OF WITH NOT EQUAL TO
+  { 0x228C, BIDI_ON  },  // MULTISET
+  { 0x228D, BIDI_ON  },  // MULTISET MULTIPLICATION
+  { 0x228E, BIDI_ON  },  // MULTISET UNION
+  { 0x228F, BIDI_ON  },  // SQUARE IMAGE OF
+  { 0x2290, BIDI_ON  },  // SQUARE ORIGINAL OF
+  { 0x2291, BIDI_ON  },  // SQUARE IMAGE OF OR EQUAL TO
+  { 0x2292, BIDI_ON  },  // SQUARE ORIGINAL OF OR EQUAL TO
+  { 0x2293, BIDI_ON  },  // SQUARE CAP
+  { 0x2294, BIDI_ON  },  // SQUARE CUP
+  { 0x2295, BIDI_ON  },  // CIRCLED PLUS
+  { 0x2296, BIDI_ON  },  // CIRCLED MINUS
+  { 0x2297, BIDI_ON  },  // CIRCLED TIMES
+  { 0x2298, BIDI_ON  },  // CIRCLED DIVISION SLASH
+  { 0x2299, BIDI_ON  },  // CIRCLED DOT OPERATOR
+  { 0x229A, BIDI_ON  },  // CIRCLED RING OPERATOR
+  { 0x229B, BIDI_ON  },  // CIRCLED ASTERISK OPERATOR
+  { 0x229C, BIDI_ON  },  // CIRCLED EQUALS
+  { 0x229D, BIDI_ON  },  // CIRCLED DASH
+  { 0x229E, BIDI_ON  },  // SQUARED PLUS
+  { 0x229F, BIDI_ON  },  // SQUARED MINUS
+  { 0x22A0, BIDI_ON  },  // SQUARED TIMES
+  { 0x22A1, BIDI_ON  },  // SQUARED DOT OPERATOR
+  { 0x22A2, BIDI_ON  },  // RIGHT TACK
+  { 0x22A3, BIDI_ON  },  // LEFT TACK
+  { 0x22A4, BIDI_ON  },  // DOWN TACK
+  { 0x22A5, BIDI_ON  },  // UP TACK
+  { 0x22A6, BIDI_ON  },  // ASSERTION
+  { 0x22A7, BIDI_ON  },  // MODELS
+  { 0x22A8, BIDI_ON  },  // TRUE
+  { 0x22A9, BIDI_ON  },  // FORCES
+  { 0x22AA, BIDI_ON  },  // TRIPLE VERTICAL BAR RIGHT TURNSTILE
+  { 0x22AB, BIDI_ON  },  // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+  { 0x22AC, BIDI_ON  },  // DOES NOT PROVE
+  { 0x22AD, BIDI_ON  },  // NOT TRUE
+  { 0x22AE, BIDI_ON  },  // DOES NOT FORCE
+  { 0x22AF, BIDI_ON  },  // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+  { 0x22B0, BIDI_ON  },  // PRECEDES UNDER RELATION
+  { 0x22B1, BIDI_ON  },  // SUCCEEDS UNDER RELATION
+  { 0x22B2, BIDI_ON  },  // NORMAL SUBGROUP OF
+  { 0x22B3, BIDI_ON  },  // CONTAINS AS NORMAL SUBGROUP
+  { 0x22B4, BIDI_ON  },  // NORMAL SUBGROUP OF OR EQUAL TO
+  { 0x22B5, BIDI_ON  },  // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+  { 0x22B6, BIDI_ON  },  // ORIGINAL OF
+  { 0x22B7, BIDI_ON  },  // IMAGE OF
+  { 0x22B8, BIDI_ON  },  // MULTIMAP
+  { 0x22B9, BIDI_ON  },  // HERMITIAN CONJUGATE MATRIX
+  { 0x22BA, BIDI_ON  },  // INTERCALATE
+  { 0x22BB, BIDI_ON  },  // XOR
+  { 0x22BC, BIDI_ON  },  // NAND
+  { 0x22BD, BIDI_ON  },  // NOR
+  { 0x22BE, BIDI_ON  },  // RIGHT ANGLE WITH ARC
+  { 0x22BF, BIDI_ON  },  // RIGHT TRIANGLE
+  { 0x22C0, BIDI_ON  },  // N-ARY LOGICAL AND
+  { 0x22C1, BIDI_ON  },  // N-ARY LOGICAL OR
+  { 0x22C2, BIDI_ON  },  // N-ARY INTERSECTION
+  { 0x22C3, BIDI_ON  },  // N-ARY UNION
+  { 0x22C4, BIDI_ON  },  // DIAMOND OPERATOR
+  { 0x22C5, BIDI_ON  },  // DOT OPERATOR
+  { 0x22C6, BIDI_ON  },  // STAR OPERATOR
+  { 0x22C7, BIDI_ON  },  // DIVISION TIMES
+  { 0x22C8, BIDI_ON  },  // BOWTIE
+  { 0x22C9, BIDI_ON  },  // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+  { 0x22CA, BIDI_ON  },  // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+  { 0x22CB, BIDI_ON  },  // LEFT SEMIDIRECT PRODUCT
+  { 0x22CC, BIDI_ON  },  // RIGHT SEMIDIRECT PRODUCT
+  { 0x22CD, BIDI_ON  },  // REVERSED TILDE EQUALS
+  { 0x22CE, BIDI_ON  },  // CURLY LOGICAL OR
+  { 0x22CF, BIDI_ON  },  // CURLY LOGICAL AND
+  { 0x22D0, BIDI_ON  },  // DOUBLE SUBSET
+  { 0x22D1, BIDI_ON  },  // DOUBLE SUPERSET
+  { 0x22D2, BIDI_ON  },  // DOUBLE INTERSECTION
+  { 0x22D3, BIDI_ON  },  // DOUBLE UNION
+  { 0x22D4, BIDI_ON  },  // PITCHFORK
+  { 0x22D5, BIDI_ON  },  // EQUAL AND PARALLEL TO
+  { 0x22D6, BIDI_ON  },  // LESS-THAN WITH DOT
+  { 0x22D7, BIDI_ON  },  // GREATER-THAN WITH DOT
+  { 0x22D8, BIDI_ON  },  // VERY MUCH LESS-THAN
+  { 0x22D9, BIDI_ON  },  // VERY MUCH GREATER-THAN
+  { 0x22DA, BIDI_ON  },  // LESS-THAN EQUAL TO OR GREATER-THAN
+  { 0x22DB, BIDI_ON  },  // GREATER-THAN EQUAL TO OR LESS-THAN
+  { 0x22DC, BIDI_ON  },  // EQUAL TO OR LESS-THAN
+  { 0x22DD, BIDI_ON  },  // EQUAL TO OR GREATER-THAN
+  { 0x22DE, BIDI_ON  },  // EQUAL TO OR PRECEDES
+  { 0x22DF, BIDI_ON  },  // EQUAL TO OR SUCCEEDS
+  { 0x22E0, BIDI_ON  },  // DOES NOT PRECEDE OR EQUAL
+  { 0x22E1, BIDI_ON  },  // DOES NOT SUCCEED OR EQUAL
+  { 0x22E2, BIDI_ON  },  // NOT SQUARE IMAGE OF OR EQUAL TO
+  { 0x22E3, BIDI_ON  },  // NOT SQUARE ORIGINAL OF OR EQUAL TO
+  { 0x22E4, BIDI_ON  },  // SQUARE IMAGE OF OR NOT EQUAL TO
+  { 0x22E5, BIDI_ON  },  // SQUARE ORIGINAL OF OR NOT EQUAL TO
+  { 0x22E6, BIDI_ON  },  // LESS-THAN BUT NOT EQUIVALENT TO
+  { 0x22E7, BIDI_ON  },  // GREATER-THAN BUT NOT EQUIVALENT TO
+  { 0x22E8, BIDI_ON  },  // PRECEDES BUT NOT EQUIVALENT TO
+  { 0x22E9, BIDI_ON  },  // SUCCEEDS BUT NOT EQUIVALENT TO
+  { 0x22EA, BIDI_ON  },  // NOT NORMAL SUBGROUP OF
+  { 0x22EB, BIDI_ON  },  // DOES NOT CONTAIN AS NORMAL SUBGROUP
+  { 0x22EC, BIDI_ON  },  // NOT NORMAL SUBGROUP OF OR EQUAL TO
+  { 0x22ED, BIDI_ON  },  // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+  { 0x22EE, BIDI_ON  },  // VERTICAL ELLIPSIS
+  { 0x22EF, BIDI_ON  },  // MIDLINE HORIZONTAL ELLIPSIS
+  { 0x22F0, BIDI_ON  },  // UP RIGHT DIAGONAL ELLIPSIS
+  { 0x22F1, BIDI_ON  },  // DOWN RIGHT DIAGONAL ELLIPSIS
+  { 0x22F2, BIDI_ON  },  // ELEMENT OF WITH LONG HORIZONTAL STROKE
+  { 0x22F3, BIDI_ON  },  // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+  { 0x22F4, BIDI_ON  },  // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+  { 0x22F5, BIDI_ON  },  // ELEMENT OF WITH DOT ABOVE
+  { 0x22F6, BIDI_ON  },  // ELEMENT OF WITH OVERBAR
+  { 0x22F7, BIDI_ON  },  // SMALL ELEMENT OF WITH OVERBAR
+  { 0x22F8, BIDI_ON  },  // ELEMENT OF WITH UNDERBAR
+  { 0x22F9, BIDI_ON  },  // ELEMENT OF WITH TWO HORIZONTAL STROKES
+  { 0x22FA, BIDI_ON  },  // CONTAINS WITH LONG HORIZONTAL STROKE
+  { 0x22FB, BIDI_ON  },  // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+  { 0x22FC, BIDI_ON  },  // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+  { 0x22FD, BIDI_ON  },  // CONTAINS WITH OVERBAR
+  { 0x22FE, BIDI_ON  },  // SMALL CONTAINS WITH OVERBAR
+  { 0x22FF, BIDI_ON  },  // Z NOTATION BAG MEMBERSHIP
+  { 0x2300, BIDI_ON  },  // DIAMETER SIGN
+  { 0x2301, BIDI_ON  },  // ELECTRIC ARROW
+  { 0x2302, BIDI_ON  },  // HOUSE
+  { 0x2303, BIDI_ON  },  // UP ARROWHEAD
+  { 0x2304, BIDI_ON  },  // DOWN ARROWHEAD
+  { 0x2305, BIDI_ON  },  // PROJECTIVE
+  { 0x2306, BIDI_ON  },  // PERSPECTIVE
+  { 0x2307, BIDI_ON  },  // WAVY LINE
+  { 0x2308, BIDI_ON  },  // LEFT CEILING
+  { 0x2309, BIDI_ON  },  // RIGHT CEILING
+  { 0x230A, BIDI_ON  },  // LEFT FLOOR
+  { 0x230B, BIDI_ON  },  // RIGHT FLOOR
+  { 0x230C, BIDI_ON  },  // BOTTOM RIGHT CROP
+  { 0x230D, BIDI_ON  },  // BOTTOM LEFT CROP
+  { 0x230E, BIDI_ON  },  // TOP RIGHT CROP
+  { 0x230F, BIDI_ON  },  // TOP LEFT CROP
+  { 0x2310, BIDI_ON  },  // REVERSED NOT SIGN
+  { 0x2311, BIDI_ON  },  // SQUARE LOZENGE
+  { 0x2312, BIDI_ON  },  // ARC
+  { 0x2313, BIDI_ON  },  // SEGMENT
+  { 0x2314, BIDI_ON  },  // SECTOR
+  { 0x2315, BIDI_ON  },  // TELEPHONE RECORDER
+  { 0x2316, BIDI_ON  },  // POSITION INDICATOR
+  { 0x2317, BIDI_ON  },  // VIEWDATA SQUARE
+  { 0x2318, BIDI_ON  },  // PLACE OF INTEREST SIGN
+  { 0x2319, BIDI_ON  },  // TURNED NOT SIGN
+  { 0x231A, BIDI_ON  },  // WATCH
+  { 0x231B, BIDI_ON  },  // HOURGLASS
+  { 0x231C, BIDI_ON  },  // TOP LEFT CORNER
+  { 0x231D, BIDI_ON  },  // TOP RIGHT CORNER
+  { 0x231E, BIDI_ON  },  // BOTTOM LEFT CORNER
+  { 0x231F, BIDI_ON  },  // BOTTOM RIGHT CORNER
+  { 0x2320, BIDI_ON  },  // TOP HALF INTEGRAL
+  { 0x2321, BIDI_ON  },  // BOTTOM HALF INTEGRAL
+  { 0x2322, BIDI_ON  },  // FROWN
+  { 0x2323, BIDI_ON  },  // SMILE
+  { 0x2324, BIDI_ON  },  // UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+  { 0x2325, BIDI_ON  },  // OPTION KEY
+  { 0x2326, BIDI_ON  },  // ERASE TO THE RIGHT
+  { 0x2327, BIDI_ON  },  // X IN A RECTANGLE BOX
+  { 0x2328, BIDI_ON  },  // KEYBOARD
+  { 0x2329, BIDI_ON  },  // LEFT-POINTING ANGLE BRACKET
+  { 0x232A, BIDI_ON  },  // RIGHT-POINTING ANGLE BRACKET
+  { 0x232B, BIDI_ON  },  // ERASE TO THE LEFT
+  { 0x232C, BIDI_ON  },  // BENZENE RING
+  { 0x232D, BIDI_ON  },  // CYLINDRICITY
+  { 0x232E, BIDI_ON  },  // ALL AROUND-PROFILE
+  { 0x232F, BIDI_ON  },  // SYMMETRY
+  { 0x2330, BIDI_ON  },  // TOTAL RUNOUT
+  { 0x2331, BIDI_ON  },  // DIMENSION ORIGIN
+  { 0x2332, BIDI_ON  },  // CONICAL TAPER
+  { 0x2333, BIDI_ON  },  // SLOPE
+  { 0x2334, BIDI_ON  },  // COUNTERBORE
+  { 0x2335, BIDI_ON  },  // COUNTERSINK
+  { 0x2336, BIDI_L   },  // APL FUNCTIONAL SYMBOL I-BEAM
+  { 0x2337, BIDI_L   },  // APL FUNCTIONAL SYMBOL SQUISH QUAD
+  { 0x2338, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD EQUAL
+  { 0x2339, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DIVIDE
+  { 0x233A, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DIAMOND
+  { 0x233B, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD JOT
+  { 0x233C, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD CIRCLE
+  { 0x233D, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE STILE
+  { 0x233E, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE JOT
+  { 0x233F, BIDI_L   },  // APL FUNCTIONAL SYMBOL SLASH BAR
+  { 0x2340, BIDI_L   },  // APL FUNCTIONAL SYMBOL BACKSLASH BAR
+  { 0x2341, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD SLASH
+  { 0x2342, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+  { 0x2343, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+  { 0x2344, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+  { 0x2345, BIDI_L   },  // APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+  { 0x2346, BIDI_L   },  // APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+  { 0x2347, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+  { 0x2348, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+  { 0x2349, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+  { 0x234A, BIDI_L   },  // APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+  { 0x234B, BIDI_L   },  // APL FUNCTIONAL SYMBOL DELTA STILE
+  { 0x234C, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+  { 0x234D, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DELTA
+  { 0x234E, BIDI_L   },  // APL FUNCTIONAL SYMBOL DOWN TACK JOT
+  { 0x234F, BIDI_L   },  // APL FUNCTIONAL SYMBOL UPWARDS VANE
+  { 0x2350, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+  { 0x2351, BIDI_L   },  // APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+  { 0x2352, BIDI_L   },  // APL FUNCTIONAL SYMBOL DEL STILE
+  { 0x2353, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD UP CARET
+  { 0x2354, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DEL
+  { 0x2355, BIDI_L   },  // APL FUNCTIONAL SYMBOL UP TACK JOT
+  { 0x2356, BIDI_L   },  // APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+  { 0x2357, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+  { 0x2358, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+  { 0x2359, BIDI_L   },  // APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+  { 0x235A, BIDI_L   },  // APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+  { 0x235B, BIDI_L   },  // APL FUNCTIONAL SYMBOL JOT UNDERBAR
+  { 0x235C, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+  { 0x235D, BIDI_L   },  // APL FUNCTIONAL SYMBOL UP SHOE JOT
+  { 0x235E, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUOTE QUAD
+  { 0x235F, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE STAR
+  { 0x2360, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD COLON
+  { 0x2361, BIDI_L   },  // APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+  { 0x2362, BIDI_L   },  // APL FUNCTIONAL SYMBOL DEL DIAERESIS
+  { 0x2363, BIDI_L   },  // APL FUNCTIONAL SYMBOL STAR DIAERESIS
+  { 0x2364, BIDI_L   },  // APL FUNCTIONAL SYMBOL JOT DIAERESIS
+  { 0x2365, BIDI_L   },  // APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+  { 0x2366, BIDI_L   },  // APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+  { 0x2367, BIDI_L   },  // APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+  { 0x2368, BIDI_L   },  // APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+  { 0x2369, BIDI_L   },  // APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+  { 0x236A, BIDI_L   },  // APL FUNCTIONAL SYMBOL COMMA BAR
+  { 0x236B, BIDI_L   },  // APL FUNCTIONAL SYMBOL DEL TILDE
+  { 0x236C, BIDI_L   },  // APL FUNCTIONAL SYMBOL ZILDE
+  { 0x236D, BIDI_L   },  // APL FUNCTIONAL SYMBOL STILE TILDE
+  { 0x236E, BIDI_L   },  // APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+  { 0x236F, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+  { 0x2370, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD QUESTION
+  { 0x2371, BIDI_L   },  // APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+  { 0x2372, BIDI_L   },  // APL FUNCTIONAL SYMBOL UP CARET TILDE
+  { 0x2373, BIDI_L   },  // APL FUNCTIONAL SYMBOL IOTA
+  { 0x2374, BIDI_L   },  // APL FUNCTIONAL SYMBOL RHO
+  { 0x2375, BIDI_L   },  // APL FUNCTIONAL SYMBOL OMEGA
+  { 0x2376, BIDI_L   },  // APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+  { 0x2377, BIDI_L   },  // APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+  { 0x2378, BIDI_L   },  // APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+  { 0x2379, BIDI_L   },  // APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+  { 0x237A, BIDI_L   },  // APL FUNCTIONAL SYMBOL ALPHA
+  { 0x237B, BIDI_ON  },  // NOT CHECK MARK
+  { 0x237C, BIDI_ON  },  // RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+  { 0x237D, BIDI_ON  },  // SHOULDERED OPEN BOX
+  { 0x237E, BIDI_ON  },  // BELL SYMBOL
+  { 0x237F, BIDI_ON  },  // VERTICAL LINE WITH MIDDLE DOT
+  { 0x2380, BIDI_ON  },  // INSERTION SYMBOL
+  { 0x2381, BIDI_ON  },  // CONTINUOUS UNDERLINE SYMBOL
+  { 0x2382, BIDI_ON  },  // DISCONTINUOUS UNDERLINE SYMBOL
+  { 0x2383, BIDI_ON  },  // EMPHASIS SYMBOL
+  { 0x2384, BIDI_ON  },  // COMPOSITION SYMBOL
+  { 0x2385, BIDI_ON  },  // WHITE SQUARE WITH CENTRE VERTICAL LINE
+  { 0x2386, BIDI_ON  },  // ENTER SYMBOL
+  { 0x2387, BIDI_ON  },  // ALTERNATIVE KEY SYMBOL
+  { 0x2388, BIDI_ON  },  // HELM SYMBOL
+  { 0x2389, BIDI_ON  },  // CIRCLED HORIZONTAL BAR WITH NOTCH
+  { 0x238A, BIDI_ON  },  // CIRCLED TRIANGLE DOWN
+  { 0x238B, BIDI_ON  },  // BROKEN CIRCLE WITH NORTHWEST ARROW
+  { 0x238C, BIDI_ON  },  // UNDO SYMBOL
+  { 0x238D, BIDI_ON  },  // MONOSTABLE SYMBOL
+  { 0x238E, BIDI_ON  },  // HYSTERESIS SYMBOL
+  { 0x238F, BIDI_ON  },  // OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+  { 0x2390, BIDI_ON  },  // OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+  { 0x2391, BIDI_ON  },  // PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+  { 0x2392, BIDI_ON  },  // PASSIVE-PULL-UP-OUTPUT SYMBOL
+  { 0x2393, BIDI_ON  },  // DIRECT CURRENT SYMBOL FORM TWO
+  { 0x2394, BIDI_ON  },  // SOFTWARE-FUNCTION SYMBOL
+  { 0x2395, BIDI_L   },  // APL FUNCTIONAL SYMBOL QUAD
+  { 0x2396, BIDI_ON  },  // DECIMAL SEPARATOR KEY SYMBOL
+  { 0x2397, BIDI_ON  },  // PREVIOUS PAGE
+  { 0x2398, BIDI_ON  },  // NEXT PAGE
+  { 0x2399, BIDI_ON  },  // PRINT SCREEN SYMBOL
+  { 0x239A, BIDI_ON  },  // CLEAR SCREEN SYMBOL
+  { 0x239B, BIDI_ON  },  // LEFT PARENTHESIS UPPER HOOK
+  { 0x239C, BIDI_ON  },  // LEFT PARENTHESIS EXTENSION
+  { 0x239D, BIDI_ON  },  // LEFT PARENTHESIS LOWER HOOK
+  { 0x239E, BIDI_ON  },  // RIGHT PARENTHESIS UPPER HOOK
+  { 0x239F, BIDI_ON  },  // RIGHT PARENTHESIS EXTENSION
+  { 0x23A0, BIDI_ON  },  // RIGHT PARENTHESIS LOWER HOOK
+  { 0x23A1, BIDI_ON  },  // LEFT SQUARE BRACKET UPPER CORNER
+  { 0x23A2, BIDI_ON  },  // LEFT SQUARE BRACKET EXTENSION
+  { 0x23A3, BIDI_ON  },  // LEFT SQUARE BRACKET LOWER CORNER
+  { 0x23A4, BIDI_ON  },  // RIGHT SQUARE BRACKET UPPER CORNER
+  { 0x23A5, BIDI_ON  },  // RIGHT SQUARE BRACKET EXTENSION
+  { 0x23A6, BIDI_ON  },  // RIGHT SQUARE BRACKET LOWER CORNER
+  { 0x23A7, BIDI_ON  },  // LEFT CURLY BRACKET UPPER HOOK
+  { 0x23A8, BIDI_ON  },  // LEFT CURLY BRACKET MIDDLE PIECE
+  { 0x23A9, BIDI_ON  },  // LEFT CURLY BRACKET LOWER HOOK
+  { 0x23AA, BIDI_ON  },  // CURLY BRACKET EXTENSION
+  { 0x23AB, BIDI_ON  },  // RIGHT CURLY BRACKET UPPER HOOK
+  { 0x23AC, BIDI_ON  },  // RIGHT CURLY BRACKET MIDDLE PIECE
+  { 0x23AD, BIDI_ON  },  // RIGHT CURLY BRACKET LOWER HOOK
+  { 0x23AE, BIDI_ON  },  // INTEGRAL EXTENSION
+  { 0x23AF, BIDI_ON  },  // HORIZONTAL LINE EXTENSION
+  { 0x23B0, BIDI_ON  },  // UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+  { 0x23B1, BIDI_ON  },  // UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+  { 0x23B2, BIDI_ON  },  // SUMMATION TOP
+  { 0x23B3, BIDI_ON  },  // SUMMATION BOTTOM
+  { 0x23B4, BIDI_ON  },  // TOP SQUARE BRACKET
+  { 0x23B5, BIDI_ON  },  // BOTTOM SQUARE BRACKET
+  { 0x23B6, BIDI_ON  },  // BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+  { 0x23B7, BIDI_ON  },  // RADICAL SYMBOL BOTTOM
+  { 0x23B8, BIDI_ON  },  // LEFT VERTICAL BOX LINE
+  { 0x23B9, BIDI_ON  },  // RIGHT VERTICAL BOX LINE
+  { 0x23BA, BIDI_ON  },  // HORIZONTAL SCAN LINE-1
+  { 0x23BB, BIDI_ON  },  // HORIZONTAL SCAN LINE-3
+  { 0x23BC, BIDI_ON  },  // HORIZONTAL SCAN LINE-7
+  { 0x23BD, BIDI_ON  },  // HORIZONTAL SCAN LINE-9
+  { 0x23BE, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+  { 0x23BF, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+  { 0x23C0, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+  { 0x23C1, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+  { 0x23C2, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+  { 0x23C3, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+  { 0x23C4, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+  { 0x23C5, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+  { 0x23C6, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+  { 0x23C7, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+  { 0x23C8, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+  { 0x23C9, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+  { 0x23CA, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+  { 0x23CB, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+  { 0x23CC, BIDI_ON  },  // DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+  { 0x23CD, BIDI_ON  },  // SQUARE FOOT
+  { 0x23CE, BIDI_ON  },  // RETURN SYMBOL
+  { 0x23CF, BIDI_ON  },  // EJECT SYMBOL
+  { 0x23D0, BIDI_ON  },  // VERTICAL LINE EXTENSION
+  { 0x23D1, BIDI_ON  },  // METRICAL BREVE
+  { 0x23D2, BIDI_ON  },  // METRICAL LONG OVER SHORT
+  { 0x23D3, BIDI_ON  },  // METRICAL SHORT OVER LONG
+  { 0x23D4, BIDI_ON  },  // METRICAL LONG OVER TWO SHORTS
+  { 0x23D5, BIDI_ON  },  // METRICAL TWO SHORTS OVER LONG
+  { 0x23D6, BIDI_ON  },  // METRICAL TWO SHORTS JOINED
+  { 0x23D7, BIDI_ON  },  // METRICAL TRISEME
+  { 0x23D8, BIDI_ON  },  // METRICAL TETRASEME
+  { 0x23D9, BIDI_ON  },  // METRICAL PENTASEME
+  { 0x23DA, BIDI_ON  },  // EARTH GROUND
+  { 0x23DB, BIDI_ON  },  // FUSE
+  { 0x23DC, BIDI_ON  },  // TOP PARENTHESIS
+  { 0x23DD, BIDI_ON  },  // BOTTOM PARENTHESIS
+  { 0x23DE, BIDI_ON  },  // TOP CURLY BRACKET
+  { 0x23DF, BIDI_ON  },  // BOTTOM CURLY BRACKET
+  { 0x23E0, BIDI_ON  },  // TOP TORTOISE SHELL BRACKET
+  { 0x23E1, BIDI_ON  },  // BOTTOM TORTOISE SHELL BRACKET
+  { 0x23E2, BIDI_ON  },  // WHITE TRAPEZIUM
+  { 0x23E3, BIDI_ON  },  // BENZENE RING WITH CIRCLE
+  { 0x23E4, BIDI_ON  },  // STRAIGHTNESS
+  { 0x23E5, BIDI_ON  },  // FLATNESS
+  { 0x23E6, BIDI_ON  },  // AC CURRENT
+  { 0x23E7, BIDI_ON  },  // ELECTRICAL INTERSECTION
+  { 0x23E8, BIDI_ON  },  // DECIMAL EXPONENT SYMBOL
+  { 0x23E9, BIDI_ON  },  // BLACK RIGHT-POINTING DOUBLE TRIANGLE
+  { 0x23EA, BIDI_ON  },  // BLACK LEFT-POINTING DOUBLE TRIANGLE
+  { 0x23EB, BIDI_ON  },  // BLACK UP-POINTING DOUBLE TRIANGLE
+  { 0x23EC, BIDI_ON  },  // BLACK DOWN-POINTING DOUBLE TRIANGLE
+  { 0x23ED, BIDI_ON  },  // BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+  { 0x23EE, BIDI_ON  },  // BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+  { 0x23EF, BIDI_ON  },  // BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+  { 0x23F0, BIDI_ON  },  // ALARM CLOCK
+  { 0x23F1, BIDI_ON  },  // STOPWATCH
+  { 0x23F2, BIDI_ON  },  // TIMER CLOCK
+  { 0x23F3, BIDI_ON  },  // HOURGLASS WITH FLOWING SAND
+  { 0x23F4, BIDI_ON  },  // BLACK MEDIUM LEFT-POINTING TRIANGLE
+  { 0x23F5, BIDI_ON  },  // BLACK MEDIUM RIGHT-POINTING TRIANGLE
+  { 0x23F6, BIDI_ON  },  // BLACK MEDIUM UP-POINTING TRIANGLE
+  { 0x23F7, BIDI_ON  },  // BLACK MEDIUM DOWN-POINTING TRIANGLE
+  { 0x23F8, BIDI_ON  },  // DOUBLE VERTICAL BAR
+  { 0x23F9, BIDI_ON  },  // BLACK SQUARE FOR STOP
+  { 0x23FA, BIDI_ON  },  // BLACK CIRCLE FOR RECORD
+  { 0x2400, BIDI_ON  },  // SYMBOL FOR NULL
+  { 0x2401, BIDI_ON  },  // SYMBOL FOR START OF HEADING
+  { 0x2402, BIDI_ON  },  // SYMBOL FOR START OF TEXT
+  { 0x2403, BIDI_ON  },  // SYMBOL FOR END OF TEXT
+  { 0x2404, BIDI_ON  },  // SYMBOL FOR END OF TRANSMISSION
+  { 0x2405, BIDI_ON  },  // SYMBOL FOR ENQUIRY
+  { 0x2406, BIDI_ON  },  // SYMBOL FOR ACKNOWLEDGE
+  { 0x2407, BIDI_ON  },  // SYMBOL FOR BELL
+  { 0x2408, BIDI_ON  },  // SYMBOL FOR BACKSPACE
+  { 0x2409, BIDI_ON  },  // SYMBOL FOR HORIZONTAL TABULATION
+  { 0x240A, BIDI_ON  },  // SYMBOL FOR LINE FEED
+  { 0x240B, BIDI_ON  },  // SYMBOL FOR VERTICAL TABULATION
+  { 0x240C, BIDI_ON  },  // SYMBOL FOR FORM FEED
+  { 0x240D, BIDI_ON  },  // SYMBOL FOR CARRIAGE RETURN
+  { 0x240E, BIDI_ON  },  // SYMBOL FOR SHIFT OUT
+  { 0x240F, BIDI_ON  },  // SYMBOL FOR SHIFT IN
+  { 0x2410, BIDI_ON  },  // SYMBOL FOR DATA LINK ESCAPE
+  { 0x2411, BIDI_ON  },  // SYMBOL FOR DEVICE CONTROL ONE
+  { 0x2412, BIDI_ON  },  // SYMBOL FOR DEVICE CONTROL TWO
+  { 0x2413, BIDI_ON  },  // SYMBOL FOR DEVICE CONTROL THREE
+  { 0x2414, BIDI_ON  },  // SYMBOL FOR DEVICE CONTROL FOUR
+  { 0x2415, BIDI_ON  },  // SYMBOL FOR NEGATIVE ACKNOWLEDGE
+  { 0x2416, BIDI_ON  },  // SYMBOL FOR SYNCHRONOUS IDLE
+  { 0x2417, BIDI_ON  },  // SYMBOL FOR END OF TRANSMISSION BLOCK
+  { 0x2418, BIDI_ON  },  // SYMBOL FOR CANCEL
+  { 0x2419, BIDI_ON  },  // SYMBOL FOR END OF MEDIUM
+  { 0x241A, BIDI_ON  },  // SYMBOL FOR SUBSTITUTE
+  { 0x241B, BIDI_ON  },  // SYMBOL FOR ESCAPE
+  { 0x241C, BIDI_ON  },  // SYMBOL FOR FILE SEPARATOR
+  { 0x241D, BIDI_ON  },  // SYMBOL FOR GROUP SEPARATOR
+  { 0x241E, BIDI_ON  },  // SYMBOL FOR RECORD SEPARATOR
+  { 0x241F, BIDI_ON  },  // SYMBOL FOR UNIT SEPARATOR
+  { 0x2420, BIDI_ON  },  // SYMBOL FOR SPACE
+  { 0x2421, BIDI_ON  },  // SYMBOL FOR DELETE
+  { 0x2422, BIDI_ON  },  // BLANK SYMBOL
+  { 0x2423, BIDI_ON  },  // OPEN BOX
+  { 0x2424, BIDI_ON  },  // SYMBOL FOR NEWLINE
+  { 0x2425, BIDI_ON  },  // SYMBOL FOR DELETE FORM TWO
+  { 0x2426, BIDI_ON  },  // SYMBOL FOR SUBSTITUTE FORM TWO
+  { 0x2440, BIDI_ON  },  // OCR HOOK
+  { 0x2441, BIDI_ON  },  // OCR CHAIR
+  { 0x2442, BIDI_ON  },  // OCR FORK
+  { 0x2443, BIDI_ON  },  // OCR INVERTED FORK
+  { 0x2444, BIDI_ON  },  // OCR BELT BUCKLE
+  { 0x2445, BIDI_ON  },  // OCR BOW TIE
+  { 0x2446, BIDI_ON  },  // OCR BRANCH BANK IDENTIFICATION
+  { 0x2447, BIDI_ON  },  // OCR AMOUNT OF CHECK
+  { 0x2448, BIDI_ON  },  // OCR DASH
+  { 0x2449, BIDI_ON  },  // OCR CUSTOMER ACCOUNT NUMBER
+  { 0x244A, BIDI_ON  },  // OCR DOUBLE BACKSLASH
+  { 0x2460, BIDI_ON  },  // CIRCLED DIGIT ONE
+  { 0x2461, BIDI_ON  },  // CIRCLED DIGIT TWO
+  { 0x2462, BIDI_ON  },  // CIRCLED DIGIT THREE
+  { 0x2463, BIDI_ON  },  // CIRCLED DIGIT FOUR
+  { 0x2464, BIDI_ON  },  // CIRCLED DIGIT FIVE
+  { 0x2465, BIDI_ON  },  // CIRCLED DIGIT SIX
+  { 0x2466, BIDI_ON  },  // CIRCLED DIGIT SEVEN
+  { 0x2467, BIDI_ON  },  // CIRCLED DIGIT EIGHT
+  { 0x2468, BIDI_ON  },  // CIRCLED DIGIT NINE
+  { 0x2469, BIDI_ON  },  // CIRCLED NUMBER TEN
+  { 0x246A, BIDI_ON  },  // CIRCLED NUMBER ELEVEN
+  { 0x246B, BIDI_ON  },  // CIRCLED NUMBER TWELVE
+  { 0x246C, BIDI_ON  },  // CIRCLED NUMBER THIRTEEN
+  { 0x246D, BIDI_ON  },  // CIRCLED NUMBER FOURTEEN
+  { 0x246E, BIDI_ON  },  // CIRCLED NUMBER FIFTEEN
+  { 0x246F, BIDI_ON  },  // CIRCLED NUMBER SIXTEEN
+  { 0x2470, BIDI_ON  },  // CIRCLED NUMBER SEVENTEEN
+  { 0x2471, BIDI_ON  },  // CIRCLED NUMBER EIGHTEEN
+  { 0x2472, BIDI_ON  },  // CIRCLED NUMBER NINETEEN
+  { 0x2473, BIDI_ON  },  // CIRCLED NUMBER TWENTY
+  { 0x2474, BIDI_ON  },  // PARENTHESIZED DIGIT ONE
+  { 0x2475, BIDI_ON  },  // PARENTHESIZED DIGIT TWO
+  { 0x2476, BIDI_ON  },  // PARENTHESIZED DIGIT THREE
+  { 0x2477, BIDI_ON  },  // PARENTHESIZED DIGIT FOUR
+  { 0x2478, BIDI_ON  },  // PARENTHESIZED DIGIT FIVE
+  { 0x2479, BIDI_ON  },  // PARENTHESIZED DIGIT SIX
+  { 0x247A, BIDI_ON  },  // PARENTHESIZED DIGIT SEVEN
+  { 0x247B, BIDI_ON  },  // PARENTHESIZED DIGIT EIGHT
+  { 0x247C, BIDI_ON  },  // PARENTHESIZED DIGIT NINE
+  { 0x247D, BIDI_ON  },  // PARENTHESIZED NUMBER TEN
+  { 0x247E, BIDI_ON  },  // PARENTHESIZED NUMBER ELEVEN
+  { 0x247F, BIDI_ON  },  // PARENTHESIZED NUMBER TWELVE
+  { 0x2480, BIDI_ON  },  // PARENTHESIZED NUMBER THIRTEEN
+  { 0x2481, BIDI_ON  },  // PARENTHESIZED NUMBER FOURTEEN
+  { 0x2482, BIDI_ON  },  // PARENTHESIZED NUMBER FIFTEEN
+  { 0x2483, BIDI_ON  },  // PARENTHESIZED NUMBER SIXTEEN
+  { 0x2484, BIDI_ON  },  // PARENTHESIZED NUMBER SEVENTEEN
+  { 0x2485, BIDI_ON  },  // PARENTHESIZED NUMBER EIGHTEEN
+  { 0x2486, BIDI_ON  },  // PARENTHESIZED NUMBER NINETEEN
+  { 0x2487, BIDI_ON  },  // PARENTHESIZED NUMBER TWENTY
+  { 0x2488, BIDI_EN  },  // DIGIT ONE FULL STOP
+  { 0x2489, BIDI_EN  },  // DIGIT TWO FULL STOP
+  { 0x248A, BIDI_EN  },  // DIGIT THREE FULL STOP
+  { 0x248B, BIDI_EN  },  // DIGIT FOUR FULL STOP
+  { 0x248C, BIDI_EN  },  // DIGIT FIVE FULL STOP
+  { 0x248D, BIDI_EN  },  // DIGIT SIX FULL STOP
+  { 0x248E, BIDI_EN  },  // DIGIT SEVEN FULL STOP
+  { 0x248F, BIDI_EN  },  // DIGIT EIGHT FULL STOP
+  { 0x2490, BIDI_EN  },  // DIGIT NINE FULL STOP
+  { 0x2491, BIDI_EN  },  // NUMBER TEN FULL STOP
+  { 0x2492, BIDI_EN  },  // NUMBER ELEVEN FULL STOP
+  { 0x2493, BIDI_EN  },  // NUMBER TWELVE FULL STOP
+  { 0x2494, BIDI_EN  },  // NUMBER THIRTEEN FULL STOP
+  { 0x2495, BIDI_EN  },  // NUMBER FOURTEEN FULL STOP
+  { 0x2496, BIDI_EN  },  // NUMBER FIFTEEN FULL STOP
+  { 0x2497, BIDI_EN  },  // NUMBER SIXTEEN FULL STOP
+  { 0x2498, BIDI_EN  },  // NUMBER SEVENTEEN FULL STOP
+  { 0x2499, BIDI_EN  },  // NUMBER EIGHTEEN FULL STOP
+  { 0x249A, BIDI_EN  },  // NUMBER NINETEEN FULL STOP
+  { 0x249B, BIDI_EN  },  // NUMBER TWENTY FULL STOP
+  { 0x249C, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER A
+  { 0x249D, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER B
+  { 0x249E, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER C
+  { 0x249F, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER D
+  { 0x24A0, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER E
+  { 0x24A1, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER F
+  { 0x24A2, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER G
+  { 0x24A3, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER H
+  { 0x24A4, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER I
+  { 0x24A5, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER J
+  { 0x24A6, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER K
+  { 0x24A7, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER L
+  { 0x24A8, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER M
+  { 0x24A9, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER N
+  { 0x24AA, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER O
+  { 0x24AB, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER P
+  { 0x24AC, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER Q
+  { 0x24AD, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER R
+  { 0x24AE, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER S
+  { 0x24AF, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER T
+  { 0x24B0, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER U
+  { 0x24B1, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER V
+  { 0x24B2, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER W
+  { 0x24B3, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER X
+  { 0x24B4, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER Y
+  { 0x24B5, BIDI_L   },  // PARENTHESIZED LATIN SMALL LETTER Z
+  { 0x24B6, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER A
+  { 0x24B7, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER B
+  { 0x24B8, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER C
+  { 0x24B9, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER D
+  { 0x24BA, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER E
+  { 0x24BB, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER F
+  { 0x24BC, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER G
+  { 0x24BD, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER H
+  { 0x24BE, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER I
+  { 0x24BF, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER J
+  { 0x24C0, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER K
+  { 0x24C1, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER L
+  { 0x24C2, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER M
+  { 0x24C3, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER N
+  { 0x24C4, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER O
+  { 0x24C5, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER P
+  { 0x24C6, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER Q
+  { 0x24C7, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER R
+  { 0x24C8, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER S
+  { 0x24C9, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER T
+  { 0x24CA, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER U
+  { 0x24CB, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER V
+  { 0x24CC, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER W
+  { 0x24CD, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER X
+  { 0x24CE, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER Y
+  { 0x24CF, BIDI_L   },  // CIRCLED LATIN CAPITAL LETTER Z
+  { 0x24D0, BIDI_L   },  // CIRCLED LATIN SMALL LETTER A
+  { 0x24D1, BIDI_L   },  // CIRCLED LATIN SMALL LETTER B
+  { 0x24D2, BIDI_L   },  // CIRCLED LATIN SMALL LETTER C
+  { 0x24D3, BIDI_L   },  // CIRCLED LATIN SMALL LETTER D
+  { 0x24D4, BIDI_L   },  // CIRCLED LATIN SMALL LETTER E
+  { 0x24D5, BIDI_L   },  // CIRCLED LATIN SMALL LETTER F
+  { 0x24D6, BIDI_L   },  // CIRCLED LATIN SMALL LETTER G
+  { 0x24D7, BIDI_L   },  // CIRCLED LATIN SMALL LETTER H
+  { 0x24D8, BIDI_L   },  // CIRCLED LATIN SMALL LETTER I
+  { 0x24D9, BIDI_L   },  // CIRCLED LATIN SMALL LETTER J
+  { 0x24DA, BIDI_L   },  // CIRCLED LATIN SMALL LETTER K
+  { 0x24DB, BIDI_L   },  // CIRCLED LATIN SMALL LETTER L
+  { 0x24DC, BIDI_L   },  // CIRCLED LATIN SMALL LETTER M
+  { 0x24DD, BIDI_L   },  // CIRCLED LATIN SMALL LETTER N
+  { 0x24DE, BIDI_L   },  // CIRCLED LATIN SMALL LETTER O
+  { 0x24DF, BIDI_L   },  // CIRCLED LATIN SMALL LETTER P
+  { 0x24E0, BIDI_L   },  // CIRCLED LATIN SMALL LETTER Q
+  { 0x24E1, BIDI_L   },  // CIRCLED LATIN SMALL LETTER R
+  { 0x24E2, BIDI_L   },  // CIRCLED LATIN SMALL LETTER S
+  { 0x24E3, BIDI_L   },  // CIRCLED LATIN SMALL LETTER T
+  { 0x24E4, BIDI_L   },  // CIRCLED LATIN SMALL LETTER U
+  { 0x24E5, BIDI_L   },  // CIRCLED LATIN SMALL LETTER V
+  { 0x24E6, BIDI_L   },  // CIRCLED LATIN SMALL LETTER W
+  { 0x24E7, BIDI_L   },  // CIRCLED LATIN SMALL LETTER X
+  { 0x24E8, BIDI_L   },  // CIRCLED LATIN SMALL LETTER Y
+  { 0x24E9, BIDI_L   },  // CIRCLED LATIN SMALL LETTER Z
+  { 0x24EA, BIDI_ON  },  // CIRCLED DIGIT ZERO
+  { 0x24EB, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER ELEVEN
+  { 0x24EC, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER TWELVE
+  { 0x24ED, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER THIRTEEN
+  { 0x24EE, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER FOURTEEN
+  { 0x24EF, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER FIFTEEN
+  { 0x24F0, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER SIXTEEN
+  { 0x24F1, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER SEVENTEEN
+  { 0x24F2, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER EIGHTEEN
+  { 0x24F3, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER NINETEEN
+  { 0x24F4, BIDI_ON  },  // NEGATIVE CIRCLED NUMBER TWENTY
+  { 0x24F5, BIDI_ON  },  // DOUBLE CIRCLED DIGIT ONE
+  { 0x24F6, BIDI_ON  },  // DOUBLE CIRCLED DIGIT TWO
+  { 0x24F7, BIDI_ON  },  // DOUBLE CIRCLED DIGIT THREE
+  { 0x24F8, BIDI_ON  },  // DOUBLE CIRCLED DIGIT FOUR
+  { 0x24F9, BIDI_ON  },  // DOUBLE CIRCLED DIGIT FIVE
+  { 0x24FA, BIDI_ON  },  // DOUBLE CIRCLED DIGIT SIX
+  { 0x24FB, BIDI_ON  },  // DOUBLE CIRCLED DIGIT SEVEN
+  { 0x24FC, BIDI_ON  },  // DOUBLE CIRCLED DIGIT EIGHT
+  { 0x24FD, BIDI_ON  },  // DOUBLE CIRCLED DIGIT NINE
+  { 0x24FE, BIDI_ON  },  // DOUBLE CIRCLED NUMBER TEN
+  { 0x24FF, BIDI_ON  },  // NEGATIVE CIRCLED DIGIT ZERO
+  { 0x2500, BIDI_ON  },  // BOX DRAWINGS LIGHT HORIZONTAL
+  { 0x2501, BIDI_ON  },  // BOX DRAWINGS HEAVY HORIZONTAL
+  { 0x2502, BIDI_ON  },  // BOX DRAWINGS LIGHT VERTICAL
+  { 0x2503, BIDI_ON  },  // BOX DRAWINGS HEAVY VERTICAL
+  { 0x2504, BIDI_ON  },  // BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+  { 0x2505, BIDI_ON  },  // BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+  { 0x2506, BIDI_ON  },  // BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+  { 0x2507, BIDI_ON  },  // BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+  { 0x2508, BIDI_ON  },  // BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+  { 0x2509, BIDI_ON  },  // BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+  { 0x250A, BIDI_ON  },  // BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+  { 0x250B, BIDI_ON  },  // BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+  { 0x250C, BIDI_ON  },  // BOX DRAWINGS LIGHT DOWN AND RIGHT
+  { 0x250D, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+  { 0x250E, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+  { 0x250F, BIDI_ON  },  // BOX DRAWINGS HEAVY DOWN AND RIGHT
+  { 0x2510, BIDI_ON  },  // BOX DRAWINGS LIGHT DOWN AND LEFT
+  { 0x2511, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+  { 0x2512, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+  { 0x2513, BIDI_ON  },  // BOX DRAWINGS HEAVY DOWN AND LEFT
+  { 0x2514, BIDI_ON  },  // BOX DRAWINGS LIGHT UP AND RIGHT
+  { 0x2515, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+  { 0x2516, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+  { 0x2517, BIDI_ON  },  // BOX DRAWINGS HEAVY UP AND RIGHT
+  { 0x2518, BIDI_ON  },  // BOX DRAWINGS LIGHT UP AND LEFT
+  { 0x2519, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+  { 0x251A, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+  { 0x251B, BIDI_ON  },  // BOX DRAWINGS HEAVY UP AND LEFT
+  { 0x251C, BIDI_ON  },  // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+  { 0x251D, BIDI_ON  },  // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+  { 0x251E, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+  { 0x251F, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+  { 0x2520, BIDI_ON  },  // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+  { 0x2521, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+  { 0x2522, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+  { 0x2523, BIDI_ON  },  // BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+  { 0x2524, BIDI_ON  },  // BOX DRAWINGS LIGHT VERTICAL AND LEFT
+  { 0x2525, BIDI_ON  },  // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+  { 0x2526, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+  { 0x2527, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+  { 0x2528, BIDI_ON  },  // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+  { 0x2529, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+  { 0x252A, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+  { 0x252B, BIDI_ON  },  // BOX DRAWINGS HEAVY VERTICAL AND LEFT
+  { 0x252C, BIDI_ON  },  // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+  { 0x252D, BIDI_ON  },  // BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+  { 0x252E, BIDI_ON  },  // BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+  { 0x252F, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+  { 0x2530, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+  { 0x2531, BIDI_ON  },  // BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+  { 0x2532, BIDI_ON  },  // BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+  { 0x2533, BIDI_ON  },  // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+  { 0x2534, BIDI_ON  },  // BOX DRAWINGS LIGHT UP AND HORIZONTAL
+  { 0x2535, BIDI_ON  },  // BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+  { 0x2536, BIDI_ON  },  // BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+  { 0x2537, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+  { 0x2538, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+  { 0x2539, BIDI_ON  },  // BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+  { 0x253A, BIDI_ON  },  // BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+  { 0x253B, BIDI_ON  },  // BOX DRAWINGS HEAVY UP AND HORIZONTAL
+  { 0x253C, BIDI_ON  },  // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+  { 0x253D, BIDI_ON  },  // BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+  { 0x253E, BIDI_ON  },  // BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+  { 0x253F, BIDI_ON  },  // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+  { 0x2540, BIDI_ON  },  // BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+  { 0x2541, BIDI_ON  },  // BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+  { 0x2542, BIDI_ON  },  // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+  { 0x2543, BIDI_ON  },  // BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+  { 0x2544, BIDI_ON  },  // BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+  { 0x2545, BIDI_ON  },  // BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+  { 0x2546, BIDI_ON  },  // BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+  { 0x2547, BIDI_ON  },  // BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+  { 0x2548, BIDI_ON  },  // BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+  { 0x2549, BIDI_ON  },  // BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+  { 0x254A, BIDI_ON  },  // BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+  { 0x254B, BIDI_ON  },  // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+  { 0x254C, BIDI_ON  },  // BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+  { 0x254D, BIDI_ON  },  // BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+  { 0x254E, BIDI_ON  },  // BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+  { 0x254F, BIDI_ON  },  // BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+  { 0x2550, BIDI_ON  },  // BOX DRAWINGS DOUBLE HORIZONTAL
+  { 0x2551, BIDI_ON  },  // BOX DRAWINGS DOUBLE VERTICAL
+  { 0x2552, BIDI_ON  },  // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+  { 0x2553, BIDI_ON  },  // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+  { 0x2554, BIDI_ON  },  // BOX DRAWINGS DOUBLE DOWN AND RIGHT
+  { 0x2555, BIDI_ON  },  // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+  { 0x2556, BIDI_ON  },  // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+  { 0x2557, BIDI_ON  },  // BOX DRAWINGS DOUBLE DOWN AND LEFT
+  { 0x2558, BIDI_ON  },  // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+  { 0x2559, BIDI_ON  },  // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+  { 0x255A, BIDI_ON  },  // BOX DRAWINGS DOUBLE UP AND RIGHT
+  { 0x255B, BIDI_ON  },  // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+  { 0x255C, BIDI_ON  },  // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+  { 0x255D, BIDI_ON  },  // BOX DRAWINGS DOUBLE UP AND LEFT
+  { 0x255E, BIDI_ON  },  // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+  { 0x255F, BIDI_ON  },  // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+  { 0x2560, BIDI_ON  },  // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+  { 0x2561, BIDI_ON  },  // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+  { 0x2562, BIDI_ON  },  // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+  { 0x2563, BIDI_ON  },  // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+  { 0x2564, BIDI_ON  },  // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+  { 0x2565, BIDI_ON  },  // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+  { 0x2566, BIDI_ON  },  // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+  { 0x2567, BIDI_ON  },  // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+  { 0x2568, BIDI_ON  },  // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+  { 0x2569, BIDI_ON  },  // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+  { 0x256A, BIDI_ON  },  // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+  { 0x256B, BIDI_ON  },  // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+  { 0x256C, BIDI_ON  },  // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+  { 0x256D, BIDI_ON  },  // BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+  { 0x256E, BIDI_ON  },  // BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+  { 0x256F, BIDI_ON  },  // BOX DRAWINGS LIGHT ARC UP AND LEFT
+  { 0x2570, BIDI_ON  },  // BOX DRAWINGS LIGHT ARC UP AND RIGHT
+  { 0x2571, BIDI_ON  },  // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+  { 0x2572, BIDI_ON  },  // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+  { 0x2573, BIDI_ON  },  // BOX DRAWINGS LIGHT DIAGONAL CROSS
+  { 0x2574, BIDI_ON  },  // BOX DRAWINGS LIGHT LEFT
+  { 0x2575, BIDI_ON  },  // BOX DRAWINGS LIGHT UP
+  { 0x2576, BIDI_ON  },  // BOX DRAWINGS LIGHT RIGHT
+  { 0x2577, BIDI_ON  },  // BOX DRAWINGS LIGHT DOWN
+  { 0x2578, BIDI_ON  },  // BOX DRAWINGS HEAVY LEFT
+  { 0x2579, BIDI_ON  },  // BOX DRAWINGS HEAVY UP
+  { 0x257A, BIDI_ON  },  // BOX DRAWINGS HEAVY RIGHT
+  { 0x257B, BIDI_ON  },  // BOX DRAWINGS HEAVY DOWN
+  { 0x257C, BIDI_ON  },  // BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+  { 0x257D, BIDI_ON  },  // BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+  { 0x257E, BIDI_ON  },  // BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+  { 0x257F, BIDI_ON  },  // BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+  { 0x2580, BIDI_ON  },  // UPPER HALF BLOCK
+  { 0x2581, BIDI_ON  },  // LOWER ONE EIGHTH BLOCK
+  { 0x2582, BIDI_ON  },  // LOWER ONE QUARTER BLOCK
+  { 0x2583, BIDI_ON  },  // LOWER THREE EIGHTHS BLOCK
+  { 0x2584, BIDI_ON  },  // LOWER HALF BLOCK
+  { 0x2585, BIDI_ON  },  // LOWER FIVE EIGHTHS BLOCK
+  { 0x2586, BIDI_ON  },  // LOWER THREE QUARTERS BLOCK
+  { 0x2587, BIDI_ON  },  // LOWER SEVEN EIGHTHS BLOCK
+  { 0x2588, BIDI_ON  },  // FULL BLOCK
+  { 0x2589, BIDI_ON  },  // LEFT SEVEN EIGHTHS BLOCK
+  { 0x258A, BIDI_ON  },  // LEFT THREE QUARTERS BLOCK
+  { 0x258B, BIDI_ON  },  // LEFT FIVE EIGHTHS BLOCK
+  { 0x258C, BIDI_ON  },  // LEFT HALF BLOCK
+  { 0x258D, BIDI_ON  },  // LEFT THREE EIGHTHS BLOCK
+  { 0x258E, BIDI_ON  },  // LEFT ONE QUARTER BLOCK
+  { 0x258F, BIDI_ON  },  // LEFT ONE EIGHTH BLOCK
+  { 0x2590, BIDI_ON  },  // RIGHT HALF BLOCK
+  { 0x2591, BIDI_ON  },  // LIGHT SHADE
+  { 0x2592, BIDI_ON  },  // MEDIUM SHADE
+  { 0x2593, BIDI_ON  },  // DARK SHADE
+  { 0x2594, BIDI_ON  },  // UPPER ONE EIGHTH BLOCK
+  { 0x2595, BIDI_ON  },  // RIGHT ONE EIGHTH BLOCK
+  { 0x2596, BIDI_ON  },  // QUADRANT LOWER LEFT
+  { 0x2597, BIDI_ON  },  // QUADRANT LOWER RIGHT
+  { 0x2598, BIDI_ON  },  // QUADRANT UPPER LEFT
+  { 0x2599, BIDI_ON  },  // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+  { 0x259A, BIDI_ON  },  // QUADRANT UPPER LEFT AND LOWER RIGHT
+  { 0x259B, BIDI_ON  },  // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+  { 0x259C, BIDI_ON  },  // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+  { 0x259D, BIDI_ON  },  // QUADRANT UPPER RIGHT
+  { 0x259E, BIDI_ON  },  // QUADRANT UPPER RIGHT AND LOWER LEFT
+  { 0x259F, BIDI_ON  },  // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+  { 0x25A0, BIDI_ON  },  // BLACK SQUARE
+  { 0x25A1, BIDI_ON  },  // WHITE SQUARE
+  { 0x25A2, BIDI_ON  },  // WHITE SQUARE WITH ROUNDED CORNERS
+  { 0x25A3, BIDI_ON  },  // WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+  { 0x25A4, BIDI_ON  },  // SQUARE WITH HORIZONTAL FILL
+  { 0x25A5, BIDI_ON  },  // SQUARE WITH VERTICAL FILL
+  { 0x25A6, BIDI_ON  },  // SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+  { 0x25A7, BIDI_ON  },  // SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+  { 0x25A8, BIDI_ON  },  // SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+  { 0x25A9, BIDI_ON  },  // SQUARE WITH DIAGONAL CROSSHATCH FILL
+  { 0x25AA, BIDI_ON  },  // BLACK SMALL SQUARE
+  { 0x25AB, BIDI_ON  },  // WHITE SMALL SQUARE
+  { 0x25AC, BIDI_ON  },  // BLACK RECTANGLE
+  { 0x25AD, BIDI_ON  },  // WHITE RECTANGLE
+  { 0x25AE, BIDI_ON  },  // BLACK VERTICAL RECTANGLE
+  { 0x25AF, BIDI_ON  },  // WHITE VERTICAL RECTANGLE
+  { 0x25B0, BIDI_ON  },  // BLACK PARALLELOGRAM
+  { 0x25B1, BIDI_ON  },  // WHITE PARALLELOGRAM
+  { 0x25B2, BIDI_ON  },  // BLACK UP-POINTING TRIANGLE
+  { 0x25B3, BIDI_ON  },  // WHITE UP-POINTING TRIANGLE
+  { 0x25B4, BIDI_ON  },  // BLACK UP-POINTING SMALL TRIANGLE
+  { 0x25B5, BIDI_ON  },  // WHITE UP-POINTING SMALL TRIANGLE
+  { 0x25B6, BIDI_ON  },  // BLACK RIGHT-POINTING TRIANGLE
+  { 0x25B7, BIDI_ON  },  // WHITE RIGHT-POINTING TRIANGLE
+  { 0x25B8, BIDI_ON  },  // BLACK RIGHT-POINTING SMALL TRIANGLE
+  { 0x25B9, BIDI_ON  },  // WHITE RIGHT-POINTING SMALL TRIANGLE
+  { 0x25BA, BIDI_ON  },  // BLACK RIGHT-POINTING POINTER
+  { 0x25BB, BIDI_ON  },  // WHITE RIGHT-POINTING POINTER
+  { 0x25BC, BIDI_ON  },  // BLACK DOWN-POINTING TRIANGLE
+  { 0x25BD, BIDI_ON  },  // WHITE DOWN-POINTING TRIANGLE
+  { 0x25BE, BIDI_ON  },  // BLACK DOWN-POINTING SMALL TRIANGLE
+  { 0x25BF, BIDI_ON  },  // WHITE DOWN-POINTING SMALL TRIANGLE
+  { 0x25C0, BIDI_ON  },  // BLACK LEFT-POINTING TRIANGLE
+  { 0x25C1, BIDI_ON  },  // WHITE LEFT-POINTING TRIANGLE
+  { 0x25C2, BIDI_ON  },  // BLACK LEFT-POINTING SMALL TRIANGLE
+  { 0x25C3, BIDI_ON  },  // WHITE LEFT-POINTING SMALL TRIANGLE
+  { 0x25C4, BIDI_ON  },  // BLACK LEFT-POINTING POINTER
+  { 0x25C5, BIDI_ON  },  // WHITE LEFT-POINTING POINTER
+  { 0x25C6, BIDI_ON  },  // BLACK DIAMOND
+  { 0x25C7, BIDI_ON  },  // WHITE DIAMOND
+  { 0x25C8, BIDI_ON  },  // WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+  { 0x25C9, BIDI_ON  },  // FISHEYE
+  { 0x25CA, BIDI_ON  },  // LOZENGE
+  { 0x25CB, BIDI_ON  },  // WHITE CIRCLE
+  { 0x25CC, BIDI_ON  },  // DOTTED CIRCLE
+  { 0x25CD, BIDI_ON  },  // CIRCLE WITH VERTICAL FILL
+  { 0x25CE, BIDI_ON  },  // BULLSEYE
+  { 0x25CF, BIDI_ON  },  // BLACK CIRCLE
+  { 0x25D0, BIDI_ON  },  // CIRCLE WITH LEFT HALF BLACK
+  { 0x25D1, BIDI_ON  },  // CIRCLE WITH RIGHT HALF BLACK
+  { 0x25D2, BIDI_ON  },  // CIRCLE WITH LOWER HALF BLACK
+  { 0x25D3, BIDI_ON  },  // CIRCLE WITH UPPER HALF BLACK
+  { 0x25D4, BIDI_ON  },  // CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+  { 0x25D5, BIDI_ON  },  // CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+  { 0x25D6, BIDI_ON  },  // LEFT HALF BLACK CIRCLE
+  { 0x25D7, BIDI_ON  },  // RIGHT HALF BLACK CIRCLE
+  { 0x25D8, BIDI_ON  },  // INVERSE BULLET
+  { 0x25D9, BIDI_ON  },  // INVERSE WHITE CIRCLE
+  { 0x25DA, BIDI_ON  },  // UPPER HALF INVERSE WHITE CIRCLE
+  { 0x25DB, BIDI_ON  },  // LOWER HALF INVERSE WHITE CIRCLE
+  { 0x25DC, BIDI_ON  },  // UPPER LEFT QUADRANT CIRCULAR ARC
+  { 0x25DD, BIDI_ON  },  // UPPER RIGHT QUADRANT CIRCULAR ARC
+  { 0x25DE, BIDI_ON  },  // LOWER RIGHT QUADRANT CIRCULAR ARC
+  { 0x25DF, BIDI_ON  },  // LOWER LEFT QUADRANT CIRCULAR ARC
+  { 0x25E0, BIDI_ON  },  // UPPER HALF CIRCLE
+  { 0x25E1, BIDI_ON  },  // LOWER HALF CIRCLE
+  { 0x25E2, BIDI_ON  },  // BLACK LOWER RIGHT TRIANGLE
+  { 0x25E3, BIDI_ON  },  // BLACK LOWER LEFT TRIANGLE
+  { 0x25E4, BIDI_ON  },  // BLACK UPPER LEFT TRIANGLE
+  { 0x25E5, BIDI_ON  },  // BLACK UPPER RIGHT TRIANGLE
+  { 0x25E6, BIDI_ON  },  // WHITE BULLET
+  { 0x25E7, BIDI_ON  },  // SQUARE WITH LEFT HALF BLACK
+  { 0x25E8, BIDI_ON  },  // SQUARE WITH RIGHT HALF BLACK
+  { 0x25E9, BIDI_ON  },  // SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+  { 0x25EA, BIDI_ON  },  // SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+  { 0x25EB, BIDI_ON  },  // WHITE SQUARE WITH VERTICAL BISECTING LINE
+  { 0x25EC, BIDI_ON  },  // WHITE UP-POINTING TRIANGLE WITH DOT
+  { 0x25ED, BIDI_ON  },  // UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+  { 0x25EE, BIDI_ON  },  // UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+  { 0x25EF, BIDI_ON  },  // LARGE CIRCLE
+  { 0x25F0, BIDI_ON  },  // WHITE SQUARE WITH UPPER LEFT QUADRANT
+  { 0x25F1, BIDI_ON  },  // WHITE SQUARE WITH LOWER LEFT QUADRANT
+  { 0x25F2, BIDI_ON  },  // WHITE SQUARE WITH LOWER RIGHT QUADRANT
+  { 0x25F3, BIDI_ON  },  // WHITE SQUARE WITH UPPER RIGHT QUADRANT
+  { 0x25F4, BIDI_ON  },  // WHITE CIRCLE WITH UPPER LEFT QUADRANT
+  { 0x25F5, BIDI_ON  },  // WHITE CIRCLE WITH LOWER LEFT QUADRANT
+  { 0x25F6, BIDI_ON  },  // WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+  { 0x25F7, BIDI_ON  },  // WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+  { 0x25F8, BIDI_ON  },  // UPPER LEFT TRIANGLE
+  { 0x25F9, BIDI_ON  },  // UPPER RIGHT TRIANGLE
+  { 0x25FA, BIDI_ON  },  // LOWER LEFT TRIANGLE
+  { 0x25FB, BIDI_ON  },  // WHITE MEDIUM SQUARE
+  { 0x25FC, BIDI_ON  },  // BLACK MEDIUM SQUARE
+  { 0x25FD, BIDI_ON  },  // WHITE MEDIUM SMALL SQUARE
+  { 0x25FE, BIDI_ON  },  // BLACK MEDIUM SMALL SQUARE
+  { 0x25FF, BIDI_ON  },  // LOWER RIGHT TRIANGLE
+  { 0x2600, BIDI_ON  },  // BLACK SUN WITH RAYS
+  { 0x2601, BIDI_ON  },  // CLOUD
+  { 0x2602, BIDI_ON  },  // UMBRELLA
+  { 0x2603, BIDI_ON  },  // SNOWMAN
+  { 0x2604, BIDI_ON  },  // COMET
+  { 0x2605, BIDI_ON  },  // BLACK STAR
+  { 0x2606, BIDI_ON  },  // WHITE STAR
+  { 0x2607, BIDI_ON  },  // LIGHTNING
+  { 0x2608, BIDI_ON  },  // THUNDERSTORM
+  { 0x2609, BIDI_ON  },  // SUN
+  { 0x260A, BIDI_ON  },  // ASCENDING NODE
+  { 0x260B, BIDI_ON  },  // DESCENDING NODE
+  { 0x260C, BIDI_ON  },  // CONJUNCTION
+  { 0x260D, BIDI_ON  },  // OPPOSITION
+  { 0x260E, BIDI_ON  },  // BLACK TELEPHONE
+  { 0x260F, BIDI_ON  },  // WHITE TELEPHONE
+  { 0x2610, BIDI_ON  },  // BALLOT BOX
+  { 0x2611, BIDI_ON  },  // BALLOT BOX WITH CHECK
+  { 0x2612, BIDI_ON  },  // BALLOT BOX WITH X
+  { 0x2613, BIDI_ON  },  // SALTIRE
+  { 0x2614, BIDI_ON  },  // UMBRELLA WITH RAIN DROPS
+  { 0x2615, BIDI_ON  },  // HOT BEVERAGE
+  { 0x2616, BIDI_ON  },  // WHITE SHOGI PIECE
+  { 0x2617, BIDI_ON  },  // BLACK SHOGI PIECE
+  { 0x2618, BIDI_ON  },  // SHAMROCK
+  { 0x2619, BIDI_ON  },  // REVERSED ROTATED FLORAL HEART BULLET
+  { 0x261A, BIDI_ON  },  // BLACK LEFT POINTING INDEX
+  { 0x261B, BIDI_ON  },  // BLACK RIGHT POINTING INDEX
+  { 0x261C, BIDI_ON  },  // WHITE LEFT POINTING INDEX
+  { 0x261D, BIDI_ON  },  // WHITE UP POINTING INDEX
+  { 0x261E, BIDI_ON  },  // WHITE RIGHT POINTING INDEX
+  { 0x261F, BIDI_ON  },  // WHITE DOWN POINTING INDEX
+  { 0x2620, BIDI_ON  },  // SKULL AND CROSSBONES
+  { 0x2621, BIDI_ON  },  // CAUTION SIGN
+  { 0x2622, BIDI_ON  },  // RADIOACTIVE SIGN
+  { 0x2623, BIDI_ON  },  // BIOHAZARD SIGN
+  { 0x2624, BIDI_ON  },  // CADUCEUS
+  { 0x2625, BIDI_ON  },  // ANKH
+  { 0x2626, BIDI_ON  },  // ORTHODOX CROSS
+  { 0x2627, BIDI_ON  },  // CHI RHO
+  { 0x2628, BIDI_ON  },  // CROSS OF LORRAINE
+  { 0x2629, BIDI_ON  },  // CROSS OF JERUSALEM
+  { 0x262A, BIDI_ON  },  // STAR AND CRESCENT
+  { 0x262B, BIDI_ON  },  // FARSI SYMBOL
+  { 0x262C, BIDI_ON  },  // ADI SHAKTI
+  { 0x262D, BIDI_ON  },  // HAMMER AND SICKLE
+  { 0x262E, BIDI_ON  },  // PEACE SYMBOL
+  { 0x262F, BIDI_ON  },  // YIN YANG
+  { 0x2630, BIDI_ON  },  // TRIGRAM FOR HEAVEN
+  { 0x2631, BIDI_ON  },  // TRIGRAM FOR LAKE
+  { 0x2632, BIDI_ON  },  // TRIGRAM FOR FIRE
+  { 0x2633, BIDI_ON  },  // TRIGRAM FOR THUNDER
+  { 0x2634, BIDI_ON  },  // TRIGRAM FOR WIND
+  { 0x2635, BIDI_ON  },  // TRIGRAM FOR WATER
+  { 0x2636, BIDI_ON  },  // TRIGRAM FOR MOUNTAIN
+  { 0x2637, BIDI_ON  },  // TRIGRAM FOR EARTH
+  { 0x2638, BIDI_ON  },  // WHEEL OF DHARMA
+  { 0x2639, BIDI_ON  },  // WHITE FROWNING FACE
+  { 0x263A, BIDI_ON  },  // WHITE SMILING FACE
+  { 0x263B, BIDI_ON  },  // BLACK SMILING FACE
+  { 0x263C, BIDI_ON  },  // WHITE SUN WITH RAYS
+  { 0x263D, BIDI_ON  },  // FIRST QUARTER MOON
+  { 0x263E, BIDI_ON  },  // LAST QUARTER MOON
+  { 0x263F, BIDI_ON  },  // MERCURY
+  { 0x2640, BIDI_ON  },  // FEMALE SIGN
+  { 0x2641, BIDI_ON  },  // EARTH
+  { 0x2642, BIDI_ON  },  // MALE SIGN
+  { 0x2643, BIDI_ON  },  // JUPITER
+  { 0x2644, BIDI_ON  },  // SATURN
+  { 0x2645, BIDI_ON  },  // URANUS
+  { 0x2646, BIDI_ON  },  // NEPTUNE
+  { 0x2647, BIDI_ON  },  // PLUTO
+  { 0x2648, BIDI_ON  },  // ARIES
+  { 0x2649, BIDI_ON  },  // TAURUS
+  { 0x264A, BIDI_ON  },  // GEMINI
+  { 0x264B, BIDI_ON  },  // CANCER
+  { 0x264C, BIDI_ON  },  // LEO
+  { 0x264D, BIDI_ON  },  // VIRGO
+  { 0x264E, BIDI_ON  },  // LIBRA
+  { 0x264F, BIDI_ON  },  // SCORPIUS
+  { 0x2650, BIDI_ON  },  // SAGITTARIUS
+  { 0x2651, BIDI_ON  },  // CAPRICORN
+  { 0x2652, BIDI_ON  },  // AQUARIUS
+  { 0x2653, BIDI_ON  },  // PISCES
+  { 0x2654, BIDI_ON  },  // WHITE CHESS KING
+  { 0x2655, BIDI_ON  },  // WHITE CHESS QUEEN
+  { 0x2656, BIDI_ON  },  // WHITE CHESS ROOK
+  { 0x2657, BIDI_ON  },  // WHITE CHESS BISHOP
+  { 0x2658, BIDI_ON  },  // WHITE CHESS KNIGHT
+  { 0x2659, BIDI_ON  },  // WHITE CHESS PAWN
+  { 0x265A, BIDI_ON  },  // BLACK CHESS KING
+  { 0x265B, BIDI_ON  },  // BLACK CHESS QUEEN
+  { 0x265C, BIDI_ON  },  // BLACK CHESS ROOK
+  { 0x265D, BIDI_ON  },  // BLACK CHESS BISHOP
+  { 0x265E, BIDI_ON  },  // BLACK CHESS KNIGHT
+  { 0x265F, BIDI_ON  },  // BLACK CHESS PAWN
+  { 0x2660, BIDI_ON  },  // BLACK SPADE SUIT
+  { 0x2661, BIDI_ON  },  // WHITE HEART SUIT
+  { 0x2662, BIDI_ON  },  // WHITE DIAMOND SUIT
+  { 0x2663, BIDI_ON  },  // BLACK CLUB SUIT
+  { 0x2664, BIDI_ON  },  // WHITE SPADE SUIT
+  { 0x2665, BIDI_ON  },  // BLACK HEART SUIT
+  { 0x2666, BIDI_ON  },  // BLACK DIAMOND SUIT
+  { 0x2667, BIDI_ON  },  // WHITE CLUB SUIT
+  { 0x2668, BIDI_ON  },  // HOT SPRINGS
+  { 0x2669, BIDI_ON  },  // QUARTER NOTE
+  { 0x266A, BIDI_ON  },  // EIGHTH NOTE
+  { 0x266B, BIDI_ON  },  // BEAMED EIGHTH NOTES
+  { 0x266C, BIDI_ON  },  // BEAMED SIXTEENTH NOTES
+  { 0x266D, BIDI_ON  },  // MUSIC FLAT SIGN
+  { 0x266E, BIDI_ON  },  // MUSIC NATURAL SIGN
+  { 0x266F, BIDI_ON  },  // MUSIC SHARP SIGN
+  { 0x2670, BIDI_ON  },  // WEST SYRIAC CROSS
+  { 0x2671, BIDI_ON  },  // EAST SYRIAC CROSS
+  { 0x2672, BIDI_ON  },  // UNIVERSAL RECYCLING SYMBOL
+  { 0x2673, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+  { 0x2674, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+  { 0x2675, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+  { 0x2676, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+  { 0x2677, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+  { 0x2678, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+  { 0x2679, BIDI_ON  },  // RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+  { 0x267A, BIDI_ON  },  // RECYCLING SYMBOL FOR GENERIC MATERIALS
+  { 0x267B, BIDI_ON  },  // BLACK UNIVERSAL RECYCLING SYMBOL
+  { 0x267C, BIDI_ON  },  // RECYCLED PAPER SYMBOL
+  { 0x267D, BIDI_ON  },  // PARTIALLY-RECYCLED PAPER SYMBOL
+  { 0x267E, BIDI_ON  },  // PERMANENT PAPER SIGN
+  { 0x267F, BIDI_ON  },  // WHEELCHAIR SYMBOL
+  { 0x2680, BIDI_ON  },  // DIE FACE-1
+  { 0x2681, BIDI_ON  },  // DIE FACE-2
+  { 0x2682, BIDI_ON  },  // DIE FACE-3
+  { 0x2683, BIDI_ON  },  // DIE FACE-4
+  { 0x2684, BIDI_ON  },  // DIE FACE-5
+  { 0x2685, BIDI_ON  },  // DIE FACE-6
+  { 0x2686, BIDI_ON  },  // WHITE CIRCLE WITH DOT RIGHT
+  { 0x2687, BIDI_ON  },  // WHITE CIRCLE WITH TWO DOTS
+  { 0x2688, BIDI_ON  },  // BLACK CIRCLE WITH WHITE DOT RIGHT
+  { 0x2689, BIDI_ON  },  // BLACK CIRCLE WITH TWO WHITE DOTS
+  { 0x268A, BIDI_ON  },  // MONOGRAM FOR YANG
+  { 0x268B, BIDI_ON  },  // MONOGRAM FOR YIN
+  { 0x268C, BIDI_ON  },  // DIGRAM FOR GREATER YANG
+  { 0x268D, BIDI_ON  },  // DIGRAM FOR LESSER YIN
+  { 0x268E, BIDI_ON  },  // DIGRAM FOR LESSER YANG
+  { 0x268F, BIDI_ON  },  // DIGRAM FOR GREATER YIN
+  { 0x2690, BIDI_ON  },  // WHITE FLAG
+  { 0x2691, BIDI_ON  },  // BLACK FLAG
+  { 0x2692, BIDI_ON  },  // HAMMER AND PICK
+  { 0x2693, BIDI_ON  },  // ANCHOR
+  { 0x2694, BIDI_ON  },  // CROSSED SWORDS
+  { 0x2695, BIDI_ON  },  // STAFF OF AESCULAPIUS
+  { 0x2696, BIDI_ON  },  // SCALES
+  { 0x2697, BIDI_ON  },  // ALEMBIC
+  { 0x2698, BIDI_ON  },  // FLOWER
+  { 0x2699, BIDI_ON  },  // GEAR
+  { 0x269A, BIDI_ON  },  // STAFF OF HERMES
+  { 0x269B, BIDI_ON  },  // ATOM SYMBOL
+  { 0x269C, BIDI_ON  },  // FLEUR-DE-LIS
+  { 0x269D, BIDI_ON  },  // OUTLINED WHITE STAR
+  { 0x269E, BIDI_ON  },  // THREE LINES CONVERGING RIGHT
+  { 0x269F, BIDI_ON  },  // THREE LINES CONVERGING LEFT
+  { 0x26A0, BIDI_ON  },  // WARNING SIGN
+  { 0x26A1, BIDI_ON  },  // HIGH VOLTAGE SIGN
+  { 0x26A2, BIDI_ON  },  // DOUBLED FEMALE SIGN
+  { 0x26A3, BIDI_ON  },  // DOUBLED MALE SIGN
+  { 0x26A4, BIDI_ON  },  // INTERLOCKED FEMALE AND MALE SIGN
+  { 0x26A5, BIDI_ON  },  // MALE AND FEMALE SIGN
+  { 0x26A6, BIDI_ON  },  // MALE WITH STROKE SIGN
+  { 0x26A7, BIDI_ON  },  // MALE WITH STROKE AND MALE AND FEMALE SIGN
+  { 0x26A8, BIDI_ON  },  // VERTICAL MALE WITH STROKE SIGN
+  { 0x26A9, BIDI_ON  },  // HORIZONTAL MALE WITH STROKE SIGN
+  { 0x26AA, BIDI_ON  },  // MEDIUM WHITE CIRCLE
+  { 0x26AB, BIDI_ON  },  // MEDIUM BLACK CIRCLE
+  { 0x26AC, BIDI_L   },  // MEDIUM SMALL WHITE CIRCLE
+  { 0x26AD, BIDI_ON  },  // MARRIAGE SYMBOL
+  { 0x26AE, BIDI_ON  },  // DIVORCE SYMBOL
+  { 0x26AF, BIDI_ON  },  // UNMARRIED PARTNERSHIP SYMBOL
+  { 0x26B0, BIDI_ON  },  // COFFIN
+  { 0x26B1, BIDI_ON  },  // FUNERAL URN
+  { 0x26B2, BIDI_ON  },  // NEUTER
+  { 0x26B3, BIDI_ON  },  // CERES
+  { 0x26B4, BIDI_ON  },  // PALLAS
+  { 0x26B5, BIDI_ON  },  // JUNO
+  { 0x26B6, BIDI_ON  },  // VESTA
+  { 0x26B7, BIDI_ON  },  // CHIRON
+  { 0x26B8, BIDI_ON  },  // BLACK MOON LILITH
+  { 0x26B9, BIDI_ON  },  // SEXTILE
+  { 0x26BA, BIDI_ON  },  // SEMISEXTILE
+  { 0x26BB, BIDI_ON  },  // QUINCUNX
+  { 0x26BC, BIDI_ON  },  // SESQUIQUADRATE
+  { 0x26BD, BIDI_ON  },  // SOCCER BALL
+  { 0x26BE, BIDI_ON  },  // BASEBALL
+  { 0x26BF, BIDI_ON  },  // SQUARED KEY
+  { 0x26C0, BIDI_ON  },  // WHITE DRAUGHTS MAN
+  { 0x26C1, BIDI_ON  },  // WHITE DRAUGHTS KING
+  { 0x26C2, BIDI_ON  },  // BLACK DRAUGHTS MAN
+  { 0x26C3, BIDI_ON  },  // BLACK DRAUGHTS KING
+  { 0x26C4, BIDI_ON  },  // SNOWMAN WITHOUT SNOW
+  { 0x26C5, BIDI_ON  },  // SUN BEHIND CLOUD
+  { 0x26C6, BIDI_ON  },  // RAIN
+  { 0x26C7, BIDI_ON  },  // BLACK SNOWMAN
+  { 0x26C8, BIDI_ON  },  // THUNDER CLOUD AND RAIN
+  { 0x26C9, BIDI_ON  },  // TURNED WHITE SHOGI PIECE
+  { 0x26CA, BIDI_ON  },  // TURNED BLACK SHOGI PIECE
+  { 0x26CB, BIDI_ON  },  // WHITE DIAMOND IN SQUARE
+  { 0x26CC, BIDI_ON  },  // CROSSING LANES
+  { 0x26CD, BIDI_ON  },  // DISABLED CAR
+  { 0x26CE, BIDI_ON  },  // OPHIUCHUS
+  { 0x26CF, BIDI_ON  },  // PICK
+  { 0x26D0, BIDI_ON  },  // CAR SLIDING
+  { 0x26D1, BIDI_ON  },  // HELMET WITH WHITE CROSS
+  { 0x26D2, BIDI_ON  },  // CIRCLED CROSSING LANES
+  { 0x26D3, BIDI_ON  },  // CHAINS
+  { 0x26D4, BIDI_ON  },  // NO ENTRY
+  { 0x26D5, BIDI_ON  },  // ALTERNATE ONE-WAY LEFT WAY TRAFFIC
+  { 0x26D6, BIDI_ON  },  // BLACK TWO-WAY LEFT WAY TRAFFIC
+  { 0x26D7, BIDI_ON  },  // WHITE TWO-WAY LEFT WAY TRAFFIC
+  { 0x26D8, BIDI_ON  },  // BLACK LEFT LANE MERGE
+  { 0x26D9, BIDI_ON  },  // WHITE LEFT LANE MERGE
+  { 0x26DA, BIDI_ON  },  // DRIVE SLOW SIGN
+  { 0x26DB, BIDI_ON  },  // HEAVY WHITE DOWN-POINTING TRIANGLE
+  { 0x26DC, BIDI_ON  },  // LEFT CLOSED ENTRY
+  { 0x26DD, BIDI_ON  },  // SQUARED SALTIRE
+  { 0x26DE, BIDI_ON  },  // FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
+  { 0x26DF, BIDI_ON  },  // BLACK TRUCK
+  { 0x26E0, BIDI_ON  },  // RESTRICTED LEFT ENTRY-1
+  { 0x26E1, BIDI_ON  },  // RESTRICTED LEFT ENTRY-2
+  { 0x26E2, BIDI_ON  },  // ASTRONOMICAL SYMBOL FOR URANUS
+  { 0x26E3, BIDI_ON  },  // HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+  { 0x26E4, BIDI_ON  },  // PENTAGRAM
+  { 0x26E5, BIDI_ON  },  // RIGHT-HANDED INTERLACED PENTAGRAM
+  { 0x26E6, BIDI_ON  },  // LEFT-HANDED INTERLACED PENTAGRAM
+  { 0x26E7, BIDI_ON  },  // INVERTED PENTAGRAM
+  { 0x26E8, BIDI_ON  },  // BLACK CROSS ON SHIELD
+  { 0x26E9, BIDI_ON  },  // SHINTO SHRINE
+  { 0x26EA, BIDI_ON  },  // CHURCH
+  { 0x26EB, BIDI_ON  },  // CASTLE
+  { 0x26EC, BIDI_ON  },  // HISTORIC SITE
+  { 0x26ED, BIDI_ON  },  // GEAR WITHOUT HUB
+  { 0x26EE, BIDI_ON  },  // GEAR WITH HANDLES
+  { 0x26EF, BIDI_ON  },  // MAP SYMBOL FOR LIGHTHOUSE
+  { 0x26F0, BIDI_ON  },  // MOUNTAIN
+  { 0x26F1, BIDI_ON  },  // UMBRELLA ON GROUND
+  { 0x26F2, BIDI_ON  },  // FOUNTAIN
+  { 0x26F3, BIDI_ON  },  // FLAG IN HOLE
+  { 0x26F4, BIDI_ON  },  // FERRY
+  { 0x26F5, BIDI_ON  },  // SAILBOAT
+  { 0x26F6, BIDI_ON  },  // SQUARE FOUR CORNERS
+  { 0x26F7, BIDI_ON  },  // SKIER
+  { 0x26F8, BIDI_ON  },  // ICE SKATE
+  { 0x26F9, BIDI_ON  },  // PERSON WITH BALL
+  { 0x26FA, BIDI_ON  },  // TENT
+  { 0x26FB, BIDI_ON  },  // JAPANESE BANK SYMBOL
+  { 0x26FC, BIDI_ON  },  // HEADSTONE GRAVEYARD SYMBOL
+  { 0x26FD, BIDI_ON  },  // FUEL PUMP
+  { 0x26FE, BIDI_ON  },  // CUP ON BLACK SQUARE
+  { 0x26FF, BIDI_ON  },  // WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+  { 0x2700, BIDI_ON  },  // BLACK SAFETY SCISSORS
+  { 0x2701, BIDI_ON  },  // UPPER BLADE SCISSORS
+  { 0x2702, BIDI_ON  },  // BLACK SCISSORS
+  { 0x2703, BIDI_ON  },  // LOWER BLADE SCISSORS
+  { 0x2704, BIDI_ON  },  // WHITE SCISSORS
+  { 0x2705, BIDI_ON  },  // WHITE HEAVY CHECK MARK
+  { 0x2706, BIDI_ON  },  // TELEPHONE LOCATION SIGN
+  { 0x2707, BIDI_ON  },  // TAPE DRIVE
+  { 0x2708, BIDI_ON  },  // AIRPLANE
+  { 0x2709, BIDI_ON  },  // ENVELOPE
+  { 0x270A, BIDI_ON  },  // RAISED FIST
+  { 0x270B, BIDI_ON  },  // RAISED HAND
+  { 0x270C, BIDI_ON  },  // VICTORY HAND
+  { 0x270D, BIDI_ON  },  // WRITING HAND
+  { 0x270E, BIDI_ON  },  // LOWER RIGHT PENCIL
+  { 0x270F, BIDI_ON  },  // PENCIL
+  { 0x2710, BIDI_ON  },  // UPPER RIGHT PENCIL
+  { 0x2711, BIDI_ON  },  // WHITE NIB
+  { 0x2712, BIDI_ON  },  // BLACK NIB
+  { 0x2713, BIDI_ON  },  // CHECK MARK
+  { 0x2714, BIDI_ON  },  // HEAVY CHECK MARK
+  { 0x2715, BIDI_ON  },  // MULTIPLICATION X
+  { 0x2716, BIDI_ON  },  // HEAVY MULTIPLICATION X
+  { 0x2717, BIDI_ON  },  // BALLOT X
+  { 0x2718, BIDI_ON  },  // HEAVY BALLOT X
+  { 0x2719, BIDI_ON  },  // OUTLINED GREEK CROSS
+  { 0x271A, BIDI_ON  },  // HEAVY GREEK CROSS
+  { 0x271B, BIDI_ON  },  // OPEN CENTRE CROSS
+  { 0x271C, BIDI_ON  },  // HEAVY OPEN CENTRE CROSS
+  { 0x271D, BIDI_ON  },  // LATIN CROSS
+  { 0x271E, BIDI_ON  },  // SHADOWED WHITE LATIN CROSS
+  { 0x271F, BIDI_ON  },  // OUTLINED LATIN CROSS
+  { 0x2720, BIDI_ON  },  // MALTESE CROSS
+  { 0x2721, BIDI_ON  },  // STAR OF DAVID
+  { 0x2722, BIDI_ON  },  // FOUR TEARDROP-SPOKED ASTERISK
+  { 0x2723, BIDI_ON  },  // FOUR BALLOON-SPOKED ASTERISK
+  { 0x2724, BIDI_ON  },  // HEAVY FOUR BALLOON-SPOKED ASTERISK
+  { 0x2725, BIDI_ON  },  // FOUR CLUB-SPOKED ASTERISK
+  { 0x2726, BIDI_ON  },  // BLACK FOUR POINTED STAR
+  { 0x2727, BIDI_ON  },  // WHITE FOUR POINTED STAR
+  { 0x2728, BIDI_ON  },  // SPARKLES
+  { 0x2729, BIDI_ON  },  // STRESS OUTLINED WHITE STAR
+  { 0x272A, BIDI_ON  },  // CIRCLED WHITE STAR
+  { 0x272B, BIDI_ON  },  // OPEN CENTRE BLACK STAR
+  { 0x272C, BIDI_ON  },  // BLACK CENTRE WHITE STAR
+  { 0x272D, BIDI_ON  },  // OUTLINED BLACK STAR
+  { 0x272E, BIDI_ON  },  // HEAVY OUTLINED BLACK STAR
+  { 0x272F, BIDI_ON  },  // PINWHEEL STAR
+  { 0x2730, BIDI_ON  },  // SHADOWED WHITE STAR
+  { 0x2731, BIDI_ON  },  // HEAVY ASTERISK
+  { 0x2732, BIDI_ON  },  // OPEN CENTRE ASTERISK
+  { 0x2733, BIDI_ON  },  // EIGHT SPOKED ASTERISK
+  { 0x2734, BIDI_ON  },  // EIGHT POINTED BLACK STAR
+  { 0x2735, BIDI_ON  },  // EIGHT POINTED PINWHEEL STAR
+  { 0x2736, BIDI_ON  },  // SIX POINTED BLACK STAR
+  { 0x2737, BIDI_ON  },  // EIGHT POINTED RECTILINEAR BLACK STAR
+  { 0x2738, BIDI_ON  },  // HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+  { 0x2739, BIDI_ON  },  // TWELVE POINTED BLACK STAR
+  { 0x273A, BIDI_ON  },  // SIXTEEN POINTED ASTERISK
+  { 0x273B, BIDI_ON  },  // TEARDROP-SPOKED ASTERISK
+  { 0x273C, BIDI_ON  },  // OPEN CENTRE TEARDROP-SPOKED ASTERISK
+  { 0x273D, BIDI_ON  },  // HEAVY TEARDROP-SPOKED ASTERISK
+  { 0x273E, BIDI_ON  },  // SIX PETALLED BLACK AND WHITE FLORETTE
+  { 0x273F, BIDI_ON  },  // BLACK FLORETTE
+  { 0x2740, BIDI_ON  },  // WHITE FLORETTE
+  { 0x2741, BIDI_ON  },  // EIGHT PETALLED OUTLINED BLACK FLORETTE
+  { 0x2742, BIDI_ON  },  // CIRCLED OPEN CENTRE EIGHT POINTED STAR
+  { 0x2743, BIDI_ON  },  // HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+  { 0x2744, BIDI_ON  },  // SNOWFLAKE
+  { 0x2745, BIDI_ON  },  // TIGHT TRIFOLIATE SNOWFLAKE
+  { 0x2746, BIDI_ON  },  // HEAVY CHEVRON SNOWFLAKE
+  { 0x2747, BIDI_ON  },  // SPARKLE
+  { 0x2748, BIDI_ON  },  // HEAVY SPARKLE
+  { 0x2749, BIDI_ON  },  // BALLOON-SPOKED ASTERISK
+  { 0x274A, BIDI_ON  },  // EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+  { 0x274B, BIDI_ON  },  // HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+  { 0x274C, BIDI_ON  },  // CROSS MARK
+  { 0x274D, BIDI_ON  },  // SHADOWED WHITE CIRCLE
+  { 0x274E, BIDI_ON  },  // NEGATIVE SQUARED CROSS MARK
+  { 0x274F, BIDI_ON  },  // LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+  { 0x2750, BIDI_ON  },  // UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+  { 0x2751, BIDI_ON  },  // LOWER RIGHT SHADOWED WHITE SQUARE
+  { 0x2752, BIDI_ON  },  // UPPER RIGHT SHADOWED WHITE SQUARE
+  { 0x2753, BIDI_ON  },  // BLACK QUESTION MARK ORNAMENT
+  { 0x2754, BIDI_ON  },  // WHITE QUESTION MARK ORNAMENT
+  { 0x2755, BIDI_ON  },  // WHITE EXCLAMATION MARK ORNAMENT
+  { 0x2756, BIDI_ON  },  // BLACK DIAMOND MINUS WHITE X
+  { 0x2757, BIDI_ON  },  // HEAVY EXCLAMATION MARK SYMBOL
+  { 0x2758, BIDI_ON  },  // LIGHT VERTICAL BAR
+  { 0x2759, BIDI_ON  },  // MEDIUM VERTICAL BAR
+  { 0x275A, BIDI_ON  },  // HEAVY VERTICAL BAR
+  { 0x275B, BIDI_ON  },  // HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+  { 0x275C, BIDI_ON  },  // HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+  { 0x275D, BIDI_ON  },  // HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+  { 0x275E, BIDI_ON  },  // HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+  { 0x275F, BIDI_ON  },  // HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
+  { 0x2760, BIDI_ON  },  // HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+  { 0x2761, BIDI_ON  },  // CURVED STEM PARAGRAPH SIGN ORNAMENT
+  { 0x2762, BIDI_ON  },  // HEAVY EXCLAMATION MARK ORNAMENT
+  { 0x2763, BIDI_ON  },  // HEAVY HEART EXCLAMATION MARK ORNAMENT
+  { 0x2764, BIDI_ON  },  // HEAVY BLACK HEART
+  { 0x2765, BIDI_ON  },  // ROTATED HEAVY BLACK HEART BULLET
+  { 0x2766, BIDI_ON  },  // FLORAL HEART
+  { 0x2767, BIDI_ON  },  // ROTATED FLORAL HEART BULLET
+  { 0x2768, BIDI_ON  },  // MEDIUM LEFT PARENTHESIS ORNAMENT
+  { 0x2769, BIDI_ON  },  // MEDIUM RIGHT PARENTHESIS ORNAMENT
+  { 0x276A, BIDI_ON  },  // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+  { 0x276B, BIDI_ON  },  // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+  { 0x276C, BIDI_ON  },  // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x276D, BIDI_ON  },  // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x276E, BIDI_ON  },  // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+  { 0x276F, BIDI_ON  },  // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+  { 0x2770, BIDI_ON  },  // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x2771, BIDI_ON  },  // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+  { 0x2772, BIDI_ON  },  // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+  { 0x2773, BIDI_ON  },  // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+  { 0x2774, BIDI_ON  },  // MEDIUM LEFT CURLY BRACKET ORNAMENT
+  { 0x2775, BIDI_ON  },  // MEDIUM RIGHT CURLY BRACKET ORNAMENT
+  { 0x2776, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT ONE
+  { 0x2777, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT TWO
+  { 0x2778, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT THREE
+  { 0x2779, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+  { 0x277A, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+  { 0x277B, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT SIX
+  { 0x277C, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+  { 0x277D, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+  { 0x277E, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED DIGIT NINE
+  { 0x277F, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED NUMBER TEN
+  { 0x2780, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+  { 0x2781, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+  { 0x2782, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+  { 0x2783, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+  { 0x2784, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+  { 0x2785, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+  { 0x2786, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+  { 0x2787, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+  { 0x2788, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+  { 0x2789, BIDI_ON  },  // DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+  { 0x278A, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+  { 0x278B, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+  { 0x278C, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+  { 0x278D, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+  { 0x278E, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+  { 0x278F, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+  { 0x2790, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+  { 0x2791, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+  { 0x2792, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+  { 0x2793, BIDI_ON  },  // DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+  { 0x2794, BIDI_ON  },  // HEAVY WIDE-HEADED RIGHTWARDS ARROW
+  { 0x2795, BIDI_ON  },  // HEAVY PLUS SIGN
+  { 0x2796, BIDI_ON  },  // HEAVY MINUS SIGN
+  { 0x2797, BIDI_ON  },  // HEAVY DIVISION SIGN
+  { 0x2798, BIDI_ON  },  // HEAVY SOUTH EAST ARROW
+  { 0x2799, BIDI_ON  },  // HEAVY RIGHTWARDS ARROW
+  { 0x279A, BIDI_ON  },  // HEAVY NORTH EAST ARROW
+  { 0x279B, BIDI_ON  },  // DRAFTING POINT RIGHTWARDS ARROW
+  { 0x279C, BIDI_ON  },  // HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+  { 0x279D, BIDI_ON  },  // TRIANGLE-HEADED RIGHTWARDS ARROW
+  { 0x279E, BIDI_ON  },  // HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+  { 0x279F, BIDI_ON  },  // DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+  { 0x27A0, BIDI_ON  },  // HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+  { 0x27A1, BIDI_ON  },  // BLACK RIGHTWARDS ARROW
+  { 0x27A2, BIDI_ON  },  // THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+  { 0x27A3, BIDI_ON  },  // THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+  { 0x27A4, BIDI_ON  },  // BLACK RIGHTWARDS ARROWHEAD
+  { 0x27A5, BIDI_ON  },  // HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+  { 0x27A6, BIDI_ON  },  // HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+  { 0x27A7, BIDI_ON  },  // SQUAT BLACK RIGHTWARDS ARROW
+  { 0x27A8, BIDI_ON  },  // HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+  { 0x27A9, BIDI_ON  },  // RIGHT-SHADED WHITE RIGHTWARDS ARROW
+  { 0x27AA, BIDI_ON  },  // LEFT-SHADED WHITE RIGHTWARDS ARROW
+  { 0x27AB, BIDI_ON  },  // BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27AC, BIDI_ON  },  // FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27AD, BIDI_ON  },  // HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27AE, BIDI_ON  },  // HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27AF, BIDI_ON  },  // NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27B0, BIDI_ON  },  // CURLY LOOP
+  { 0x27B1, BIDI_ON  },  // NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+  { 0x27B2, BIDI_ON  },  // CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+  { 0x27B3, BIDI_ON  },  // WHITE-FEATHERED RIGHTWARDS ARROW
+  { 0x27B4, BIDI_ON  },  // BLACK-FEATHERED SOUTH EAST ARROW
+  { 0x27B5, BIDI_ON  },  // BLACK-FEATHERED RIGHTWARDS ARROW
+  { 0x27B6, BIDI_ON  },  // BLACK-FEATHERED NORTH EAST ARROW
+  { 0x27B7, BIDI_ON  },  // HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+  { 0x27B8, BIDI_ON  },  // HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+  { 0x27B9, BIDI_ON  },  // HEAVY BLACK-FEATHERED NORTH EAST ARROW
+  { 0x27BA, BIDI_ON  },  // TEARDROP-BARBED RIGHTWARDS ARROW
+  { 0x27BB, BIDI_ON  },  // HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+  { 0x27BC, BIDI_ON  },  // WEDGE-TAILED RIGHTWARDS ARROW
+  { 0x27BD, BIDI_ON  },  // HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+  { 0x27BE, BIDI_ON  },  // OPEN-OUTLINED RIGHTWARDS ARROW
+  { 0x27BF, BIDI_ON  },  // DOUBLE CURLY LOOP
+  { 0x27C0, BIDI_ON  },  // THREE DIMENSIONAL ANGLE
+  { 0x27C1, BIDI_ON  },  // WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+  { 0x27C2, BIDI_ON  },  // PERPENDICULAR
+  { 0x27C3, BIDI_ON  },  // OPEN SUBSET
+  { 0x27C4, BIDI_ON  },  // OPEN SUPERSET
+  { 0x27C5, BIDI_ON  },  // LEFT S-SHAPED BAG DELIMITER
+  { 0x27C6, BIDI_ON  },  // RIGHT S-SHAPED BAG DELIMITER
+  { 0x27C7, BIDI_ON  },  // OR WITH DOT INSIDE
+  { 0x27C8, BIDI_ON  },  // REVERSE SOLIDUS PRECEDING SUBSET
+  { 0x27C9, BIDI_ON  },  // SUPERSET PRECEDING SOLIDUS
+  { 0x27CA, BIDI_ON  },  // VERTICAL BAR WITH HORIZONTAL STROKE
+  { 0x27CB, BIDI_ON  },  // MATHEMATICAL RISING DIAGONAL
+  { 0x27CC, BIDI_ON  },  // LONG DIVISION
+  { 0x27CD, BIDI_ON  },  // MATHEMATICAL FALLING DIAGONAL
+  { 0x27CE, BIDI_ON  },  // SQUARED LOGICAL AND
+  { 0x27CF, BIDI_ON  },  // SQUARED LOGICAL OR
+  { 0x27D0, BIDI_ON  },  // WHITE DIAMOND WITH CENTRED DOT
+  { 0x27D1, BIDI_ON  },  // AND WITH DOT
+  { 0x27D2, BIDI_ON  },  // ELEMENT OF OPENING UPWARDS
+  { 0x27D3, BIDI_ON  },  // LOWER RIGHT CORNER WITH DOT
+  { 0x27D4, BIDI_ON  },  // UPPER LEFT CORNER WITH DOT
+  { 0x27D5, BIDI_ON  },  // LEFT OUTER JOIN
+  { 0x27D6, BIDI_ON  },  // RIGHT OUTER JOIN
+  { 0x27D7, BIDI_ON  },  // FULL OUTER JOIN
+  { 0x27D8, BIDI_ON  },  // LARGE UP TACK
+  { 0x27D9, BIDI_ON  },  // LARGE DOWN TACK
+  { 0x27DA, BIDI_ON  },  // LEFT AND RIGHT DOUBLE TURNSTILE
+  { 0x27DB, BIDI_ON  },  // LEFT AND RIGHT TACK
+  { 0x27DC, BIDI_ON  },  // LEFT MULTIMAP
+  { 0x27DD, BIDI_ON  },  // LONG RIGHT TACK
+  { 0x27DE, BIDI_ON  },  // LONG LEFT TACK
+  { 0x27DF, BIDI_ON  },  // UP TACK WITH CIRCLE ABOVE
+  { 0x27E0, BIDI_ON  },  // LOZENGE DIVIDED BY HORIZONTAL RULE
+  { 0x27E1, BIDI_ON  },  // WHITE CONCAVE-SIDED DIAMOND
+  { 0x27E2, BIDI_ON  },  // WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+  { 0x27E3, BIDI_ON  },  // WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+  { 0x27E4, BIDI_ON  },  // WHITE SQUARE WITH LEFTWARDS TICK
+  { 0x27E5, BIDI_ON  },  // WHITE SQUARE WITH RIGHTWARDS TICK
+  { 0x27E6, BIDI_ON  },  // MATHEMATICAL LEFT WHITE SQUARE BRACKET
+  { 0x27E7, BIDI_ON  },  // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+  { 0x27E8, BIDI_ON  },  // MATHEMATICAL LEFT ANGLE BRACKET
+  { 0x27E9, BIDI_ON  },  // MATHEMATICAL RIGHT ANGLE BRACKET
+  { 0x27EA, BIDI_ON  },  // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+  { 0x27EB, BIDI_ON  },  // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+  { 0x27EC, BIDI_ON  },  // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+  { 0x27ED, BIDI_ON  },  // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+  { 0x27EE, BIDI_ON  },  // MATHEMATICAL LEFT FLATTENED PARENTHESIS
+  { 0x27EF, BIDI_ON  },  // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+  { 0x27F0, BIDI_ON  },  // UPWARDS QUADRUPLE ARROW
+  { 0x27F1, BIDI_ON  },  // DOWNWARDS QUADRUPLE ARROW
+  { 0x27F2, BIDI_ON  },  // ANTICLOCKWISE GAPPED CIRCLE ARROW
+  { 0x27F3, BIDI_ON  },  // CLOCKWISE GAPPED CIRCLE ARROW
+  { 0x27F4, BIDI_ON  },  // RIGHT ARROW WITH CIRCLED PLUS
+  { 0x27F5, BIDI_ON  },  // LONG LEFTWARDS ARROW
+  { 0x27F6, BIDI_ON  },  // LONG RIGHTWARDS ARROW
+  { 0x27F7, BIDI_ON  },  // LONG LEFT RIGHT ARROW
+  { 0x27F8, BIDI_ON  },  // LONG LEFTWARDS DOUBLE ARROW
+  { 0x27F9, BIDI_ON  },  // LONG RIGHTWARDS DOUBLE ARROW
+  { 0x27FA, BIDI_ON  },  // LONG LEFT RIGHT DOUBLE ARROW
+  { 0x27FB, BIDI_ON  },  // LONG LEFTWARDS ARROW FROM BAR
+  { 0x27FC, BIDI_ON  },  // LONG RIGHTWARDS ARROW FROM BAR
+  { 0x27FD, BIDI_ON  },  // LONG LEFTWARDS DOUBLE ARROW FROM BAR
+  { 0x27FE, BIDI_ON  },  // LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+  { 0x27FF, BIDI_ON  },  // LONG RIGHTWARDS SQUIGGLE ARROW
+  { 0x2800, BIDI_L   },  // BRAILLE PATTERN BLANK
+  { 0x2801, BIDI_L   },  // BRAILLE PATTERN DOTS-1
+  { 0x2802, BIDI_L   },  // BRAILLE PATTERN DOTS-2
+  { 0x2803, BIDI_L   },  // BRAILLE PATTERN DOTS-12
+  { 0x2804, BIDI_L   },  // BRAILLE PATTERN DOTS-3
+  { 0x2805, BIDI_L   },  // BRAILLE PATTERN DOTS-13
+  { 0x2806, BIDI_L   },  // BRAILLE PATTERN DOTS-23
+  { 0x2807, BIDI_L   },  // BRAILLE PATTERN DOTS-123
+  { 0x2808, BIDI_L   },  // BRAILLE PATTERN DOTS-4
+  { 0x2809, BIDI_L   },  // BRAILLE PATTERN DOTS-14
+  { 0x280A, BIDI_L   },  // BRAILLE PATTERN DOTS-24
+  { 0x280B, BIDI_L   },  // BRAILLE PATTERN DOTS-124
+  { 0x280C, BIDI_L   },  // BRAILLE PATTERN DOTS-34
+  { 0x280D, BIDI_L   },  // BRAILLE PATTERN DOTS-134
+  { 0x280E, BIDI_L   },  // BRAILLE PATTERN DOTS-234
+  { 0x280F, BIDI_L   },  // BRAILLE PATTERN DOTS-1234
+  { 0x2810, BIDI_L   },  // BRAILLE PATTERN DOTS-5
+  { 0x2811, BIDI_L   },  // BRAILLE PATTERN DOTS-15
+  { 0x2812, BIDI_L   },  // BRAILLE PATTERN DOTS-25
+  { 0x2813, BIDI_L   },  // BRAILLE PATTERN DOTS-125
+  { 0x2814, BIDI_L   },  // BRAILLE PATTERN DOTS-35
+  { 0x2815, BIDI_L   },  // BRAILLE PATTERN DOTS-135
+  { 0x2816, BIDI_L   },  // BRAILLE PATTERN DOTS-235
+  { 0x2817, BIDI_L   },  // BRAILLE PATTERN DOTS-1235
+  { 0x2818, BIDI_L   },  // BRAILLE PATTERN DOTS-45
+  { 0x2819, BIDI_L   },  // BRAILLE PATTERN DOTS-145
+  { 0x281A, BIDI_L   },  // BRAILLE PATTERN DOTS-245
+  { 0x281B, BIDI_L   },  // BRAILLE PATTERN DOTS-1245
+  { 0x281C, BIDI_L   },  // BRAILLE PATTERN DOTS-345
+  { 0x281D, BIDI_L   },  // BRAILLE PATTERN DOTS-1345
+  { 0x281E, BIDI_L   },  // BRAILLE PATTERN DOTS-2345
+  { 0x281F, BIDI_L   },  // BRAILLE PATTERN DOTS-12345
+  { 0x2820, BIDI_L   },  // BRAILLE PATTERN DOTS-6
+  { 0x2821, BIDI_L   },  // BRAILLE PATTERN DOTS-16
+  { 0x2822, BIDI_L   },  // BRAILLE PATTERN DOTS-26
+  { 0x2823, BIDI_L   },  // BRAILLE PATTERN DOTS-126
+  { 0x2824, BIDI_L   },  // BRAILLE PATTERN DOTS-36
+  { 0x2825, BIDI_L   },  // BRAILLE PATTERN DOTS-136
+  { 0x2826, BIDI_L   },  // BRAILLE PATTERN DOTS-236
+  { 0x2827, BIDI_L   },  // BRAILLE PATTERN DOTS-1236
+  { 0x2828, BIDI_L   },  // BRAILLE PATTERN DOTS-46
+  { 0x2829, BIDI_L   },  // BRAILLE PATTERN DOTS-146
+  { 0x282A, BIDI_L   },  // BRAILLE PATTERN DOTS-246
+  { 0x282B, BIDI_L   },  // BRAILLE PATTERN DOTS-1246
+  { 0x282C, BIDI_L   },  // BRAILLE PATTERN DOTS-346
+  { 0x282D, BIDI_L   },  // BRAILLE PATTERN DOTS-1346
+  { 0x282E, BIDI_L   },  // BRAILLE PATTERN DOTS-2346
+  { 0x282F, BIDI_L   },  // BRAILLE PATTERN DOTS-12346
+  { 0x2830, BIDI_L   },  // BRAILLE PATTERN DOTS-56
+  { 0x2831, BIDI_L   },  // BRAILLE PATTERN DOTS-156
+  { 0x2832, BIDI_L   },  // BRAILLE PATTERN DOTS-256
+  { 0x2833, BIDI_L   },  // BRAILLE PATTERN DOTS-1256
+  { 0x2834, BIDI_L   },  // BRAILLE PATTERN DOTS-356
+  { 0x2835, BIDI_L   },  // BRAILLE PATTERN DOTS-1356
+  { 0x2836, BIDI_L   },  // BRAILLE PATTERN DOTS-2356
+  { 0x2837, BIDI_L   },  // BRAILLE PATTERN DOTS-12356
+  { 0x2838, BIDI_L   },  // BRAILLE PATTERN DOTS-456
+  { 0x2839, BIDI_L   },  // BRAILLE PATTERN DOTS-1456
+  { 0x283A, BIDI_L   },  // BRAILLE PATTERN DOTS-2456
+  { 0x283B, BIDI_L   },  // BRAILLE PATTERN DOTS-12456
+  { 0x283C, BIDI_L   },  // BRAILLE PATTERN DOTS-3456
+  { 0x283D, BIDI_L   },  // BRAILLE PATTERN DOTS-13456
+  { 0x283E, BIDI_L   },  // BRAILLE PATTERN DOTS-23456
+  { 0x283F, BIDI_L   },  // BRAILLE PATTERN DOTS-123456
+  { 0x2840, BIDI_L   },  // BRAILLE PATTERN DOTS-7
+  { 0x2841, BIDI_L   },  // BRAILLE PATTERN DOTS-17
+  { 0x2842, BIDI_L   },  // BRAILLE PATTERN DOTS-27
+  { 0x2843, BIDI_L   },  // BRAILLE PATTERN DOTS-127
+  { 0x2844, BIDI_L   },  // BRAILLE PATTERN DOTS-37
+  { 0x2845, BIDI_L   },  // BRAILLE PATTERN DOTS-137
+  { 0x2846, BIDI_L   },  // BRAILLE PATTERN DOTS-237
+  { 0x2847, BIDI_L   },  // BRAILLE PATTERN DOTS-1237
+  { 0x2848, BIDI_L   },  // BRAILLE PATTERN DOTS-47
+  { 0x2849, BIDI_L   },  // BRAILLE PATTERN DOTS-147
+  { 0x284A, BIDI_L   },  // BRAILLE PATTERN DOTS-247
+  { 0x284B, BIDI_L   },  // BRAILLE PATTERN DOTS-1247
+  { 0x284C, BIDI_L   },  // BRAILLE PATTERN DOTS-347
+  { 0x284D, BIDI_L   },  // BRAILLE PATTERN DOTS-1347
+  { 0x284E, BIDI_L   },  // BRAILLE PATTERN DOTS-2347
+  { 0x284F, BIDI_L   },  // BRAILLE PATTERN DOTS-12347
+  { 0x2850, BIDI_L   },  // BRAILLE PATTERN DOTS-57
+  { 0x2851, BIDI_L   },  // BRAILLE PATTERN DOTS-157
+  { 0x2852, BIDI_L   },  // BRAILLE PATTERN DOTS-257
+  { 0x2853, BIDI_L   },  // BRAILLE PATTERN DOTS-1257
+  { 0x2854, BIDI_L   },  // BRAILLE PATTERN DOTS-357
+  { 0x2855, BIDI_L   },  // BRAILLE PATTERN DOTS-1357
+  { 0x2856, BIDI_L   },  // BRAILLE PATTERN DOTS-2357
+  { 0x2857, BIDI_L   },  // BRAILLE PATTERN DOTS-12357
+  { 0x2858, BIDI_L   },  // BRAILLE PATTERN DOTS-457
+  { 0x2859, BIDI_L   },  // BRAILLE PATTERN DOTS-1457
+  { 0x285A, BIDI_L   },  // BRAILLE PATTERN DOTS-2457
+  { 0x285B, BIDI_L   },  // BRAILLE PATTERN DOTS-12457
+  { 0x285C, BIDI_L   },  // BRAILLE PATTERN DOTS-3457
+  { 0x285D, BIDI_L   },  // BRAILLE PATTERN DOTS-13457
+  { 0x285E, BIDI_L   },  // BRAILLE PATTERN DOTS-23457
+  { 0x285F, BIDI_L   },  // BRAILLE PATTERN DOTS-123457
+  { 0x2860, BIDI_L   },  // BRAILLE PATTERN DOTS-67
+  { 0x2861, BIDI_L   },  // BRAILLE PATTERN DOTS-167
+  { 0x2862, BIDI_L   },  // BRAILLE PATTERN DOTS-267
+  { 0x2863, BIDI_L   },  // BRAILLE PATTERN DOTS-1267
+  { 0x2864, BIDI_L   },  // BRAILLE PATTERN DOTS-367
+  { 0x2865, BIDI_L   },  // BRAILLE PATTERN DOTS-1367
+  { 0x2866, BIDI_L   },  // BRAILLE PATTERN DOTS-2367
+  { 0x2867, BIDI_L   },  // BRAILLE PATTERN DOTS-12367
+  { 0x2868, BIDI_L   },  // BRAILLE PATTERN DOTS-467
+  { 0x2869, BIDI_L   },  // BRAILLE PATTERN DOTS-1467
+  { 0x286A, BIDI_L   },  // BRAILLE PATTERN DOTS-2467
+  { 0x286B, BIDI_L   },  // BRAILLE PATTERN DOTS-12467
+  { 0x286C, BIDI_L   },  // BRAILLE PATTERN DOTS-3467
+  { 0x286D, BIDI_L   },  // BRAILLE PATTERN DOTS-13467
+  { 0x286E, BIDI_L   },  // BRAILLE PATTERN DOTS-23467
+  { 0x286F, BIDI_L   },  // BRAILLE PATTERN DOTS-123467
+  { 0x2870, BIDI_L   },  // BRAILLE PATTERN DOTS-567
+  { 0x2871, BIDI_L   },  // BRAILLE PATTERN DOTS-1567
+  { 0x2872, BIDI_L   },  // BRAILLE PATTERN DOTS-2567
+  { 0x2873, BIDI_L   },  // BRAILLE PATTERN DOTS-12567
+  { 0x2874, BIDI_L   },  // BRAILLE PATTERN DOTS-3567
+  { 0x2875, BIDI_L   },  // BRAILLE PATTERN DOTS-13567
+  { 0x2876, BIDI_L   },  // BRAILLE PATTERN DOTS-23567
+  { 0x2877, BIDI_L   },  // BRAILLE PATTERN DOTS-123567
+  { 0x2878, BIDI_L   },  // BRAILLE PATTERN DOTS-4567
+  { 0x2879, BIDI_L   },  // BRAILLE PATTERN DOTS-14567
+  { 0x287A, BIDI_L   },  // BRAILLE PATTERN DOTS-24567
+  { 0x287B, BIDI_L   },  // BRAILLE PATTERN DOTS-124567
+  { 0x287C, BIDI_L   },  // BRAILLE PATTERN DOTS-34567
+  { 0x287D, BIDI_L   },  // BRAILLE PATTERN DOTS-134567
+  { 0x287E, BIDI_L   },  // BRAILLE PATTERN DOTS-234567
+  { 0x287F, BIDI_L   },  // BRAILLE PATTERN DOTS-1234567
+  { 0x2880, BIDI_L   },  // BRAILLE PATTERN DOTS-8
+  { 0x2881, BIDI_L   },  // BRAILLE PATTERN DOTS-18
+  { 0x2882, BIDI_L   },  // BRAILLE PATTERN DOTS-28
+  { 0x2883, BIDI_L   },  // BRAILLE PATTERN DOTS-128
+  { 0x2884, BIDI_L   },  // BRAILLE PATTERN DOTS-38
+  { 0x2885, BIDI_L   },  // BRAILLE PATTERN DOTS-138
+  { 0x2886, BIDI_L   },  // BRAILLE PATTERN DOTS-238
+  { 0x2887, BIDI_L   },  // BRAILLE PATTERN DOTS-1238
+  { 0x2888, BIDI_L   },  // BRAILLE PATTERN DOTS-48
+  { 0x2889, BIDI_L   },  // BRAILLE PATTERN DOTS-148
+  { 0x288A, BIDI_L   },  // BRAILLE PATTERN DOTS-248
+  { 0x288B, BIDI_L   },  // BRAILLE PATTERN DOTS-1248
+  { 0x288C, BIDI_L   },  // BRAILLE PATTERN DOTS-348
+  { 0x288D, BIDI_L   },  // BRAILLE PATTERN DOTS-1348
+  { 0x288E, BIDI_L   },  // BRAILLE PATTERN DOTS-2348
+  { 0x288F, BIDI_L   },  // BRAILLE PATTERN DOTS-12348
+  { 0x2890, BIDI_L   },  // BRAILLE PATTERN DOTS-58
+  { 0x2891, BIDI_L   },  // BRAILLE PATTERN DOTS-158
+  { 0x2892, BIDI_L   },  // BRAILLE PATTERN DOTS-258
+  { 0x2893, BIDI_L   },  // BRAILLE PATTERN DOTS-1258
+  { 0x2894, BIDI_L   },  // BRAILLE PATTERN DOTS-358
+  { 0x2895, BIDI_L   },  // BRAILLE PATTERN DOTS-1358
+  { 0x2896, BIDI_L   },  // BRAILLE PATTERN DOTS-2358
+  { 0x2897, BIDI_L   },  // BRAILLE PATTERN DOTS-12358
+  { 0x2898, BIDI_L   },  // BRAILLE PATTERN DOTS-458
+  { 0x2899, BIDI_L   },  // BRAILLE PATTERN DOTS-1458
+  { 0x289A, BIDI_L   },  // BRAILLE PATTERN DOTS-2458
+  { 0x289B, BIDI_L   },  // BRAILLE PATTERN DOTS-12458
+  { 0x289C, BIDI_L   },  // BRAILLE PATTERN DOTS-3458
+  { 0x289D, BIDI_L   },  // BRAILLE PATTERN DOTS-13458
+  { 0x289E, BIDI_L   },  // BRAILLE PATTERN DOTS-23458
+  { 0x289F, BIDI_L   },  // BRAILLE PATTERN DOTS-123458
+  { 0x28A0, BIDI_L   },  // BRAILLE PATTERN DOTS-68
+  { 0x28A1, BIDI_L   },  // BRAILLE PATTERN DOTS-168
+  { 0x28A2, BIDI_L   },  // BRAILLE PATTERN DOTS-268
+  { 0x28A3, BIDI_L   },  // BRAILLE PATTERN DOTS-1268
+  { 0x28A4, BIDI_L   },  // BRAILLE PATTERN DOTS-368
+  { 0x28A5, BIDI_L   },  // BRAILLE PATTERN DOTS-1368
+  { 0x28A6, BIDI_L   },  // BRAILLE PATTERN DOTS-2368
+  { 0x28A7, BIDI_L   },  // BRAILLE PATTERN DOTS-12368
+  { 0x28A8, BIDI_L   },  // BRAILLE PATTERN DOTS-468
+  { 0x28A9, BIDI_L   },  // BRAILLE PATTERN DOTS-1468
+  { 0x28AA, BIDI_L   },  // BRAILLE PATTERN DOTS-2468
+  { 0x28AB, BIDI_L   },  // BRAILLE PATTERN DOTS-12468
+  { 0x28AC, BIDI_L   },  // BRAILLE PATTERN DOTS-3468
+  { 0x28AD, BIDI_L   },  // BRAILLE PATTERN DOTS-13468
+  { 0x28AE, BIDI_L   },  // BRAILLE PATTERN DOTS-23468
+  { 0x28AF, BIDI_L   },  // BRAILLE PATTERN DOTS-123468
+  { 0x28B0, BIDI_L   },  // BRAILLE PATTERN DOTS-568
+  { 0x28B1, BIDI_L   },  // BRAILLE PATTERN DOTS-1568
+  { 0x28B2, BIDI_L   },  // BRAILLE PATTERN DOTS-2568
+  { 0x28B3, BIDI_L   },  // BRAILLE PATTERN DOTS-12568
+  { 0x28B4, BIDI_L   },  // BRAILLE PATTERN DOTS-3568
+  { 0x28B5, BIDI_L   },  // BRAILLE PATTERN DOTS-13568
+  { 0x28B6, BIDI_L   },  // BRAILLE PATTERN DOTS-23568
+  { 0x28B7, BIDI_L   },  // BRAILLE PATTERN DOTS-123568
+  { 0x28B8, BIDI_L   },  // BRAILLE PATTERN DOTS-4568
+  { 0x28B9, BIDI_L   },  // BRAILLE PATTERN DOTS-14568
+  { 0x28BA, BIDI_L   },  // BRAILLE PATTERN DOTS-24568
+  { 0x28BB, BIDI_L   },  // BRAILLE PATTERN DOTS-124568
+  { 0x28BC, BIDI_L   },  // BRAILLE PATTERN DOTS-34568
+  { 0x28BD, BIDI_L   },  // BRAILLE PATTERN DOTS-134568
+  { 0x28BE, BIDI_L   },  // BRAILLE PATTERN DOTS-234568
+  { 0x28BF, BIDI_L   },  // BRAILLE PATTERN DOTS-1234568
+  { 0x28C0, BIDI_L   },  // BRAILLE PATTERN DOTS-78
+  { 0x28C1, BIDI_L   },  // BRAILLE PATTERN DOTS-178
+  { 0x28C2, BIDI_L   },  // BRAILLE PATTERN DOTS-278
+  { 0x28C3, BIDI_L   },  // BRAILLE PATTERN DOTS-1278
+  { 0x28C4, BIDI_L   },  // BRAILLE PATTERN DOTS-378
+  { 0x28C5, BIDI_L   },  // BRAILLE PATTERN DOTS-1378
+  { 0x28C6, BIDI_L   },  // BRAILLE PATTERN DOTS-2378
+  { 0x28C7, BIDI_L   },  // BRAILLE PATTERN DOTS-12378
+  { 0x28C8, BIDI_L   },  // BRAILLE PATTERN DOTS-478
+  { 0x28C9, BIDI_L   },  // BRAILLE PATTERN DOTS-1478
+  { 0x28CA, BIDI_L   },  // BRAILLE PATTERN DOTS-2478
+  { 0x28CB, BIDI_L   },  // BRAILLE PATTERN DOTS-12478
+  { 0x28CC, BIDI_L   },  // BRAILLE PATTERN DOTS-3478
+  { 0x28CD, BIDI_L   },  // BRAILLE PATTERN DOTS-13478
+  { 0x28CE, BIDI_L   },  // BRAILLE PATTERN DOTS-23478
+  { 0x28CF, BIDI_L   },  // BRAILLE PATTERN DOTS-123478
+  { 0x28D0, BIDI_L   },  // BRAILLE PATTERN DOTS-578
+  { 0x28D1, BIDI_L   },  // BRAILLE PATTERN DOTS-1578
+  { 0x28D2, BIDI_L   },  // BRAILLE PATTERN DOTS-2578
+  { 0x28D3, BIDI_L   },  // BRAILLE PATTERN DOTS-12578
+  { 0x28D4, BIDI_L   },  // BRAILLE PATTERN DOTS-3578
+  { 0x28D5, BIDI_L   },  // BRAILLE PATTERN DOTS-13578
+  { 0x28D6, BIDI_L   },  // BRAILLE PATTERN DOTS-23578
+  { 0x28D7, BIDI_L   },  // BRAILLE PATTERN DOTS-123578
+  { 0x28D8, BIDI_L   },  // BRAILLE PATTERN DOTS-4578
+  { 0x28D9, BIDI_L   },  // BRAILLE PATTERN DOTS-14578
+  { 0x28DA, BIDI_L   },  // BRAILLE PATTERN DOTS-24578
+  { 0x28DB, BIDI_L   },  // BRAILLE PATTERN DOTS-124578
+  { 0x28DC, BIDI_L   },  // BRAILLE PATTERN DOTS-34578
+  { 0x28DD, BIDI_L   },  // BRAILLE PATTERN DOTS-134578
+  { 0x28DE, BIDI_L   },  // BRAILLE PATTERN DOTS-234578
+  { 0x28DF, BIDI_L   },  // BRAILLE PATTERN DOTS-1234578
+  { 0x28E0, BIDI_L   },  // BRAILLE PATTERN DOTS-678
+  { 0x28E1, BIDI_L   },  // BRAILLE PATTERN DOTS-1678
+  { 0x28E2, BIDI_L   },  // BRAILLE PATTERN DOTS-2678
+  { 0x28E3, BIDI_L   },  // BRAILLE PATTERN DOTS-12678
+  { 0x28E4, BIDI_L   },  // BRAILLE PATTERN DOTS-3678
+  { 0x28E5, BIDI_L   },  // BRAILLE PATTERN DOTS-13678
+  { 0x28E6, BIDI_L   },  // BRAILLE PATTERN DOTS-23678
+  { 0x28E7, BIDI_L   },  // BRAILLE PATTERN DOTS-123678
+  { 0x28E8, BIDI_L   },  // BRAILLE PATTERN DOTS-4678
+  { 0x28E9, BIDI_L   },  // BRAILLE PATTERN DOTS-14678
+  { 0x28EA, BIDI_L   },  // BRAILLE PATTERN DOTS-24678
+  { 0x28EB, BIDI_L   },  // BRAILLE PATTERN DOTS-124678
+  { 0x28EC, BIDI_L   },  // BRAILLE PATTERN DOTS-34678
+  { 0x28ED, BIDI_L   },  // BRAILLE PATTERN DOTS-134678
+  { 0x28EE, BIDI_L   },  // BRAILLE PATTERN DOTS-234678
+  { 0x28EF, BIDI_L   },  // BRAILLE PATTERN DOTS-1234678
+  { 0x28F0, BIDI_L   },  // BRAILLE PATTERN DOTS-5678
+  { 0x28F1, BIDI_L   },  // BRAILLE PATTERN DOTS-15678
+  { 0x28F2, BIDI_L   },  // BRAILLE PATTERN DOTS-25678
+  { 0x28F3, BIDI_L   },  // BRAILLE PATTERN DOTS-125678
+  { 0x28F4, BIDI_L   },  // BRAILLE PATTERN DOTS-35678
+  { 0x28F5, BIDI_L   },  // BRAILLE PATTERN DOTS-135678
+  { 0x28F6, BIDI_L   },  // BRAILLE PATTERN DOTS-235678
+  { 0x28F7, BIDI_L   },  // BRAILLE PATTERN DOTS-1235678
+  { 0x28F8, BIDI_L   },  // BRAILLE PATTERN DOTS-45678
+  { 0x28F9, BIDI_L   },  // BRAILLE PATTERN DOTS-145678
+  { 0x28FA, BIDI_L   },  // BRAILLE PATTERN DOTS-245678
+  { 0x28FB, BIDI_L   },  // BRAILLE PATTERN DOTS-1245678
+  { 0x28FC, BIDI_L   },  // BRAILLE PATTERN DOTS-345678
+  { 0x28FD, BIDI_L   },  // BRAILLE PATTERN DOTS-1345678
+  { 0x28FE, BIDI_L   },  // BRAILLE PATTERN DOTS-2345678
+  { 0x28FF, BIDI_L   },  // BRAILLE PATTERN DOTS-12345678
+  { 0x2900, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+  { 0x2901, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+  { 0x2902, BIDI_ON  },  // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+  { 0x2903, BIDI_ON  },  // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+  { 0x2904, BIDI_ON  },  // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+  { 0x2905, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW FROM BAR
+  { 0x2906, BIDI_ON  },  // LEFTWARDS DOUBLE ARROW FROM BAR
+  { 0x2907, BIDI_ON  },  // RIGHTWARDS DOUBLE ARROW FROM BAR
+  { 0x2908, BIDI_ON  },  // DOWNWARDS ARROW WITH HORIZONTAL STROKE
+  { 0x2909, BIDI_ON  },  // UPWARDS ARROW WITH HORIZONTAL STROKE
+  { 0x290A, BIDI_ON  },  // UPWARDS TRIPLE ARROW
+  { 0x290B, BIDI_ON  },  // DOWNWARDS TRIPLE ARROW
+  { 0x290C, BIDI_ON  },  // LEFTWARDS DOUBLE DASH ARROW
+  { 0x290D, BIDI_ON  },  // RIGHTWARDS DOUBLE DASH ARROW
+  { 0x290E, BIDI_ON  },  // LEFTWARDS TRIPLE DASH ARROW
+  { 0x290F, BIDI_ON  },  // RIGHTWARDS TRIPLE DASH ARROW
+  { 0x2910, BIDI_ON  },  // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+  { 0x2911, BIDI_ON  },  // RIGHTWARDS ARROW WITH DOTTED STEM
+  { 0x2912, BIDI_ON  },  // UPWARDS ARROW TO BAR
+  { 0x2913, BIDI_ON  },  // DOWNWARDS ARROW TO BAR
+  { 0x2914, BIDI_ON  },  // RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+  { 0x2915, BIDI_ON  },  // RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+  { 0x2916, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+  { 0x2917, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+  { 0x2918, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+  { 0x2919, BIDI_ON  },  // LEFTWARDS ARROW-TAIL
+  { 0x291A, BIDI_ON  },  // RIGHTWARDS ARROW-TAIL
+  { 0x291B, BIDI_ON  },  // LEFTWARDS DOUBLE ARROW-TAIL
+  { 0x291C, BIDI_ON  },  // RIGHTWARDS DOUBLE ARROW-TAIL
+  { 0x291D, BIDI_ON  },  // LEFTWARDS ARROW TO BLACK DIAMOND
+  { 0x291E, BIDI_ON  },  // RIGHTWARDS ARROW TO BLACK DIAMOND
+  { 0x291F, BIDI_ON  },  // LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+  { 0x2920, BIDI_ON  },  // RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+  { 0x2921, BIDI_ON  },  // NORTH WEST AND SOUTH EAST ARROW
+  { 0x2922, BIDI_ON  },  // NORTH EAST AND SOUTH WEST ARROW
+  { 0x2923, BIDI_ON  },  // NORTH WEST ARROW WITH HOOK
+  { 0x2924, BIDI_ON  },  // NORTH EAST ARROW WITH HOOK
+  { 0x2925, BIDI_ON  },  // SOUTH EAST ARROW WITH HOOK
+  { 0x2926, BIDI_ON  },  // SOUTH WEST ARROW WITH HOOK
+  { 0x2927, BIDI_ON  },  // NORTH WEST ARROW AND NORTH EAST ARROW
+  { 0x2928, BIDI_ON  },  // NORTH EAST ARROW AND SOUTH EAST ARROW
+  { 0x2929, BIDI_ON  },  // SOUTH EAST ARROW AND SOUTH WEST ARROW
+  { 0x292A, BIDI_ON  },  // SOUTH WEST ARROW AND NORTH WEST ARROW
+  { 0x292B, BIDI_ON  },  // RISING DIAGONAL CROSSING FALLING DIAGONAL
+  { 0x292C, BIDI_ON  },  // FALLING DIAGONAL CROSSING RISING DIAGONAL
+  { 0x292D, BIDI_ON  },  // SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+  { 0x292E, BIDI_ON  },  // NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+  { 0x292F, BIDI_ON  },  // FALLING DIAGONAL CROSSING NORTH EAST ARROW
+  { 0x2930, BIDI_ON  },  // RISING DIAGONAL CROSSING SOUTH EAST ARROW
+  { 0x2931, BIDI_ON  },  // NORTH EAST ARROW CROSSING NORTH WEST ARROW
+  { 0x2932, BIDI_ON  },  // NORTH WEST ARROW CROSSING NORTH EAST ARROW
+  { 0x2933, BIDI_ON  },  // WAVE ARROW POINTING DIRECTLY RIGHT
+  { 0x2934, BIDI_ON  },  // ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+  { 0x2935, BIDI_ON  },  // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+  { 0x2936, BIDI_ON  },  // ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+  { 0x2937, BIDI_ON  },  // ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+  { 0x2938, BIDI_ON  },  // RIGHT-SIDE ARC CLOCKWISE ARROW
+  { 0x2939, BIDI_ON  },  // LEFT-SIDE ARC ANTICLOCKWISE ARROW
+  { 0x293A, BIDI_ON  },  // TOP ARC ANTICLOCKWISE ARROW
+  { 0x293B, BIDI_ON  },  // BOTTOM ARC ANTICLOCKWISE ARROW
+  { 0x293C, BIDI_ON  },  // TOP ARC CLOCKWISE ARROW WITH MINUS
+  { 0x293D, BIDI_ON  },  // TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+  { 0x293E, BIDI_ON  },  // LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+  { 0x293F, BIDI_ON  },  // LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+  { 0x2940, BIDI_ON  },  // ANTICLOCKWISE CLOSED CIRCLE ARROW
+  { 0x2941, BIDI_ON  },  // CLOCKWISE CLOSED CIRCLE ARROW
+  { 0x2942, BIDI_ON  },  // RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+  { 0x2943, BIDI_ON  },  // LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+  { 0x2944, BIDI_ON  },  // SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+  { 0x2945, BIDI_ON  },  // RIGHTWARDS ARROW WITH PLUS BELOW
+  { 0x2946, BIDI_ON  },  // LEFTWARDS ARROW WITH PLUS BELOW
+  { 0x2947, BIDI_ON  },  // RIGHTWARDS ARROW THROUGH X
+  { 0x2948, BIDI_ON  },  // LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+  { 0x2949, BIDI_ON  },  // UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+  { 0x294A, BIDI_ON  },  // LEFT BARB UP RIGHT BARB DOWN HARPOON
+  { 0x294B, BIDI_ON  },  // LEFT BARB DOWN RIGHT BARB UP HARPOON
+  { 0x294C, BIDI_ON  },  // UP BARB RIGHT DOWN BARB LEFT HARPOON
+  { 0x294D, BIDI_ON  },  // UP BARB LEFT DOWN BARB RIGHT HARPOON
+  { 0x294E, BIDI_ON  },  // LEFT BARB UP RIGHT BARB UP HARPOON
+  { 0x294F, BIDI_ON  },  // UP BARB RIGHT DOWN BARB RIGHT HARPOON
+  { 0x2950, BIDI_ON  },  // LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+  { 0x2951, BIDI_ON  },  // UP BARB LEFT DOWN BARB LEFT HARPOON
+  { 0x2952, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UP TO BAR
+  { 0x2953, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UP TO BAR
+  { 0x2954, BIDI_ON  },  // UPWARDS HARPOON WITH BARB RIGHT TO BAR
+  { 0x2955, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+  { 0x2956, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+  { 0x2957, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+  { 0x2958, BIDI_ON  },  // UPWARDS HARPOON WITH BARB LEFT TO BAR
+  { 0x2959, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+  { 0x295A, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UP FROM BAR
+  { 0x295B, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+  { 0x295C, BIDI_ON  },  // UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+  { 0x295D, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+  { 0x295E, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+  { 0x295F, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+  { 0x2960, BIDI_ON  },  // UPWARDS HARPOON WITH BARB LEFT FROM BAR
+  { 0x2961, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+  { 0x2962, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+  { 0x2963, BIDI_ON  },  // UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+  { 0x2964, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+  { 0x2965, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+  { 0x2966, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+  { 0x2967, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+  { 0x2968, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+  { 0x2969, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+  { 0x296A, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+  { 0x296B, BIDI_ON  },  // LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+  { 0x296C, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+  { 0x296D, BIDI_ON  },  // RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+  { 0x296E, BIDI_ON  },  // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+  { 0x296F, BIDI_ON  },  // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+  { 0x2970, BIDI_ON  },  // RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+  { 0x2971, BIDI_ON  },  // EQUALS SIGN ABOVE RIGHTWARDS ARROW
+  { 0x2972, BIDI_ON  },  // TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+  { 0x2973, BIDI_ON  },  // LEFTWARDS ARROW ABOVE TILDE OPERATOR
+  { 0x2974, BIDI_ON  },  // RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+  { 0x2975, BIDI_ON  },  // RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+  { 0x2976, BIDI_ON  },  // LESS-THAN ABOVE LEFTWARDS ARROW
+  { 0x2977, BIDI_ON  },  // LEFTWARDS ARROW THROUGH LESS-THAN
+  { 0x2978, BIDI_ON  },  // GREATER-THAN ABOVE RIGHTWARDS ARROW
+  { 0x2979, BIDI_ON  },  // SUBSET ABOVE RIGHTWARDS ARROW
+  { 0x297A, BIDI_ON  },  // LEFTWARDS ARROW THROUGH SUBSET
+  { 0x297B, BIDI_ON  },  // SUPERSET ABOVE LEFTWARDS ARROW
+  { 0x297C, BIDI_ON  },  // LEFT FISH TAIL
+  { 0x297D, BIDI_ON  },  // RIGHT FISH TAIL
+  { 0x297E, BIDI_ON  },  // UP FISH TAIL
+  { 0x297F, BIDI_ON  },  // DOWN FISH TAIL
+  { 0x2980, BIDI_ON  },  // TRIPLE VERTICAL BAR DELIMITER
+  { 0x2981, BIDI_ON  },  // Z NOTATION SPOT
+  { 0x2982, BIDI_ON  },  // Z NOTATION TYPE COLON
+  { 0x2983, BIDI_ON  },  // LEFT WHITE CURLY BRACKET
+  { 0x2984, BIDI_ON  },  // RIGHT WHITE CURLY BRACKET
+  { 0x2985, BIDI_ON  },  // LEFT WHITE PARENTHESIS
+  { 0x2986, BIDI_ON  },  // RIGHT WHITE PARENTHESIS
+  { 0x2987, BIDI_ON  },  // Z NOTATION LEFT IMAGE BRACKET
+  { 0x2988, BIDI_ON  },  // Z NOTATION RIGHT IMAGE BRACKET
+  { 0x2989, BIDI_ON  },  // Z NOTATION LEFT BINDING BRACKET
+  { 0x298A, BIDI_ON  },  // Z NOTATION RIGHT BINDING BRACKET
+  { 0x298B, BIDI_ON  },  // LEFT SQUARE BRACKET WITH UNDERBAR
+  { 0x298C, BIDI_ON  },  // RIGHT SQUARE BRACKET WITH UNDERBAR
+  { 0x298D, BIDI_ON  },  // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+  { 0x298E, BIDI_ON  },  // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+  { 0x298F, BIDI_ON  },  // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+  { 0x2990, BIDI_ON  },  // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+  { 0x2991, BIDI_ON  },  // LEFT ANGLE BRACKET WITH DOT
+  { 0x2992, BIDI_ON  },  // RIGHT ANGLE BRACKET WITH DOT
+  { 0x2993, BIDI_ON  },  // LEFT ARC LESS-THAN BRACKET
+  { 0x2994, BIDI_ON  },  // RIGHT ARC GREATER-THAN BRACKET
+  { 0x2995, BIDI_ON  },  // DOUBLE LEFT ARC GREATER-THAN BRACKET
+  { 0x2996, BIDI_ON  },  // DOUBLE RIGHT ARC LESS-THAN BRACKET
+  { 0x2997, BIDI_ON  },  // LEFT BLACK TORTOISE SHELL BRACKET
+  { 0x2998, BIDI_ON  },  // RIGHT BLACK TORTOISE SHELL BRACKET
+  { 0x2999, BIDI_ON  },  // DOTTED FENCE
+  { 0x299A, BIDI_ON  },  // VERTICAL ZIGZAG LINE
+  { 0x299B, BIDI_ON  },  // MEASURED ANGLE OPENING LEFT
+  { 0x299C, BIDI_ON  },  // RIGHT ANGLE VARIANT WITH SQUARE
+  { 0x299D, BIDI_ON  },  // MEASURED RIGHT ANGLE WITH DOT
+  { 0x299E, BIDI_ON  },  // ANGLE WITH S INSIDE
+  { 0x299F, BIDI_ON  },  // ACUTE ANGLE
+  { 0x29A0, BIDI_ON  },  // SPHERICAL ANGLE OPENING LEFT
+  { 0x29A1, BIDI_ON  },  // SPHERICAL ANGLE OPENING UP
+  { 0x29A2, BIDI_ON  },  // TURNED ANGLE
+  { 0x29A3, BIDI_ON  },  // REVERSED ANGLE
+  { 0x29A4, BIDI_ON  },  // ANGLE WITH UNDERBAR
+  { 0x29A5, BIDI_ON  },  // REVERSED ANGLE WITH UNDERBAR
+  { 0x29A6, BIDI_ON  },  // OBLIQUE ANGLE OPENING UP
+  { 0x29A7, BIDI_ON  },  // OBLIQUE ANGLE OPENING DOWN
+  { 0x29A8, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+  { 0x29A9, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+  { 0x29AA, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+  { 0x29AB, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+  { 0x29AC, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+  { 0x29AD, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+  { 0x29AE, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+  { 0x29AF, BIDI_ON  },  // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+  { 0x29B0, BIDI_ON  },  // REVERSED EMPTY SET
+  { 0x29B1, BIDI_ON  },  // EMPTY SET WITH OVERBAR
+  { 0x29B2, BIDI_ON  },  // EMPTY SET WITH SMALL CIRCLE ABOVE
+  { 0x29B3, BIDI_ON  },  // EMPTY SET WITH RIGHT ARROW ABOVE
+  { 0x29B4, BIDI_ON  },  // EMPTY SET WITH LEFT ARROW ABOVE
+  { 0x29B5, BIDI_ON  },  // CIRCLE WITH HORIZONTAL BAR
+  { 0x29B6, BIDI_ON  },  // CIRCLED VERTICAL BAR
+  { 0x29B7, BIDI_ON  },  // CIRCLED PARALLEL
+  { 0x29B8, BIDI_ON  },  // CIRCLED REVERSE SOLIDUS
+  { 0x29B9, BIDI_ON  },  // CIRCLED PERPENDICULAR
+  { 0x29BA, BIDI_ON  },  // CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+  { 0x29BB, BIDI_ON  },  // CIRCLE WITH SUPERIMPOSED X
+  { 0x29BC, BIDI_ON  },  // CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+  { 0x29BD, BIDI_ON  },  // UP ARROW THROUGH CIRCLE
+  { 0x29BE, BIDI_ON  },  // CIRCLED WHITE BULLET
+  { 0x29BF, BIDI_ON  },  // CIRCLED BULLET
+  { 0x29C0, BIDI_ON  },  // CIRCLED LESS-THAN
+  { 0x29C1, BIDI_ON  },  // CIRCLED GREATER-THAN
+  { 0x29C2, BIDI_ON  },  // CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+  { 0x29C3, BIDI_ON  },  // CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+  { 0x29C4, BIDI_ON  },  // SQUARED RISING DIAGONAL SLASH
+  { 0x29C5, BIDI_ON  },  // SQUARED FALLING DIAGONAL SLASH
+  { 0x29C6, BIDI_ON  },  // SQUARED ASTERISK
+  { 0x29C7, BIDI_ON  },  // SQUARED SMALL CIRCLE
+  { 0x29C8, BIDI_ON  },  // SQUARED SQUARE
+  { 0x29C9, BIDI_ON  },  // TWO JOINED SQUARES
+  { 0x29CA, BIDI_ON  },  // TRIANGLE WITH DOT ABOVE
+  { 0x29CB, BIDI_ON  },  // TRIANGLE WITH UNDERBAR
+  { 0x29CC, BIDI_ON  },  // S IN TRIANGLE
+  { 0x29CD, BIDI_ON  },  // TRIANGLE WITH SERIFS AT BOTTOM
+  { 0x29CE, BIDI_ON  },  // RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+  { 0x29CF, BIDI_ON  },  // LEFT TRIANGLE BESIDE VERTICAL BAR
+  { 0x29D0, BIDI_ON  },  // VERTICAL BAR BESIDE RIGHT TRIANGLE
+  { 0x29D1, BIDI_ON  },  // BOWTIE WITH LEFT HALF BLACK
+  { 0x29D2, BIDI_ON  },  // BOWTIE WITH RIGHT HALF BLACK
+  { 0x29D3, BIDI_ON  },  // BLACK BOWTIE
+  { 0x29D4, BIDI_ON  },  // TIMES WITH LEFT HALF BLACK
+  { 0x29D5, BIDI_ON  },  // TIMES WITH RIGHT HALF BLACK
+  { 0x29D6, BIDI_ON  },  // WHITE HOURGLASS
+  { 0x29D7, BIDI_ON  },  // BLACK HOURGLASS
+  { 0x29D8, BIDI_ON  },  // LEFT WIGGLY FENCE
+  { 0x29D9, BIDI_ON  },  // RIGHT WIGGLY FENCE
+  { 0x29DA, BIDI_ON  },  // LEFT DOUBLE WIGGLY FENCE
+  { 0x29DB, BIDI_ON  },  // RIGHT DOUBLE WIGGLY FENCE
+  { 0x29DC, BIDI_ON  },  // INCOMPLETE INFINITY
+  { 0x29DD, BIDI_ON  },  // TIE OVER INFINITY
+  { 0x29DE, BIDI_ON  },  // INFINITY NEGATED WITH VERTICAL BAR
+  { 0x29DF, BIDI_ON  },  // DOUBLE-ENDED MULTIMAP
+  { 0x29E0, BIDI_ON  },  // SQUARE WITH CONTOURED OUTLINE
+  { 0x29E1, BIDI_ON  },  // INCREASES AS
+  { 0x29E2, BIDI_ON  },  // SHUFFLE PRODUCT
+  { 0x29E3, BIDI_ON  },  // EQUALS SIGN AND SLANTED PARALLEL
+  { 0x29E4, BIDI_ON  },  // EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+  { 0x29E5, BIDI_ON  },  // IDENTICAL TO AND SLANTED PARALLEL
+  { 0x29E6, BIDI_ON  },  // GLEICH STARK
+  { 0x29E7, BIDI_ON  },  // THERMODYNAMIC
+  { 0x29E8, BIDI_ON  },  // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+  { 0x29E9, BIDI_ON  },  // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+  { 0x29EA, BIDI_ON  },  // BLACK DIAMOND WITH DOWN ARROW
+  { 0x29EB, BIDI_ON  },  // BLACK LOZENGE
+  { 0x29EC, BIDI_ON  },  // WHITE CIRCLE WITH DOWN ARROW
+  { 0x29ED, BIDI_ON  },  // BLACK CIRCLE WITH DOWN ARROW
+  { 0x29EE, BIDI_ON  },  // ERROR-BARRED WHITE SQUARE
+  { 0x29EF, BIDI_ON  },  // ERROR-BARRED BLACK SQUARE
+  { 0x29F0, BIDI_ON  },  // ERROR-BARRED WHITE DIAMOND
+  { 0x29F1, BIDI_ON  },  // ERROR-BARRED BLACK DIAMOND
+  { 0x29F2, BIDI_ON  },  // ERROR-BARRED WHITE CIRCLE
+  { 0x29F3, BIDI_ON  },  // ERROR-BARRED BLACK CIRCLE
+  { 0x29F4, BIDI_ON  },  // RULE-DELAYED
+  { 0x29F5, BIDI_ON  },  // REVERSE SOLIDUS OPERATOR
+  { 0x29F6, BIDI_ON  },  // SOLIDUS WITH OVERBAR
+  { 0x29F7, BIDI_ON  },  // REVERSE SOLIDUS WITH HORIZONTAL STROKE
+  { 0x29F8, BIDI_ON  },  // BIG SOLIDUS
+  { 0x29F9, BIDI_ON  },  // BIG REVERSE SOLIDUS
+  { 0x29FA, BIDI_ON  },  // DOUBLE PLUS
+  { 0x29FB, BIDI_ON  },  // TRIPLE PLUS
+  { 0x29FC, BIDI_ON  },  // LEFT-POINTING CURVED ANGLE BRACKET
+  { 0x29FD, BIDI_ON  },  // RIGHT-POINTING CURVED ANGLE BRACKET
+  { 0x29FE, BIDI_ON  },  // TINY
+  { 0x29FF, BIDI_ON  },  // MINY
+  { 0x2A00, BIDI_ON  },  // N-ARY CIRCLED DOT OPERATOR
+  { 0x2A01, BIDI_ON  },  // N-ARY CIRCLED PLUS OPERATOR
+  { 0x2A02, BIDI_ON  },  // N-ARY CIRCLED TIMES OPERATOR
+  { 0x2A03, BIDI_ON  },  // N-ARY UNION OPERATOR WITH DOT
+  { 0x2A04, BIDI_ON  },  // N-ARY UNION OPERATOR WITH PLUS
+  { 0x2A05, BIDI_ON  },  // N-ARY SQUARE INTERSECTION OPERATOR
+  { 0x2A06, BIDI_ON  },  // N-ARY SQUARE UNION OPERATOR
+  { 0x2A07, BIDI_ON  },  // TWO LOGICAL AND OPERATOR
+  { 0x2A08, BIDI_ON  },  // TWO LOGICAL OR OPERATOR
+  { 0x2A09, BIDI_ON  },  // N-ARY TIMES OPERATOR
+  { 0x2A0A, BIDI_ON  },  // MODULO TWO SUM
+  { 0x2A0B, BIDI_ON  },  // SUMMATION WITH INTEGRAL
+  { 0x2A0C, BIDI_ON  },  // QUADRUPLE INTEGRAL OPERATOR
+  { 0x2A0D, BIDI_ON  },  // FINITE PART INTEGRAL
+  { 0x2A0E, BIDI_ON  },  // INTEGRAL WITH DOUBLE STROKE
+  { 0x2A0F, BIDI_ON  },  // INTEGRAL AVERAGE WITH SLASH
+  { 0x2A10, BIDI_ON  },  // CIRCULATION FUNCTION
+  { 0x2A11, BIDI_ON  },  // ANTICLOCKWISE INTEGRATION
+  { 0x2A12, BIDI_ON  },  // LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+  { 0x2A13, BIDI_ON  },  // LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+  { 0x2A14, BIDI_ON  },  // LINE INTEGRATION NOT INCLUDING THE POLE
+  { 0x2A15, BIDI_ON  },  // INTEGRAL AROUND A POINT OPERATOR
+  { 0x2A16, BIDI_ON  },  // QUATERNION INTEGRAL OPERATOR
+  { 0x2A17, BIDI_ON  },  // INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+  { 0x2A18, BIDI_ON  },  // INTEGRAL WITH TIMES SIGN
+  { 0x2A19, BIDI_ON  },  // INTEGRAL WITH INTERSECTION
+  { 0x2A1A, BIDI_ON  },  // INTEGRAL WITH UNION
+  { 0x2A1B, BIDI_ON  },  // INTEGRAL WITH OVERBAR
+  { 0x2A1C, BIDI_ON  },  // INTEGRAL WITH UNDERBAR
+  { 0x2A1D, BIDI_ON  },  // JOIN
+  { 0x2A1E, BIDI_ON  },  // LARGE LEFT TRIANGLE OPERATOR
+  { 0x2A1F, BIDI_ON  },  // Z NOTATION SCHEMA COMPOSITION
+  { 0x2A20, BIDI_ON  },  // Z NOTATION SCHEMA PIPING
+  { 0x2A21, BIDI_ON  },  // Z NOTATION SCHEMA PROJECTION
+  { 0x2A22, BIDI_ON  },  // PLUS SIGN WITH SMALL CIRCLE ABOVE
+  { 0x2A23, BIDI_ON  },  // PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+  { 0x2A24, BIDI_ON  },  // PLUS SIGN WITH TILDE ABOVE
+  { 0x2A25, BIDI_ON  },  // PLUS SIGN WITH DOT BELOW
+  { 0x2A26, BIDI_ON  },  // PLUS SIGN WITH TILDE BELOW
+  { 0x2A27, BIDI_ON  },  // PLUS SIGN WITH SUBSCRIPT TWO
+  { 0x2A28, BIDI_ON  },  // PLUS SIGN WITH BLACK TRIANGLE
+  { 0x2A29, BIDI_ON  },  // MINUS SIGN WITH COMMA ABOVE
+  { 0x2A2A, BIDI_ON  },  // MINUS SIGN WITH DOT BELOW
+  { 0x2A2B, BIDI_ON  },  // MINUS SIGN WITH FALLING DOTS
+  { 0x2A2C, BIDI_ON  },  // MINUS SIGN WITH RISING DOTS
+  { 0x2A2D, BIDI_ON  },  // PLUS SIGN IN LEFT HALF CIRCLE
+  { 0x2A2E, BIDI_ON  },  // PLUS SIGN IN RIGHT HALF CIRCLE
+  { 0x2A2F, BIDI_ON  },  // VECTOR OR CROSS PRODUCT
+  { 0x2A30, BIDI_ON  },  // MULTIPLICATION SIGN WITH DOT ABOVE
+  { 0x2A31, BIDI_ON  },  // MULTIPLICATION SIGN WITH UNDERBAR
+  { 0x2A32, BIDI_ON  },  // SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+  { 0x2A33, BIDI_ON  },  // SMASH PRODUCT
+  { 0x2A34, BIDI_ON  },  // MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+  { 0x2A35, BIDI_ON  },  // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+  { 0x2A36, BIDI_ON  },  // CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+  { 0x2A37, BIDI_ON  },  // MULTIPLICATION SIGN IN DOUBLE CIRCLE
+  { 0x2A38, BIDI_ON  },  // CIRCLED DIVISION SIGN
+  { 0x2A39, BIDI_ON  },  // PLUS SIGN IN TRIANGLE
+  { 0x2A3A, BIDI_ON  },  // MINUS SIGN IN TRIANGLE
+  { 0x2A3B, BIDI_ON  },  // MULTIPLICATION SIGN IN TRIANGLE
+  { 0x2A3C, BIDI_ON  },  // INTERIOR PRODUCT
+  { 0x2A3D, BIDI_ON  },  // RIGHTHAND INTERIOR PRODUCT
+  { 0x2A3E, BIDI_ON  },  // Z NOTATION RELATIONAL COMPOSITION
+  { 0x2A3F, BIDI_ON  },  // AMALGAMATION OR COPRODUCT
+  { 0x2A40, BIDI_ON  },  // INTERSECTION WITH DOT
+  { 0x2A41, BIDI_ON  },  // UNION WITH MINUS SIGN
+  { 0x2A42, BIDI_ON  },  // UNION WITH OVERBAR
+  { 0x2A43, BIDI_ON  },  // INTERSECTION WITH OVERBAR
+  { 0x2A44, BIDI_ON  },  // INTERSECTION WITH LOGICAL AND
+  { 0x2A45, BIDI_ON  },  // UNION WITH LOGICAL OR
+  { 0x2A46, BIDI_ON  },  // UNION ABOVE INTERSECTION
+  { 0x2A47, BIDI_ON  },  // INTERSECTION ABOVE UNION
+  { 0x2A48, BIDI_ON  },  // UNION ABOVE BAR ABOVE INTERSECTION
+  { 0x2A49, BIDI_ON  },  // INTERSECTION ABOVE BAR ABOVE UNION
+  { 0x2A4A, BIDI_ON  },  // UNION BESIDE AND JOINED WITH UNION
+  { 0x2A4B, BIDI_ON  },  // INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+  { 0x2A4C, BIDI_ON  },  // CLOSED UNION WITH SERIFS
+  { 0x2A4D, BIDI_ON  },  // CLOSED INTERSECTION WITH SERIFS
+  { 0x2A4E, BIDI_ON  },  // DOUBLE SQUARE INTERSECTION
+  { 0x2A4F, BIDI_ON  },  // DOUBLE SQUARE UNION
+  { 0x2A50, BIDI_ON  },  // CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+  { 0x2A51, BIDI_ON  },  // LOGICAL AND WITH DOT ABOVE
+  { 0x2A52, BIDI_ON  },  // LOGICAL OR WITH DOT ABOVE
+  { 0x2A53, BIDI_ON  },  // DOUBLE LOGICAL AND
+  { 0x2A54, BIDI_ON  },  // DOUBLE LOGICAL OR
+  { 0x2A55, BIDI_ON  },  // TWO INTERSECTING LOGICAL AND
+  { 0x2A56, BIDI_ON  },  // TWO INTERSECTING LOGICAL OR
+  { 0x2A57, BIDI_ON  },  // SLOPING LARGE OR
+  { 0x2A58, BIDI_ON  },  // SLOPING LARGE AND
+  { 0x2A59, BIDI_ON  },  // LOGICAL OR OVERLAPPING LOGICAL AND
+  { 0x2A5A, BIDI_ON  },  // LOGICAL AND WITH MIDDLE STEM
+  { 0x2A5B, BIDI_ON  },  // LOGICAL OR WITH MIDDLE STEM
+  { 0x2A5C, BIDI_ON  },  // LOGICAL AND WITH HORIZONTAL DASH
+  { 0x2A5D, BIDI_ON  },  // LOGICAL OR WITH HORIZONTAL DASH
+  { 0x2A5E, BIDI_ON  },  // LOGICAL AND WITH DOUBLE OVERBAR
+  { 0x2A5F, BIDI_ON  },  // LOGICAL AND WITH UNDERBAR
+  { 0x2A60, BIDI_ON  },  // LOGICAL AND WITH DOUBLE UNDERBAR
+  { 0x2A61, BIDI_ON  },  // SMALL VEE WITH UNDERBAR
+  { 0x2A62, BIDI_ON  },  // LOGICAL OR WITH DOUBLE OVERBAR
+  { 0x2A63, BIDI_ON  },  // LOGICAL OR WITH DOUBLE UNDERBAR
+  { 0x2A64, BIDI_ON  },  // Z NOTATION DOMAIN ANTIRESTRICTION
+  { 0x2A65, BIDI_ON  },  // Z NOTATION RANGE ANTIRESTRICTION
+  { 0x2A66, BIDI_ON  },  // EQUALS SIGN WITH DOT BELOW
+  { 0x2A67, BIDI_ON  },  // IDENTICAL WITH DOT ABOVE
+  { 0x2A68, BIDI_ON  },  // TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+  { 0x2A69, BIDI_ON  },  // TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+  { 0x2A6A, BIDI_ON  },  // TILDE OPERATOR WITH DOT ABOVE
+  { 0x2A6B, BIDI_ON  },  // TILDE OPERATOR WITH RISING DOTS
+  { 0x2A6C, BIDI_ON  },  // SIMILAR MINUS SIMILAR
+  { 0x2A6D, BIDI_ON  },  // CONGRUENT WITH DOT ABOVE
+  { 0x2A6E, BIDI_ON  },  // EQUALS WITH ASTERISK
+  { 0x2A6F, BIDI_ON  },  // ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+  { 0x2A70, BIDI_ON  },  // APPROXIMATELY EQUAL OR EQUAL TO
+  { 0x2A71, BIDI_ON  },  // EQUALS SIGN ABOVE PLUS SIGN
+  { 0x2A72, BIDI_ON  },  // PLUS SIGN ABOVE EQUALS SIGN
+  { 0x2A73, BIDI_ON  },  // EQUALS SIGN ABOVE TILDE OPERATOR
+  { 0x2A74, BIDI_ON  },  // DOUBLE COLON EQUAL
+  { 0x2A75, BIDI_ON  },  // TWO CONSECUTIVE EQUALS SIGNS
+  { 0x2A76, BIDI_ON  },  // THREE CONSECUTIVE EQUALS SIGNS
+  { 0x2A77, BIDI_ON  },  // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+  { 0x2A78, BIDI_ON  },  // EQUIVALENT WITH FOUR DOTS ABOVE
+  { 0x2A79, BIDI_ON  },  // LESS-THAN WITH CIRCLE INSIDE
+  { 0x2A7A, BIDI_ON  },  // GREATER-THAN WITH CIRCLE INSIDE
+  { 0x2A7B, BIDI_ON  },  // LESS-THAN WITH QUESTION MARK ABOVE
+  { 0x2A7C, BIDI_ON  },  // GREATER-THAN WITH QUESTION MARK ABOVE
+  { 0x2A7D, BIDI_ON  },  // LESS-THAN OR SLANTED EQUAL TO
+  { 0x2A7E, BIDI_ON  },  // GREATER-THAN OR SLANTED EQUAL TO
+  { 0x2A7F, BIDI_ON  },  // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+  { 0x2A80, BIDI_ON  },  // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+  { 0x2A81, BIDI_ON  },  // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+  { 0x2A82, BIDI_ON  },  // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+  { 0x2A83, BIDI_ON  },  // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+  { 0x2A84, BIDI_ON  },  // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+  { 0x2A85, BIDI_ON  },  // LESS-THAN OR APPROXIMATE
+  { 0x2A86, BIDI_ON  },  // GREATER-THAN OR APPROXIMATE
+  { 0x2A87, BIDI_ON  },  // LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+  { 0x2A88, BIDI_ON  },  // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+  { 0x2A89, BIDI_ON  },  // LESS-THAN AND NOT APPROXIMATE
+  { 0x2A8A, BIDI_ON  },  // GREATER-THAN AND NOT APPROXIMATE
+  { 0x2A8B, BIDI_ON  },  // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+  { 0x2A8C, BIDI_ON  },  // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+  { 0x2A8D, BIDI_ON  },  // LESS-THAN ABOVE SIMILAR OR EQUAL
+  { 0x2A8E, BIDI_ON  },  // GREATER-THAN ABOVE SIMILAR OR EQUAL
+  { 0x2A8F, BIDI_ON  },  // LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+  { 0x2A90, BIDI_ON  },  // GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+  { 0x2A91, BIDI_ON  },  // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+  { 0x2A92, BIDI_ON  },  // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+  { 0x2A93, BIDI_ON  },  // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+  { 0x2A94, BIDI_ON  },  // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+  { 0x2A95, BIDI_ON  },  // SLANTED EQUAL TO OR LESS-THAN
+  { 0x2A96, BIDI_ON  },  // SLANTED EQUAL TO OR GREATER-THAN
+  { 0x2A97, BIDI_ON  },  // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+  { 0x2A98, BIDI_ON  },  // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+  { 0x2A99, BIDI_ON  },  // DOUBLE-LINE EQUAL TO OR LESS-THAN
+  { 0x2A9A, BIDI_ON  },  // DOUBLE-LINE EQUAL TO OR GREATER-THAN
+  { 0x2A9B, BIDI_ON  },  // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+  { 0x2A9C, BIDI_ON  },  // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+  { 0x2A9D, BIDI_ON  },  // SIMILAR OR LESS-THAN
+  { 0x2A9E, BIDI_ON  },  // SIMILAR OR GREATER-THAN
+  { 0x2A9F, BIDI_ON  },  // SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+  { 0x2AA0, BIDI_ON  },  // SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+  { 0x2AA1, BIDI_ON  },  // DOUBLE NESTED LESS-THAN
+  { 0x2AA2, BIDI_ON  },  // DOUBLE NESTED GREATER-THAN
+  { 0x2AA3, BIDI_ON  },  // DOUBLE NESTED LESS-THAN WITH UNDERBAR
+  { 0x2AA4, BIDI_ON  },  // GREATER-THAN OVERLAPPING LESS-THAN
+  { 0x2AA5, BIDI_ON  },  // GREATER-THAN BESIDE LESS-THAN
+  { 0x2AA6, BIDI_ON  },  // LESS-THAN CLOSED BY CURVE
+  { 0x2AA7, BIDI_ON  },  // GREATER-THAN CLOSED BY CURVE
+  { 0x2AA8, BIDI_ON  },  // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+  { 0x2AA9, BIDI_ON  },  // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+  { 0x2AAA, BIDI_ON  },  // SMALLER THAN
+  { 0x2AAB, BIDI_ON  },  // LARGER THAN
+  { 0x2AAC, BIDI_ON  },  // SMALLER THAN OR EQUAL TO
+  { 0x2AAD, BIDI_ON  },  // LARGER THAN OR EQUAL TO
+  { 0x2AAE, BIDI_ON  },  // EQUALS SIGN WITH BUMPY ABOVE
+  { 0x2AAF, BIDI_ON  },  // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+  { 0x2AB0, BIDI_ON  },  // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+  { 0x2AB1, BIDI_ON  },  // PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+  { 0x2AB2, BIDI_ON  },  // SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+  { 0x2AB3, BIDI_ON  },  // PRECEDES ABOVE EQUALS SIGN
+  { 0x2AB4, BIDI_ON  },  // SUCCEEDS ABOVE EQUALS SIGN
+  { 0x2AB5, BIDI_ON  },  // PRECEDES ABOVE NOT EQUAL TO
+  { 0x2AB6, BIDI_ON  },  // SUCCEEDS ABOVE NOT EQUAL TO
+  { 0x2AB7, BIDI_ON  },  // PRECEDES ABOVE ALMOST EQUAL TO
+  { 0x2AB8, BIDI_ON  },  // SUCCEEDS ABOVE ALMOST EQUAL TO
+  { 0x2AB9, BIDI_ON  },  // PRECEDES ABOVE NOT ALMOST EQUAL TO
+  { 0x2ABA, BIDI_ON  },  // SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+  { 0x2ABB, BIDI_ON  },  // DOUBLE PRECEDES
+  { 0x2ABC, BIDI_ON  },  // DOUBLE SUCCEEDS
+  { 0x2ABD, BIDI_ON  },  // SUBSET WITH DOT
+  { 0x2ABE, BIDI_ON  },  // SUPERSET WITH DOT
+  { 0x2ABF, BIDI_ON  },  // SUBSET WITH PLUS SIGN BELOW
+  { 0x2AC0, BIDI_ON  },  // SUPERSET WITH PLUS SIGN BELOW
+  { 0x2AC1, BIDI_ON  },  // SUBSET WITH MULTIPLICATION SIGN BELOW
+  { 0x2AC2, BIDI_ON  },  // SUPERSET WITH MULTIPLICATION SIGN BELOW
+  { 0x2AC3, BIDI_ON  },  // SUBSET OF OR EQUAL TO WITH DOT ABOVE
+  { 0x2AC4, BIDI_ON  },  // SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+  { 0x2AC5, BIDI_ON  },  // SUBSET OF ABOVE EQUALS SIGN
+  { 0x2AC6, BIDI_ON  },  // SUPERSET OF ABOVE EQUALS SIGN
+  { 0x2AC7, BIDI_ON  },  // SUBSET OF ABOVE TILDE OPERATOR
+  { 0x2AC8, BIDI_ON  },  // SUPERSET OF ABOVE TILDE OPERATOR
+  { 0x2AC9, BIDI_ON  },  // SUBSET OF ABOVE ALMOST EQUAL TO
+  { 0x2ACA, BIDI_ON  },  // SUPERSET OF ABOVE ALMOST EQUAL TO
+  { 0x2ACB, BIDI_ON  },  // SUBSET OF ABOVE NOT EQUAL TO
+  { 0x2ACC, BIDI_ON  },  // SUPERSET OF ABOVE NOT EQUAL TO
+  { 0x2ACD, BIDI_ON  },  // SQUARE LEFT OPEN BOX OPERATOR
+  { 0x2ACE, BIDI_ON  },  // SQUARE RIGHT OPEN BOX OPERATOR
+  { 0x2ACF, BIDI_ON  },  // CLOSED SUBSET
+  { 0x2AD0, BIDI_ON  },  // CLOSED SUPERSET
+  { 0x2AD1, BIDI_ON  },  // CLOSED SUBSET OR EQUAL TO
+  { 0x2AD2, BIDI_ON  },  // CLOSED SUPERSET OR EQUAL TO
+  { 0x2AD3, BIDI_ON  },  // SUBSET ABOVE SUPERSET
+  { 0x2AD4, BIDI_ON  },  // SUPERSET ABOVE SUBSET
+  { 0x2AD5, BIDI_ON  },  // SUBSET ABOVE SUBSET
+  { 0x2AD6, BIDI_ON  },  // SUPERSET ABOVE SUPERSET
+  { 0x2AD7, BIDI_ON  },  // SUPERSET BESIDE SUBSET
+  { 0x2AD8, BIDI_ON  },  // SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+  { 0x2AD9, BIDI_ON  },  // ELEMENT OF OPENING DOWNWARDS
+  { 0x2ADA, BIDI_ON  },  // PITCHFORK WITH TEE TOP
+  { 0x2ADB, BIDI_ON  },  // TRANSVERSAL INTERSECTION
+  { 0x2ADC, BIDI_ON  },  // FORKING
+  { 0x2ADD, BIDI_ON  },  // NONFORKING
+  { 0x2ADE, BIDI_ON  },  // SHORT LEFT TACK
+  { 0x2ADF, BIDI_ON  },  // SHORT DOWN TACK
+  { 0x2AE0, BIDI_ON  },  // SHORT UP TACK
+  { 0x2AE1, BIDI_ON  },  // PERPENDICULAR WITH S
+  { 0x2AE2, BIDI_ON  },  // VERTICAL BAR TRIPLE RIGHT TURNSTILE
+  { 0x2AE3, BIDI_ON  },  // DOUBLE VERTICAL BAR LEFT TURNSTILE
+  { 0x2AE4, BIDI_ON  },  // VERTICAL BAR DOUBLE LEFT TURNSTILE
+  { 0x2AE5, BIDI_ON  },  // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+  { 0x2AE6, BIDI_ON  },  // LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+  { 0x2AE7, BIDI_ON  },  // SHORT DOWN TACK WITH OVERBAR
+  { 0x2AE8, BIDI_ON  },  // SHORT UP TACK WITH UNDERBAR
+  { 0x2AE9, BIDI_ON  },  // SHORT UP TACK ABOVE SHORT DOWN TACK
+  { 0x2AEA, BIDI_ON  },  // DOUBLE DOWN TACK
+  { 0x2AEB, BIDI_ON  },  // DOUBLE UP TACK
+  { 0x2AEC, BIDI_ON  },  // DOUBLE STROKE NOT SIGN
+  { 0x2AED, BIDI_ON  },  // REVERSED DOUBLE STROKE NOT SIGN
+  { 0x2AEE, BIDI_ON  },  // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+  { 0x2AEF, BIDI_ON  },  // VERTICAL LINE WITH CIRCLE ABOVE
+  { 0x2AF0, BIDI_ON  },  // VERTICAL LINE WITH CIRCLE BELOW
+  { 0x2AF1, BIDI_ON  },  // DOWN TACK WITH CIRCLE BELOW
+  { 0x2AF2, BIDI_ON  },  // PARALLEL WITH HORIZONTAL STROKE
+  { 0x2AF3, BIDI_ON  },  // PARALLEL WITH TILDE OPERATOR
+  { 0x2AF4, BIDI_ON  },  // TRIPLE VERTICAL BAR BINARY RELATION
+  { 0x2AF5, BIDI_ON  },  // TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+  { 0x2AF6, BIDI_ON  },  // TRIPLE COLON OPERATOR
+  { 0x2AF7, BIDI_ON  },  // TRIPLE NESTED LESS-THAN
+  { 0x2AF8, BIDI_ON  },  // TRIPLE NESTED GREATER-THAN
+  { 0x2AF9, BIDI_ON  },  // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+  { 0x2AFA, BIDI_ON  },  // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+  { 0x2AFB, BIDI_ON  },  // TRIPLE SOLIDUS BINARY RELATION
+  { 0x2AFC, BIDI_ON  },  // LARGE TRIPLE VERTICAL BAR OPERATOR
+  { 0x2AFD, BIDI_ON  },  // DOUBLE SOLIDUS OPERATOR
+  { 0x2AFE, BIDI_ON  },  // WHITE VERTICAL BAR
+  { 0x2AFF, BIDI_ON  },  // N-ARY WHITE VERTICAL BAR
+  { 0x2B00, BIDI_ON  },  // NORTH EAST WHITE ARROW
+  { 0x2B01, BIDI_ON  },  // NORTH WEST WHITE ARROW
+  { 0x2B02, BIDI_ON  },  // SOUTH EAST WHITE ARROW
+  { 0x2B03, BIDI_ON  },  // SOUTH WEST WHITE ARROW
+  { 0x2B04, BIDI_ON  },  // LEFT RIGHT WHITE ARROW
+  { 0x2B05, BIDI_ON  },  // LEFTWARDS BLACK ARROW
+  { 0x2B06, BIDI_ON  },  // UPWARDS BLACK ARROW
+  { 0x2B07, BIDI_ON  },  // DOWNWARDS BLACK ARROW
+  { 0x2B08, BIDI_ON  },  // NORTH EAST BLACK ARROW
+  { 0x2B09, BIDI_ON  },  // NORTH WEST BLACK ARROW
+  { 0x2B0A, BIDI_ON  },  // SOUTH EAST BLACK ARROW
+  { 0x2B0B, BIDI_ON  },  // SOUTH WEST BLACK ARROW
+  { 0x2B0C, BIDI_ON  },  // LEFT RIGHT BLACK ARROW
+  { 0x2B0D, BIDI_ON  },  // UP DOWN BLACK ARROW
+  { 0x2B0E, BIDI_ON  },  // RIGHTWARDS ARROW WITH TIP DOWNWARDS
+  { 0x2B0F, BIDI_ON  },  // RIGHTWARDS ARROW WITH TIP UPWARDS
+  { 0x2B10, BIDI_ON  },  // LEFTWARDS ARROW WITH TIP DOWNWARDS
+  { 0x2B11, BIDI_ON  },  // LEFTWARDS ARROW WITH TIP UPWARDS
+  { 0x2B12, BIDI_ON  },  // SQUARE WITH TOP HALF BLACK
+  { 0x2B13, BIDI_ON  },  // SQUARE WITH BOTTOM HALF BLACK
+  { 0x2B14, BIDI_ON  },  // SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK
+  { 0x2B15, BIDI_ON  },  // SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK
+  { 0x2B16, BIDI_ON  },  // DIAMOND WITH LEFT HALF BLACK
+  { 0x2B17, BIDI_ON  },  // DIAMOND WITH RIGHT HALF BLACK
+  { 0x2B18, BIDI_ON  },  // DIAMOND WITH TOP HALF BLACK
+  { 0x2B19, BIDI_ON  },  // DIAMOND WITH BOTTOM HALF BLACK
+  { 0x2B1A, BIDI_ON  },  // DOTTED SQUARE
+  { 0x2B1B, BIDI_ON  },  // BLACK LARGE SQUARE
+  { 0x2B1C, BIDI_ON  },  // WHITE LARGE SQUARE
+  { 0x2B1D, BIDI_ON  },  // BLACK VERY SMALL SQUARE
+  { 0x2B1E, BIDI_ON  },  // WHITE VERY SMALL SQUARE
+  { 0x2B1F, BIDI_ON  },  // BLACK PENTAGON
+  { 0x2B20, BIDI_ON  },  // WHITE PENTAGON
+  { 0x2B21, BIDI_ON  },  // WHITE HEXAGON
+  { 0x2B22, BIDI_ON  },  // BLACK HEXAGON
+  { 0x2B23, BIDI_ON  },  // HORIZONTAL BLACK HEXAGON
+  { 0x2B24, BIDI_ON  },  // BLACK LARGE CIRCLE
+  { 0x2B25, BIDI_ON  },  // BLACK MEDIUM DIAMOND
+  { 0x2B26, BIDI_ON  },  // WHITE MEDIUM DIAMOND
+  { 0x2B27, BIDI_ON  },  // BLACK MEDIUM LOZENGE
+  { 0x2B28, BIDI_ON  },  // WHITE MEDIUM LOZENGE
+  { 0x2B29, BIDI_ON  },  // BLACK SMALL DIAMOND
+  { 0x2B2A, BIDI_ON  },  // BLACK SMALL LOZENGE
+  { 0x2B2B, BIDI_ON  },  // WHITE SMALL LOZENGE
+  { 0x2B2C, BIDI_ON  },  // BLACK HORIZONTAL ELLIPSE
+  { 0x2B2D, BIDI_ON  },  // WHITE HORIZONTAL ELLIPSE
+  { 0x2B2E, BIDI_ON  },  // BLACK VERTICAL ELLIPSE
+  { 0x2B2F, BIDI_ON  },  // WHITE VERTICAL ELLIPSE
+  { 0x2B30, BIDI_ON  },  // LEFT ARROW WITH SMALL CIRCLE
+  { 0x2B31, BIDI_ON  },  // THREE LEFTWARDS ARROWS
+  { 0x2B32, BIDI_ON  },  // LEFT ARROW WITH CIRCLED PLUS
+  { 0x2B33, BIDI_ON  },  // LONG LEFTWARDS SQUIGGLE ARROW
+  { 0x2B34, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+  { 0x2B35, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+  { 0x2B36, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW FROM BAR
+  { 0x2B37, BIDI_ON  },  // LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
+  { 0x2B38, BIDI_ON  },  // LEFTWARDS ARROW WITH DOTTED STEM
+  { 0x2B39, BIDI_ON  },  // LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+  { 0x2B3A, BIDI_ON  },  // LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+  { 0x2B3B, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH TAIL
+  { 0x2B3C, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+  { 0x2B3D, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+  { 0x2B3E, BIDI_ON  },  // LEFTWARDS ARROW THROUGH X
+  { 0x2B3F, BIDI_ON  },  // WAVE ARROW POINTING DIRECTLY LEFT
+  { 0x2B40, BIDI_ON  },  // EQUALS SIGN ABOVE LEFTWARDS ARROW
+  { 0x2B41, BIDI_ON  },  // REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW
+  { 0x2B42, BIDI_ON  },  // LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+  { 0x2B43, BIDI_ON  },  // RIGHTWARDS ARROW THROUGH GREATER-THAN
+  { 0x2B44, BIDI_ON  },  // RIGHTWARDS ARROW THROUGH SUPERSET
+  { 0x2B45, BIDI_ON  },  // LEFTWARDS QUADRUPLE ARROW
+  { 0x2B46, BIDI_ON  },  // RIGHTWARDS QUADRUPLE ARROW
+  { 0x2B47, BIDI_ON  },  // REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+  { 0x2B48, BIDI_ON  },  // RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+  { 0x2B49, BIDI_ON  },  // TILDE OPERATOR ABOVE LEFTWARDS ARROW
+  { 0x2B4A, BIDI_ON  },  // LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
+  { 0x2B4B, BIDI_ON  },  // LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+  { 0x2B4C, BIDI_ON  },  // RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+  { 0x2B4D, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW
+  { 0x2B4E, BIDI_ON  },  // SHORT SLANTED NORTH ARROW
+  { 0x2B4F, BIDI_ON  },  // SHORT BACKSLANTED SOUTH ARROW
+  { 0x2B50, BIDI_ON  },  // WHITE MEDIUM STAR
+  { 0x2B51, BIDI_ON  },  // BLACK SMALL STAR
+  { 0x2B52, BIDI_ON  },  // WHITE SMALL STAR
+  { 0x2B53, BIDI_ON  },  // BLACK RIGHT-POINTING PENTAGON
+  { 0x2B54, BIDI_ON  },  // WHITE RIGHT-POINTING PENTAGON
+  { 0x2B55, BIDI_ON  },  // HEAVY LARGE CIRCLE
+  { 0x2B56, BIDI_ON  },  // HEAVY OVAL WITH OVAL INSIDE
+  { 0x2B57, BIDI_ON  },  // HEAVY CIRCLE WITH CIRCLE INSIDE
+  { 0x2B58, BIDI_ON  },  // HEAVY CIRCLE
+  { 0x2B59, BIDI_ON  },  // HEAVY CIRCLED SALTIRE
+  { 0x2B5A, BIDI_ON  },  // SLANTED NORTH ARROW WITH HOOKED HEAD
+  { 0x2B5B, BIDI_ON  },  // BACKSLANTED SOUTH ARROW WITH HOOKED TAIL
+  { 0x2B5C, BIDI_ON  },  // SLANTED NORTH ARROW WITH HORIZONTAL TAIL
+  { 0x2B5D, BIDI_ON  },  // BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL
+  { 0x2B5E, BIDI_ON  },  // BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+  { 0x2B5F, BIDI_ON  },  // SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+  { 0x2B60, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW
+  { 0x2B61, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW
+  { 0x2B62, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW
+  { 0x2B63, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW
+  { 0x2B64, BIDI_ON  },  // LEFT RIGHT TRIANGLE-HEADED ARROW
+  { 0x2B65, BIDI_ON  },  // UP DOWN TRIANGLE-HEADED ARROW
+  { 0x2B66, BIDI_ON  },  // NORTH WEST TRIANGLE-HEADED ARROW
+  { 0x2B67, BIDI_ON  },  // NORTH EAST TRIANGLE-HEADED ARROW
+  { 0x2B68, BIDI_ON  },  // SOUTH EAST TRIANGLE-HEADED ARROW
+  { 0x2B69, BIDI_ON  },  // SOUTH WEST TRIANGLE-HEADED ARROW
+  { 0x2B6A, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED DASHED ARROW
+  { 0x2B6B, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED DASHED ARROW
+  { 0x2B6C, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED DASHED ARROW
+  { 0x2B6D, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED DASHED ARROW
+  { 0x2B6E, BIDI_ON  },  // CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+  { 0x2B6F, BIDI_ON  },  // ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+  { 0x2B70, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B71, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B72, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B73, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B76, BIDI_ON  },  // NORTH WEST TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B77, BIDI_ON  },  // NORTH EAST TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B78, BIDI_ON  },  // SOUTH EAST TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B79, BIDI_ON  },  // SOUTH WEST TRIANGLE-HEADED ARROW TO BAR
+  { 0x2B7A, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+  { 0x2B7B, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+  { 0x2B7C, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+  { 0x2B7D, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+  { 0x2B7E, BIDI_ON  },  // HORIZONTAL TAB KEY
+  { 0x2B7F, BIDI_ON  },  // VERTICAL TAB KEY
+  { 0x2B80, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW
+  { 0x2B81, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW
+  { 0x2B82, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW
+  { 0x2B83, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW
+  { 0x2B84, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
+  { 0x2B85, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED PAIRED ARROWS
+  { 0x2B86, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS
+  { 0x2B87, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS
+  { 0x2B88, BIDI_ON  },  // LEFTWARDS BLACK CIRCLED WHITE ARROW
+  { 0x2B89, BIDI_ON  },  // UPWARDS BLACK CIRCLED WHITE ARROW
+  { 0x2B8A, BIDI_ON  },  // RIGHTWARDS BLACK CIRCLED WHITE ARROW
+  { 0x2B8B, BIDI_ON  },  // DOWNWARDS BLACK CIRCLED WHITE ARROW
+  { 0x2B8C, BIDI_ON  },  // ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW
+  { 0x2B8D, BIDI_ON  },  // ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW
+  { 0x2B8E, BIDI_ON  },  // ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW
+  { 0x2B8F, BIDI_ON  },  // ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW
+  { 0x2B90, BIDI_ON  },  // RETURN LEFT
+  { 0x2B91, BIDI_ON  },  // RETURN RIGHT
+  { 0x2B92, BIDI_ON  },  // NEWLINE LEFT
+  { 0x2B93, BIDI_ON  },  // NEWLINE RIGHT
+  { 0x2B94, BIDI_ON  },  // FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE
+  { 0x2B95, BIDI_ON  },  // RIGHTWARDS BLACK ARROW
+  { 0x2B98, BIDI_ON  },  // THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
+  { 0x2B99, BIDI_ON  },  // THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9A, BIDI_ON  },  // THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9B, BIDI_ON  },  // THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9C, BIDI_ON  },  // BLACK LEFTWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9D, BIDI_ON  },  // BLACK UPWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9E, BIDI_ON  },  // BLACK RIGHTWARDS EQUILATERAL ARROWHEAD
+  { 0x2B9F, BIDI_ON  },  // BLACK DOWNWARDS EQUILATERAL ARROWHEAD
+  { 0x2BA0, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+  { 0x2BA1, BIDI_ON  },  // DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+  { 0x2BA2, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+  { 0x2BA3, BIDI_ON  },  // UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+  { 0x2BA4, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+  { 0x2BA5, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+  { 0x2BA6, BIDI_ON  },  // LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+  { 0x2BA7, BIDI_ON  },  // RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+  { 0x2BA8, BIDI_ON  },  // BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW
+  { 0x2BA9, BIDI_ON  },  // BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+  { 0x2BAA, BIDI_ON  },  // BLACK CURVED UPWARDS AND LEFTWARDS ARROW
+  { 0x2BAB, BIDI_ON  },  // BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+  { 0x2BAC, BIDI_ON  },  // BLACK CURVED LEFTWARDS AND UPWARDS ARROW
+  { 0x2BAD, BIDI_ON  },  // BLACK CURVED RIGHTWARDS AND UPWARDS ARROW
+  { 0x2BAE, BIDI_ON  },  // BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW
+  { 0x2BAF, BIDI_ON  },  // BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW
+  { 0x2BB0, BIDI_ON  },  // RIBBON ARROW DOWN LEFT
+  { 0x2BB1, BIDI_ON  },  // RIBBON ARROW DOWN RIGHT
+  { 0x2BB2, BIDI_ON  },  // RIBBON ARROW UP LEFT
+  { 0x2BB3, BIDI_ON  },  // RIBBON ARROW UP RIGHT
+  { 0x2BB4, BIDI_ON  },  // RIBBON ARROW LEFT UP
+  { 0x2BB5, BIDI_ON  },  // RIBBON ARROW RIGHT UP
+  { 0x2BB6, BIDI_ON  },  // RIBBON ARROW LEFT DOWN
+  { 0x2BB7, BIDI_ON  },  // RIBBON ARROW RIGHT DOWN
+  { 0x2BB8, BIDI_ON  },  // UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR
+  { 0x2BB9, BIDI_ON  },  // UP ARROWHEAD IN A RECTANGLE BOX
+  { 0x2BBD, BIDI_ON  },  // BALLOT BOX WITH LIGHT X
+  { 0x2BBE, BIDI_ON  },  // CIRCLED X
+  { 0x2BBF, BIDI_ON  },  // CIRCLED BOLD X
+  { 0x2BC0, BIDI_ON  },  // BLACK SQUARE CENTRED
+  { 0x2BC1, BIDI_ON  },  // BLACK DIAMOND CENTRED
+  { 0x2BC2, BIDI_ON  },  // TURNED BLACK PENTAGON
+  { 0x2BC3, BIDI_ON  },  // HORIZONTAL BLACK OCTAGON
+  { 0x2BC4, BIDI_ON  },  // BLACK OCTAGON
+  { 0x2BC5, BIDI_ON  },  // BLACK MEDIUM UP-POINTING TRIANGLE CENTRED
+  { 0x2BC6, BIDI_ON  },  // BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED
+  { 0x2BC7, BIDI_ON  },  // BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED
+  { 0x2BC8, BIDI_ON  },  // BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+  { 0x2BCA, BIDI_ON  },  // TOP HALF BLACK CIRCLE
+  { 0x2BCB, BIDI_ON  },  // BOTTOM HALF BLACK CIRCLE
+  { 0x2BCC, BIDI_ON  },  // LIGHT FOUR POINTED BLACK CUSP
+  { 0x2BCD, BIDI_ON  },  // ROTATED LIGHT FOUR POINTED BLACK CUSP
+  { 0x2BCE, BIDI_ON  },  // WHITE FOUR POINTED CUSP
+  { 0x2BCF, BIDI_ON  },  // ROTATED WHITE FOUR POINTED CUSP
+  { 0x2BD0, BIDI_ON  },  // SQUARE POSITION INDICATOR
+  { 0x2BD1, BIDI_ON  },  // UNCERTAINTY SIGN
+  { 0x2BEC, BIDI_ON  },  // LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+  { 0x2BED, BIDI_ON  },  // UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+  { 0x2BEE, BIDI_ON  },  // RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+  { 0x2BEF, BIDI_ON  },  // DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+  { 0x2C00, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER AZU
+  { 0x2C01, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER BUKY
+  { 0x2C02, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER VEDE
+  { 0x2C03, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER GLAGOLI
+  { 0x2C04, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER DOBRO
+  { 0x2C05, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YESTU
+  { 0x2C06, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER ZHIVETE
+  { 0x2C07, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER DZELO
+  { 0x2C08, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER ZEMLJA
+  { 0x2C09, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER IZHE
+  { 0x2C0A, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+  { 0x2C0B, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER I
+  { 0x2C0C, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER DJERVI
+  { 0x2C0D, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER KAKO
+  { 0x2C0E, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER LJUDIJE
+  { 0x2C0F, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER MYSLITE
+  { 0x2C10, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER NASHI
+  { 0x2C11, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER ONU
+  { 0x2C12, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER POKOJI
+  { 0x2C13, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER RITSI
+  { 0x2C14, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SLOVO
+  { 0x2C15, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER TVRIDO
+  { 0x2C16, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER UKU
+  { 0x2C17, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER FRITU
+  { 0x2C18, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER HERU
+  { 0x2C19, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER OTU
+  { 0x2C1A, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER PE
+  { 0x2C1B, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SHTA
+  { 0x2C1C, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER TSI
+  { 0x2C1D, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER CHRIVI
+  { 0x2C1E, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SHA
+  { 0x2C1F, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YERU
+  { 0x2C20, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YERI
+  { 0x2C21, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YATI
+  { 0x2C22, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SPIDERY HA
+  { 0x2C23, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YU
+  { 0x2C24, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SMALL YUS
+  { 0x2C25, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+  { 0x2C26, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER YO
+  { 0x2C27, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+  { 0x2C28, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER BIG YUS
+  { 0x2C29, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+  { 0x2C2A, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER FITA
+  { 0x2C2B, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER IZHITSA
+  { 0x2C2C, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER SHTAPIC
+  { 0x2C2D, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+  { 0x2C2E, BIDI_L   },  // GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+  { 0x2C30, BIDI_L   },  // GLAGOLITIC SMALL LETTER AZU
+  { 0x2C31, BIDI_L   },  // GLAGOLITIC SMALL LETTER BUKY
+  { 0x2C32, BIDI_L   },  // GLAGOLITIC SMALL LETTER VEDE
+  { 0x2C33, BIDI_L   },  // GLAGOLITIC SMALL LETTER GLAGOLI
+  { 0x2C34, BIDI_L   },  // GLAGOLITIC SMALL LETTER DOBRO
+  { 0x2C35, BIDI_L   },  // GLAGOLITIC SMALL LETTER YESTU
+  { 0x2C36, BIDI_L   },  // GLAGOLITIC SMALL LETTER ZHIVETE
+  { 0x2C37, BIDI_L   },  // GLAGOLITIC SMALL LETTER DZELO
+  { 0x2C38, BIDI_L   },  // GLAGOLITIC SMALL LETTER ZEMLJA
+  { 0x2C39, BIDI_L   },  // GLAGOLITIC SMALL LETTER IZHE
+  { 0x2C3A, BIDI_L   },  // GLAGOLITIC SMALL LETTER INITIAL IZHE
+  { 0x2C3B, BIDI_L   },  // GLAGOLITIC SMALL LETTER I
+  { 0x2C3C, BIDI_L   },  // GLAGOLITIC SMALL LETTER DJERVI
+  { 0x2C3D, BIDI_L   },  // GLAGOLITIC SMALL LETTER KAKO
+  { 0x2C3E, BIDI_L   },  // GLAGOLITIC SMALL LETTER LJUDIJE
+  { 0x2C3F, BIDI_L   },  // GLAGOLITIC SMALL LETTER MYSLITE
+  { 0x2C40, BIDI_L   },  // GLAGOLITIC SMALL LETTER NASHI
+  { 0x2C41, BIDI_L   },  // GLAGOLITIC SMALL LETTER ONU
+  { 0x2C42, BIDI_L   },  // GLAGOLITIC SMALL LETTER POKOJI
+  { 0x2C43, BIDI_L   },  // GLAGOLITIC SMALL LETTER RITSI
+  { 0x2C44, BIDI_L   },  // GLAGOLITIC SMALL LETTER SLOVO
+  { 0x2C45, BIDI_L   },  // GLAGOLITIC SMALL LETTER TVRIDO
+  { 0x2C46, BIDI_L   },  // GLAGOLITIC SMALL LETTER UKU
+  { 0x2C47, BIDI_L   },  // GLAGOLITIC SMALL LETTER FRITU
+  { 0x2C48, BIDI_L   },  // GLAGOLITIC SMALL LETTER HERU
+  { 0x2C49, BIDI_L   },  // GLAGOLITIC SMALL LETTER OTU
+  { 0x2C4A, BIDI_L   },  // GLAGOLITIC SMALL LETTER PE
+  { 0x2C4B, BIDI_L   },  // GLAGOLITIC SMALL LETTER SHTA
+  { 0x2C4C, BIDI_L   },  // GLAGOLITIC SMALL LETTER TSI
+  { 0x2C4D, BIDI_L   },  // GLAGOLITIC SMALL LETTER CHRIVI
+  { 0x2C4E, BIDI_L   },  // GLAGOLITIC SMALL LETTER SHA
+  { 0x2C4F, BIDI_L   },  // GLAGOLITIC SMALL LETTER YERU
+  { 0x2C50, BIDI_L   },  // GLAGOLITIC SMALL LETTER YERI
+  { 0x2C51, BIDI_L   },  // GLAGOLITIC SMALL LETTER YATI
+  { 0x2C52, BIDI_L   },  // GLAGOLITIC SMALL LETTER SPIDERY HA
+  { 0x2C53, BIDI_L   },  // GLAGOLITIC SMALL LETTER YU
+  { 0x2C54, BIDI_L   },  // GLAGOLITIC SMALL LETTER SMALL YUS
+  { 0x2C55, BIDI_L   },  // GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+  { 0x2C56, BIDI_L   },  // GLAGOLITIC SMALL LETTER YO
+  { 0x2C57, BIDI_L   },  // GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+  { 0x2C58, BIDI_L   },  // GLAGOLITIC SMALL LETTER BIG YUS
+  { 0x2C59, BIDI_L   },  // GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+  { 0x2C5A, BIDI_L   },  // GLAGOLITIC SMALL LETTER FITA
+  { 0x2C5B, BIDI_L   },  // GLAGOLITIC SMALL LETTER IZHITSA
+  { 0x2C5C, BIDI_L   },  // GLAGOLITIC SMALL LETTER SHTAPIC
+  { 0x2C5D, BIDI_L   },  // GLAGOLITIC SMALL LETTER TROKUTASTI A
+  { 0x2C5E, BIDI_L   },  // GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+  { 0x2C60, BIDI_L   },  // LATIN CAPITAL LETTER L WITH DOUBLE BAR
+  { 0x2C61, BIDI_L   },  // LATIN SMALL LETTER L WITH DOUBLE BAR
+  { 0x2C62, BIDI_L   },  // LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+  { 0x2C63, BIDI_L   },  // LATIN CAPITAL LETTER P WITH STROKE
+  { 0x2C64, BIDI_L   },  // LATIN CAPITAL LETTER R WITH TAIL
+  { 0x2C65, BIDI_L   },  // LATIN SMALL LETTER A WITH STROKE
+  { 0x2C66, BIDI_L   },  // LATIN SMALL LETTER T WITH DIAGONAL STROKE
+  { 0x2C67, BIDI_L   },  // LATIN CAPITAL LETTER H WITH DESCENDER
+  { 0x2C68, BIDI_L   },  // LATIN SMALL LETTER H WITH DESCENDER
+  { 0x2C69, BIDI_L   },  // LATIN CAPITAL LETTER K WITH DESCENDER
+  { 0x2C6A, BIDI_L   },  // LATIN SMALL LETTER K WITH DESCENDER
+  { 0x2C6B, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH DESCENDER
+  { 0x2C6C, BIDI_L   },  // LATIN SMALL LETTER Z WITH DESCENDER
+  { 0x2C6D, BIDI_L   },  // LATIN CAPITAL LETTER ALPHA
+  { 0x2C6E, BIDI_L   },  // LATIN CAPITAL LETTER M WITH HOOK
+  { 0x2C6F, BIDI_L   },  // LATIN CAPITAL LETTER TURNED A
+  { 0x2C70, BIDI_L   },  // LATIN CAPITAL LETTER TURNED ALPHA
+  { 0x2C71, BIDI_L   },  // LATIN SMALL LETTER V WITH RIGHT HOOK
+  { 0x2C72, BIDI_L   },  // LATIN CAPITAL LETTER W WITH HOOK
+  { 0x2C73, BIDI_L   },  // LATIN SMALL LETTER W WITH HOOK
+  { 0x2C74, BIDI_L   },  // LATIN SMALL LETTER V WITH CURL
+  { 0x2C75, BIDI_L   },  // LATIN CAPITAL LETTER HALF H
+  { 0x2C76, BIDI_L   },  // LATIN SMALL LETTER HALF H
+  { 0x2C77, BIDI_L   },  // LATIN SMALL LETTER TAILLESS PHI
+  { 0x2C78, BIDI_L   },  // LATIN SMALL LETTER E WITH NOTCH
+  { 0x2C79, BIDI_L   },  // LATIN SMALL LETTER TURNED R WITH TAIL
+  { 0x2C7A, BIDI_L   },  // LATIN SMALL LETTER O WITH LOW RING INSIDE
+  { 0x2C7B, BIDI_L   },  // LATIN LETTER SMALL CAPITAL TURNED E
+  { 0x2C7C, BIDI_L   },  // LATIN SUBSCRIPT SMALL LETTER J
+  { 0x2C7D, BIDI_L   },  // MODIFIER LETTER CAPITAL V
+  { 0x2C7E, BIDI_L   },  // LATIN CAPITAL LETTER S WITH SWASH TAIL
+  { 0x2C7F, BIDI_L   },  // LATIN CAPITAL LETTER Z WITH SWASH TAIL
+  { 0x2C80, BIDI_L   },  // COPTIC CAPITAL LETTER ALFA
+  { 0x2C81, BIDI_L   },  // COPTIC SMALL LETTER ALFA
+  { 0x2C82, BIDI_L   },  // COPTIC CAPITAL LETTER VIDA
+  { 0x2C83, BIDI_L   },  // COPTIC SMALL LETTER VIDA
+  { 0x2C84, BIDI_L   },  // COPTIC CAPITAL LETTER GAMMA
+  { 0x2C85, BIDI_L   },  // COPTIC SMALL LETTER GAMMA
+  { 0x2C86, BIDI_L   },  // COPTIC CAPITAL LETTER DALDA
+  { 0x2C87, BIDI_L   },  // COPTIC SMALL LETTER DALDA
+  { 0x2C88, BIDI_L   },  // COPTIC CAPITAL LETTER EIE
+  { 0x2C89, BIDI_L   },  // COPTIC SMALL LETTER EIE
+  { 0x2C8A, BIDI_L   },  // COPTIC CAPITAL LETTER SOU
+  { 0x2C8B, BIDI_L   },  // COPTIC SMALL LETTER SOU
+  { 0x2C8C, BIDI_L   },  // COPTIC CAPITAL LETTER ZATA
+  { 0x2C8D, BIDI_L   },  // COPTIC SMALL LETTER ZATA
+  { 0x2C8E, BIDI_L   },  // COPTIC CAPITAL LETTER HATE
+  { 0x2C8F, BIDI_L   },  // COPTIC SMALL LETTER HATE
+  { 0x2C90, BIDI_L   },  // COPTIC CAPITAL LETTER THETHE
+  { 0x2C91, BIDI_L   },  // COPTIC SMALL LETTER THETHE
+  { 0x2C92, BIDI_L   },  // COPTIC CAPITAL LETTER IAUDA
+  { 0x2C93, BIDI_L   },  // COPTIC SMALL LETTER IAUDA
+  { 0x2C94, BIDI_L   },  // COPTIC CAPITAL LETTER KAPA
+  { 0x2C95, BIDI_L   },  // COPTIC SMALL LETTER KAPA
+  { 0x2C96, BIDI_L   },  // COPTIC CAPITAL LETTER LAULA
+  { 0x2C97, BIDI_L   },  // COPTIC SMALL LETTER LAULA
+  { 0x2C98, BIDI_L   },  // COPTIC CAPITAL LETTER MI
+  { 0x2C99, BIDI_L   },  // COPTIC SMALL LETTER MI
+  { 0x2C9A, BIDI_L   },  // COPTIC CAPITAL LETTER NI
+  { 0x2C9B, BIDI_L   },  // COPTIC SMALL LETTER NI
+  { 0x2C9C, BIDI_L   },  // COPTIC CAPITAL LETTER KSI
+  { 0x2C9D, BIDI_L   },  // COPTIC SMALL LETTER KSI
+  { 0x2C9E, BIDI_L   },  // COPTIC CAPITAL LETTER O
+  { 0x2C9F, BIDI_L   },  // COPTIC SMALL LETTER O
+  { 0x2CA0, BIDI_L   },  // COPTIC CAPITAL LETTER PI
+  { 0x2CA1, BIDI_L   },  // COPTIC SMALL LETTER PI
+  { 0x2CA2, BIDI_L   },  // COPTIC CAPITAL LETTER RO
+  { 0x2CA3, BIDI_L   },  // COPTIC SMALL LETTER RO
+  { 0x2CA4, BIDI_L   },  // COPTIC CAPITAL LETTER SIMA
+  { 0x2CA5, BIDI_L   },  // COPTIC SMALL LETTER SIMA
+  { 0x2CA6, BIDI_L   },  // COPTIC CAPITAL LETTER TAU
+  { 0x2CA7, BIDI_L   },  // COPTIC SMALL LETTER TAU
+  { 0x2CA8, BIDI_L   },  // COPTIC CAPITAL LETTER UA
+  { 0x2CA9, BIDI_L   },  // COPTIC SMALL LETTER UA
+  { 0x2CAA, BIDI_L   },  // COPTIC CAPITAL LETTER FI
+  { 0x2CAB, BIDI_L   },  // COPTIC SMALL LETTER FI
+  { 0x2CAC, BIDI_L   },  // COPTIC CAPITAL LETTER KHI
+  { 0x2CAD, BIDI_L   },  // COPTIC SMALL LETTER KHI
+  { 0x2CAE, BIDI_L   },  // COPTIC CAPITAL LETTER PSI
+  { 0x2CAF, BIDI_L   },  // COPTIC SMALL LETTER PSI
+  { 0x2CB0, BIDI_L   },  // COPTIC CAPITAL LETTER OOU
+  { 0x2CB1, BIDI_L   },  // COPTIC SMALL LETTER OOU
+  { 0x2CB2, BIDI_L   },  // COPTIC CAPITAL LETTER DIALECT-P ALEF
+  { 0x2CB3, BIDI_L   },  // COPTIC SMALL LETTER DIALECT-P ALEF
+  { 0x2CB4, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC AIN
+  { 0x2CB5, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC AIN
+  { 0x2CB6, BIDI_L   },  // COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+  { 0x2CB7, BIDI_L   },  // COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+  { 0x2CB8, BIDI_L   },  // COPTIC CAPITAL LETTER DIALECT-P KAPA
+  { 0x2CB9, BIDI_L   },  // COPTIC SMALL LETTER DIALECT-P KAPA
+  { 0x2CBA, BIDI_L   },  // COPTIC CAPITAL LETTER DIALECT-P NI
+  { 0x2CBB, BIDI_L   },  // COPTIC SMALL LETTER DIALECT-P NI
+  { 0x2CBC, BIDI_L   },  // COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+  { 0x2CBD, BIDI_L   },  // COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+  { 0x2CBE, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC OOU
+  { 0x2CBF, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC OOU
+  { 0x2CC0, BIDI_L   },  // COPTIC CAPITAL LETTER SAMPI
+  { 0x2CC1, BIDI_L   },  // COPTIC SMALL LETTER SAMPI
+  { 0x2CC2, BIDI_L   },  // COPTIC CAPITAL LETTER CROSSED SHEI
+  { 0x2CC3, BIDI_L   },  // COPTIC SMALL LETTER CROSSED SHEI
+  { 0x2CC4, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC SHEI
+  { 0x2CC5, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC SHEI
+  { 0x2CC6, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC ESH
+  { 0x2CC7, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC ESH
+  { 0x2CC8, BIDI_L   },  // COPTIC CAPITAL LETTER AKHMIMIC KHEI
+  { 0x2CC9, BIDI_L   },  // COPTIC SMALL LETTER AKHMIMIC KHEI
+  { 0x2CCA, BIDI_L   },  // COPTIC CAPITAL LETTER DIALECT-P HORI
+  { 0x2CCB, BIDI_L   },  // COPTIC SMALL LETTER DIALECT-P HORI
+  { 0x2CCC, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC HORI
+  { 0x2CCD, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC HORI
+  { 0x2CCE, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC HA
+  { 0x2CCF, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC HA
+  { 0x2CD0, BIDI_L   },  // COPTIC CAPITAL LETTER L-SHAPED HA
+  { 0x2CD1, BIDI_L   },  // COPTIC SMALL LETTER L-SHAPED HA
+  { 0x2CD2, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC HEI
+  { 0x2CD3, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC HEI
+  { 0x2CD4, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC HAT
+  { 0x2CD5, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC HAT
+  { 0x2CD6, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+  { 0x2CD7, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC GANGIA
+  { 0x2CD8, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC DJA
+  { 0x2CD9, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC DJA
+  { 0x2CDA, BIDI_L   },  // COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+  { 0x2CDB, BIDI_L   },  // COPTIC SMALL LETTER OLD COPTIC SHIMA
+  { 0x2CDC, BIDI_L   },  // COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+  { 0x2CDD, BIDI_L   },  // COPTIC SMALL LETTER OLD NUBIAN SHIMA
+  { 0x2CDE, BIDI_L   },  // COPTIC CAPITAL LETTER OLD NUBIAN NGI
+  { 0x2CDF, BIDI_L   },  // COPTIC SMALL LETTER OLD NUBIAN NGI
+  { 0x2CE0, BIDI_L   },  // COPTIC CAPITAL LETTER OLD NUBIAN NYI
+  { 0x2CE1, BIDI_L   },  // COPTIC SMALL LETTER OLD NUBIAN NYI
+  { 0x2CE2, BIDI_L   },  // COPTIC CAPITAL LETTER OLD NUBIAN WAU
+  { 0x2CE3, BIDI_L   },  // COPTIC SMALL LETTER OLD NUBIAN WAU
+  { 0x2CE4, BIDI_L   },  // COPTIC SYMBOL KAI
+  { 0x2CE5, BIDI_ON  },  // COPTIC SYMBOL MI RO
+  { 0x2CE6, BIDI_ON  },  // COPTIC SYMBOL PI RO
+  { 0x2CE7, BIDI_ON  },  // COPTIC SYMBOL STAUROS
+  { 0x2CE8, BIDI_ON  },  // COPTIC SYMBOL TAU RO
+  { 0x2CE9, BIDI_ON  },  // COPTIC SYMBOL KHI RO
+  { 0x2CEA, BIDI_ON  },  // COPTIC SYMBOL SHIMA SIMA
+  { 0x2CEB, BIDI_L   },  // COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+  { 0x2CEC, BIDI_L   },  // COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+  { 0x2CED, BIDI_L   },  // COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+  { 0x2CEE, BIDI_L   },  // COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+  { 0x2CEF, BIDI_NSM },  // COPTIC COMBINING NI ABOVE
+  { 0x2CF0, BIDI_NSM },  // COPTIC COMBINING SPIRITUS ASPER
+  { 0x2CF1, BIDI_NSM },  // COPTIC COMBINING SPIRITUS LENIS
+  { 0x2CF2, BIDI_L   },  // COPTIC CAPITAL LETTER BOHAIRIC KHEI
+  { 0x2CF3, BIDI_L   },  // COPTIC SMALL LETTER BOHAIRIC KHEI
+  { 0x2CF9, BIDI_ON  },  // COPTIC OLD NUBIAN FULL STOP
+  { 0x2CFA, BIDI_ON  },  // COPTIC OLD NUBIAN DIRECT QUESTION MARK
+  { 0x2CFB, BIDI_ON  },  // COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+  { 0x2CFC, BIDI_ON  },  // COPTIC OLD NUBIAN VERSE DIVIDER
+  { 0x2CFD, BIDI_ON  },  // COPTIC FRACTION ONE HALF
+  { 0x2CFE, BIDI_ON  },  // COPTIC FULL STOP
+  { 0x2CFF, BIDI_ON  },  // COPTIC MORPHOLOGICAL DIVIDER
+  { 0x2D00, BIDI_L   },  // GEORGIAN SMALL LETTER AN
+  { 0x2D01, BIDI_L   },  // GEORGIAN SMALL LETTER BAN
+  { 0x2D02, BIDI_L   },  // GEORGIAN SMALL LETTER GAN
+  { 0x2D03, BIDI_L   },  // GEORGIAN SMALL LETTER DON
+  { 0x2D04, BIDI_L   },  // GEORGIAN SMALL LETTER EN
+  { 0x2D05, BIDI_L   },  // GEORGIAN SMALL LETTER VIN
+  { 0x2D06, BIDI_L   },  // GEORGIAN SMALL LETTER ZEN
+  { 0x2D07, BIDI_L   },  // GEORGIAN SMALL LETTER TAN
+  { 0x2D08, BIDI_L   },  // GEORGIAN SMALL LETTER IN
+  { 0x2D09, BIDI_L   },  // GEORGIAN SMALL LETTER KAN
+  { 0x2D0A, BIDI_L   },  // GEORGIAN SMALL LETTER LAS
+  { 0x2D0B, BIDI_L   },  // GEORGIAN SMALL LETTER MAN
+  { 0x2D0C, BIDI_L   },  // GEORGIAN SMALL LETTER NAR
+  { 0x2D0D, BIDI_L   },  // GEORGIAN SMALL LETTER ON
+  { 0x2D0E, BIDI_L   },  // GEORGIAN SMALL LETTER PAR
+  { 0x2D0F, BIDI_L   },  // GEORGIAN SMALL LETTER ZHAR
+  { 0x2D10, BIDI_L   },  // GEORGIAN SMALL LETTER RAE
+  { 0x2D11, BIDI_L   },  // GEORGIAN SMALL LETTER SAN
+  { 0x2D12, BIDI_L   },  // GEORGIAN SMALL LETTER TAR
+  { 0x2D13, BIDI_L   },  // GEORGIAN SMALL LETTER UN
+  { 0x2D14, BIDI_L   },  // GEORGIAN SMALL LETTER PHAR
+  { 0x2D15, BIDI_L   },  // GEORGIAN SMALL LETTER KHAR
+  { 0x2D16, BIDI_L   },  // GEORGIAN SMALL LETTER GHAN
+  { 0x2D17, BIDI_L   },  // GEORGIAN SMALL LETTER QAR
+  { 0x2D18, BIDI_L   },  // GEORGIAN SMALL LETTER SHIN
+  { 0x2D19, BIDI_L   },  // GEORGIAN SMALL LETTER CHIN
+  { 0x2D1A, BIDI_L   },  // GEORGIAN SMALL LETTER CAN
+  { 0x2D1B, BIDI_L   },  // GEORGIAN SMALL LETTER JIL
+  { 0x2D1C, BIDI_L   },  // GEORGIAN SMALL LETTER CIL
+  { 0x2D1D, BIDI_L   },  // GEORGIAN SMALL LETTER CHAR
+  { 0x2D1E, BIDI_L   },  // GEORGIAN SMALL LETTER XAN
+  { 0x2D1F, BIDI_L   },  // GEORGIAN SMALL LETTER JHAN
+  { 0x2D20, BIDI_L   },  // GEORGIAN SMALL LETTER HAE
+  { 0x2D21, BIDI_L   },  // GEORGIAN SMALL LETTER HE
+  { 0x2D22, BIDI_L   },  // GEORGIAN SMALL LETTER HIE
+  { 0x2D23, BIDI_L   },  // GEORGIAN SMALL LETTER WE
+  { 0x2D24, BIDI_L   },  // GEORGIAN SMALL LETTER HAR
+  { 0x2D25, BIDI_L   },  // GEORGIAN SMALL LETTER HOE
+  { 0x2D27, BIDI_L   },  // GEORGIAN SMALL LETTER YN
+  { 0x2D2D, BIDI_L   },  // GEORGIAN SMALL LETTER AEN
+  { 0x2D30, BIDI_L   },  // TIFINAGH LETTER YA
+  { 0x2D31, BIDI_L   },  // TIFINAGH LETTER YAB
+  { 0x2D32, BIDI_L   },  // TIFINAGH LETTER YABH
+  { 0x2D33, BIDI_L   },  // TIFINAGH LETTER YAG
+  { 0x2D34, BIDI_L   },  // TIFINAGH LETTER YAGHH
+  { 0x2D35, BIDI_L   },  // TIFINAGH LETTER BERBER ACADEMY YAJ
+  { 0x2D36, BIDI_L   },  // TIFINAGH LETTER YAJ
+  { 0x2D37, BIDI_L   },  // TIFINAGH LETTER YAD
+  { 0x2D38, BIDI_L   },  // TIFINAGH LETTER YADH
+  { 0x2D39, BIDI_L   },  // TIFINAGH LETTER YADD
+  { 0x2D3A, BIDI_L   },  // TIFINAGH LETTER YADDH
+  { 0x2D3B, BIDI_L   },  // TIFINAGH LETTER YEY
+  { 0x2D3C, BIDI_L   },  // TIFINAGH LETTER YAF
+  { 0x2D3D, BIDI_L   },  // TIFINAGH LETTER YAK
+  { 0x2D3E, BIDI_L   },  // TIFINAGH LETTER TUAREG YAK
+  { 0x2D3F, BIDI_L   },  // TIFINAGH LETTER YAKHH
+  { 0x2D40, BIDI_L   },  // TIFINAGH LETTER YAH
+  { 0x2D41, BIDI_L   },  // TIFINAGH LETTER BERBER ACADEMY YAH
+  { 0x2D42, BIDI_L   },  // TIFINAGH LETTER TUAREG YAH
+  { 0x2D43, BIDI_L   },  // TIFINAGH LETTER YAHH
+  { 0x2D44, BIDI_L   },  // TIFINAGH LETTER YAA
+  { 0x2D45, BIDI_L   },  // TIFINAGH LETTER YAKH
+  { 0x2D46, BIDI_L   },  // TIFINAGH LETTER TUAREG YAKH
+  { 0x2D47, BIDI_L   },  // TIFINAGH LETTER YAQ
+  { 0x2D48, BIDI_L   },  // TIFINAGH LETTER TUAREG YAQ
+  { 0x2D49, BIDI_L   },  // TIFINAGH LETTER YI
+  { 0x2D4A, BIDI_L   },  // TIFINAGH LETTER YAZH
+  { 0x2D4B, BIDI_L   },  // TIFINAGH LETTER AHAGGAR YAZH
+  { 0x2D4C, BIDI_L   },  // TIFINAGH LETTER TUAREG YAZH
+  { 0x2D4D, BIDI_L   },  // TIFINAGH LETTER YAL
+  { 0x2D4E, BIDI_L   },  // TIFINAGH LETTER YAM
+  { 0x2D4F, BIDI_L   },  // TIFINAGH LETTER YAN
+  { 0x2D50, BIDI_L   },  // TIFINAGH LETTER TUAREG YAGN
+  { 0x2D51, BIDI_L   },  // TIFINAGH LETTER TUAREG YANG
+  { 0x2D52, BIDI_L   },  // TIFINAGH LETTER YAP
+  { 0x2D53, BIDI_L   },  // TIFINAGH LETTER YU
+  { 0x2D54, BIDI_L   },  // TIFINAGH LETTER YAR
+  { 0x2D55, BIDI_L   },  // TIFINAGH LETTER YARR
+  { 0x2D56, BIDI_L   },  // TIFINAGH LETTER YAGH
+  { 0x2D57, BIDI_L   },  // TIFINAGH LETTER TUAREG YAGH
+  { 0x2D58, BIDI_L   },  // TIFINAGH LETTER AYER YAGH
+  { 0x2D59, BIDI_L   },  // TIFINAGH LETTER YAS
+  { 0x2D5A, BIDI_L   },  // TIFINAGH LETTER YASS
+  { 0x2D5B, BIDI_L   },  // TIFINAGH LETTER YASH
+  { 0x2D5C, BIDI_L   },  // TIFINAGH LETTER YAT
+  { 0x2D5D, BIDI_L   },  // TIFINAGH LETTER YATH
+  { 0x2D5E, BIDI_L   },  // TIFINAGH LETTER YACH
+  { 0x2D5F, BIDI_L   },  // TIFINAGH LETTER YATT
+  { 0x2D60, BIDI_L   },  // TIFINAGH LETTER YAV
+  { 0x2D61, BIDI_L   },  // TIFINAGH LETTER YAW
+  { 0x2D62, BIDI_L   },  // TIFINAGH LETTER YAY
+  { 0x2D63, BIDI_L   },  // TIFINAGH LETTER YAZ
+  { 0x2D64, BIDI_L   },  // TIFINAGH LETTER TAWELLEMET YAZ
+  { 0x2D65, BIDI_L   },  // TIFINAGH LETTER YAZZ
+  { 0x2D66, BIDI_L   },  // TIFINAGH LETTER YE
+  { 0x2D67, BIDI_L   },  // TIFINAGH LETTER YO
+  { 0x2D6F, BIDI_L   },  // TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+  { 0x2D70, BIDI_L   },  // TIFINAGH SEPARATOR MARK
+  { 0x2D7F, BIDI_NSM },  // TIFINAGH CONSONANT JOINER
+  { 0x2D80, BIDI_L   },  // ETHIOPIC SYLLABLE LOA
+  { 0x2D81, BIDI_L   },  // ETHIOPIC SYLLABLE MOA
+  { 0x2D82, BIDI_L   },  // ETHIOPIC SYLLABLE ROA
+  { 0x2D83, BIDI_L   },  // ETHIOPIC SYLLABLE SOA
+  { 0x2D84, BIDI_L   },  // ETHIOPIC SYLLABLE SHOA
+  { 0x2D85, BIDI_L   },  // ETHIOPIC SYLLABLE BOA
+  { 0x2D86, BIDI_L   },  // ETHIOPIC SYLLABLE TOA
+  { 0x2D87, BIDI_L   },  // ETHIOPIC SYLLABLE COA
+  { 0x2D88, BIDI_L   },  // ETHIOPIC SYLLABLE NOA
+  { 0x2D89, BIDI_L   },  // ETHIOPIC SYLLABLE NYOA
+  { 0x2D8A, BIDI_L   },  // ETHIOPIC SYLLABLE GLOTTAL OA
+  { 0x2D8B, BIDI_L   },  // ETHIOPIC SYLLABLE ZOA
+  { 0x2D8C, BIDI_L   },  // ETHIOPIC SYLLABLE DOA
+  { 0x2D8D, BIDI_L   },  // ETHIOPIC SYLLABLE DDOA
+  { 0x2D8E, BIDI_L   },  // ETHIOPIC SYLLABLE JOA
+  { 0x2D8F, BIDI_L   },  // ETHIOPIC SYLLABLE THOA
+  { 0x2D90, BIDI_L   },  // ETHIOPIC SYLLABLE CHOA
+  { 0x2D91, BIDI_L   },  // ETHIOPIC SYLLABLE PHOA
+  { 0x2D92, BIDI_L   },  // ETHIOPIC SYLLABLE POA
+  { 0x2D93, BIDI_L   },  // ETHIOPIC SYLLABLE GGWA
+  { 0x2D94, BIDI_L   },  // ETHIOPIC SYLLABLE GGWI
+  { 0x2D95, BIDI_L   },  // ETHIOPIC SYLLABLE GGWEE
+  { 0x2D96, BIDI_L   },  // ETHIOPIC SYLLABLE GGWE
+  { 0x2DA0, BIDI_L   },  // ETHIOPIC SYLLABLE SSA
+  { 0x2DA1, BIDI_L   },  // ETHIOPIC SYLLABLE SSU
+  { 0x2DA2, BIDI_L   },  // ETHIOPIC SYLLABLE SSI
+  { 0x2DA3, BIDI_L   },  // ETHIOPIC SYLLABLE SSAA
+  { 0x2DA4, BIDI_L   },  // ETHIOPIC SYLLABLE SSEE
+  { 0x2DA5, BIDI_L   },  // ETHIOPIC SYLLABLE SSE
+  { 0x2DA6, BIDI_L   },  // ETHIOPIC SYLLABLE SSO
+  { 0x2DA8, BIDI_L   },  // ETHIOPIC SYLLABLE CCA
+  { 0x2DA9, BIDI_L   },  // ETHIOPIC SYLLABLE CCU
+  { 0x2DAA, BIDI_L   },  // ETHIOPIC SYLLABLE CCI
+  { 0x2DAB, BIDI_L   },  // ETHIOPIC SYLLABLE CCAA
+  { 0x2DAC, BIDI_L   },  // ETHIOPIC SYLLABLE CCEE
+  { 0x2DAD, BIDI_L   },  // ETHIOPIC SYLLABLE CCE
+  { 0x2DAE, BIDI_L   },  // ETHIOPIC SYLLABLE CCO
+  { 0x2DB0, BIDI_L   },  // ETHIOPIC SYLLABLE ZZA
+  { 0x2DB1, BIDI_L   },  // ETHIOPIC SYLLABLE ZZU
+  { 0x2DB2, BIDI_L   },  // ETHIOPIC SYLLABLE ZZI
+  { 0x2DB3, BIDI_L   },  // ETHIOPIC SYLLABLE ZZAA
+  { 0x2DB4, BIDI_L   },  // ETHIOPIC SYLLABLE ZZEE
+  { 0x2DB5, BIDI_L   },  // ETHIOPIC SYLLABLE ZZE
+  { 0x2DB6, BIDI_L   },  // ETHIOPIC SYLLABLE ZZO
+  { 0x2DB8, BIDI_L   },  // ETHIOPIC SYLLABLE CCHA
+  { 0x2DB9, BIDI_L   },  // ETHIOPIC SYLLABLE CCHU
+  { 0x2DBA, BIDI_L   },  // ETHIOPIC SYLLABLE CCHI
+  { 0x2DBB, BIDI_L   },  // ETHIOPIC SYLLABLE CCHAA
+  { 0x2DBC, BIDI_L   },  // ETHIOPIC SYLLABLE CCHEE
+  { 0x2DBD, BIDI_L   },  // ETHIOPIC SYLLABLE CCHE
+  { 0x2DBE, BIDI_L   },  // ETHIOPIC SYLLABLE CCHO
+  { 0x2DC0, BIDI_L   },  // ETHIOPIC SYLLABLE QYA
+  { 0x2DC1, BIDI_L   },  // ETHIOPIC SYLLABLE QYU
+  { 0x2DC2, BIDI_L   },  // ETHIOPIC SYLLABLE QYI
+  { 0x2DC3, BIDI_L   },  // ETHIOPIC SYLLABLE QYAA
+  { 0x2DC4, BIDI_L   },  // ETHIOPIC SYLLABLE QYEE
+  { 0x2DC5, BIDI_L   },  // ETHIOPIC SYLLABLE QYE
+  { 0x2DC6, BIDI_L   },  // ETHIOPIC SYLLABLE QYO
+  { 0x2DC8, BIDI_L   },  // ETHIOPIC SYLLABLE KYA
+  { 0x2DC9, BIDI_L   },  // ETHIOPIC SYLLABLE KYU
+  { 0x2DCA, BIDI_L   },  // ETHIOPIC SYLLABLE KYI
+  { 0x2DCB, BIDI_L   },  // ETHIOPIC SYLLABLE KYAA
+  { 0x2DCC, BIDI_L   },  // ETHIOPIC SYLLABLE KYEE
+  { 0x2DCD, BIDI_L   },  // ETHIOPIC SYLLABLE KYE
+  { 0x2DCE, BIDI_L   },  // ETHIOPIC SYLLABLE KYO
+  { 0x2DD0, BIDI_L   },  // ETHIOPIC SYLLABLE XYA
+  { 0x2DD1, BIDI_L   },  // ETHIOPIC SYLLABLE XYU
+  { 0x2DD2, BIDI_L   },  // ETHIOPIC SYLLABLE XYI
+  { 0x2DD3, BIDI_L   },  // ETHIOPIC SYLLABLE XYAA
+  { 0x2DD4, BIDI_L   },  // ETHIOPIC SYLLABLE XYEE
+  { 0x2DD5, BIDI_L   },  // ETHIOPIC SYLLABLE XYE
+  { 0x2DD6, BIDI_L   },  // ETHIOPIC SYLLABLE XYO
+  { 0x2DD8, BIDI_L   },  // ETHIOPIC SYLLABLE GYA
+  { 0x2DD9, BIDI_L   },  // ETHIOPIC SYLLABLE GYU
+  { 0x2DDA, BIDI_L   },  // ETHIOPIC SYLLABLE GYI
+  { 0x2DDB, BIDI_L   },  // ETHIOPIC SYLLABLE GYAA
+  { 0x2DDC, BIDI_L   },  // ETHIOPIC SYLLABLE GYEE
+  { 0x2DDD, BIDI_L   },  // ETHIOPIC SYLLABLE GYE
+  { 0x2DDE, BIDI_L   },  // ETHIOPIC SYLLABLE GYO
+  { 0x2DE0, BIDI_NSM },  // COMBINING CYRILLIC LETTER BE
+  { 0x2DE1, BIDI_NSM },  // COMBINING CYRILLIC LETTER VE
+  { 0x2DE2, BIDI_NSM },  // COMBINING CYRILLIC LETTER GHE
+  { 0x2DE3, BIDI_NSM },  // COMBINING CYRILLIC LETTER DE
+  { 0x2DE4, BIDI_NSM },  // COMBINING CYRILLIC LETTER ZHE
+  { 0x2DE5, BIDI_NSM },  // COMBINING CYRILLIC LETTER ZE
+  { 0x2DE6, BIDI_NSM },  // COMBINING CYRILLIC LETTER KA
+  { 0x2DE7, BIDI_NSM },  // COMBINING CYRILLIC LETTER EL
+  { 0x2DE8, BIDI_NSM },  // COMBINING CYRILLIC LETTER EM
+  { 0x2DE9, BIDI_NSM },  // COMBINING CYRILLIC LETTER EN
+  { 0x2DEA, BIDI_NSM },  // COMBINING CYRILLIC LETTER O
+  { 0x2DEB, BIDI_NSM },  // COMBINING CYRILLIC LETTER PE
+  { 0x2DEC, BIDI_NSM },  // COMBINING CYRILLIC LETTER ER
+  { 0x2DED, BIDI_NSM },  // COMBINING CYRILLIC LETTER ES
+  { 0x2DEE, BIDI_NSM },  // COMBINING CYRILLIC LETTER TE
+  { 0x2DEF, BIDI_NSM },  // COMBINING CYRILLIC LETTER HA
+  { 0x2DF0, BIDI_NSM },  // COMBINING CYRILLIC LETTER TSE
+  { 0x2DF1, BIDI_NSM },  // COMBINING CYRILLIC LETTER CHE
+  { 0x2DF2, BIDI_NSM },  // COMBINING CYRILLIC LETTER SHA
+  { 0x2DF3, BIDI_NSM },  // COMBINING CYRILLIC LETTER SHCHA
+  { 0x2DF4, BIDI_NSM },  // COMBINING CYRILLIC LETTER FITA
+  { 0x2DF5, BIDI_NSM },  // COMBINING CYRILLIC LETTER ES-TE
+  { 0x2DF6, BIDI_NSM },  // COMBINING CYRILLIC LETTER A
+  { 0x2DF7, BIDI_NSM },  // COMBINING CYRILLIC LETTER IE
+  { 0x2DF8, BIDI_NSM },  // COMBINING CYRILLIC LETTER DJERV
+  { 0x2DF9, BIDI_NSM },  // COMBINING CYRILLIC LETTER MONOGRAPH UK
+  { 0x2DFA, BIDI_NSM },  // COMBINING CYRILLIC LETTER YAT
+  { 0x2DFB, BIDI_NSM },  // COMBINING CYRILLIC LETTER YU
+  { 0x2DFC, BIDI_NSM },  // COMBINING CYRILLIC LETTER IOTIFIED A
+  { 0x2DFD, BIDI_NSM },  // COMBINING CYRILLIC LETTER LITTLE YUS
+  { 0x2DFE, BIDI_NSM },  // COMBINING CYRILLIC LETTER BIG YUS
+  { 0x2DFF, BIDI_NSM },  // COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+  { 0x2E00, BIDI_ON  },  // RIGHT ANGLE SUBSTITUTION MARKER
+  { 0x2E01, BIDI_ON  },  // RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+  { 0x2E02, BIDI_ON  },  // LEFT SUBSTITUTION BRACKET
+  { 0x2E03, BIDI_ON  },  // RIGHT SUBSTITUTION BRACKET
+  { 0x2E04, BIDI_ON  },  // LEFT DOTTED SUBSTITUTION BRACKET
+  { 0x2E05, BIDI_ON  },  // RIGHT DOTTED SUBSTITUTION BRACKET
+  { 0x2E06, BIDI_ON  },  // RAISED INTERPOLATION MARKER
+  { 0x2E07, BIDI_ON  },  // RAISED DOTTED INTERPOLATION MARKER
+  { 0x2E08, BIDI_ON  },  // DOTTED TRANSPOSITION MARKER
+  { 0x2E09, BIDI_ON  },  // LEFT TRANSPOSITION BRACKET
+  { 0x2E0A, BIDI_ON  },  // RIGHT TRANSPOSITION BRACKET
+  { 0x2E0B, BIDI_ON  },  // RAISED SQUARE
+  { 0x2E0C, BIDI_ON  },  // LEFT RAISED OMISSION BRACKET
+  { 0x2E0D, BIDI_ON  },  // RIGHT RAISED OMISSION BRACKET
+  { 0x2E0E, BIDI_ON  },  // EDITORIAL CORONIS
+  { 0x2E0F, BIDI_ON  },  // PARAGRAPHOS
+  { 0x2E10, BIDI_ON  },  // FORKED PARAGRAPHOS
+  { 0x2E11, BIDI_ON  },  // REVERSED FORKED PARAGRAPHOS
+  { 0x2E12, BIDI_ON  },  // HYPODIASTOLE
+  { 0x2E13, BIDI_ON  },  // DOTTED OBELOS
+  { 0x2E14, BIDI_ON  },  // DOWNWARDS ANCORA
+  { 0x2E15, BIDI_ON  },  // UPWARDS ANCORA
+  { 0x2E16, BIDI_ON  },  // DOTTED RIGHT-POINTING ANGLE
+  { 0x2E17, BIDI_ON  },  // DOUBLE OBLIQUE HYPHEN
+  { 0x2E18, BIDI_ON  },  // INVERTED INTERROBANG
+  { 0x2E19, BIDI_ON  },  // PALM BRANCH
+  { 0x2E1A, BIDI_ON  },  // HYPHEN WITH DIAERESIS
+  { 0x2E1B, BIDI_ON  },  // TILDE WITH RING ABOVE
+  { 0x2E1C, BIDI_ON  },  // LEFT LOW PARAPHRASE BRACKET
+  { 0x2E1D, BIDI_ON  },  // RIGHT LOW PARAPHRASE BRACKET
+  { 0x2E1E, BIDI_ON  },  // TILDE WITH DOT ABOVE
+  { 0x2E1F, BIDI_ON  },  // TILDE WITH DOT BELOW
+  { 0x2E20, BIDI_ON  },  // LEFT VERTICAL BAR WITH QUILL
+  { 0x2E21, BIDI_ON  },  // RIGHT VERTICAL BAR WITH QUILL
+  { 0x2E22, BIDI_ON  },  // TOP LEFT HALF BRACKET
+  { 0x2E23, BIDI_ON  },  // TOP RIGHT HALF BRACKET
+  { 0x2E24, BIDI_ON  },  // BOTTOM LEFT HALF BRACKET
+  { 0x2E25, BIDI_ON  },  // BOTTOM RIGHT HALF BRACKET
+  { 0x2E26, BIDI_ON  },  // LEFT SIDEWAYS U BRACKET
+  { 0x2E27, BIDI_ON  },  // RIGHT SIDEWAYS U BRACKET
+  { 0x2E28, BIDI_ON  },  // LEFT DOUBLE PARENTHESIS
+  { 0x2E29, BIDI_ON  },  // RIGHT DOUBLE PARENTHESIS
+  { 0x2E2A, BIDI_ON  },  // TWO DOTS OVER ONE DOT PUNCTUATION
+  { 0x2E2B, BIDI_ON  },  // ONE DOT OVER TWO DOTS PUNCTUATION
+  { 0x2E2C, BIDI_ON  },  // SQUARED FOUR DOT PUNCTUATION
+  { 0x2E2D, BIDI_ON  },  // FIVE DOT MARK
+  { 0x2E2E, BIDI_ON  },  // REVERSED QUESTION MARK
+  { 0x2E2F, BIDI_ON  },  // VERTICAL TILDE
+  { 0x2E30, BIDI_ON  },  // RING POINT
+  { 0x2E31, BIDI_ON  },  // WORD SEPARATOR MIDDLE DOT
+  { 0x2E32, BIDI_ON  },  // TURNED COMMA
+  { 0x2E33, BIDI_ON  },  // RAISED DOT
+  { 0x2E34, BIDI_ON  },  // RAISED COMMA
+  { 0x2E35, BIDI_ON  },  // TURNED SEMICOLON
+  { 0x2E36, BIDI_ON  },  // DAGGER WITH LEFT GUARD
+  { 0x2E37, BIDI_ON  },  // DAGGER WITH RIGHT GUARD
+  { 0x2E38, BIDI_ON  },  // TURNED DAGGER
+  { 0x2E39, BIDI_ON  },  // TOP HALF SECTION SIGN
+  { 0x2E3A, BIDI_ON  },  // TWO-EM DASH
+  { 0x2E3B, BIDI_ON  },  // THREE-EM DASH
+  { 0x2E3C, BIDI_ON  },  // STENOGRAPHIC FULL STOP
+  { 0x2E3D, BIDI_ON  },  // VERTICAL SIX DOTS
+  { 0x2E3E, BIDI_ON  },  // WIGGLY VERTICAL LINE
+  { 0x2E3F, BIDI_ON  },  // CAPITULUM
+  { 0x2E40, BIDI_ON  },  // DOUBLE HYPHEN
+  { 0x2E41, BIDI_ON  },  // REVERSED COMMA
+  { 0x2E42, BIDI_ON  },  // DOUBLE LOW-REVERSED-9 QUOTATION MARK
+  { 0x2E80, BIDI_ON  },  // CJK RADICAL REPEAT
+  { 0x2E81, BIDI_ON  },  // CJK RADICAL CLIFF
+  { 0x2E82, BIDI_ON  },  // CJK RADICAL SECOND ONE
+  { 0x2E83, BIDI_ON  },  // CJK RADICAL SECOND TWO
+  { 0x2E84, BIDI_ON  },  // CJK RADICAL SECOND THREE
+  { 0x2E85, BIDI_ON  },  // CJK RADICAL PERSON
+  { 0x2E86, BIDI_ON  },  // CJK RADICAL BOX
+  { 0x2E87, BIDI_ON  },  // CJK RADICAL TABLE
+  { 0x2E88, BIDI_ON  },  // CJK RADICAL KNIFE ONE
+  { 0x2E89, BIDI_ON  },  // CJK RADICAL KNIFE TWO
+  { 0x2E8A, BIDI_ON  },  // CJK RADICAL DIVINATION
+  { 0x2E8B, BIDI_ON  },  // CJK RADICAL SEAL
+  { 0x2E8C, BIDI_ON  },  // CJK RADICAL SMALL ONE
+  { 0x2E8D, BIDI_ON  },  // CJK RADICAL SMALL TWO
+  { 0x2E8E, BIDI_ON  },  // CJK RADICAL LAME ONE
+  { 0x2E8F, BIDI_ON  },  // CJK RADICAL LAME TWO
+  { 0x2E90, BIDI_ON  },  // CJK RADICAL LAME THREE
+  { 0x2E91, BIDI_ON  },  // CJK RADICAL LAME FOUR
+  { 0x2E92, BIDI_ON  },  // CJK RADICAL SNAKE
+  { 0x2E93, BIDI_ON  },  // CJK RADICAL THREAD
+  { 0x2E94, BIDI_ON  },  // CJK RADICAL SNOUT ONE
+  { 0x2E95, BIDI_ON  },  // CJK RADICAL SNOUT TWO
+  { 0x2E96, BIDI_ON  },  // CJK RADICAL HEART ONE
+  { 0x2E97, BIDI_ON  },  // CJK RADICAL HEART TWO
+  { 0x2E98, BIDI_ON  },  // CJK RADICAL HAND
+  { 0x2E99, BIDI_ON  },  // CJK RADICAL RAP
+  { 0x2E9B, BIDI_ON  },  // CJK RADICAL CHOKE
+  { 0x2E9C, BIDI_ON  },  // CJK RADICAL SUN
+  { 0x2E9D, BIDI_ON  },  // CJK RADICAL MOON
+  { 0x2E9E, BIDI_ON  },  // CJK RADICAL DEATH
+  { 0x2E9F, BIDI_ON  },  // CJK RADICAL MOTHER
+  { 0x2EA0, BIDI_ON  },  // CJK RADICAL CIVILIAN
+  { 0x2EA1, BIDI_ON  },  // CJK RADICAL WATER ONE
+  { 0x2EA2, BIDI_ON  },  // CJK RADICAL WATER TWO
+  { 0x2EA3, BIDI_ON  },  // CJK RADICAL FIRE
+  { 0x2EA4, BIDI_ON  },  // CJK RADICAL PAW ONE
+  { 0x2EA5, BIDI_ON  },  // CJK RADICAL PAW TWO
+  { 0x2EA6, BIDI_ON  },  // CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+  { 0x2EA7, BIDI_ON  },  // CJK RADICAL COW
+  { 0x2EA8, BIDI_ON  },  // CJK RADICAL DOG
+  { 0x2EA9, BIDI_ON  },  // CJK RADICAL JADE
+  { 0x2EAA, BIDI_ON  },  // CJK RADICAL BOLT OF CLOTH
+  { 0x2EAB, BIDI_ON  },  // CJK RADICAL EYE
+  { 0x2EAC, BIDI_ON  },  // CJK RADICAL SPIRIT ONE
+  { 0x2EAD, BIDI_ON  },  // CJK RADICAL SPIRIT TWO
+  { 0x2EAE, BIDI_ON  },  // CJK RADICAL BAMBOO
+  { 0x2EAF, BIDI_ON  },  // CJK RADICAL SILK
+  { 0x2EB0, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED SILK
+  { 0x2EB1, BIDI_ON  },  // CJK RADICAL NET ONE
+  { 0x2EB2, BIDI_ON  },  // CJK RADICAL NET TWO
+  { 0x2EB3, BIDI_ON  },  // CJK RADICAL NET THREE
+  { 0x2EB4, BIDI_ON  },  // CJK RADICAL NET FOUR
+  { 0x2EB5, BIDI_ON  },  // CJK RADICAL MESH
+  { 0x2EB6, BIDI_ON  },  // CJK RADICAL SHEEP
+  { 0x2EB7, BIDI_ON  },  // CJK RADICAL RAM
+  { 0x2EB8, BIDI_ON  },  // CJK RADICAL EWE
+  { 0x2EB9, BIDI_ON  },  // CJK RADICAL OLD
+  { 0x2EBA, BIDI_ON  },  // CJK RADICAL BRUSH ONE
+  { 0x2EBB, BIDI_ON  },  // CJK RADICAL BRUSH TWO
+  { 0x2EBC, BIDI_ON  },  // CJK RADICAL MEAT
+  { 0x2EBD, BIDI_ON  },  // CJK RADICAL MORTAR
+  { 0x2EBE, BIDI_ON  },  // CJK RADICAL GRASS ONE
+  { 0x2EBF, BIDI_ON  },  // CJK RADICAL GRASS TWO
+  { 0x2EC0, BIDI_ON  },  // CJK RADICAL GRASS THREE
+  { 0x2EC1, BIDI_ON  },  // CJK RADICAL TIGER
+  { 0x2EC2, BIDI_ON  },  // CJK RADICAL CLOTHES
+  { 0x2EC3, BIDI_ON  },  // CJK RADICAL WEST ONE
+  { 0x2EC4, BIDI_ON  },  // CJK RADICAL WEST TWO
+  { 0x2EC5, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED SEE
+  { 0x2EC6, BIDI_ON  },  // CJK RADICAL SIMPLIFIED HORN
+  { 0x2EC7, BIDI_ON  },  // CJK RADICAL HORN
+  { 0x2EC8, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED SPEECH
+  { 0x2EC9, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED SHELL
+  { 0x2ECA, BIDI_ON  },  // CJK RADICAL FOOT
+  { 0x2ECB, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED CART
+  { 0x2ECC, BIDI_ON  },  // CJK RADICAL SIMPLIFIED WALK
+  { 0x2ECD, BIDI_ON  },  // CJK RADICAL WALK ONE
+  { 0x2ECE, BIDI_ON  },  // CJK RADICAL WALK TWO
+  { 0x2ECF, BIDI_ON  },  // CJK RADICAL CITY
+  { 0x2ED0, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED GOLD
+  { 0x2ED1, BIDI_ON  },  // CJK RADICAL LONG ONE
+  { 0x2ED2, BIDI_ON  },  // CJK RADICAL LONG TWO
+  { 0x2ED3, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED LONG
+  { 0x2ED4, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED GATE
+  { 0x2ED5, BIDI_ON  },  // CJK RADICAL MOUND ONE
+  { 0x2ED6, BIDI_ON  },  // CJK RADICAL MOUND TWO
+  { 0x2ED7, BIDI_ON  },  // CJK RADICAL RAIN
+  { 0x2ED8, BIDI_ON  },  // CJK RADICAL BLUE
+  { 0x2ED9, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+  { 0x2EDA, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED LEAF
+  { 0x2EDB, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED WIND
+  { 0x2EDC, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED FLY
+  { 0x2EDD, BIDI_ON  },  // CJK RADICAL EAT ONE
+  { 0x2EDE, BIDI_ON  },  // CJK RADICAL EAT TWO
+  { 0x2EDF, BIDI_ON  },  // CJK RADICAL EAT THREE
+  { 0x2EE0, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED EAT
+  { 0x2EE1, BIDI_ON  },  // CJK RADICAL HEAD
+  { 0x2EE2, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED HORSE
+  { 0x2EE3, BIDI_ON  },  // CJK RADICAL BONE
+  { 0x2EE4, BIDI_ON  },  // CJK RADICAL GHOST
+  { 0x2EE5, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED FISH
+  { 0x2EE6, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED BIRD
+  { 0x2EE7, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED SALT
+  { 0x2EE8, BIDI_ON  },  // CJK RADICAL SIMPLIFIED WHEAT
+  { 0x2EE9, BIDI_ON  },  // CJK RADICAL SIMPLIFIED YELLOW
+  { 0x2EEA, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED FROG
+  { 0x2EEB, BIDI_ON  },  // CJK RADICAL J-SIMPLIFIED EVEN
+  { 0x2EEC, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED EVEN
+  { 0x2EED, BIDI_ON  },  // CJK RADICAL J-SIMPLIFIED TOOTH
+  { 0x2EEE, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED TOOTH
+  { 0x2EEF, BIDI_ON  },  // CJK RADICAL J-SIMPLIFIED DRAGON
+  { 0x2EF0, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED DRAGON
+  { 0x2EF1, BIDI_ON  },  // CJK RADICAL TURTLE
+  { 0x2EF2, BIDI_ON  },  // CJK RADICAL J-SIMPLIFIED TURTLE
+  { 0x2EF3, BIDI_ON  },  // CJK RADICAL C-SIMPLIFIED TURTLE
+  { 0x2F00, BIDI_ON  },  // KANGXI RADICAL ONE
+  { 0x2F01, BIDI_ON  },  // KANGXI RADICAL LINE
+  { 0x2F02, BIDI_ON  },  // KANGXI RADICAL DOT
+  { 0x2F03, BIDI_ON  },  // KANGXI RADICAL SLASH
+  { 0x2F04, BIDI_ON  },  // KANGXI RADICAL SECOND
+  { 0x2F05, BIDI_ON  },  // KANGXI RADICAL HOOK
+  { 0x2F06, BIDI_ON  },  // KANGXI RADICAL TWO
+  { 0x2F07, BIDI_ON  },  // KANGXI RADICAL LID
+  { 0x2F08, BIDI_ON  },  // KANGXI RADICAL MAN
+  { 0x2F09, BIDI_ON  },  // KANGXI RADICAL LEGS
+  { 0x2F0A, BIDI_ON  },  // KANGXI RADICAL ENTER
+  { 0x2F0B, BIDI_ON  },  // KANGXI RADICAL EIGHT
+  { 0x2F0C, BIDI_ON  },  // KANGXI RADICAL DOWN BOX
+  { 0x2F0D, BIDI_ON  },  // KANGXI RADICAL COVER
+  { 0x2F0E, BIDI_ON  },  // KANGXI RADICAL ICE
+  { 0x2F0F, BIDI_ON  },  // KANGXI RADICAL TABLE
+  { 0x2F10, BIDI_ON  },  // KANGXI RADICAL OPEN BOX
+  { 0x2F11, BIDI_ON  },  // KANGXI RADICAL KNIFE
+  { 0x2F12, BIDI_ON  },  // KANGXI RADICAL POWER
+  { 0x2F13, BIDI_ON  },  // KANGXI RADICAL WRAP
+  { 0x2F14, BIDI_ON  },  // KANGXI RADICAL SPOON
+  { 0x2F15, BIDI_ON  },  // KANGXI RADICAL RIGHT OPEN BOX
+  { 0x2F16, BIDI_ON  },  // KANGXI RADICAL HIDING ENCLOSURE
+  { 0x2F17, BIDI_ON  },  // KANGXI RADICAL TEN
+  { 0x2F18, BIDI_ON  },  // KANGXI RADICAL DIVINATION
+  { 0x2F19, BIDI_ON  },  // KANGXI RADICAL SEAL
+  { 0x2F1A, BIDI_ON  },  // KANGXI RADICAL CLIFF
+  { 0x2F1B, BIDI_ON  },  // KANGXI RADICAL PRIVATE
+  { 0x2F1C, BIDI_ON  },  // KANGXI RADICAL AGAIN
+  { 0x2F1D, BIDI_ON  },  // KANGXI RADICAL MOUTH
+  { 0x2F1E, BIDI_ON  },  // KANGXI RADICAL ENCLOSURE
+  { 0x2F1F, BIDI_ON  },  // KANGXI RADICAL EARTH
+  { 0x2F20, BIDI_ON  },  // KANGXI RADICAL SCHOLAR
+  { 0x2F21, BIDI_ON  },  // KANGXI RADICAL GO
+  { 0x2F22, BIDI_ON  },  // KANGXI RADICAL GO SLOWLY
+  { 0x2F23, BIDI_ON  },  // KANGXI RADICAL EVENING
+  { 0x2F24, BIDI_ON  },  // KANGXI RADICAL BIG
+  { 0x2F25, BIDI_ON  },  // KANGXI RADICAL WOMAN
+  { 0x2F26, BIDI_ON  },  // KANGXI RADICAL CHILD
+  { 0x2F27, BIDI_ON  },  // KANGXI RADICAL ROOF
+  { 0x2F28, BIDI_ON  },  // KANGXI RADICAL INCH
+  { 0x2F29, BIDI_ON  },  // KANGXI RADICAL SMALL
+  { 0x2F2A, BIDI_ON  },  // KANGXI RADICAL LAME
+  { 0x2F2B, BIDI_ON  },  // KANGXI RADICAL CORPSE
+  { 0x2F2C, BIDI_ON  },  // KANGXI RADICAL SPROUT
+  { 0x2F2D, BIDI_ON  },  // KANGXI RADICAL MOUNTAIN
+  { 0x2F2E, BIDI_ON  },  // KANGXI RADICAL RIVER
+  { 0x2F2F, BIDI_ON  },  // KANGXI RADICAL WORK
+  { 0x2F30, BIDI_ON  },  // KANGXI RADICAL ONESELF
+  { 0x2F31, BIDI_ON  },  // KANGXI RADICAL TURBAN
+  { 0x2F32, BIDI_ON  },  // KANGXI RADICAL DRY
+  { 0x2F33, BIDI_ON  },  // KANGXI RADICAL SHORT THREAD
+  { 0x2F34, BIDI_ON  },  // KANGXI RADICAL DOTTED CLIFF
+  { 0x2F35, BIDI_ON  },  // KANGXI RADICAL LONG STRIDE
+  { 0x2F36, BIDI_ON  },  // KANGXI RADICAL TWO HANDS
+  { 0x2F37, BIDI_ON  },  // KANGXI RADICAL SHOOT
+  { 0x2F38, BIDI_ON  },  // KANGXI RADICAL BOW
+  { 0x2F39, BIDI_ON  },  // KANGXI RADICAL SNOUT
+  { 0x2F3A, BIDI_ON  },  // KANGXI RADICAL BRISTLE
+  { 0x2F3B, BIDI_ON  },  // KANGXI RADICAL STEP
+  { 0x2F3C, BIDI_ON  },  // KANGXI RADICAL HEART
+  { 0x2F3D, BIDI_ON  },  // KANGXI RADICAL HALBERD
+  { 0x2F3E, BIDI_ON  },  // KANGXI RADICAL DOOR
+  { 0x2F3F, BIDI_ON  },  // KANGXI RADICAL HAND
+  { 0x2F40, BIDI_ON  },  // KANGXI RADICAL BRANCH
+  { 0x2F41, BIDI_ON  },  // KANGXI RADICAL RAP
+  { 0x2F42, BIDI_ON  },  // KANGXI RADICAL SCRIPT
+  { 0x2F43, BIDI_ON  },  // KANGXI RADICAL DIPPER
+  { 0x2F44, BIDI_ON  },  // KANGXI RADICAL AXE
+  { 0x2F45, BIDI_ON  },  // KANGXI RADICAL SQUARE
+  { 0x2F46, BIDI_ON  },  // KANGXI RADICAL NOT
+  { 0x2F47, BIDI_ON  },  // KANGXI RADICAL SUN
+  { 0x2F48, BIDI_ON  },  // KANGXI RADICAL SAY
+  { 0x2F49, BIDI_ON  },  // KANGXI RADICAL MOON
+  { 0x2F4A, BIDI_ON  },  // KANGXI RADICAL TREE
+  { 0x2F4B, BIDI_ON  },  // KANGXI RADICAL LACK
+  { 0x2F4C, BIDI_ON  },  // KANGXI RADICAL STOP
+  { 0x2F4D, BIDI_ON  },  // KANGXI RADICAL DEATH
+  { 0x2F4E, BIDI_ON  },  // KANGXI RADICAL WEAPON
+  { 0x2F4F, BIDI_ON  },  // KANGXI RADICAL DO NOT
+  { 0x2F50, BIDI_ON  },  // KANGXI RADICAL COMPARE
+  { 0x2F51, BIDI_ON  },  // KANGXI RADICAL FUR
+  { 0x2F52, BIDI_ON  },  // KANGXI RADICAL CLAN
+  { 0x2F53, BIDI_ON  },  // KANGXI RADICAL STEAM
+  { 0x2F54, BIDI_ON  },  // KANGXI RADICAL WATER
+  { 0x2F55, BIDI_ON  },  // KANGXI RADICAL FIRE
+  { 0x2F56, BIDI_ON  },  // KANGXI RADICAL CLAW
+  { 0x2F57, BIDI_ON  },  // KANGXI RADICAL FATHER
+  { 0x2F58, BIDI_ON  },  // KANGXI RADICAL DOUBLE X
+  { 0x2F59, BIDI_ON  },  // KANGXI RADICAL HALF TREE TRUNK
+  { 0x2F5A, BIDI_ON  },  // KANGXI RADICAL SLICE
+  { 0x2F5B, BIDI_ON  },  // KANGXI RADICAL FANG
+  { 0x2F5C, BIDI_ON  },  // KANGXI RADICAL COW
+  { 0x2F5D, BIDI_ON  },  // KANGXI RADICAL DOG
+  { 0x2F5E, BIDI_ON  },  // KANGXI RADICAL PROFOUND
+  { 0x2F5F, BIDI_ON  },  // KANGXI RADICAL JADE
+  { 0x2F60, BIDI_ON  },  // KANGXI RADICAL MELON
+  { 0x2F61, BIDI_ON  },  // KANGXI RADICAL TILE
+  { 0x2F62, BIDI_ON  },  // KANGXI RADICAL SWEET
+  { 0x2F63, BIDI_ON  },  // KANGXI RADICAL LIFE
+  { 0x2F64, BIDI_ON  },  // KANGXI RADICAL USE
+  { 0x2F65, BIDI_ON  },  // KANGXI RADICAL FIELD
+  { 0x2F66, BIDI_ON  },  // KANGXI RADICAL BOLT OF CLOTH
+  { 0x2F67, BIDI_ON  },  // KANGXI RADICAL SICKNESS
+  { 0x2F68, BIDI_ON  },  // KANGXI RADICAL DOTTED TENT
+  { 0x2F69, BIDI_ON  },  // KANGXI RADICAL WHITE
+  { 0x2F6A, BIDI_ON  },  // KANGXI RADICAL SKIN
+  { 0x2F6B, BIDI_ON  },  // KANGXI RADICAL DISH
+  { 0x2F6C, BIDI_ON  },  // KANGXI RADICAL EYE
+  { 0x2F6D, BIDI_ON  },  // KANGXI RADICAL SPEAR
+  { 0x2F6E, BIDI_ON  },  // KANGXI RADICAL ARROW
+  { 0x2F6F, BIDI_ON  },  // KANGXI RADICAL STONE
+  { 0x2F70, BIDI_ON  },  // KANGXI RADICAL SPIRIT
+  { 0x2F71, BIDI_ON  },  // KANGXI RADICAL TRACK
+  { 0x2F72, BIDI_ON  },  // KANGXI RADICAL GRAIN
+  { 0x2F73, BIDI_ON  },  // KANGXI RADICAL CAVE
+  { 0x2F74, BIDI_ON  },  // KANGXI RADICAL STAND
+  { 0x2F75, BIDI_ON  },  // KANGXI RADICAL BAMBOO
+  { 0x2F76, BIDI_ON  },  // KANGXI RADICAL RICE
+  { 0x2F77, BIDI_ON  },  // KANGXI RADICAL SILK
+  { 0x2F78, BIDI_ON  },  // KANGXI RADICAL JAR
+  { 0x2F79, BIDI_ON  },  // KANGXI RADICAL NET
+  { 0x2F7A, BIDI_ON  },  // KANGXI RADICAL SHEEP
+  { 0x2F7B, BIDI_ON  },  // KANGXI RADICAL FEATHER
+  { 0x2F7C, BIDI_ON  },  // KANGXI RADICAL OLD
+  { 0x2F7D, BIDI_ON  },  // KANGXI RADICAL AND
+  { 0x2F7E, BIDI_ON  },  // KANGXI RADICAL PLOW
+  { 0x2F7F, BIDI_ON  },  // KANGXI RADICAL EAR
+  { 0x2F80, BIDI_ON  },  // KANGXI RADICAL BRUSH
+  { 0x2F81, BIDI_ON  },  // KANGXI RADICAL MEAT
+  { 0x2F82, BIDI_ON  },  // KANGXI RADICAL MINISTER
+  { 0x2F83, BIDI_ON  },  // KANGXI RADICAL SELF
+  { 0x2F84, BIDI_ON  },  // KANGXI RADICAL ARRIVE
+  { 0x2F85, BIDI_ON  },  // KANGXI RADICAL MORTAR
+  { 0x2F86, BIDI_ON  },  // KANGXI RADICAL TONGUE
+  { 0x2F87, BIDI_ON  },  // KANGXI RADICAL OPPOSE
+  { 0x2F88, BIDI_ON  },  // KANGXI RADICAL BOAT
+  { 0x2F89, BIDI_ON  },  // KANGXI RADICAL STOPPING
+  { 0x2F8A, BIDI_ON  },  // KANGXI RADICAL COLOR
+  { 0x2F8B, BIDI_ON  },  // KANGXI RADICAL GRASS
+  { 0x2F8C, BIDI_ON  },  // KANGXI RADICAL TIGER
+  { 0x2F8D, BIDI_ON  },  // KANGXI RADICAL INSECT
+  { 0x2F8E, BIDI_ON  },  // KANGXI RADICAL BLOOD
+  { 0x2F8F, BIDI_ON  },  // KANGXI RADICAL WALK ENCLOSURE
+  { 0x2F90, BIDI_ON  },  // KANGXI RADICAL CLOTHES
+  { 0x2F91, BIDI_ON  },  // KANGXI RADICAL WEST
+  { 0x2F92, BIDI_ON  },  // KANGXI RADICAL SEE
+  { 0x2F93, BIDI_ON  },  // KANGXI RADICAL HORN
+  { 0x2F94, BIDI_ON  },  // KANGXI RADICAL SPEECH
+  { 0x2F95, BIDI_ON  },  // KANGXI RADICAL VALLEY
+  { 0x2F96, BIDI_ON  },  // KANGXI RADICAL BEAN
+  { 0x2F97, BIDI_ON  },  // KANGXI RADICAL PIG
+  { 0x2F98, BIDI_ON  },  // KANGXI RADICAL BADGER
+  { 0x2F99, BIDI_ON  },  // KANGXI RADICAL SHELL
+  { 0x2F9A, BIDI_ON  },  // KANGXI RADICAL RED
+  { 0x2F9B, BIDI_ON  },  // KANGXI RADICAL RUN
+  { 0x2F9C, BIDI_ON  },  // KANGXI RADICAL FOOT
+  { 0x2F9D, BIDI_ON  },  // KANGXI RADICAL BODY
+  { 0x2F9E, BIDI_ON  },  // KANGXI RADICAL CART
+  { 0x2F9F, BIDI_ON  },  // KANGXI RADICAL BITTER
+  { 0x2FA0, BIDI_ON  },  // KANGXI RADICAL MORNING
+  { 0x2FA1, BIDI_ON  },  // KANGXI RADICAL WALK
+  { 0x2FA2, BIDI_ON  },  // KANGXI RADICAL CITY
+  { 0x2FA3, BIDI_ON  },  // KANGXI RADICAL WINE
+  { 0x2FA4, BIDI_ON  },  // KANGXI RADICAL DISTINGUISH
+  { 0x2FA5, BIDI_ON  },  // KANGXI RADICAL VILLAGE
+  { 0x2FA6, BIDI_ON  },  // KANGXI RADICAL GOLD
+  { 0x2FA7, BIDI_ON  },  // KANGXI RADICAL LONG
+  { 0x2FA8, BIDI_ON  },  // KANGXI RADICAL GATE
+  { 0x2FA9, BIDI_ON  },  // KANGXI RADICAL MOUND
+  { 0x2FAA, BIDI_ON  },  // KANGXI RADICAL SLAVE
+  { 0x2FAB, BIDI_ON  },  // KANGXI RADICAL SHORT TAILED BIRD
+  { 0x2FAC, BIDI_ON  },  // KANGXI RADICAL RAIN
+  { 0x2FAD, BIDI_ON  },  // KANGXI RADICAL BLUE
+  { 0x2FAE, BIDI_ON  },  // KANGXI RADICAL WRONG
+  { 0x2FAF, BIDI_ON  },  // KANGXI RADICAL FACE
+  { 0x2FB0, BIDI_ON  },  // KANGXI RADICAL LEATHER
+  { 0x2FB1, BIDI_ON  },  // KANGXI RADICAL TANNED LEATHER
+  { 0x2FB2, BIDI_ON  },  // KANGXI RADICAL LEEK
+  { 0x2FB3, BIDI_ON  },  // KANGXI RADICAL SOUND
+  { 0x2FB4, BIDI_ON  },  // KANGXI RADICAL LEAF
+  { 0x2FB5, BIDI_ON  },  // KANGXI RADICAL WIND
+  { 0x2FB6, BIDI_ON  },  // KANGXI RADICAL FLY
+  { 0x2FB7, BIDI_ON  },  // KANGXI RADICAL EAT
+  { 0x2FB8, BIDI_ON  },  // KANGXI RADICAL HEAD
+  { 0x2FB9, BIDI_ON  },  // KANGXI RADICAL FRAGRANT
+  { 0x2FBA, BIDI_ON  },  // KANGXI RADICAL HORSE
+  { 0x2FBB, BIDI_ON  },  // KANGXI RADICAL BONE
+  { 0x2FBC, BIDI_ON  },  // KANGXI RADICAL TALL
+  { 0x2FBD, BIDI_ON  },  // KANGXI RADICAL HAIR
+  { 0x2FBE, BIDI_ON  },  // KANGXI RADICAL FIGHT
+  { 0x2FBF, BIDI_ON  },  // KANGXI RADICAL SACRIFICIAL WINE
+  { 0x2FC0, BIDI_ON  },  // KANGXI RADICAL CAULDRON
+  { 0x2FC1, BIDI_ON  },  // KANGXI RADICAL GHOST
+  { 0x2FC2, BIDI_ON  },  // KANGXI RADICAL FISH
+  { 0x2FC3, BIDI_ON  },  // KANGXI RADICAL BIRD
+  { 0x2FC4, BIDI_ON  },  // KANGXI RADICAL SALT
+  { 0x2FC5, BIDI_ON  },  // KANGXI RADICAL DEER
+  { 0x2FC6, BIDI_ON  },  // KANGXI RADICAL WHEAT
+  { 0x2FC7, BIDI_ON  },  // KANGXI RADICAL HEMP
+  { 0x2FC8, BIDI_ON  },  // KANGXI RADICAL YELLOW
+  { 0x2FC9, BIDI_ON  },  // KANGXI RADICAL MILLET
+  { 0x2FCA, BIDI_ON  },  // KANGXI RADICAL BLACK
+  { 0x2FCB, BIDI_ON  },  // KANGXI RADICAL EMBROIDERY
+  { 0x2FCC, BIDI_ON  },  // KANGXI RADICAL FROG
+  { 0x2FCD, BIDI_ON  },  // KANGXI RADICAL TRIPOD
+  { 0x2FCE, BIDI_ON  },  // KANGXI RADICAL DRUM
+  { 0x2FCF, BIDI_ON  },  // KANGXI RADICAL RAT
+  { 0x2FD0, BIDI_ON  },  // KANGXI RADICAL NOSE
+  { 0x2FD1, BIDI_ON  },  // KANGXI RADICAL EVEN
+  { 0x2FD2, BIDI_ON  },  // KANGXI RADICAL TOOTH
+  { 0x2FD3, BIDI_ON  },  // KANGXI RADICAL DRAGON
+  { 0x2FD4, BIDI_ON  },  // KANGXI RADICAL TURTLE
+  { 0x2FD5, BIDI_ON  },  // KANGXI RADICAL FLUTE
+  { 0x2FF0, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+  { 0x2FF1, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+  { 0x2FF2, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+  { 0x2FF3, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+  { 0x2FF4, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+  { 0x2FF5, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+  { 0x2FF6, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+  { 0x2FF7, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+  { 0x2FF8, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+  { 0x2FF9, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+  { 0x2FFA, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+  { 0x2FFB, BIDI_ON  },  // IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_3 == 1)
+
+  { 0x3000, BIDI_WS  },  // IDEOGRAPHIC SPACE
+  { 0x3001, BIDI_ON  },  // IDEOGRAPHIC COMMA
+  { 0x3002, BIDI_ON  },  // IDEOGRAPHIC FULL STOP
+  { 0x3003, BIDI_ON  },  // DITTO MARK
+  { 0x3004, BIDI_ON  },  // JAPANESE INDUSTRIAL STANDARD SYMBOL
+  { 0x3005, BIDI_L   },  // IDEOGRAPHIC ITERATION MARK
+  { 0x3006, BIDI_L   },  // IDEOGRAPHIC CLOSING MARK
+  { 0x3007, BIDI_L   },  // IDEOGRAPHIC NUMBER ZERO
+  { 0x3008, BIDI_ON  },  // LEFT ANGLE BRACKET
+  { 0x3009, BIDI_ON  },  // RIGHT ANGLE BRACKET
+  { 0x300A, BIDI_ON  },  // LEFT DOUBLE ANGLE BRACKET
+  { 0x300B, BIDI_ON  },  // RIGHT DOUBLE ANGLE BRACKET
+  { 0x300C, BIDI_ON  },  // LEFT CORNER BRACKET
+  { 0x300D, BIDI_ON  },  // RIGHT CORNER BRACKET
+  { 0x300E, BIDI_ON  },  // LEFT WHITE CORNER BRACKET
+  { 0x300F, BIDI_ON  },  // RIGHT WHITE CORNER BRACKET
+  { 0x3010, BIDI_ON  },  // LEFT BLACK LENTICULAR BRACKET
+  { 0x3011, BIDI_ON  },  // RIGHT BLACK LENTICULAR BRACKET
+  { 0x3012, BIDI_ON  },  // POSTAL MARK
+  { 0x3013, BIDI_ON  },  // GETA MARK
+  { 0x3014, BIDI_ON  },  // LEFT TORTOISE SHELL BRACKET
+  { 0x3015, BIDI_ON  },  // RIGHT TORTOISE SHELL BRACKET
+  { 0x3016, BIDI_ON  },  // LEFT WHITE LENTICULAR BRACKET
+  { 0x3017, BIDI_ON  },  // RIGHT WHITE LENTICULAR BRACKET
+  { 0x3018, BIDI_ON  },  // LEFT WHITE TORTOISE SHELL BRACKET
+  { 0x3019, BIDI_ON  },  // RIGHT WHITE TORTOISE SHELL BRACKET
+  { 0x301A, BIDI_ON  },  // LEFT WHITE SQUARE BRACKET
+  { 0x301B, BIDI_ON  },  // RIGHT WHITE SQUARE BRACKET
+  { 0x301C, BIDI_ON  },  // WAVE DASH
+  { 0x301D, BIDI_ON  },  // REVERSED DOUBLE PRIME QUOTATION MARK
+  { 0x301E, BIDI_ON  },  // DOUBLE PRIME QUOTATION MARK
+  { 0x301F, BIDI_ON  },  // LOW DOUBLE PRIME QUOTATION MARK
+  { 0x3020, BIDI_ON  },  // POSTAL MARK FACE
+  { 0x3021, BIDI_L   },  // HANGZHOU NUMERAL ONE
+  { 0x3022, BIDI_L   },  // HANGZHOU NUMERAL TWO
+  { 0x3023, BIDI_L   },  // HANGZHOU NUMERAL THREE
+  { 0x3024, BIDI_L   },  // HANGZHOU NUMERAL FOUR
+  { 0x3025, BIDI_L   },  // HANGZHOU NUMERAL FIVE
+  { 0x3026, BIDI_L   },  // HANGZHOU NUMERAL SIX
+  { 0x3027, BIDI_L   },  // HANGZHOU NUMERAL SEVEN
+  { 0x3028, BIDI_L   },  // HANGZHOU NUMERAL EIGHT
+  { 0x3029, BIDI_L   },  // HANGZHOU NUMERAL NINE
+  { 0x302A, BIDI_NSM },  // IDEOGRAPHIC LEVEL TONE MARK
+  { 0x302B, BIDI_NSM },  // IDEOGRAPHIC RISING TONE MARK
+  { 0x302C, BIDI_NSM },  // IDEOGRAPHIC DEPARTING TONE MARK
+  { 0x302D, BIDI_NSM },  // IDEOGRAPHIC ENTERING TONE MARK
+  { 0x302E, BIDI_L   },  // HANGUL SINGLE DOT TONE MARK
+  { 0x302F, BIDI_L   },  // HANGUL DOUBLE DOT TONE MARK
+  { 0x3030, BIDI_ON  },  // WAVY DASH
+  { 0x3031, BIDI_L   },  // VERTICAL KANA REPEAT MARK
+  { 0x3032, BIDI_L   },  // VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+  { 0x3033, BIDI_L   },  // VERTICAL KANA REPEAT MARK UPPER HALF
+  { 0x3034, BIDI_L   },  // VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+  { 0x3035, BIDI_L   },  // VERTICAL KANA REPEAT MARK LOWER HALF
+  { 0x3036, BIDI_ON  },  // CIRCLED POSTAL MARK
+  { 0x3037, BIDI_ON  },  // IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+  { 0x3038, BIDI_L   },  // HANGZHOU NUMERAL TEN
+  { 0x3039, BIDI_L   },  // HANGZHOU NUMERAL TWENTY
+  { 0x303A, BIDI_L   },  // HANGZHOU NUMERAL THIRTY
+  { 0x303B, BIDI_L   },  // VERTICAL IDEOGRAPHIC ITERATION MARK
+  { 0x303C, BIDI_L   },  // MASU MARK
+  { 0x303D, BIDI_ON  },  // PART ALTERNATION MARK
+  { 0x303E, BIDI_ON  },  // IDEOGRAPHIC VARIATION INDICATOR
+  { 0x303F, BIDI_ON  },  // IDEOGRAPHIC HALF FILL SPACE
+  { 0x3041, BIDI_L   },  // HIRAGANA LETTER SMALL A
+  { 0x3042, BIDI_L   },  // HIRAGANA LETTER A
+  { 0x3043, BIDI_L   },  // HIRAGANA LETTER SMALL I
+  { 0x3044, BIDI_L   },  // HIRAGANA LETTER I
+  { 0x3045, BIDI_L   },  // HIRAGANA LETTER SMALL U
+  { 0x3046, BIDI_L   },  // HIRAGANA LETTER U
+  { 0x3047, BIDI_L   },  // HIRAGANA LETTER SMALL E
+  { 0x3048, BIDI_L   },  // HIRAGANA LETTER E
+  { 0x3049, BIDI_L   },  // HIRAGANA LETTER SMALL O
+  { 0x304A, BIDI_L   },  // HIRAGANA LETTER O
+  { 0x304B, BIDI_L   },  // HIRAGANA LETTER KA
+  { 0x304C, BIDI_L   },  // HIRAGANA LETTER GA
+  { 0x304D, BIDI_L   },  // HIRAGANA LETTER KI
+  { 0x304E, BIDI_L   },  // HIRAGANA LETTER GI
+  { 0x304F, BIDI_L   },  // HIRAGANA LETTER KU
+  { 0x3050, BIDI_L   },  // HIRAGANA LETTER GU
+  { 0x3051, BIDI_L   },  // HIRAGANA LETTER KE
+  { 0x3052, BIDI_L   },  // HIRAGANA LETTER GE
+  { 0x3053, BIDI_L   },  // HIRAGANA LETTER KO
+  { 0x3054, BIDI_L   },  // HIRAGANA LETTER GO
+  { 0x3055, BIDI_L   },  // HIRAGANA LETTER SA
+  { 0x3056, BIDI_L   },  // HIRAGANA LETTER ZA
+  { 0x3057, BIDI_L   },  // HIRAGANA LETTER SI
+  { 0x3058, BIDI_L   },  // HIRAGANA LETTER ZI
+  { 0x3059, BIDI_L   },  // HIRAGANA LETTER SU
+  { 0x305A, BIDI_L   },  // HIRAGANA LETTER ZU
+  { 0x305B, BIDI_L   },  // HIRAGANA LETTER SE
+  { 0x305C, BIDI_L   },  // HIRAGANA LETTER ZE
+  { 0x305D, BIDI_L   },  // HIRAGANA LETTER SO
+  { 0x305E, BIDI_L   },  // HIRAGANA LETTER ZO
+  { 0x305F, BIDI_L   },  // HIRAGANA LETTER TA
+  { 0x3060, BIDI_L   },  // HIRAGANA LETTER DA
+  { 0x3061, BIDI_L   },  // HIRAGANA LETTER TI
+  { 0x3062, BIDI_L   },  // HIRAGANA LETTER DI
+  { 0x3063, BIDI_L   },  // HIRAGANA LETTER SMALL TU
+  { 0x3064, BIDI_L   },  // HIRAGANA LETTER TU
+  { 0x3065, BIDI_L   },  // HIRAGANA LETTER DU
+  { 0x3066, BIDI_L   },  // HIRAGANA LETTER TE
+  { 0x3067, BIDI_L   },  // HIRAGANA LETTER DE
+  { 0x3068, BIDI_L   },  // HIRAGANA LETTER TO
+  { 0x3069, BIDI_L   },  // HIRAGANA LETTER DO
+  { 0x306A, BIDI_L   },  // HIRAGANA LETTER NA
+  { 0x306B, BIDI_L   },  // HIRAGANA LETTER NI
+  { 0x306C, BIDI_L   },  // HIRAGANA LETTER NU
+  { 0x306D, BIDI_L   },  // HIRAGANA LETTER NE
+  { 0x306E, BIDI_L   },  // HIRAGANA LETTER NO
+  { 0x306F, BIDI_L   },  // HIRAGANA LETTER HA
+  { 0x3070, BIDI_L   },  // HIRAGANA LETTER BA
+  { 0x3071, BIDI_L   },  // HIRAGANA LETTER PA
+  { 0x3072, BIDI_L   },  // HIRAGANA LETTER HI
+  { 0x3073, BIDI_L   },  // HIRAGANA LETTER BI
+  { 0x3074, BIDI_L   },  // HIRAGANA LETTER PI
+  { 0x3075, BIDI_L   },  // HIRAGANA LETTER HU
+  { 0x3076, BIDI_L   },  // HIRAGANA LETTER BU
+  { 0x3077, BIDI_L   },  // HIRAGANA LETTER PU
+  { 0x3078, BIDI_L   },  // HIRAGANA LETTER HE
+  { 0x3079, BIDI_L   },  // HIRAGANA LETTER BE
+  { 0x307A, BIDI_L   },  // HIRAGANA LETTER PE
+  { 0x307B, BIDI_L   },  // HIRAGANA LETTER HO
+  { 0x307C, BIDI_L   },  // HIRAGANA LETTER BO
+  { 0x307D, BIDI_L   },  // HIRAGANA LETTER PO
+  { 0x307E, BIDI_L   },  // HIRAGANA LETTER MA
+  { 0x307F, BIDI_L   },  // HIRAGANA LETTER MI
+  { 0x3080, BIDI_L   },  // HIRAGANA LETTER MU
+  { 0x3081, BIDI_L   },  // HIRAGANA LETTER ME
+  { 0x3082, BIDI_L   },  // HIRAGANA LETTER MO
+  { 0x3083, BIDI_L   },  // HIRAGANA LETTER SMALL YA
+  { 0x3084, BIDI_L   },  // HIRAGANA LETTER YA
+  { 0x3085, BIDI_L   },  // HIRAGANA LETTER SMALL YU
+  { 0x3086, BIDI_L   },  // HIRAGANA LETTER YU
+  { 0x3087, BIDI_L   },  // HIRAGANA LETTER SMALL YO
+  { 0x3088, BIDI_L   },  // HIRAGANA LETTER YO
+  { 0x3089, BIDI_L   },  // HIRAGANA LETTER RA
+  { 0x308A, BIDI_L   },  // HIRAGANA LETTER RI
+  { 0x308B, BIDI_L   },  // HIRAGANA LETTER RU
+  { 0x308C, BIDI_L   },  // HIRAGANA LETTER RE
+  { 0x308D, BIDI_L   },  // HIRAGANA LETTER RO
+  { 0x308E, BIDI_L   },  // HIRAGANA LETTER SMALL WA
+  { 0x308F, BIDI_L   },  // HIRAGANA LETTER WA
+  { 0x3090, BIDI_L   },  // HIRAGANA LETTER WI
+  { 0x3091, BIDI_L   },  // HIRAGANA LETTER WE
+  { 0x3092, BIDI_L   },  // HIRAGANA LETTER WO
+  { 0x3093, BIDI_L   },  // HIRAGANA LETTER N
+  { 0x3094, BIDI_L   },  // HIRAGANA LETTER VU
+  { 0x3095, BIDI_L   },  // HIRAGANA LETTER SMALL KA
+  { 0x3096, BIDI_L   },  // HIRAGANA LETTER SMALL KE
+  { 0x3099, BIDI_NSM },  // COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+  { 0x309A, BIDI_NSM },  // COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+  { 0x309B, BIDI_ON  },  // KATAKANA-HIRAGANA VOICED SOUND MARK
+  { 0x309C, BIDI_ON  },  // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+  { 0x309D, BIDI_L   },  // HIRAGANA ITERATION MARK
+  { 0x309E, BIDI_L   },  // HIRAGANA VOICED ITERATION MARK
+  { 0x309F, BIDI_L   },  // HIRAGANA DIGRAPH YORI
+  { 0x30A0, BIDI_ON  },  // KATAKANA-HIRAGANA DOUBLE HYPHEN
+  { 0x30A1, BIDI_L   },  // KATAKANA LETTER SMALL A
+  { 0x30A2, BIDI_L   },  // KATAKANA LETTER A
+  { 0x30A3, BIDI_L   },  // KATAKANA LETTER SMALL I
+  { 0x30A4, BIDI_L   },  // KATAKANA LETTER I
+  { 0x30A5, BIDI_L   },  // KATAKANA LETTER SMALL U
+  { 0x30A6, BIDI_L   },  // KATAKANA LETTER U
+  { 0x30A7, BIDI_L   },  // KATAKANA LETTER SMALL E
+  { 0x30A8, BIDI_L   },  // KATAKANA LETTER E
+  { 0x30A9, BIDI_L   },  // KATAKANA LETTER SMALL O
+  { 0x30AA, BIDI_L   },  // KATAKANA LETTER O
+  { 0x30AB, BIDI_L   },  // KATAKANA LETTER KA
+  { 0x30AC, BIDI_L   },  // KATAKANA LETTER GA
+  { 0x30AD, BIDI_L   },  // KATAKANA LETTER KI
+  { 0x30AE, BIDI_L   },  // KATAKANA LETTER GI
+  { 0x30AF, BIDI_L   },  // KATAKANA LETTER KU
+  { 0x30B0, BIDI_L   },  // KATAKANA LETTER GU
+  { 0x30B1, BIDI_L   },  // KATAKANA LETTER KE
+  { 0x30B2, BIDI_L   },  // KATAKANA LETTER GE
+  { 0x30B3, BIDI_L   },  // KATAKANA LETTER KO
+  { 0x30B4, BIDI_L   },  // KATAKANA LETTER GO
+  { 0x30B5, BIDI_L   },  // KATAKANA LETTER SA
+  { 0x30B6, BIDI_L   },  // KATAKANA LETTER ZA
+  { 0x30B7, BIDI_L   },  // KATAKANA LETTER SI
+  { 0x30B8, BIDI_L   },  // KATAKANA LETTER ZI
+  { 0x30B9, BIDI_L   },  // KATAKANA LETTER SU
+  { 0x30BA, BIDI_L   },  // KATAKANA LETTER ZU
+  { 0x30BB, BIDI_L   },  // KATAKANA LETTER SE
+  { 0x30BC, BIDI_L   },  // KATAKANA LETTER ZE
+  { 0x30BD, BIDI_L   },  // KATAKANA LETTER SO
+  { 0x30BE, BIDI_L   },  // KATAKANA LETTER ZO
+  { 0x30BF, BIDI_L   },  // KATAKANA LETTER TA
+  { 0x30C0, BIDI_L   },  // KATAKANA LETTER DA
+  { 0x30C1, BIDI_L   },  // KATAKANA LETTER TI
+  { 0x30C2, BIDI_L   },  // KATAKANA LETTER DI
+  { 0x30C3, BIDI_L   },  // KATAKANA LETTER SMALL TU
+  { 0x30C4, BIDI_L   },  // KATAKANA LETTER TU
+  { 0x30C5, BIDI_L   },  // KATAKANA LETTER DU
+  { 0x30C6, BIDI_L   },  // KATAKANA LETTER TE
+  { 0x30C7, BIDI_L   },  // KATAKANA LETTER DE
+  { 0x30C8, BIDI_L   },  // KATAKANA LETTER TO
+  { 0x30C9, BIDI_L   },  // KATAKANA LETTER DO
+  { 0x30CA, BIDI_L   },  // KATAKANA LETTER NA
+  { 0x30CB, BIDI_L   },  // KATAKANA LETTER NI
+  { 0x30CC, BIDI_L   },  // KATAKANA LETTER NU
+  { 0x30CD, BIDI_L   },  // KATAKANA LETTER NE
+  { 0x30CE, BIDI_L   },  // KATAKANA LETTER NO
+  { 0x30CF, BIDI_L   },  // KATAKANA LETTER HA
+  { 0x30D0, BIDI_L   },  // KATAKANA LETTER BA
+  { 0x30D1, BIDI_L   },  // KATAKANA LETTER PA
+  { 0x30D2, BIDI_L   },  // KATAKANA LETTER HI
+  { 0x30D3, BIDI_L   },  // KATAKANA LETTER BI
+  { 0x30D4, BIDI_L   },  // KATAKANA LETTER PI
+  { 0x30D5, BIDI_L   },  // KATAKANA LETTER HU
+  { 0x30D6, BIDI_L   },  // KATAKANA LETTER BU
+  { 0x30D7, BIDI_L   },  // KATAKANA LETTER PU
+  { 0x30D8, BIDI_L   },  // KATAKANA LETTER HE
+  { 0x30D9, BIDI_L   },  // KATAKANA LETTER BE
+  { 0x30DA, BIDI_L   },  // KATAKANA LETTER PE
+  { 0x30DB, BIDI_L   },  // KATAKANA LETTER HO
+  { 0x30DC, BIDI_L   },  // KATAKANA LETTER BO
+  { 0x30DD, BIDI_L   },  // KATAKANA LETTER PO
+  { 0x30DE, BIDI_L   },  // KATAKANA LETTER MA
+  { 0x30DF, BIDI_L   },  // KATAKANA LETTER MI
+  { 0x30E0, BIDI_L   },  // KATAKANA LETTER MU
+  { 0x30E1, BIDI_L   },  // KATAKANA LETTER ME
+  { 0x30E2, BIDI_L   },  // KATAKANA LETTER MO
+  { 0x30E3, BIDI_L   },  // KATAKANA LETTER SMALL YA
+  { 0x30E4, BIDI_L   },  // KATAKANA LETTER YA
+  { 0x30E5, BIDI_L   },  // KATAKANA LETTER SMALL YU
+  { 0x30E6, BIDI_L   },  // KATAKANA LETTER YU
+  { 0x30E7, BIDI_L   },  // KATAKANA LETTER SMALL YO
+  { 0x30E8, BIDI_L   },  // KATAKANA LETTER YO
+  { 0x30E9, BIDI_L   },  // KATAKANA LETTER RA
+  { 0x30EA, BIDI_L   },  // KATAKANA LETTER RI
+  { 0x30EB, BIDI_L   },  // KATAKANA LETTER RU
+  { 0x30EC, BIDI_L   },  // KATAKANA LETTER RE
+  { 0x30ED, BIDI_L   },  // KATAKANA LETTER RO
+  { 0x30EE, BIDI_L   },  // KATAKANA LETTER SMALL WA
+  { 0x30EF, BIDI_L   },  // KATAKANA LETTER WA
+  { 0x30F0, BIDI_L   },  // KATAKANA LETTER WI
+  { 0x30F1, BIDI_L   },  // KATAKANA LETTER WE
+  { 0x30F2, BIDI_L   },  // KATAKANA LETTER WO
+  { 0x30F3, BIDI_L   },  // KATAKANA LETTER N
+  { 0x30F4, BIDI_L   },  // KATAKANA LETTER VU
+  { 0x30F5, BIDI_L   },  // KATAKANA LETTER SMALL KA
+  { 0x30F6, BIDI_L   },  // KATAKANA LETTER SMALL KE
+  { 0x30F7, BIDI_L   },  // KATAKANA LETTER VA
+  { 0x30F8, BIDI_L   },  // KATAKANA LETTER VI
+  { 0x30F9, BIDI_L   },  // KATAKANA LETTER VE
+  { 0x30FA, BIDI_L   },  // KATAKANA LETTER VO
+  { 0x30FB, BIDI_ON  },  // KATAKANA MIDDLE DOT
+  { 0x30FC, BIDI_L   },  // KATAKANA-HIRAGANA PROLONGED SOUND MARK
+  { 0x30FD, BIDI_L   },  // KATAKANA ITERATION MARK
+  { 0x30FE, BIDI_L   },  // KATAKANA VOICED ITERATION MARK
+  { 0x30FF, BIDI_L   },  // KATAKANA DIGRAPH KOTO
+  { 0x3105, BIDI_L   },  // BOPOMOFO LETTER B
+  { 0x3106, BIDI_L   },  // BOPOMOFO LETTER P
+  { 0x3107, BIDI_L   },  // BOPOMOFO LETTER M
+  { 0x3108, BIDI_L   },  // BOPOMOFO LETTER F
+  { 0x3109, BIDI_L   },  // BOPOMOFO LETTER D
+  { 0x310A, BIDI_L   },  // BOPOMOFO LETTER T
+  { 0x310B, BIDI_L   },  // BOPOMOFO LETTER N
+  { 0x310C, BIDI_L   },  // BOPOMOFO LETTER L
+  { 0x310D, BIDI_L   },  // BOPOMOFO LETTER G
+  { 0x310E, BIDI_L   },  // BOPOMOFO LETTER K
+  { 0x310F, BIDI_L   },  // BOPOMOFO LETTER H
+  { 0x3110, BIDI_L   },  // BOPOMOFO LETTER J
+  { 0x3111, BIDI_L   },  // BOPOMOFO LETTER Q
+  { 0x3112, BIDI_L   },  // BOPOMOFO LETTER X
+  { 0x3113, BIDI_L   },  // BOPOMOFO LETTER ZH
+  { 0x3114, BIDI_L   },  // BOPOMOFO LETTER CH
+  { 0x3115, BIDI_L   },  // BOPOMOFO LETTER SH
+  { 0x3116, BIDI_L   },  // BOPOMOFO LETTER R
+  { 0x3117, BIDI_L   },  // BOPOMOFO LETTER Z
+  { 0x3118, BIDI_L   },  // BOPOMOFO LETTER C
+  { 0x3119, BIDI_L   },  // BOPOMOFO LETTER S
+  { 0x311A, BIDI_L   },  // BOPOMOFO LETTER A
+  { 0x311B, BIDI_L   },  // BOPOMOFO LETTER O
+  { 0x311C, BIDI_L   },  // BOPOMOFO LETTER E
+  { 0x311D, BIDI_L   },  // BOPOMOFO LETTER EH
+  { 0x311E, BIDI_L   },  // BOPOMOFO LETTER AI
+  { 0x311F, BIDI_L   },  // BOPOMOFO LETTER EI
+  { 0x3120, BIDI_L   },  // BOPOMOFO LETTER AU
+  { 0x3121, BIDI_L   },  // BOPOMOFO LETTER OU
+  { 0x3122, BIDI_L   },  // BOPOMOFO LETTER AN
+  { 0x3123, BIDI_L   },  // BOPOMOFO LETTER EN
+  { 0x3124, BIDI_L   },  // BOPOMOFO LETTER ANG
+  { 0x3125, BIDI_L   },  // BOPOMOFO LETTER ENG
+  { 0x3126, BIDI_L   },  // BOPOMOFO LETTER ER
+  { 0x3127, BIDI_L   },  // BOPOMOFO LETTER I
+  { 0x3128, BIDI_L   },  // BOPOMOFO LETTER U
+  { 0x3129, BIDI_L   },  // BOPOMOFO LETTER IU
+  { 0x312A, BIDI_L   },  // BOPOMOFO LETTER V
+  { 0x312B, BIDI_L   },  // BOPOMOFO LETTER NG
+  { 0x312C, BIDI_L   },  // BOPOMOFO LETTER GN
+  { 0x312D, BIDI_L   },  // BOPOMOFO LETTER IH
+  { 0x3131, BIDI_L   },  // HANGUL LETTER KIYEOK
+  { 0x3132, BIDI_L   },  // HANGUL LETTER SSANGKIYEOK
+  { 0x3133, BIDI_L   },  // HANGUL LETTER KIYEOK-SIOS
+  { 0x3134, BIDI_L   },  // HANGUL LETTER NIEUN
+  { 0x3135, BIDI_L   },  // HANGUL LETTER NIEUN-CIEUC
+  { 0x3136, BIDI_L   },  // HANGUL LETTER NIEUN-HIEUH
+  { 0x3137, BIDI_L   },  // HANGUL LETTER TIKEUT
+  { 0x3138, BIDI_L   },  // HANGUL LETTER SSANGTIKEUT
+  { 0x3139, BIDI_L   },  // HANGUL LETTER RIEUL
+  { 0x313A, BIDI_L   },  // HANGUL LETTER RIEUL-KIYEOK
+  { 0x313B, BIDI_L   },  // HANGUL LETTER RIEUL-MIEUM
+  { 0x313C, BIDI_L   },  // HANGUL LETTER RIEUL-PIEUP
+  { 0x313D, BIDI_L   },  // HANGUL LETTER RIEUL-SIOS
+  { 0x313E, BIDI_L   },  // HANGUL LETTER RIEUL-THIEUTH
+  { 0x313F, BIDI_L   },  // HANGUL LETTER RIEUL-PHIEUPH
+  { 0x3140, BIDI_L   },  // HANGUL LETTER RIEUL-HIEUH
+  { 0x3141, BIDI_L   },  // HANGUL LETTER MIEUM
+  { 0x3142, BIDI_L   },  // HANGUL LETTER PIEUP
+  { 0x3143, BIDI_L   },  // HANGUL LETTER SSANGPIEUP
+  { 0x3144, BIDI_L   },  // HANGUL LETTER PIEUP-SIOS
+  { 0x3145, BIDI_L   },  // HANGUL LETTER SIOS
+  { 0x3146, BIDI_L   },  // HANGUL LETTER SSANGSIOS
+  { 0x3147, BIDI_L   },  // HANGUL LETTER IEUNG
+  { 0x3148, BIDI_L   },  // HANGUL LETTER CIEUC
+  { 0x3149, BIDI_L   },  // HANGUL LETTER SSANGCIEUC
+  { 0x314A, BIDI_L   },  // HANGUL LETTER CHIEUCH
+  { 0x314B, BIDI_L   },  // HANGUL LETTER KHIEUKH
+  { 0x314C, BIDI_L   },  // HANGUL LETTER THIEUTH
+  { 0x314D, BIDI_L   },  // HANGUL LETTER PHIEUPH
+  { 0x314E, BIDI_L   },  // HANGUL LETTER HIEUH
+  { 0x314F, BIDI_L   },  // HANGUL LETTER A
+  { 0x3150, BIDI_L   },  // HANGUL LETTER AE
+  { 0x3151, BIDI_L   },  // HANGUL LETTER YA
+  { 0x3152, BIDI_L   },  // HANGUL LETTER YAE
+  { 0x3153, BIDI_L   },  // HANGUL LETTER EO
+  { 0x3154, BIDI_L   },  // HANGUL LETTER E
+  { 0x3155, BIDI_L   },  // HANGUL LETTER YEO
+  { 0x3156, BIDI_L   },  // HANGUL LETTER YE
+  { 0x3157, BIDI_L   },  // HANGUL LETTER O
+  { 0x3158, BIDI_L   },  // HANGUL LETTER WA
+  { 0x3159, BIDI_L   },  // HANGUL LETTER WAE
+  { 0x315A, BIDI_L   },  // HANGUL LETTER OE
+  { 0x315B, BIDI_L   },  // HANGUL LETTER YO
+  { 0x315C, BIDI_L   },  // HANGUL LETTER U
+  { 0x315D, BIDI_L   },  // HANGUL LETTER WEO
+  { 0x315E, BIDI_L   },  // HANGUL LETTER WE
+  { 0x315F, BIDI_L   },  // HANGUL LETTER WI
+  { 0x3160, BIDI_L   },  // HANGUL LETTER YU
+  { 0x3161, BIDI_L   },  // HANGUL LETTER EU
+  { 0x3162, BIDI_L   },  // HANGUL LETTER YI
+  { 0x3163, BIDI_L   },  // HANGUL LETTER I
+  { 0x3164, BIDI_L   },  // HANGUL FILLER
+  { 0x3165, BIDI_L   },  // HANGUL LETTER SSANGNIEUN
+  { 0x3166, BIDI_L   },  // HANGUL LETTER NIEUN-TIKEUT
+  { 0x3167, BIDI_L   },  // HANGUL LETTER NIEUN-SIOS
+  { 0x3168, BIDI_L   },  // HANGUL LETTER NIEUN-PANSIOS
+  { 0x3169, BIDI_L   },  // HANGUL LETTER RIEUL-KIYEOK-SIOS
+  { 0x316A, BIDI_L   },  // HANGUL LETTER RIEUL-TIKEUT
+  { 0x316B, BIDI_L   },  // HANGUL LETTER RIEUL-PIEUP-SIOS
+  { 0x316C, BIDI_L   },  // HANGUL LETTER RIEUL-PANSIOS
+  { 0x316D, BIDI_L   },  // HANGUL LETTER RIEUL-YEORINHIEUH
+  { 0x316E, BIDI_L   },  // HANGUL LETTER MIEUM-PIEUP
+  { 0x316F, BIDI_L   },  // HANGUL LETTER MIEUM-SIOS
+  { 0x3170, BIDI_L   },  // HANGUL LETTER MIEUM-PANSIOS
+  { 0x3171, BIDI_L   },  // HANGUL LETTER KAPYEOUNMIEUM
+  { 0x3172, BIDI_L   },  // HANGUL LETTER PIEUP-KIYEOK
+  { 0x3173, BIDI_L   },  // HANGUL LETTER PIEUP-TIKEUT
+  { 0x3174, BIDI_L   },  // HANGUL LETTER PIEUP-SIOS-KIYEOK
+  { 0x3175, BIDI_L   },  // HANGUL LETTER PIEUP-SIOS-TIKEUT
+  { 0x3176, BIDI_L   },  // HANGUL LETTER PIEUP-CIEUC
+  { 0x3177, BIDI_L   },  // HANGUL LETTER PIEUP-THIEUTH
+  { 0x3178, BIDI_L   },  // HANGUL LETTER KAPYEOUNPIEUP
+  { 0x3179, BIDI_L   },  // HANGUL LETTER KAPYEOUNSSANGPIEUP
+  { 0x317A, BIDI_L   },  // HANGUL LETTER SIOS-KIYEOK
+  { 0x317B, BIDI_L   },  // HANGUL LETTER SIOS-NIEUN
+  { 0x317C, BIDI_L   },  // HANGUL LETTER SIOS-TIKEUT
+  { 0x317D, BIDI_L   },  // HANGUL LETTER SIOS-PIEUP
+  { 0x317E, BIDI_L   },  // HANGUL LETTER SIOS-CIEUC
+  { 0x317F, BIDI_L   },  // HANGUL LETTER PANSIOS
+  { 0x3180, BIDI_L   },  // HANGUL LETTER SSANGIEUNG
+  { 0x3181, BIDI_L   },  // HANGUL LETTER YESIEUNG
+  { 0x3182, BIDI_L   },  // HANGUL LETTER YESIEUNG-SIOS
+  { 0x3183, BIDI_L   },  // HANGUL LETTER YESIEUNG-PANSIOS
+  { 0x3184, BIDI_L   },  // HANGUL LETTER KAPYEOUNPHIEUPH
+  { 0x3185, BIDI_L   },  // HANGUL LETTER SSANGHIEUH
+  { 0x3186, BIDI_L   },  // HANGUL LETTER YEORINHIEUH
+  { 0x3187, BIDI_L   },  // HANGUL LETTER YO-YA
+  { 0x3188, BIDI_L   },  // HANGUL LETTER YO-YAE
+  { 0x3189, BIDI_L   },  // HANGUL LETTER YO-I
+  { 0x318A, BIDI_L   },  // HANGUL LETTER YU-YEO
+  { 0x318B, BIDI_L   },  // HANGUL LETTER YU-YE
+  { 0x318C, BIDI_L   },  // HANGUL LETTER YU-I
+  { 0x318D, BIDI_L   },  // HANGUL LETTER ARAEA
+  { 0x318E, BIDI_L   },  // HANGUL LETTER ARAEAE
+  { 0x3190, BIDI_L   },  // IDEOGRAPHIC ANNOTATION LINKING MARK
+  { 0x3191, BIDI_L   },  // IDEOGRAPHIC ANNOTATION REVERSE MARK
+  { 0x3192, BIDI_L   },  // IDEOGRAPHIC ANNOTATION ONE MARK
+  { 0x3193, BIDI_L   },  // IDEOGRAPHIC ANNOTATION TWO MARK
+  { 0x3194, BIDI_L   },  // IDEOGRAPHIC ANNOTATION THREE MARK
+  { 0x3195, BIDI_L   },  // IDEOGRAPHIC ANNOTATION FOUR MARK
+  { 0x3196, BIDI_L   },  // IDEOGRAPHIC ANNOTATION TOP MARK
+  { 0x3197, BIDI_L   },  // IDEOGRAPHIC ANNOTATION MIDDLE MARK
+  { 0x3198, BIDI_L   },  // IDEOGRAPHIC ANNOTATION BOTTOM MARK
+  { 0x3199, BIDI_L   },  // IDEOGRAPHIC ANNOTATION FIRST MARK
+  { 0x319A, BIDI_L   },  // IDEOGRAPHIC ANNOTATION SECOND MARK
+  { 0x319B, BIDI_L   },  // IDEOGRAPHIC ANNOTATION THIRD MARK
+  { 0x319C, BIDI_L   },  // IDEOGRAPHIC ANNOTATION FOURTH MARK
+  { 0x319D, BIDI_L   },  // IDEOGRAPHIC ANNOTATION HEAVEN MARK
+  { 0x319E, BIDI_L   },  // IDEOGRAPHIC ANNOTATION EARTH MARK
+  { 0x319F, BIDI_L   },  // IDEOGRAPHIC ANNOTATION MAN MARK
+  { 0x31A0, BIDI_L   },  // BOPOMOFO LETTER BU
+  { 0x31A1, BIDI_L   },  // BOPOMOFO LETTER ZI
+  { 0x31A2, BIDI_L   },  // BOPOMOFO LETTER JI
+  { 0x31A3, BIDI_L   },  // BOPOMOFO LETTER GU
+  { 0x31A4, BIDI_L   },  // BOPOMOFO LETTER EE
+  { 0x31A5, BIDI_L   },  // BOPOMOFO LETTER ENN
+  { 0x31A6, BIDI_L   },  // BOPOMOFO LETTER OO
+  { 0x31A7, BIDI_L   },  // BOPOMOFO LETTER ONN
+  { 0x31A8, BIDI_L   },  // BOPOMOFO LETTER IR
+  { 0x31A9, BIDI_L   },  // BOPOMOFO LETTER ANN
+  { 0x31AA, BIDI_L   },  // BOPOMOFO LETTER INN
+  { 0x31AB, BIDI_L   },  // BOPOMOFO LETTER UNN
+  { 0x31AC, BIDI_L   },  // BOPOMOFO LETTER IM
+  { 0x31AD, BIDI_L   },  // BOPOMOFO LETTER NGG
+  { 0x31AE, BIDI_L   },  // BOPOMOFO LETTER AINN
+  { 0x31AF, BIDI_L   },  // BOPOMOFO LETTER AUNN
+  { 0x31B0, BIDI_L   },  // BOPOMOFO LETTER AM
+  { 0x31B1, BIDI_L   },  // BOPOMOFO LETTER OM
+  { 0x31B2, BIDI_L   },  // BOPOMOFO LETTER ONG
+  { 0x31B3, BIDI_L   },  // BOPOMOFO LETTER INNN
+  { 0x31B4, BIDI_L   },  // BOPOMOFO FINAL LETTER P
+  { 0x31B5, BIDI_L   },  // BOPOMOFO FINAL LETTER T
+  { 0x31B6, BIDI_L   },  // BOPOMOFO FINAL LETTER K
+  { 0x31B7, BIDI_L   },  // BOPOMOFO FINAL LETTER H
+  { 0x31B8, BIDI_L   },  // BOPOMOFO LETTER GH
+  { 0x31B9, BIDI_L   },  // BOPOMOFO LETTER LH
+  { 0x31BA, BIDI_L   },  // BOPOMOFO LETTER ZY
+  { 0x31C0, BIDI_ON  },  // CJK STROKE T
+  { 0x31C1, BIDI_ON  },  // CJK STROKE WG
+  { 0x31C2, BIDI_ON  },  // CJK STROKE XG
+  { 0x31C3, BIDI_ON  },  // CJK STROKE BXG
+  { 0x31C4, BIDI_ON  },  // CJK STROKE SW
+  { 0x31C5, BIDI_ON  },  // CJK STROKE HZZ
+  { 0x31C6, BIDI_ON  },  // CJK STROKE HZG
+  { 0x31C7, BIDI_ON  },  // CJK STROKE HP
+  { 0x31C8, BIDI_ON  },  // CJK STROKE HZWG
+  { 0x31C9, BIDI_ON  },  // CJK STROKE SZWG
+  { 0x31CA, BIDI_ON  },  // CJK STROKE HZT
+  { 0x31CB, BIDI_ON  },  // CJK STROKE HZZP
+  { 0x31CC, BIDI_ON  },  // CJK STROKE HPWG
+  { 0x31CD, BIDI_ON  },  // CJK STROKE HZW
+  { 0x31CE, BIDI_ON  },  // CJK STROKE HZZZ
+  { 0x31CF, BIDI_ON  },  // CJK STROKE N
+  { 0x31D0, BIDI_ON  },  // CJK STROKE H
+  { 0x31D1, BIDI_ON  },  // CJK STROKE S
+  { 0x31D2, BIDI_ON  },  // CJK STROKE P
+  { 0x31D3, BIDI_ON  },  // CJK STROKE SP
+  { 0x31D4, BIDI_ON  },  // CJK STROKE D
+  { 0x31D5, BIDI_ON  },  // CJK STROKE HZ
+  { 0x31D6, BIDI_ON  },  // CJK STROKE HG
+  { 0x31D7, BIDI_ON  },  // CJK STROKE SZ
+  { 0x31D8, BIDI_ON  },  // CJK STROKE SWZ
+  { 0x31D9, BIDI_ON  },  // CJK STROKE ST
+  { 0x31DA, BIDI_ON  },  // CJK STROKE SG
+  { 0x31DB, BIDI_ON  },  // CJK STROKE PD
+  { 0x31DC, BIDI_ON  },  // CJK STROKE PZ
+  { 0x31DD, BIDI_ON  },  // CJK STROKE TN
+  { 0x31DE, BIDI_ON  },  // CJK STROKE SZZ
+  { 0x31DF, BIDI_ON  },  // CJK STROKE SWG
+  { 0x31E0, BIDI_ON  },  // CJK STROKE HXWG
+  { 0x31E1, BIDI_ON  },  // CJK STROKE HZZZG
+  { 0x31E2, BIDI_ON  },  // CJK STROKE PG
+  { 0x31E3, BIDI_ON  },  // CJK STROKE Q
+  { 0x31F0, BIDI_L   },  // KATAKANA LETTER SMALL KU
+  { 0x31F1, BIDI_L   },  // KATAKANA LETTER SMALL SI
+  { 0x31F2, BIDI_L   },  // KATAKANA LETTER SMALL SU
+  { 0x31F3, BIDI_L   },  // KATAKANA LETTER SMALL TO
+  { 0x31F4, BIDI_L   },  // KATAKANA LETTER SMALL NU
+  { 0x31F5, BIDI_L   },  // KATAKANA LETTER SMALL HA
+  { 0x31F6, BIDI_L   },  // KATAKANA LETTER SMALL HI
+  { 0x31F7, BIDI_L   },  // KATAKANA LETTER SMALL HU
+  { 0x31F8, BIDI_L   },  // KATAKANA LETTER SMALL HE
+  { 0x31F9, BIDI_L   },  // KATAKANA LETTER SMALL HO
+  { 0x31FA, BIDI_L   },  // KATAKANA LETTER SMALL MU
+  { 0x31FB, BIDI_L   },  // KATAKANA LETTER SMALL RA
+  { 0x31FC, BIDI_L   },  // KATAKANA LETTER SMALL RI
+  { 0x31FD, BIDI_L   },  // KATAKANA LETTER SMALL RU
+  { 0x31FE, BIDI_L   },  // KATAKANA LETTER SMALL RE
+  { 0x31FF, BIDI_L   },  // KATAKANA LETTER SMALL RO
+  { 0x3200, BIDI_L   },  // PARENTHESIZED HANGUL KIYEOK
+  { 0x3201, BIDI_L   },  // PARENTHESIZED HANGUL NIEUN
+  { 0x3202, BIDI_L   },  // PARENTHESIZED HANGUL TIKEUT
+  { 0x3203, BIDI_L   },  // PARENTHESIZED HANGUL RIEUL
+  { 0x3204, BIDI_L   },  // PARENTHESIZED HANGUL MIEUM
+  { 0x3205, BIDI_L   },  // PARENTHESIZED HANGUL PIEUP
+  { 0x3206, BIDI_L   },  // PARENTHESIZED HANGUL SIOS
+  { 0x3207, BIDI_L   },  // PARENTHESIZED HANGUL IEUNG
+  { 0x3208, BIDI_L   },  // PARENTHESIZED HANGUL CIEUC
+  { 0x3209, BIDI_L   },  // PARENTHESIZED HANGUL CHIEUCH
+  { 0x320A, BIDI_L   },  // PARENTHESIZED HANGUL KHIEUKH
+  { 0x320B, BIDI_L   },  // PARENTHESIZED HANGUL THIEUTH
+  { 0x320C, BIDI_L   },  // PARENTHESIZED HANGUL PHIEUPH
+  { 0x320D, BIDI_L   },  // PARENTHESIZED HANGUL HIEUH
+  { 0x320E, BIDI_L   },  // PARENTHESIZED HANGUL KIYEOK A
+  { 0x320F, BIDI_L   },  // PARENTHESIZED HANGUL NIEUN A
+  { 0x3210, BIDI_L   },  // PARENTHESIZED HANGUL TIKEUT A
+  { 0x3211, BIDI_L   },  // PARENTHESIZED HANGUL RIEUL A
+  { 0x3212, BIDI_L   },  // PARENTHESIZED HANGUL MIEUM A
+  { 0x3213, BIDI_L   },  // PARENTHESIZED HANGUL PIEUP A
+  { 0x3214, BIDI_L   },  // PARENTHESIZED HANGUL SIOS A
+  { 0x3215, BIDI_L   },  // PARENTHESIZED HANGUL IEUNG A
+  { 0x3216, BIDI_L   },  // PARENTHESIZED HANGUL CIEUC A
+  { 0x3217, BIDI_L   },  // PARENTHESIZED HANGUL CHIEUCH A
+  { 0x3218, BIDI_L   },  // PARENTHESIZED HANGUL KHIEUKH A
+  { 0x3219, BIDI_L   },  // PARENTHESIZED HANGUL THIEUTH A
+  { 0x321A, BIDI_L   },  // PARENTHESIZED HANGUL PHIEUPH A
+  { 0x321B, BIDI_L   },  // PARENTHESIZED HANGUL HIEUH A
+  { 0x321C, BIDI_L   },  // PARENTHESIZED HANGUL CIEUC U
+  { 0x321D, BIDI_ON  },  // PARENTHESIZED KOREAN CHARACTER OJEON
+  { 0x321E, BIDI_ON  },  // PARENTHESIZED KOREAN CHARACTER O HU
+  { 0x3220, BIDI_L   },  // PARENTHESIZED IDEOGRAPH ONE
+  { 0x3221, BIDI_L   },  // PARENTHESIZED IDEOGRAPH TWO
+  { 0x3222, BIDI_L   },  // PARENTHESIZED IDEOGRAPH THREE
+  { 0x3223, BIDI_L   },  // PARENTHESIZED IDEOGRAPH FOUR
+  { 0x3224, BIDI_L   },  // PARENTHESIZED IDEOGRAPH FIVE
+  { 0x3225, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SIX
+  { 0x3226, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SEVEN
+  { 0x3227, BIDI_L   },  // PARENTHESIZED IDEOGRAPH EIGHT
+  { 0x3228, BIDI_L   },  // PARENTHESIZED IDEOGRAPH NINE
+  { 0x3229, BIDI_L   },  // PARENTHESIZED IDEOGRAPH TEN
+  { 0x322A, BIDI_L   },  // PARENTHESIZED IDEOGRAPH MOON
+  { 0x322B, BIDI_L   },  // PARENTHESIZED IDEOGRAPH FIRE
+  { 0x322C, BIDI_L   },  // PARENTHESIZED IDEOGRAPH WATER
+  { 0x322D, BIDI_L   },  // PARENTHESIZED IDEOGRAPH WOOD
+  { 0x322E, BIDI_L   },  // PARENTHESIZED IDEOGRAPH METAL
+  { 0x322F, BIDI_L   },  // PARENTHESIZED IDEOGRAPH EARTH
+  { 0x3230, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SUN
+  { 0x3231, BIDI_L   },  // PARENTHESIZED IDEOGRAPH STOCK
+  { 0x3232, BIDI_L   },  // PARENTHESIZED IDEOGRAPH HAVE
+  { 0x3233, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SOCIETY
+  { 0x3234, BIDI_L   },  // PARENTHESIZED IDEOGRAPH NAME
+  { 0x3235, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SPECIAL
+  { 0x3236, BIDI_L   },  // PARENTHESIZED IDEOGRAPH FINANCIAL
+  { 0x3237, BIDI_L   },  // PARENTHESIZED IDEOGRAPH CONGRATULATION
+  { 0x3238, BIDI_L   },  // PARENTHESIZED IDEOGRAPH LABOR
+  { 0x3239, BIDI_L   },  // PARENTHESIZED IDEOGRAPH REPRESENT
+  { 0x323A, BIDI_L   },  // PARENTHESIZED IDEOGRAPH CALL
+  { 0x323B, BIDI_L   },  // PARENTHESIZED IDEOGRAPH STUDY
+  { 0x323C, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SUPERVISE
+  { 0x323D, BIDI_L   },  // PARENTHESIZED IDEOGRAPH ENTERPRISE
+  { 0x323E, BIDI_L   },  // PARENTHESIZED IDEOGRAPH RESOURCE
+  { 0x323F, BIDI_L   },  // PARENTHESIZED IDEOGRAPH ALLIANCE
+  { 0x3240, BIDI_L   },  // PARENTHESIZED IDEOGRAPH FESTIVAL
+  { 0x3241, BIDI_L   },  // PARENTHESIZED IDEOGRAPH REST
+  { 0x3242, BIDI_L   },  // PARENTHESIZED IDEOGRAPH SELF
+  { 0x3243, BIDI_L   },  // PARENTHESIZED IDEOGRAPH REACH
+  { 0x3244, BIDI_L   },  // CIRCLED IDEOGRAPH QUESTION
+  { 0x3245, BIDI_L   },  // CIRCLED IDEOGRAPH KINDERGARTEN
+  { 0x3246, BIDI_L   },  // CIRCLED IDEOGRAPH SCHOOL
+  { 0x3247, BIDI_L   },  // CIRCLED IDEOGRAPH KOTO
+  { 0x3248, BIDI_L   },  // CIRCLED NUMBER TEN ON BLACK SQUARE
+  { 0x3249, BIDI_L   },  // CIRCLED NUMBER TWENTY ON BLACK SQUARE
+  { 0x324A, BIDI_L   },  // CIRCLED NUMBER THIRTY ON BLACK SQUARE
+  { 0x324B, BIDI_L   },  // CIRCLED NUMBER FORTY ON BLACK SQUARE
+  { 0x324C, BIDI_L   },  // CIRCLED NUMBER FIFTY ON BLACK SQUARE
+  { 0x324D, BIDI_L   },  // CIRCLED NUMBER SIXTY ON BLACK SQUARE
+  { 0x324E, BIDI_L   },  // CIRCLED NUMBER SEVENTY ON BLACK SQUARE
+  { 0x324F, BIDI_L   },  // CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+  { 0x3250, BIDI_ON  },  // PARTNERSHIP SIGN
+  { 0x3251, BIDI_ON  },  // CIRCLED NUMBER TWENTY ONE
+  { 0x3252, BIDI_ON  },  // CIRCLED NUMBER TWENTY TWO
+  { 0x3253, BIDI_ON  },  // CIRCLED NUMBER TWENTY THREE
+  { 0x3254, BIDI_ON  },  // CIRCLED NUMBER TWENTY FOUR
+  { 0x3255, BIDI_ON  },  // CIRCLED NUMBER TWENTY FIVE
+  { 0x3256, BIDI_ON  },  // CIRCLED NUMBER TWENTY SIX
+  { 0x3257, BIDI_ON  },  // CIRCLED NUMBER TWENTY SEVEN
+  { 0x3258, BIDI_ON  },  // CIRCLED NUMBER TWENTY EIGHT
+  { 0x3259, BIDI_ON  },  // CIRCLED NUMBER TWENTY NINE
+  { 0x325A, BIDI_ON  },  // CIRCLED NUMBER THIRTY
+  { 0x325B, BIDI_ON  },  // CIRCLED NUMBER THIRTY ONE
+  { 0x325C, BIDI_ON  },  // CIRCLED NUMBER THIRTY TWO
+  { 0x325D, BIDI_ON  },  // CIRCLED NUMBER THIRTY THREE
+  { 0x325E, BIDI_ON  },  // CIRCLED NUMBER THIRTY FOUR
+  { 0x325F, BIDI_ON  },  // CIRCLED NUMBER THIRTY FIVE
+  { 0x3260, BIDI_L   },  // CIRCLED HANGUL KIYEOK
+  { 0x3261, BIDI_L   },  // CIRCLED HANGUL NIEUN
+  { 0x3262, BIDI_L   },  // CIRCLED HANGUL TIKEUT
+  { 0x3263, BIDI_L   },  // CIRCLED HANGUL RIEUL
+  { 0x3264, BIDI_L   },  // CIRCLED HANGUL MIEUM
+  { 0x3265, BIDI_L   },  // CIRCLED HANGUL PIEUP
+  { 0x3266, BIDI_L   },  // CIRCLED HANGUL SIOS
+  { 0x3267, BIDI_L   },  // CIRCLED HANGUL IEUNG
+  { 0x3268, BIDI_L   },  // CIRCLED HANGUL CIEUC
+  { 0x3269, BIDI_L   },  // CIRCLED HANGUL CHIEUCH
+  { 0x326A, BIDI_L   },  // CIRCLED HANGUL KHIEUKH
+  { 0x326B, BIDI_L   },  // CIRCLED HANGUL THIEUTH
+  { 0x326C, BIDI_L   },  // CIRCLED HANGUL PHIEUPH
+  { 0x326D, BIDI_L   },  // CIRCLED HANGUL HIEUH
+  { 0x326E, BIDI_L   },  // CIRCLED HANGUL KIYEOK A
+  { 0x326F, BIDI_L   },  // CIRCLED HANGUL NIEUN A
+  { 0x3270, BIDI_L   },  // CIRCLED HANGUL TIKEUT A
+  { 0x3271, BIDI_L   },  // CIRCLED HANGUL RIEUL A
+  { 0x3272, BIDI_L   },  // CIRCLED HANGUL MIEUM A
+  { 0x3273, BIDI_L   },  // CIRCLED HANGUL PIEUP A
+  { 0x3274, BIDI_L   },  // CIRCLED HANGUL SIOS A
+  { 0x3275, BIDI_L   },  // CIRCLED HANGUL IEUNG A
+  { 0x3276, BIDI_L   },  // CIRCLED HANGUL CIEUC A
+  { 0x3277, BIDI_L   },  // CIRCLED HANGUL CHIEUCH A
+  { 0x3278, BIDI_L   },  // CIRCLED HANGUL KHIEUKH A
+  { 0x3279, BIDI_L   },  // CIRCLED HANGUL THIEUTH A
+  { 0x327A, BIDI_L   },  // CIRCLED HANGUL PHIEUPH A
+  { 0x327B, BIDI_L   },  // CIRCLED HANGUL HIEUH A
+  { 0x327C, BIDI_ON  },  // CIRCLED KOREAN CHARACTER CHAMKO
+  { 0x327D, BIDI_ON  },  // CIRCLED KOREAN CHARACTER JUEUI
+  { 0x327E, BIDI_ON  },  // CIRCLED HANGUL IEUNG U
+  { 0x327F, BIDI_L   },  // KOREAN STANDARD SYMBOL
+  { 0x3280, BIDI_L   },  // CIRCLED IDEOGRAPH ONE
+  { 0x3281, BIDI_L   },  // CIRCLED IDEOGRAPH TWO
+  { 0x3282, BIDI_L   },  // CIRCLED IDEOGRAPH THREE
+  { 0x3283, BIDI_L   },  // CIRCLED IDEOGRAPH FOUR
+  { 0x3284, BIDI_L   },  // CIRCLED IDEOGRAPH FIVE
+  { 0x3285, BIDI_L   },  // CIRCLED IDEOGRAPH SIX
+  { 0x3286, BIDI_L   },  // CIRCLED IDEOGRAPH SEVEN
+  { 0x3287, BIDI_L   },  // CIRCLED IDEOGRAPH EIGHT
+  { 0x3288, BIDI_L   },  // CIRCLED IDEOGRAPH NINE
+  { 0x3289, BIDI_L   },  // CIRCLED IDEOGRAPH TEN
+  { 0x328A, BIDI_L   },  // CIRCLED IDEOGRAPH MOON
+  { 0x328B, BIDI_L   },  // CIRCLED IDEOGRAPH FIRE
+  { 0x328C, BIDI_L   },  // CIRCLED IDEOGRAPH WATER
+  { 0x328D, BIDI_L   },  // CIRCLED IDEOGRAPH WOOD
+  { 0x328E, BIDI_L   },  // CIRCLED IDEOGRAPH METAL
+  { 0x328F, BIDI_L   },  // CIRCLED IDEOGRAPH EARTH
+  { 0x3290, BIDI_L   },  // CIRCLED IDEOGRAPH SUN
+  { 0x3291, BIDI_L   },  // CIRCLED IDEOGRAPH STOCK
+  { 0x3292, BIDI_L   },  // CIRCLED IDEOGRAPH HAVE
+  { 0x3293, BIDI_L   },  // CIRCLED IDEOGRAPH SOCIETY
+  { 0x3294, BIDI_L   },  // CIRCLED IDEOGRAPH NAME
+  { 0x3295, BIDI_L   },  // CIRCLED IDEOGRAPH SPECIAL
+  { 0x3296, BIDI_L   },  // CIRCLED IDEOGRAPH FINANCIAL
+  { 0x3297, BIDI_L   },  // CIRCLED IDEOGRAPH CONGRATULATION
+  { 0x3298, BIDI_L   },  // CIRCLED IDEOGRAPH LABOR
+  { 0x3299, BIDI_L   },  // CIRCLED IDEOGRAPH SECRET
+  { 0x329A, BIDI_L   },  // CIRCLED IDEOGRAPH MALE
+  { 0x329B, BIDI_L   },  // CIRCLED IDEOGRAPH FEMALE
+  { 0x329C, BIDI_L   },  // CIRCLED IDEOGRAPH SUITABLE
+  { 0x329D, BIDI_L   },  // CIRCLED IDEOGRAPH EXCELLENT
+  { 0x329E, BIDI_L   },  // CIRCLED IDEOGRAPH PRINT
+  { 0x329F, BIDI_L   },  // CIRCLED IDEOGRAPH ATTENTION
+  { 0x32A0, BIDI_L   },  // CIRCLED IDEOGRAPH ITEM
+  { 0x32A1, BIDI_L   },  // CIRCLED IDEOGRAPH REST
+  { 0x32A2, BIDI_L   },  // CIRCLED IDEOGRAPH COPY
+  { 0x32A3, BIDI_L   },  // CIRCLED IDEOGRAPH CORRECT
+  { 0x32A4, BIDI_L   },  // CIRCLED IDEOGRAPH HIGH
+  { 0x32A5, BIDI_L   },  // CIRCLED IDEOGRAPH CENTRE
+  { 0x32A6, BIDI_L   },  // CIRCLED IDEOGRAPH LOW
+  { 0x32A7, BIDI_L   },  // CIRCLED IDEOGRAPH LEFT
+  { 0x32A8, BIDI_L   },  // CIRCLED IDEOGRAPH RIGHT
+  { 0x32A9, BIDI_L   },  // CIRCLED IDEOGRAPH MEDICINE
+  { 0x32AA, BIDI_L   },  // CIRCLED IDEOGRAPH RELIGION
+  { 0x32AB, BIDI_L   },  // CIRCLED IDEOGRAPH STUDY
+  { 0x32AC, BIDI_L   },  // CIRCLED IDEOGRAPH SUPERVISE
+  { 0x32AD, BIDI_L   },  // CIRCLED IDEOGRAPH ENTERPRISE
+  { 0x32AE, BIDI_L   },  // CIRCLED IDEOGRAPH RESOURCE
+  { 0x32AF, BIDI_L   },  // CIRCLED IDEOGRAPH ALLIANCE
+  { 0x32B0, BIDI_L   },  // CIRCLED IDEOGRAPH NIGHT
+  { 0x32B1, BIDI_ON  },  // CIRCLED NUMBER THIRTY SIX
+  { 0x32B2, BIDI_ON  },  // CIRCLED NUMBER THIRTY SEVEN
+  { 0x32B3, BIDI_ON  },  // CIRCLED NUMBER THIRTY EIGHT
+  { 0x32B4, BIDI_ON  },  // CIRCLED NUMBER THIRTY NINE
+  { 0x32B5, BIDI_ON  },  // CIRCLED NUMBER FORTY
+  { 0x32B6, BIDI_ON  },  // CIRCLED NUMBER FORTY ONE
+  { 0x32B7, BIDI_ON  },  // CIRCLED NUMBER FORTY TWO
+  { 0x32B8, BIDI_ON  },  // CIRCLED NUMBER FORTY THREE
+  { 0x32B9, BIDI_ON  },  // CIRCLED NUMBER FORTY FOUR
+  { 0x32BA, BIDI_ON  },  // CIRCLED NUMBER FORTY FIVE
+  { 0x32BB, BIDI_ON  },  // CIRCLED NUMBER FORTY SIX
+  { 0x32BC, BIDI_ON  },  // CIRCLED NUMBER FORTY SEVEN
+  { 0x32BD, BIDI_ON  },  // CIRCLED NUMBER FORTY EIGHT
+  { 0x32BE, BIDI_ON  },  // CIRCLED NUMBER FORTY NINE
+  { 0x32BF, BIDI_ON  },  // CIRCLED NUMBER FIFTY
+  { 0x32C0, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+  { 0x32C1, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+  { 0x32C2, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+  { 0x32C3, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+  { 0x32C4, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+  { 0x32C5, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+  { 0x32C6, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+  { 0x32C7, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+  { 0x32C8, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+  { 0x32C9, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+  { 0x32CA, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+  { 0x32CB, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+  { 0x32CC, BIDI_ON  },  // SQUARE HG
+  { 0x32CD, BIDI_ON  },  // SQUARE ERG
+  { 0x32CE, BIDI_ON  },  // SQUARE EV
+  { 0x32CF, BIDI_ON  },  // LIMITED LIABILITY SIGN
+  { 0x32D0, BIDI_L   },  // CIRCLED KATAKANA A
+  { 0x32D1, BIDI_L   },  // CIRCLED KATAKANA I
+  { 0x32D2, BIDI_L   },  // CIRCLED KATAKANA U
+  { 0x32D3, BIDI_L   },  // CIRCLED KATAKANA E
+  { 0x32D4, BIDI_L   },  // CIRCLED KATAKANA O
+  { 0x32D5, BIDI_L   },  // CIRCLED KATAKANA KA
+  { 0x32D6, BIDI_L   },  // CIRCLED KATAKANA KI
+  { 0x32D7, BIDI_L   },  // CIRCLED KATAKANA KU
+  { 0x32D8, BIDI_L   },  // CIRCLED KATAKANA KE
+  { 0x32D9, BIDI_L   },  // CIRCLED KATAKANA KO
+  { 0x32DA, BIDI_L   },  // CIRCLED KATAKANA SA
+  { 0x32DB, BIDI_L   },  // CIRCLED KATAKANA SI
+  { 0x32DC, BIDI_L   },  // CIRCLED KATAKANA SU
+  { 0x32DD, BIDI_L   },  // CIRCLED KATAKANA SE
+  { 0x32DE, BIDI_L   },  // CIRCLED KATAKANA SO
+  { 0x32DF, BIDI_L   },  // CIRCLED KATAKANA TA
+  { 0x32E0, BIDI_L   },  // CIRCLED KATAKANA TI
+  { 0x32E1, BIDI_L   },  // CIRCLED KATAKANA TU
+  { 0x32E2, BIDI_L   },  // CIRCLED KATAKANA TE
+  { 0x32E3, BIDI_L   },  // CIRCLED KATAKANA TO
+  { 0x32E4, BIDI_L   },  // CIRCLED KATAKANA NA
+  { 0x32E5, BIDI_L   },  // CIRCLED KATAKANA NI
+  { 0x32E6, BIDI_L   },  // CIRCLED KATAKANA NU
+  { 0x32E7, BIDI_L   },  // CIRCLED KATAKANA NE
+  { 0x32E8, BIDI_L   },  // CIRCLED KATAKANA NO
+  { 0x32E9, BIDI_L   },  // CIRCLED KATAKANA HA
+  { 0x32EA, BIDI_L   },  // CIRCLED KATAKANA HI
+  { 0x32EB, BIDI_L   },  // CIRCLED KATAKANA HU
+  { 0x32EC, BIDI_L   },  // CIRCLED KATAKANA HE
+  { 0x32ED, BIDI_L   },  // CIRCLED KATAKANA HO
+  { 0x32EE, BIDI_L   },  // CIRCLED KATAKANA MA
+  { 0x32EF, BIDI_L   },  // CIRCLED KATAKANA MI
+  { 0x32F0, BIDI_L   },  // CIRCLED KATAKANA MU
+  { 0x32F1, BIDI_L   },  // CIRCLED KATAKANA ME
+  { 0x32F2, BIDI_L   },  // CIRCLED KATAKANA MO
+  { 0x32F3, BIDI_L   },  // CIRCLED KATAKANA YA
+  { 0x32F4, BIDI_L   },  // CIRCLED KATAKANA YU
+  { 0x32F5, BIDI_L   },  // CIRCLED KATAKANA YO
+  { 0x32F6, BIDI_L   },  // CIRCLED KATAKANA RA
+  { 0x32F7, BIDI_L   },  // CIRCLED KATAKANA RI
+  { 0x32F8, BIDI_L   },  // CIRCLED KATAKANA RU
+  { 0x32F9, BIDI_L   },  // CIRCLED KATAKANA RE
+  { 0x32FA, BIDI_L   },  // CIRCLED KATAKANA RO
+  { 0x32FB, BIDI_L   },  // CIRCLED KATAKANA WA
+  { 0x32FC, BIDI_L   },  // CIRCLED KATAKANA WI
+  { 0x32FD, BIDI_L   },  // CIRCLED KATAKANA WE
+  { 0x32FE, BIDI_L   },  // CIRCLED KATAKANA WO
+  { 0x3300, BIDI_L   },  // SQUARE APAATO
+  { 0x3301, BIDI_L   },  // SQUARE ARUHUA
+  { 0x3302, BIDI_L   },  // SQUARE ANPEA
+  { 0x3303, BIDI_L   },  // SQUARE AARU
+  { 0x3304, BIDI_L   },  // SQUARE ININGU
+  { 0x3305, BIDI_L   },  // SQUARE INTI
+  { 0x3306, BIDI_L   },  // SQUARE UON
+  { 0x3307, BIDI_L   },  // SQUARE ESUKUUDO
+  { 0x3308, BIDI_L   },  // SQUARE EEKAA
+  { 0x3309, BIDI_L   },  // SQUARE ONSU
+  { 0x330A, BIDI_L   },  // SQUARE OOMU
+  { 0x330B, BIDI_L   },  // SQUARE KAIRI
+  { 0x330C, BIDI_L   },  // SQUARE KARATTO
+  { 0x330D, BIDI_L   },  // SQUARE KARORII
+  { 0x330E, BIDI_L   },  // SQUARE GARON
+  { 0x330F, BIDI_L   },  // SQUARE GANMA
+  { 0x3310, BIDI_L   },  // SQUARE GIGA
+  { 0x3311, BIDI_L   },  // SQUARE GINII
+  { 0x3312, BIDI_L   },  // SQUARE KYURII
+  { 0x3313, BIDI_L   },  // SQUARE GIRUDAA
+  { 0x3314, BIDI_L   },  // SQUARE KIRO
+  { 0x3315, BIDI_L   },  // SQUARE KIROGURAMU
+  { 0x3316, BIDI_L   },  // SQUARE KIROMEETORU
+  { 0x3317, BIDI_L   },  // SQUARE KIROWATTO
+  { 0x3318, BIDI_L   },  // SQUARE GURAMU
+  { 0x3319, BIDI_L   },  // SQUARE GURAMUTON
+  { 0x331A, BIDI_L   },  // SQUARE KURUZEIRO
+  { 0x331B, BIDI_L   },  // SQUARE KUROONE
+  { 0x331C, BIDI_L   },  // SQUARE KEESU
+  { 0x331D, BIDI_L   },  // SQUARE KORUNA
+  { 0x331E, BIDI_L   },  // SQUARE KOOPO
+  { 0x331F, BIDI_L   },  // SQUARE SAIKURU
+  { 0x3320, BIDI_L   },  // SQUARE SANTIIMU
+  { 0x3321, BIDI_L   },  // SQUARE SIRINGU
+  { 0x3322, BIDI_L   },  // SQUARE SENTI
+  { 0x3323, BIDI_L   },  // SQUARE SENTO
+  { 0x3324, BIDI_L   },  // SQUARE DAASU
+  { 0x3325, BIDI_L   },  // SQUARE DESI
+  { 0x3326, BIDI_L   },  // SQUARE DORU
+  { 0x3327, BIDI_L   },  // SQUARE TON
+  { 0x3328, BIDI_L   },  // SQUARE NANO
+  { 0x3329, BIDI_L   },  // SQUARE NOTTO
+  { 0x332A, BIDI_L   },  // SQUARE HAITU
+  { 0x332B, BIDI_L   },  // SQUARE PAASENTO
+  { 0x332C, BIDI_L   },  // SQUARE PAATU
+  { 0x332D, BIDI_L   },  // SQUARE BAARERU
+  { 0x332E, BIDI_L   },  // SQUARE PIASUTORU
+  { 0x332F, BIDI_L   },  // SQUARE PIKURU
+  { 0x3330, BIDI_L   },  // SQUARE PIKO
+  { 0x3331, BIDI_L   },  // SQUARE BIRU
+  { 0x3332, BIDI_L   },  // SQUARE HUARADDO
+  { 0x3333, BIDI_L   },  // SQUARE HUIITO
+  { 0x3334, BIDI_L   },  // SQUARE BUSSYERU
+  { 0x3335, BIDI_L   },  // SQUARE HURAN
+  { 0x3336, BIDI_L   },  // SQUARE HEKUTAARU
+  { 0x3337, BIDI_L   },  // SQUARE PESO
+  { 0x3338, BIDI_L   },  // SQUARE PENIHI
+  { 0x3339, BIDI_L   },  // SQUARE HERUTU
+  { 0x333A, BIDI_L   },  // SQUARE PENSU
+  { 0x333B, BIDI_L   },  // SQUARE PEEZI
+  { 0x333C, BIDI_L   },  // SQUARE BEETA
+  { 0x333D, BIDI_L   },  // SQUARE POINTO
+  { 0x333E, BIDI_L   },  // SQUARE BORUTO
+  { 0x333F, BIDI_L   },  // SQUARE HON
+  { 0x3340, BIDI_L   },  // SQUARE PONDO
+  { 0x3341, BIDI_L   },  // SQUARE HOORU
+  { 0x3342, BIDI_L   },  // SQUARE HOON
+  { 0x3343, BIDI_L   },  // SQUARE MAIKURO
+  { 0x3344, BIDI_L   },  // SQUARE MAIRU
+  { 0x3345, BIDI_L   },  // SQUARE MAHHA
+  { 0x3346, BIDI_L   },  // SQUARE MARUKU
+  { 0x3347, BIDI_L   },  // SQUARE MANSYON
+  { 0x3348, BIDI_L   },  // SQUARE MIKURON
+  { 0x3349, BIDI_L   },  // SQUARE MIRI
+  { 0x334A, BIDI_L   },  // SQUARE MIRIBAARU
+  { 0x334B, BIDI_L   },  // SQUARE MEGA
+  { 0x334C, BIDI_L   },  // SQUARE MEGATON
+  { 0x334D, BIDI_L   },  // SQUARE MEETORU
+  { 0x334E, BIDI_L   },  // SQUARE YAADO
+  { 0x334F, BIDI_L   },  // SQUARE YAARU
+  { 0x3350, BIDI_L   },  // SQUARE YUAN
+  { 0x3351, BIDI_L   },  // SQUARE RITTORU
+  { 0x3352, BIDI_L   },  // SQUARE RIRA
+  { 0x3353, BIDI_L   },  // SQUARE RUPII
+  { 0x3354, BIDI_L   },  // SQUARE RUUBURU
+  { 0x3355, BIDI_L   },  // SQUARE REMU
+  { 0x3356, BIDI_L   },  // SQUARE RENTOGEN
+  { 0x3357, BIDI_L   },  // SQUARE WATTO
+  { 0x3358, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+  { 0x3359, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+  { 0x335A, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+  { 0x335B, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+  { 0x335C, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+  { 0x335D, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+  { 0x335E, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+  { 0x335F, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+  { 0x3360, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+  { 0x3361, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+  { 0x3362, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+  { 0x3363, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+  { 0x3364, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+  { 0x3365, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+  { 0x3366, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+  { 0x3367, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+  { 0x3368, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+  { 0x3369, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+  { 0x336A, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+  { 0x336B, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+  { 0x336C, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+  { 0x336D, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+  { 0x336E, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+  { 0x336F, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+  { 0x3370, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+  { 0x3371, BIDI_L   },  // SQUARE HPA
+  { 0x3372, BIDI_L   },  // SQUARE DA
+  { 0x3373, BIDI_L   },  // SQUARE AU
+  { 0x3374, BIDI_L   },  // SQUARE BAR
+  { 0x3375, BIDI_L   },  // SQUARE OV
+  { 0x3376, BIDI_L   },  // SQUARE PC
+  { 0x3377, BIDI_ON  },  // SQUARE DM
+  { 0x3378, BIDI_ON  },  // SQUARE DM SQUARED
+  { 0x3379, BIDI_ON  },  // SQUARE DM CUBED
+  { 0x337A, BIDI_ON  },  // SQUARE IU
+  { 0x337B, BIDI_L   },  // SQUARE ERA NAME HEISEI
+  { 0x337C, BIDI_L   },  // SQUARE ERA NAME SYOUWA
+  { 0x337D, BIDI_L   },  // SQUARE ERA NAME TAISYOU
+  { 0x337E, BIDI_L   },  // SQUARE ERA NAME MEIZI
+  { 0x337F, BIDI_L   },  // SQUARE CORPORATION
+  { 0x3380, BIDI_L   },  // SQUARE PA AMPS
+  { 0x3381, BIDI_L   },  // SQUARE NA
+  { 0x3382, BIDI_L   },  // SQUARE MU A
+  { 0x3383, BIDI_L   },  // SQUARE MA
+  { 0x3384, BIDI_L   },  // SQUARE KA
+  { 0x3385, BIDI_L   },  // SQUARE KB
+  { 0x3386, BIDI_L   },  // SQUARE MB
+  { 0x3387, BIDI_L   },  // SQUARE GB
+  { 0x3388, BIDI_L   },  // SQUARE CAL
+  { 0x3389, BIDI_L   },  // SQUARE KCAL
+  { 0x338A, BIDI_L   },  // SQUARE PF
+  { 0x338B, BIDI_L   },  // SQUARE NF
+  { 0x338C, BIDI_L   },  // SQUARE MU F
+  { 0x338D, BIDI_L   },  // SQUARE MU G
+  { 0x338E, BIDI_L   },  // SQUARE MG
+  { 0x338F, BIDI_L   },  // SQUARE KG
+  { 0x3390, BIDI_L   },  // SQUARE HZ
+  { 0x3391, BIDI_L   },  // SQUARE KHZ
+  { 0x3392, BIDI_L   },  // SQUARE MHZ
+  { 0x3393, BIDI_L   },  // SQUARE GHZ
+  { 0x3394, BIDI_L   },  // SQUARE THZ
+  { 0x3395, BIDI_L   },  // SQUARE MU L
+  { 0x3396, BIDI_L   },  // SQUARE ML
+  { 0x3397, BIDI_L   },  // SQUARE DL
+  { 0x3398, BIDI_L   },  // SQUARE KL
+  { 0x3399, BIDI_L   },  // SQUARE FM
+  { 0x339A, BIDI_L   },  // SQUARE NM
+  { 0x339B, BIDI_L   },  // SQUARE MU M
+  { 0x339C, BIDI_L   },  // SQUARE MM
+  { 0x339D, BIDI_L   },  // SQUARE CM
+  { 0x339E, BIDI_L   },  // SQUARE KM
+  { 0x339F, BIDI_L   },  // SQUARE MM SQUARED
+  { 0x33A0, BIDI_L   },  // SQUARE CM SQUARED
+  { 0x33A1, BIDI_L   },  // SQUARE M SQUARED
+  { 0x33A2, BIDI_L   },  // SQUARE KM SQUARED
+  { 0x33A3, BIDI_L   },  // SQUARE MM CUBED
+  { 0x33A4, BIDI_L   },  // SQUARE CM CUBED
+  { 0x33A5, BIDI_L   },  // SQUARE M CUBED
+  { 0x33A6, BIDI_L   },  // SQUARE KM CUBED
+  { 0x33A7, BIDI_L   },  // SQUARE M OVER S
+  { 0x33A8, BIDI_L   },  // SQUARE M OVER S SQUARED
+  { 0x33A9, BIDI_L   },  // SQUARE PA
+  { 0x33AA, BIDI_L   },  // SQUARE KPA
+  { 0x33AB, BIDI_L   },  // SQUARE MPA
+  { 0x33AC, BIDI_L   },  // SQUARE GPA
+  { 0x33AD, BIDI_L   },  // SQUARE RAD
+  { 0x33AE, BIDI_L   },  // SQUARE RAD OVER S
+  { 0x33AF, BIDI_L   },  // SQUARE RAD OVER S SQUARED
+  { 0x33B0, BIDI_L   },  // SQUARE PS
+  { 0x33B1, BIDI_L   },  // SQUARE NS
+  { 0x33B2, BIDI_L   },  // SQUARE MU S
+  { 0x33B3, BIDI_L   },  // SQUARE MS
+  { 0x33B4, BIDI_L   },  // SQUARE PV
+  { 0x33B5, BIDI_L   },  // SQUARE NV
+  { 0x33B6, BIDI_L   },  // SQUARE MU V
+  { 0x33B7, BIDI_L   },  // SQUARE MV
+  { 0x33B8, BIDI_L   },  // SQUARE KV
+  { 0x33B9, BIDI_L   },  // SQUARE MV MEGA
+  { 0x33BA, BIDI_L   },  // SQUARE PW
+  { 0x33BB, BIDI_L   },  // SQUARE NW
+  { 0x33BC, BIDI_L   },  // SQUARE MU W
+  { 0x33BD, BIDI_L   },  // SQUARE MW
+  { 0x33BE, BIDI_L   },  // SQUARE KW
+  { 0x33BF, BIDI_L   },  // SQUARE MW MEGA
+  { 0x33C0, BIDI_L   },  // SQUARE K OHM
+  { 0x33C1, BIDI_L   },  // SQUARE M OHM
+  { 0x33C2, BIDI_L   },  // SQUARE AM
+  { 0x33C3, BIDI_L   },  // SQUARE BQ
+  { 0x33C4, BIDI_L   },  // SQUARE CC
+  { 0x33C5, BIDI_L   },  // SQUARE CD
+  { 0x33C6, BIDI_L   },  // SQUARE C OVER KG
+  { 0x33C7, BIDI_L   },  // SQUARE CO
+  { 0x33C8, BIDI_L   },  // SQUARE DB
+  { 0x33C9, BIDI_L   },  // SQUARE GY
+  { 0x33CA, BIDI_L   },  // SQUARE HA
+  { 0x33CB, BIDI_L   },  // SQUARE HP
+  { 0x33CC, BIDI_L   },  // SQUARE IN
+  { 0x33CD, BIDI_L   },  // SQUARE KK
+  { 0x33CE, BIDI_L   },  // SQUARE KM CAPITAL
+  { 0x33CF, BIDI_L   },  // SQUARE KT
+  { 0x33D0, BIDI_L   },  // SQUARE LM
+  { 0x33D1, BIDI_L   },  // SQUARE LN
+  { 0x33D2, BIDI_L   },  // SQUARE LOG
+  { 0x33D3, BIDI_L   },  // SQUARE LX
+  { 0x33D4, BIDI_L   },  // SQUARE MB SMALL
+  { 0x33D5, BIDI_L   },  // SQUARE MIL
+  { 0x33D6, BIDI_L   },  // SQUARE MOL
+  { 0x33D7, BIDI_L   },  // SQUARE PH
+  { 0x33D8, BIDI_L   },  // SQUARE PM
+  { 0x33D9, BIDI_L   },  // SQUARE PPM
+  { 0x33DA, BIDI_L   },  // SQUARE PR
+  { 0x33DB, BIDI_L   },  // SQUARE SR
+  { 0x33DC, BIDI_L   },  // SQUARE SV
+  { 0x33DD, BIDI_L   },  // SQUARE WB
+  { 0x33DE, BIDI_ON  },  // SQUARE V OVER M
+  { 0x33DF, BIDI_ON  },  // SQUARE A OVER M
+  { 0x33E0, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+  { 0x33E1, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+  { 0x33E2, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+  { 0x33E3, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+  { 0x33E4, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+  { 0x33E5, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+  { 0x33E6, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+  { 0x33E7, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+  { 0x33E8, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+  { 0x33E9, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+  { 0x33EA, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+  { 0x33EB, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+  { 0x33EC, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+  { 0x33ED, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+  { 0x33EE, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+  { 0x33EF, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+  { 0x33F0, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+  { 0x33F1, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+  { 0x33F2, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+  { 0x33F3, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+  { 0x33F4, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+  { 0x33F5, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+  { 0x33F6, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+  { 0x33F7, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+  { 0x33F8, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+  { 0x33F9, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+  { 0x33FA, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+  { 0x33FB, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+  { 0x33FC, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+  { 0x33FD, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+  { 0x33FE, BIDI_L   },  // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+  { 0x33FF, BIDI_ON  },  // SQUARE GAL
+  //{ 0x3400, BIDI_L   },  // <CJK Ideograph Extension A, First>
+  //{ 0x4DB5, BIDI_L   },  // <CJK Ideograph Extension A, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_4 == 1)
+
+  { 0x4DC0, BIDI_ON  },  // HEXAGRAM FOR THE CREATIVE HEAVEN
+  { 0x4DC1, BIDI_ON  },  // HEXAGRAM FOR THE RECEPTIVE EARTH
+  { 0x4DC2, BIDI_ON  },  // HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+  { 0x4DC3, BIDI_ON  },  // HEXAGRAM FOR YOUTHFUL FOLLY
+  { 0x4DC4, BIDI_ON  },  // HEXAGRAM FOR WAITING
+  { 0x4DC5, BIDI_ON  },  // HEXAGRAM FOR CONFLICT
+  { 0x4DC6, BIDI_ON  },  // HEXAGRAM FOR THE ARMY
+  { 0x4DC7, BIDI_ON  },  // HEXAGRAM FOR HOLDING TOGETHER
+  { 0x4DC8, BIDI_ON  },  // HEXAGRAM FOR SMALL TAMING
+  { 0x4DC9, BIDI_ON  },  // HEXAGRAM FOR TREADING
+  { 0x4DCA, BIDI_ON  },  // HEXAGRAM FOR PEACE
+  { 0x4DCB, BIDI_ON  },  // HEXAGRAM FOR STANDSTILL
+  { 0x4DCC, BIDI_ON  },  // HEXAGRAM FOR FELLOWSHIP
+  { 0x4DCD, BIDI_ON  },  // HEXAGRAM FOR GREAT POSSESSION
+  { 0x4DCE, BIDI_ON  },  // HEXAGRAM FOR MODESTY
+  { 0x4DCF, BIDI_ON  },  // HEXAGRAM FOR ENTHUSIASM
+  { 0x4DD0, BIDI_ON  },  // HEXAGRAM FOR FOLLOWING
+  { 0x4DD1, BIDI_ON  },  // HEXAGRAM FOR WORK ON THE DECAYED
+  { 0x4DD2, BIDI_ON  },  // HEXAGRAM FOR APPROACH
+  { 0x4DD3, BIDI_ON  },  // HEXAGRAM FOR CONTEMPLATION
+  { 0x4DD4, BIDI_ON  },  // HEXAGRAM FOR BITING THROUGH
+  { 0x4DD5, BIDI_ON  },  // HEXAGRAM FOR GRACE
+  { 0x4DD6, BIDI_ON  },  // HEXAGRAM FOR SPLITTING APART
+  { 0x4DD7, BIDI_ON  },  // HEXAGRAM FOR RETURN
+  { 0x4DD8, BIDI_ON  },  // HEXAGRAM FOR INNOCENCE
+  { 0x4DD9, BIDI_ON  },  // HEXAGRAM FOR GREAT TAMING
+  { 0x4DDA, BIDI_ON  },  // HEXAGRAM FOR MOUTH CORNERS
+  { 0x4DDB, BIDI_ON  },  // HEXAGRAM FOR GREAT PREPONDERANCE
+  { 0x4DDC, BIDI_ON  },  // HEXAGRAM FOR THE ABYSMAL WATER
+  { 0x4DDD, BIDI_ON  },  // HEXAGRAM FOR THE CLINGING FIRE
+  { 0x4DDE, BIDI_ON  },  // HEXAGRAM FOR INFLUENCE
+  { 0x4DDF, BIDI_ON  },  // HEXAGRAM FOR DURATION
+  { 0x4DE0, BIDI_ON  },  // HEXAGRAM FOR RETREAT
+  { 0x4DE1, BIDI_ON  },  // HEXAGRAM FOR GREAT POWER
+  { 0x4DE2, BIDI_ON  },  // HEXAGRAM FOR PROGRESS
+  { 0x4DE3, BIDI_ON  },  // HEXAGRAM FOR DARKENING OF THE LIGHT
+  { 0x4DE4, BIDI_ON  },  // HEXAGRAM FOR THE FAMILY
+  { 0x4DE5, BIDI_ON  },  // HEXAGRAM FOR OPPOSITION
+  { 0x4DE6, BIDI_ON  },  // HEXAGRAM FOR OBSTRUCTION
+  { 0x4DE7, BIDI_ON  },  // HEXAGRAM FOR DELIVERANCE
+  { 0x4DE8, BIDI_ON  },  // HEXAGRAM FOR DECREASE
+  { 0x4DE9, BIDI_ON  },  // HEXAGRAM FOR INCREASE
+  { 0x4DEA, BIDI_ON  },  // HEXAGRAM FOR BREAKTHROUGH
+  { 0x4DEB, BIDI_ON  },  // HEXAGRAM FOR COMING TO MEET
+  { 0x4DEC, BIDI_ON  },  // HEXAGRAM FOR GATHERING TOGETHER
+  { 0x4DED, BIDI_ON  },  // HEXAGRAM FOR PUSHING UPWARD
+  { 0x4DEE, BIDI_ON  },  // HEXAGRAM FOR OPPRESSION
+  { 0x4DEF, BIDI_ON  },  // HEXAGRAM FOR THE WELL
+  { 0x4DF0, BIDI_ON  },  // HEXAGRAM FOR REVOLUTION
+  { 0x4DF1, BIDI_ON  },  // HEXAGRAM FOR THE CAULDRON
+  { 0x4DF2, BIDI_ON  },  // HEXAGRAM FOR THE AROUSING THUNDER
+  { 0x4DF3, BIDI_ON  },  // HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+  { 0x4DF4, BIDI_ON  },  // HEXAGRAM FOR DEVELOPMENT
+  { 0x4DF5, BIDI_ON  },  // HEXAGRAM FOR THE MARRYING MAIDEN
+  { 0x4DF6, BIDI_ON  },  // HEXAGRAM FOR ABUNDANCE
+  { 0x4DF7, BIDI_ON  },  // HEXAGRAM FOR THE WANDERER
+  { 0x4DF8, BIDI_ON  },  // HEXAGRAM FOR THE GENTLE WIND
+  { 0x4DF9, BIDI_ON  },  // HEXAGRAM FOR THE JOYOUS LAKE
+  { 0x4DFA, BIDI_ON  },  // HEXAGRAM FOR DISPERSION
+  { 0x4DFB, BIDI_ON  },  // HEXAGRAM FOR LIMITATION
+  { 0x4DFC, BIDI_ON  },  // HEXAGRAM FOR INNER TRUTH
+  { 0x4DFD, BIDI_ON  },  // HEXAGRAM FOR SMALL PREPONDERANCE
+  { 0x4DFE, BIDI_ON  },  // HEXAGRAM FOR AFTER COMPLETION
+  { 0x4DFF, BIDI_ON  },  // HEXAGRAM FOR BEFORE COMPLETION
+  //{ 0x4E00, BIDI_L   },  // <CJK Ideograph, First>
+  //{ 0x9FD5, BIDI_L   },  // <CJK Ideograph, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_A == 1)
+
+  { 0xA000, BIDI_L   },  // YI SYLLABLE IT
+  { 0xA001, BIDI_L   },  // YI SYLLABLE IX
+  { 0xA002, BIDI_L   },  // YI SYLLABLE I
+  { 0xA003, BIDI_L   },  // YI SYLLABLE IP
+  { 0xA004, BIDI_L   },  // YI SYLLABLE IET
+  { 0xA005, BIDI_L   },  // YI SYLLABLE IEX
+  { 0xA006, BIDI_L   },  // YI SYLLABLE IE
+  { 0xA007, BIDI_L   },  // YI SYLLABLE IEP
+  { 0xA008, BIDI_L   },  // YI SYLLABLE AT
+  { 0xA009, BIDI_L   },  // YI SYLLABLE AX
+  { 0xA00A, BIDI_L   },  // YI SYLLABLE A
+  { 0xA00B, BIDI_L   },  // YI SYLLABLE AP
+  { 0xA00C, BIDI_L   },  // YI SYLLABLE UOX
+  { 0xA00D, BIDI_L   },  // YI SYLLABLE UO
+  { 0xA00E, BIDI_L   },  // YI SYLLABLE UOP
+  { 0xA00F, BIDI_L   },  // YI SYLLABLE OT
+  { 0xA010, BIDI_L   },  // YI SYLLABLE OX
+  { 0xA011, BIDI_L   },  // YI SYLLABLE O
+  { 0xA012, BIDI_L   },  // YI SYLLABLE OP
+  { 0xA013, BIDI_L   },  // YI SYLLABLE EX
+  { 0xA014, BIDI_L   },  // YI SYLLABLE E
+  { 0xA015, BIDI_L   },  // YI SYLLABLE WU
+  { 0xA016, BIDI_L   },  // YI SYLLABLE BIT
+  { 0xA017, BIDI_L   },  // YI SYLLABLE BIX
+  { 0xA018, BIDI_L   },  // YI SYLLABLE BI
+  { 0xA019, BIDI_L   },  // YI SYLLABLE BIP
+  { 0xA01A, BIDI_L   },  // YI SYLLABLE BIET
+  { 0xA01B, BIDI_L   },  // YI SYLLABLE BIEX
+  { 0xA01C, BIDI_L   },  // YI SYLLABLE BIE
+  { 0xA01D, BIDI_L   },  // YI SYLLABLE BIEP
+  { 0xA01E, BIDI_L   },  // YI SYLLABLE BAT
+  { 0xA01F, BIDI_L   },  // YI SYLLABLE BAX
+  { 0xA020, BIDI_L   },  // YI SYLLABLE BA
+  { 0xA021, BIDI_L   },  // YI SYLLABLE BAP
+  { 0xA022, BIDI_L   },  // YI SYLLABLE BUOX
+  { 0xA023, BIDI_L   },  // YI SYLLABLE BUO
+  { 0xA024, BIDI_L   },  // YI SYLLABLE BUOP
+  { 0xA025, BIDI_L   },  // YI SYLLABLE BOT
+  { 0xA026, BIDI_L   },  // YI SYLLABLE BOX
+  { 0xA027, BIDI_L   },  // YI SYLLABLE BO
+  { 0xA028, BIDI_L   },  // YI SYLLABLE BOP
+  { 0xA029, BIDI_L   },  // YI SYLLABLE BEX
+  { 0xA02A, BIDI_L   },  // YI SYLLABLE BE
+  { 0xA02B, BIDI_L   },  // YI SYLLABLE BEP
+  { 0xA02C, BIDI_L   },  // YI SYLLABLE BUT
+  { 0xA02D, BIDI_L   },  // YI SYLLABLE BUX
+  { 0xA02E, BIDI_L   },  // YI SYLLABLE BU
+  { 0xA02F, BIDI_L   },  // YI SYLLABLE BUP
+  { 0xA030, BIDI_L   },  // YI SYLLABLE BURX
+  { 0xA031, BIDI_L   },  // YI SYLLABLE BUR
+  { 0xA032, BIDI_L   },  // YI SYLLABLE BYT
+  { 0xA033, BIDI_L   },  // YI SYLLABLE BYX
+  { 0xA034, BIDI_L   },  // YI SYLLABLE BY
+  { 0xA035, BIDI_L   },  // YI SYLLABLE BYP
+  { 0xA036, BIDI_L   },  // YI SYLLABLE BYRX
+  { 0xA037, BIDI_L   },  // YI SYLLABLE BYR
+  { 0xA038, BIDI_L   },  // YI SYLLABLE PIT
+  { 0xA039, BIDI_L   },  // YI SYLLABLE PIX
+  { 0xA03A, BIDI_L   },  // YI SYLLABLE PI
+  { 0xA03B, BIDI_L   },  // YI SYLLABLE PIP
+  { 0xA03C, BIDI_L   },  // YI SYLLABLE PIEX
+  { 0xA03D, BIDI_L   },  // YI SYLLABLE PIE
+  { 0xA03E, BIDI_L   },  // YI SYLLABLE PIEP
+  { 0xA03F, BIDI_L   },  // YI SYLLABLE PAT
+  { 0xA040, BIDI_L   },  // YI SYLLABLE PAX
+  { 0xA041, BIDI_L   },  // YI SYLLABLE PA
+  { 0xA042, BIDI_L   },  // YI SYLLABLE PAP
+  { 0xA043, BIDI_L   },  // YI SYLLABLE PUOX
+  { 0xA044, BIDI_L   },  // YI SYLLABLE PUO
+  { 0xA045, BIDI_L   },  // YI SYLLABLE PUOP
+  { 0xA046, BIDI_L   },  // YI SYLLABLE POT
+  { 0xA047, BIDI_L   },  // YI SYLLABLE POX
+  { 0xA048, BIDI_L   },  // YI SYLLABLE PO
+  { 0xA049, BIDI_L   },  // YI SYLLABLE POP
+  { 0xA04A, BIDI_L   },  // YI SYLLABLE PUT
+  { 0xA04B, BIDI_L   },  // YI SYLLABLE PUX
+  { 0xA04C, BIDI_L   },  // YI SYLLABLE PU
+  { 0xA04D, BIDI_L   },  // YI SYLLABLE PUP
+  { 0xA04E, BIDI_L   },  // YI SYLLABLE PURX
+  { 0xA04F, BIDI_L   },  // YI SYLLABLE PUR
+  { 0xA050, BIDI_L   },  // YI SYLLABLE PYT
+  { 0xA051, BIDI_L   },  // YI SYLLABLE PYX
+  { 0xA052, BIDI_L   },  // YI SYLLABLE PY
+  { 0xA053, BIDI_L   },  // YI SYLLABLE PYP
+  { 0xA054, BIDI_L   },  // YI SYLLABLE PYRX
+  { 0xA055, BIDI_L   },  // YI SYLLABLE PYR
+  { 0xA056, BIDI_L   },  // YI SYLLABLE BBIT
+  { 0xA057, BIDI_L   },  // YI SYLLABLE BBIX
+  { 0xA058, BIDI_L   },  // YI SYLLABLE BBI
+  { 0xA059, BIDI_L   },  // YI SYLLABLE BBIP
+  { 0xA05A, BIDI_L   },  // YI SYLLABLE BBIET
+  { 0xA05B, BIDI_L   },  // YI SYLLABLE BBIEX
+  { 0xA05C, BIDI_L   },  // YI SYLLABLE BBIE
+  { 0xA05D, BIDI_L   },  // YI SYLLABLE BBIEP
+  { 0xA05E, BIDI_L   },  // YI SYLLABLE BBAT
+  { 0xA05F, BIDI_L   },  // YI SYLLABLE BBAX
+  { 0xA060, BIDI_L   },  // YI SYLLABLE BBA
+  { 0xA061, BIDI_L   },  // YI SYLLABLE BBAP
+  { 0xA062, BIDI_L   },  // YI SYLLABLE BBUOX
+  { 0xA063, BIDI_L   },  // YI SYLLABLE BBUO
+  { 0xA064, BIDI_L   },  // YI SYLLABLE BBUOP
+  { 0xA065, BIDI_L   },  // YI SYLLABLE BBOT
+  { 0xA066, BIDI_L   },  // YI SYLLABLE BBOX
+  { 0xA067, BIDI_L   },  // YI SYLLABLE BBO
+  { 0xA068, BIDI_L   },  // YI SYLLABLE BBOP
+  { 0xA069, BIDI_L   },  // YI SYLLABLE BBEX
+  { 0xA06A, BIDI_L   },  // YI SYLLABLE BBE
+  { 0xA06B, BIDI_L   },  // YI SYLLABLE BBEP
+  { 0xA06C, BIDI_L   },  // YI SYLLABLE BBUT
+  { 0xA06D, BIDI_L   },  // YI SYLLABLE BBUX
+  { 0xA06E, BIDI_L   },  // YI SYLLABLE BBU
+  { 0xA06F, BIDI_L   },  // YI SYLLABLE BBUP
+  { 0xA070, BIDI_L   },  // YI SYLLABLE BBURX
+  { 0xA071, BIDI_L   },  // YI SYLLABLE BBUR
+  { 0xA072, BIDI_L   },  // YI SYLLABLE BBYT
+  { 0xA073, BIDI_L   },  // YI SYLLABLE BBYX
+  { 0xA074, BIDI_L   },  // YI SYLLABLE BBY
+  { 0xA075, BIDI_L   },  // YI SYLLABLE BBYP
+  { 0xA076, BIDI_L   },  // YI SYLLABLE NBIT
+  { 0xA077, BIDI_L   },  // YI SYLLABLE NBIX
+  { 0xA078, BIDI_L   },  // YI SYLLABLE NBI
+  { 0xA079, BIDI_L   },  // YI SYLLABLE NBIP
+  { 0xA07A, BIDI_L   },  // YI SYLLABLE NBIEX
+  { 0xA07B, BIDI_L   },  // YI SYLLABLE NBIE
+  { 0xA07C, BIDI_L   },  // YI SYLLABLE NBIEP
+  { 0xA07D, BIDI_L   },  // YI SYLLABLE NBAT
+  { 0xA07E, BIDI_L   },  // YI SYLLABLE NBAX
+  { 0xA07F, BIDI_L   },  // YI SYLLABLE NBA
+  { 0xA080, BIDI_L   },  // YI SYLLABLE NBAP
+  { 0xA081, BIDI_L   },  // YI SYLLABLE NBOT
+  { 0xA082, BIDI_L   },  // YI SYLLABLE NBOX
+  { 0xA083, BIDI_L   },  // YI SYLLABLE NBO
+  { 0xA084, BIDI_L   },  // YI SYLLABLE NBOP
+  { 0xA085, BIDI_L   },  // YI SYLLABLE NBUT
+  { 0xA086, BIDI_L   },  // YI SYLLABLE NBUX
+  { 0xA087, BIDI_L   },  // YI SYLLABLE NBU
+  { 0xA088, BIDI_L   },  // YI SYLLABLE NBUP
+  { 0xA089, BIDI_L   },  // YI SYLLABLE NBURX
+  { 0xA08A, BIDI_L   },  // YI SYLLABLE NBUR
+  { 0xA08B, BIDI_L   },  // YI SYLLABLE NBYT
+  { 0xA08C, BIDI_L   },  // YI SYLLABLE NBYX
+  { 0xA08D, BIDI_L   },  // YI SYLLABLE NBY
+  { 0xA08E, BIDI_L   },  // YI SYLLABLE NBYP
+  { 0xA08F, BIDI_L   },  // YI SYLLABLE NBYRX
+  { 0xA090, BIDI_L   },  // YI SYLLABLE NBYR
+  { 0xA091, BIDI_L   },  // YI SYLLABLE HMIT
+  { 0xA092, BIDI_L   },  // YI SYLLABLE HMIX
+  { 0xA093, BIDI_L   },  // YI SYLLABLE HMI
+  { 0xA094, BIDI_L   },  // YI SYLLABLE HMIP
+  { 0xA095, BIDI_L   },  // YI SYLLABLE HMIEX
+  { 0xA096, BIDI_L   },  // YI SYLLABLE HMIE
+  { 0xA097, BIDI_L   },  // YI SYLLABLE HMIEP
+  { 0xA098, BIDI_L   },  // YI SYLLABLE HMAT
+  { 0xA099, BIDI_L   },  // YI SYLLABLE HMAX
+  { 0xA09A, BIDI_L   },  // YI SYLLABLE HMA
+  { 0xA09B, BIDI_L   },  // YI SYLLABLE HMAP
+  { 0xA09C, BIDI_L   },  // YI SYLLABLE HMUOX
+  { 0xA09D, BIDI_L   },  // YI SYLLABLE HMUO
+  { 0xA09E, BIDI_L   },  // YI SYLLABLE HMUOP
+  { 0xA09F, BIDI_L   },  // YI SYLLABLE HMOT
+  { 0xA0A0, BIDI_L   },  // YI SYLLABLE HMOX
+  { 0xA0A1, BIDI_L   },  // YI SYLLABLE HMO
+  { 0xA0A2, BIDI_L   },  // YI SYLLABLE HMOP
+  { 0xA0A3, BIDI_L   },  // YI SYLLABLE HMUT
+  { 0xA0A4, BIDI_L   },  // YI SYLLABLE HMUX
+  { 0xA0A5, BIDI_L   },  // YI SYLLABLE HMU
+  { 0xA0A6, BIDI_L   },  // YI SYLLABLE HMUP
+  { 0xA0A7, BIDI_L   },  // YI SYLLABLE HMURX
+  { 0xA0A8, BIDI_L   },  // YI SYLLABLE HMUR
+  { 0xA0A9, BIDI_L   },  // YI SYLLABLE HMYX
+  { 0xA0AA, BIDI_L   },  // YI SYLLABLE HMY
+  { 0xA0AB, BIDI_L   },  // YI SYLLABLE HMYP
+  { 0xA0AC, BIDI_L   },  // YI SYLLABLE HMYRX
+  { 0xA0AD, BIDI_L   },  // YI SYLLABLE HMYR
+  { 0xA0AE, BIDI_L   },  // YI SYLLABLE MIT
+  { 0xA0AF, BIDI_L   },  // YI SYLLABLE MIX
+  { 0xA0B0, BIDI_L   },  // YI SYLLABLE MI
+  { 0xA0B1, BIDI_L   },  // YI SYLLABLE MIP
+  { 0xA0B2, BIDI_L   },  // YI SYLLABLE MIEX
+  { 0xA0B3, BIDI_L   },  // YI SYLLABLE MIE
+  { 0xA0B4, BIDI_L   },  // YI SYLLABLE MIEP
+  { 0xA0B5, BIDI_L   },  // YI SYLLABLE MAT
+  { 0xA0B6, BIDI_L   },  // YI SYLLABLE MAX
+  { 0xA0B7, BIDI_L   },  // YI SYLLABLE MA
+  { 0xA0B8, BIDI_L   },  // YI SYLLABLE MAP
+  { 0xA0B9, BIDI_L   },  // YI SYLLABLE MUOT
+  { 0xA0BA, BIDI_L   },  // YI SYLLABLE MUOX
+  { 0xA0BB, BIDI_L   },  // YI SYLLABLE MUO
+  { 0xA0BC, BIDI_L   },  // YI SYLLABLE MUOP
+  { 0xA0BD, BIDI_L   },  // YI SYLLABLE MOT
+  { 0xA0BE, BIDI_L   },  // YI SYLLABLE MOX
+  { 0xA0BF, BIDI_L   },  // YI SYLLABLE MO
+  { 0xA0C0, BIDI_L   },  // YI SYLLABLE MOP
+  { 0xA0C1, BIDI_L   },  // YI SYLLABLE MEX
+  { 0xA0C2, BIDI_L   },  // YI SYLLABLE ME
+  { 0xA0C3, BIDI_L   },  // YI SYLLABLE MUT
+  { 0xA0C4, BIDI_L   },  // YI SYLLABLE MUX
+  { 0xA0C5, BIDI_L   },  // YI SYLLABLE MU
+  { 0xA0C6, BIDI_L   },  // YI SYLLABLE MUP
+  { 0xA0C7, BIDI_L   },  // YI SYLLABLE MURX
+  { 0xA0C8, BIDI_L   },  // YI SYLLABLE MUR
+  { 0xA0C9, BIDI_L   },  // YI SYLLABLE MYT
+  { 0xA0CA, BIDI_L   },  // YI SYLLABLE MYX
+  { 0xA0CB, BIDI_L   },  // YI SYLLABLE MY
+  { 0xA0CC, BIDI_L   },  // YI SYLLABLE MYP
+  { 0xA0CD, BIDI_L   },  // YI SYLLABLE FIT
+  { 0xA0CE, BIDI_L   },  // YI SYLLABLE FIX
+  { 0xA0CF, BIDI_L   },  // YI SYLLABLE FI
+  { 0xA0D0, BIDI_L   },  // YI SYLLABLE FIP
+  { 0xA0D1, BIDI_L   },  // YI SYLLABLE FAT
+  { 0xA0D2, BIDI_L   },  // YI SYLLABLE FAX
+  { 0xA0D3, BIDI_L   },  // YI SYLLABLE FA
+  { 0xA0D4, BIDI_L   },  // YI SYLLABLE FAP
+  { 0xA0D5, BIDI_L   },  // YI SYLLABLE FOX
+  { 0xA0D6, BIDI_L   },  // YI SYLLABLE FO
+  { 0xA0D7, BIDI_L   },  // YI SYLLABLE FOP
+  { 0xA0D8, BIDI_L   },  // YI SYLLABLE FUT
+  { 0xA0D9, BIDI_L   },  // YI SYLLABLE FUX
+  { 0xA0DA, BIDI_L   },  // YI SYLLABLE FU
+  { 0xA0DB, BIDI_L   },  // YI SYLLABLE FUP
+  { 0xA0DC, BIDI_L   },  // YI SYLLABLE FURX
+  { 0xA0DD, BIDI_L   },  // YI SYLLABLE FUR
+  { 0xA0DE, BIDI_L   },  // YI SYLLABLE FYT
+  { 0xA0DF, BIDI_L   },  // YI SYLLABLE FYX
+  { 0xA0E0, BIDI_L   },  // YI SYLLABLE FY
+  { 0xA0E1, BIDI_L   },  // YI SYLLABLE FYP
+  { 0xA0E2, BIDI_L   },  // YI SYLLABLE VIT
+  { 0xA0E3, BIDI_L   },  // YI SYLLABLE VIX
+  { 0xA0E4, BIDI_L   },  // YI SYLLABLE VI
+  { 0xA0E5, BIDI_L   },  // YI SYLLABLE VIP
+  { 0xA0E6, BIDI_L   },  // YI SYLLABLE VIET
+  { 0xA0E7, BIDI_L   },  // YI SYLLABLE VIEX
+  { 0xA0E8, BIDI_L   },  // YI SYLLABLE VIE
+  { 0xA0E9, BIDI_L   },  // YI SYLLABLE VIEP
+  { 0xA0EA, BIDI_L   },  // YI SYLLABLE VAT
+  { 0xA0EB, BIDI_L   },  // YI SYLLABLE VAX
+  { 0xA0EC, BIDI_L   },  // YI SYLLABLE VA
+  { 0xA0ED, BIDI_L   },  // YI SYLLABLE VAP
+  { 0xA0EE, BIDI_L   },  // YI SYLLABLE VOT
+  { 0xA0EF, BIDI_L   },  // YI SYLLABLE VOX
+  { 0xA0F0, BIDI_L   },  // YI SYLLABLE VO
+  { 0xA0F1, BIDI_L   },  // YI SYLLABLE VOP
+  { 0xA0F2, BIDI_L   },  // YI SYLLABLE VEX
+  { 0xA0F3, BIDI_L   },  // YI SYLLABLE VEP
+  { 0xA0F4, BIDI_L   },  // YI SYLLABLE VUT
+  { 0xA0F5, BIDI_L   },  // YI SYLLABLE VUX
+  { 0xA0F6, BIDI_L   },  // YI SYLLABLE VU
+  { 0xA0F7, BIDI_L   },  // YI SYLLABLE VUP
+  { 0xA0F8, BIDI_L   },  // YI SYLLABLE VURX
+  { 0xA0F9, BIDI_L   },  // YI SYLLABLE VUR
+  { 0xA0FA, BIDI_L   },  // YI SYLLABLE VYT
+  { 0xA0FB, BIDI_L   },  // YI SYLLABLE VYX
+  { 0xA0FC, BIDI_L   },  // YI SYLLABLE VY
+  { 0xA0FD, BIDI_L   },  // YI SYLLABLE VYP
+  { 0xA0FE, BIDI_L   },  // YI SYLLABLE VYRX
+  { 0xA0FF, BIDI_L   },  // YI SYLLABLE VYR
+  { 0xA100, BIDI_L   },  // YI SYLLABLE DIT
+  { 0xA101, BIDI_L   },  // YI SYLLABLE DIX
+  { 0xA102, BIDI_L   },  // YI SYLLABLE DI
+  { 0xA103, BIDI_L   },  // YI SYLLABLE DIP
+  { 0xA104, BIDI_L   },  // YI SYLLABLE DIEX
+  { 0xA105, BIDI_L   },  // YI SYLLABLE DIE
+  { 0xA106, BIDI_L   },  // YI SYLLABLE DIEP
+  { 0xA107, BIDI_L   },  // YI SYLLABLE DAT
+  { 0xA108, BIDI_L   },  // YI SYLLABLE DAX
+  { 0xA109, BIDI_L   },  // YI SYLLABLE DA
+  { 0xA10A, BIDI_L   },  // YI SYLLABLE DAP
+  { 0xA10B, BIDI_L   },  // YI SYLLABLE DUOX
+  { 0xA10C, BIDI_L   },  // YI SYLLABLE DUO
+  { 0xA10D, BIDI_L   },  // YI SYLLABLE DOT
+  { 0xA10E, BIDI_L   },  // YI SYLLABLE DOX
+  { 0xA10F, BIDI_L   },  // YI SYLLABLE DO
+  { 0xA110, BIDI_L   },  // YI SYLLABLE DOP
+  { 0xA111, BIDI_L   },  // YI SYLLABLE DEX
+  { 0xA112, BIDI_L   },  // YI SYLLABLE DE
+  { 0xA113, BIDI_L   },  // YI SYLLABLE DEP
+  { 0xA114, BIDI_L   },  // YI SYLLABLE DUT
+  { 0xA115, BIDI_L   },  // YI SYLLABLE DUX
+  { 0xA116, BIDI_L   },  // YI SYLLABLE DU
+  { 0xA117, BIDI_L   },  // YI SYLLABLE DUP
+  { 0xA118, BIDI_L   },  // YI SYLLABLE DURX
+  { 0xA119, BIDI_L   },  // YI SYLLABLE DUR
+  { 0xA11A, BIDI_L   },  // YI SYLLABLE TIT
+  { 0xA11B, BIDI_L   },  // YI SYLLABLE TIX
+  { 0xA11C, BIDI_L   },  // YI SYLLABLE TI
+  { 0xA11D, BIDI_L   },  // YI SYLLABLE TIP
+  { 0xA11E, BIDI_L   },  // YI SYLLABLE TIEX
+  { 0xA11F, BIDI_L   },  // YI SYLLABLE TIE
+  { 0xA120, BIDI_L   },  // YI SYLLABLE TIEP
+  { 0xA121, BIDI_L   },  // YI SYLLABLE TAT
+  { 0xA122, BIDI_L   },  // YI SYLLABLE TAX
+  { 0xA123, BIDI_L   },  // YI SYLLABLE TA
+  { 0xA124, BIDI_L   },  // YI SYLLABLE TAP
+  { 0xA125, BIDI_L   },  // YI SYLLABLE TUOT
+  { 0xA126, BIDI_L   },  // YI SYLLABLE TUOX
+  { 0xA127, BIDI_L   },  // YI SYLLABLE TUO
+  { 0xA128, BIDI_L   },  // YI SYLLABLE TUOP
+  { 0xA129, BIDI_L   },  // YI SYLLABLE TOT
+  { 0xA12A, BIDI_L   },  // YI SYLLABLE TOX
+  { 0xA12B, BIDI_L   },  // YI SYLLABLE TO
+  { 0xA12C, BIDI_L   },  // YI SYLLABLE TOP
+  { 0xA12D, BIDI_L   },  // YI SYLLABLE TEX
+  { 0xA12E, BIDI_L   },  // YI SYLLABLE TE
+  { 0xA12F, BIDI_L   },  // YI SYLLABLE TEP
+  { 0xA130, BIDI_L   },  // YI SYLLABLE TUT
+  { 0xA131, BIDI_L   },  // YI SYLLABLE TUX
+  { 0xA132, BIDI_L   },  // YI SYLLABLE TU
+  { 0xA133, BIDI_L   },  // YI SYLLABLE TUP
+  { 0xA134, BIDI_L   },  // YI SYLLABLE TURX
+  { 0xA135, BIDI_L   },  // YI SYLLABLE TUR
+  { 0xA136, BIDI_L   },  // YI SYLLABLE DDIT
+  { 0xA137, BIDI_L   },  // YI SYLLABLE DDIX
+  { 0xA138, BIDI_L   },  // YI SYLLABLE DDI
+  { 0xA139, BIDI_L   },  // YI SYLLABLE DDIP
+  { 0xA13A, BIDI_L   },  // YI SYLLABLE DDIEX
+  { 0xA13B, BIDI_L   },  // YI SYLLABLE DDIE
+  { 0xA13C, BIDI_L   },  // YI SYLLABLE DDIEP
+  { 0xA13D, BIDI_L   },  // YI SYLLABLE DDAT
+  { 0xA13E, BIDI_L   },  // YI SYLLABLE DDAX
+  { 0xA13F, BIDI_L   },  // YI SYLLABLE DDA
+  { 0xA140, BIDI_L   },  // YI SYLLABLE DDAP
+  { 0xA141, BIDI_L   },  // YI SYLLABLE DDUOX
+  { 0xA142, BIDI_L   },  // YI SYLLABLE DDUO
+  { 0xA143, BIDI_L   },  // YI SYLLABLE DDUOP
+  { 0xA144, BIDI_L   },  // YI SYLLABLE DDOT
+  { 0xA145, BIDI_L   },  // YI SYLLABLE DDOX
+  { 0xA146, BIDI_L   },  // YI SYLLABLE DDO
+  { 0xA147, BIDI_L   },  // YI SYLLABLE DDOP
+  { 0xA148, BIDI_L   },  // YI SYLLABLE DDEX
+  { 0xA149, BIDI_L   },  // YI SYLLABLE DDE
+  { 0xA14A, BIDI_L   },  // YI SYLLABLE DDEP
+  { 0xA14B, BIDI_L   },  // YI SYLLABLE DDUT
+  { 0xA14C, BIDI_L   },  // YI SYLLABLE DDUX
+  { 0xA14D, BIDI_L   },  // YI SYLLABLE DDU
+  { 0xA14E, BIDI_L   },  // YI SYLLABLE DDUP
+  { 0xA14F, BIDI_L   },  // YI SYLLABLE DDURX
+  { 0xA150, BIDI_L   },  // YI SYLLABLE DDUR
+  { 0xA151, BIDI_L   },  // YI SYLLABLE NDIT
+  { 0xA152, BIDI_L   },  // YI SYLLABLE NDIX
+  { 0xA153, BIDI_L   },  // YI SYLLABLE NDI
+  { 0xA154, BIDI_L   },  // YI SYLLABLE NDIP
+  { 0xA155, BIDI_L   },  // YI SYLLABLE NDIEX
+  { 0xA156, BIDI_L   },  // YI SYLLABLE NDIE
+  { 0xA157, BIDI_L   },  // YI SYLLABLE NDAT
+  { 0xA158, BIDI_L   },  // YI SYLLABLE NDAX
+  { 0xA159, BIDI_L   },  // YI SYLLABLE NDA
+  { 0xA15A, BIDI_L   },  // YI SYLLABLE NDAP
+  { 0xA15B, BIDI_L   },  // YI SYLLABLE NDOT
+  { 0xA15C, BIDI_L   },  // YI SYLLABLE NDOX
+  { 0xA15D, BIDI_L   },  // YI SYLLABLE NDO
+  { 0xA15E, BIDI_L   },  // YI SYLLABLE NDOP
+  { 0xA15F, BIDI_L   },  // YI SYLLABLE NDEX
+  { 0xA160, BIDI_L   },  // YI SYLLABLE NDE
+  { 0xA161, BIDI_L   },  // YI SYLLABLE NDEP
+  { 0xA162, BIDI_L   },  // YI SYLLABLE NDUT
+  { 0xA163, BIDI_L   },  // YI SYLLABLE NDUX
+  { 0xA164, BIDI_L   },  // YI SYLLABLE NDU
+  { 0xA165, BIDI_L   },  // YI SYLLABLE NDUP
+  { 0xA166, BIDI_L   },  // YI SYLLABLE NDURX
+  { 0xA167, BIDI_L   },  // YI SYLLABLE NDUR
+  { 0xA168, BIDI_L   },  // YI SYLLABLE HNIT
+  { 0xA169, BIDI_L   },  // YI SYLLABLE HNIX
+  { 0xA16A, BIDI_L   },  // YI SYLLABLE HNI
+  { 0xA16B, BIDI_L   },  // YI SYLLABLE HNIP
+  { 0xA16C, BIDI_L   },  // YI SYLLABLE HNIET
+  { 0xA16D, BIDI_L   },  // YI SYLLABLE HNIEX
+  { 0xA16E, BIDI_L   },  // YI SYLLABLE HNIE
+  { 0xA16F, BIDI_L   },  // YI SYLLABLE HNIEP
+  { 0xA170, BIDI_L   },  // YI SYLLABLE HNAT
+  { 0xA171, BIDI_L   },  // YI SYLLABLE HNAX
+  { 0xA172, BIDI_L   },  // YI SYLLABLE HNA
+  { 0xA173, BIDI_L   },  // YI SYLLABLE HNAP
+  { 0xA174, BIDI_L   },  // YI SYLLABLE HNUOX
+  { 0xA175, BIDI_L   },  // YI SYLLABLE HNUO
+  { 0xA176, BIDI_L   },  // YI SYLLABLE HNOT
+  { 0xA177, BIDI_L   },  // YI SYLLABLE HNOX
+  { 0xA178, BIDI_L   },  // YI SYLLABLE HNOP
+  { 0xA179, BIDI_L   },  // YI SYLLABLE HNEX
+  { 0xA17A, BIDI_L   },  // YI SYLLABLE HNE
+  { 0xA17B, BIDI_L   },  // YI SYLLABLE HNEP
+  { 0xA17C, BIDI_L   },  // YI SYLLABLE HNUT
+  { 0xA17D, BIDI_L   },  // YI SYLLABLE NIT
+  { 0xA17E, BIDI_L   },  // YI SYLLABLE NIX
+  { 0xA17F, BIDI_L   },  // YI SYLLABLE NI
+  { 0xA180, BIDI_L   },  // YI SYLLABLE NIP
+  { 0xA181, BIDI_L   },  // YI SYLLABLE NIEX
+  { 0xA182, BIDI_L   },  // YI SYLLABLE NIE
+  { 0xA183, BIDI_L   },  // YI SYLLABLE NIEP
+  { 0xA184, BIDI_L   },  // YI SYLLABLE NAX
+  { 0xA185, BIDI_L   },  // YI SYLLABLE NA
+  { 0xA186, BIDI_L   },  // YI SYLLABLE NAP
+  { 0xA187, BIDI_L   },  // YI SYLLABLE NUOX
+  { 0xA188, BIDI_L   },  // YI SYLLABLE NUO
+  { 0xA189, BIDI_L   },  // YI SYLLABLE NUOP
+  { 0xA18A, BIDI_L   },  // YI SYLLABLE NOT
+  { 0xA18B, BIDI_L   },  // YI SYLLABLE NOX
+  { 0xA18C, BIDI_L   },  // YI SYLLABLE NO
+  { 0xA18D, BIDI_L   },  // YI SYLLABLE NOP
+  { 0xA18E, BIDI_L   },  // YI SYLLABLE NEX
+  { 0xA18F, BIDI_L   },  // YI SYLLABLE NE
+  { 0xA190, BIDI_L   },  // YI SYLLABLE NEP
+  { 0xA191, BIDI_L   },  // YI SYLLABLE NUT
+  { 0xA192, BIDI_L   },  // YI SYLLABLE NUX
+  { 0xA193, BIDI_L   },  // YI SYLLABLE NU
+  { 0xA194, BIDI_L   },  // YI SYLLABLE NUP
+  { 0xA195, BIDI_L   },  // YI SYLLABLE NURX
+  { 0xA196, BIDI_L   },  // YI SYLLABLE NUR
+  { 0xA197, BIDI_L   },  // YI SYLLABLE HLIT
+  { 0xA198, BIDI_L   },  // YI SYLLABLE HLIX
+  { 0xA199, BIDI_L   },  // YI SYLLABLE HLI
+  { 0xA19A, BIDI_L   },  // YI SYLLABLE HLIP
+  { 0xA19B, BIDI_L   },  // YI SYLLABLE HLIEX
+  { 0xA19C, BIDI_L   },  // YI SYLLABLE HLIE
+  { 0xA19D, BIDI_L   },  // YI SYLLABLE HLIEP
+  { 0xA19E, BIDI_L   },  // YI SYLLABLE HLAT
+  { 0xA19F, BIDI_L   },  // YI SYLLABLE HLAX
+  { 0xA1A0, BIDI_L   },  // YI SYLLABLE HLA
+  { 0xA1A1, BIDI_L   },  // YI SYLLABLE HLAP
+  { 0xA1A2, BIDI_L   },  // YI SYLLABLE HLUOX
+  { 0xA1A3, BIDI_L   },  // YI SYLLABLE HLUO
+  { 0xA1A4, BIDI_L   },  // YI SYLLABLE HLUOP
+  { 0xA1A5, BIDI_L   },  // YI SYLLABLE HLOX
+  { 0xA1A6, BIDI_L   },  // YI SYLLABLE HLO
+  { 0xA1A7, BIDI_L   },  // YI SYLLABLE HLOP
+  { 0xA1A8, BIDI_L   },  // YI SYLLABLE HLEX
+  { 0xA1A9, BIDI_L   },  // YI SYLLABLE HLE
+  { 0xA1AA, BIDI_L   },  // YI SYLLABLE HLEP
+  { 0xA1AB, BIDI_L   },  // YI SYLLABLE HLUT
+  { 0xA1AC, BIDI_L   },  // YI SYLLABLE HLUX
+  { 0xA1AD, BIDI_L   },  // YI SYLLABLE HLU
+  { 0xA1AE, BIDI_L   },  // YI SYLLABLE HLUP
+  { 0xA1AF, BIDI_L   },  // YI SYLLABLE HLURX
+  { 0xA1B0, BIDI_L   },  // YI SYLLABLE HLUR
+  { 0xA1B1, BIDI_L   },  // YI SYLLABLE HLYT
+  { 0xA1B2, BIDI_L   },  // YI SYLLABLE HLYX
+  { 0xA1B3, BIDI_L   },  // YI SYLLABLE HLY
+  { 0xA1B4, BIDI_L   },  // YI SYLLABLE HLYP
+  { 0xA1B5, BIDI_L   },  // YI SYLLABLE HLYRX
+  { 0xA1B6, BIDI_L   },  // YI SYLLABLE HLYR
+  { 0xA1B7, BIDI_L   },  // YI SYLLABLE LIT
+  { 0xA1B8, BIDI_L   },  // YI SYLLABLE LIX
+  { 0xA1B9, BIDI_L   },  // YI SYLLABLE LI
+  { 0xA1BA, BIDI_L   },  // YI SYLLABLE LIP
+  { 0xA1BB, BIDI_L   },  // YI SYLLABLE LIET
+  { 0xA1BC, BIDI_L   },  // YI SYLLABLE LIEX
+  { 0xA1BD, BIDI_L   },  // YI SYLLABLE LIE
+  { 0xA1BE, BIDI_L   },  // YI SYLLABLE LIEP
+  { 0xA1BF, BIDI_L   },  // YI SYLLABLE LAT
+  { 0xA1C0, BIDI_L   },  // YI SYLLABLE LAX
+  { 0xA1C1, BIDI_L   },  // YI SYLLABLE LA
+  { 0xA1C2, BIDI_L   },  // YI SYLLABLE LAP
+  { 0xA1C3, BIDI_L   },  // YI SYLLABLE LUOT
+  { 0xA1C4, BIDI_L   },  // YI SYLLABLE LUOX
+  { 0xA1C5, BIDI_L   },  // YI SYLLABLE LUO
+  { 0xA1C6, BIDI_L   },  // YI SYLLABLE LUOP
+  { 0xA1C7, BIDI_L   },  // YI SYLLABLE LOT
+  { 0xA1C8, BIDI_L   },  // YI SYLLABLE LOX
+  { 0xA1C9, BIDI_L   },  // YI SYLLABLE LO
+  { 0xA1CA, BIDI_L   },  // YI SYLLABLE LOP
+  { 0xA1CB, BIDI_L   },  // YI SYLLABLE LEX
+  { 0xA1CC, BIDI_L   },  // YI SYLLABLE LE
+  { 0xA1CD, BIDI_L   },  // YI SYLLABLE LEP
+  { 0xA1CE, BIDI_L   },  // YI SYLLABLE LUT
+  { 0xA1CF, BIDI_L   },  // YI SYLLABLE LUX
+  { 0xA1D0, BIDI_L   },  // YI SYLLABLE LU
+  { 0xA1D1, BIDI_L   },  // YI SYLLABLE LUP
+  { 0xA1D2, BIDI_L   },  // YI SYLLABLE LURX
+  { 0xA1D3, BIDI_L   },  // YI SYLLABLE LUR
+  { 0xA1D4, BIDI_L   },  // YI SYLLABLE LYT
+  { 0xA1D5, BIDI_L   },  // YI SYLLABLE LYX
+  { 0xA1D6, BIDI_L   },  // YI SYLLABLE LY
+  { 0xA1D7, BIDI_L   },  // YI SYLLABLE LYP
+  { 0xA1D8, BIDI_L   },  // YI SYLLABLE LYRX
+  { 0xA1D9, BIDI_L   },  // YI SYLLABLE LYR
+  { 0xA1DA, BIDI_L   },  // YI SYLLABLE GIT
+  { 0xA1DB, BIDI_L   },  // YI SYLLABLE GIX
+  { 0xA1DC, BIDI_L   },  // YI SYLLABLE GI
+  { 0xA1DD, BIDI_L   },  // YI SYLLABLE GIP
+  { 0xA1DE, BIDI_L   },  // YI SYLLABLE GIET
+  { 0xA1DF, BIDI_L   },  // YI SYLLABLE GIEX
+  { 0xA1E0, BIDI_L   },  // YI SYLLABLE GIE
+  { 0xA1E1, BIDI_L   },  // YI SYLLABLE GIEP
+  { 0xA1E2, BIDI_L   },  // YI SYLLABLE GAT
+  { 0xA1E3, BIDI_L   },  // YI SYLLABLE GAX
+  { 0xA1E4, BIDI_L   },  // YI SYLLABLE GA
+  { 0xA1E5, BIDI_L   },  // YI SYLLABLE GAP
+  { 0xA1E6, BIDI_L   },  // YI SYLLABLE GUOT
+  { 0xA1E7, BIDI_L   },  // YI SYLLABLE GUOX
+  { 0xA1E8, BIDI_L   },  // YI SYLLABLE GUO
+  { 0xA1E9, BIDI_L   },  // YI SYLLABLE GUOP
+  { 0xA1EA, BIDI_L   },  // YI SYLLABLE GOT
+  { 0xA1EB, BIDI_L   },  // YI SYLLABLE GOX
+  { 0xA1EC, BIDI_L   },  // YI SYLLABLE GO
+  { 0xA1ED, BIDI_L   },  // YI SYLLABLE GOP
+  { 0xA1EE, BIDI_L   },  // YI SYLLABLE GET
+  { 0xA1EF, BIDI_L   },  // YI SYLLABLE GEX
+  { 0xA1F0, BIDI_L   },  // YI SYLLABLE GE
+  { 0xA1F1, BIDI_L   },  // YI SYLLABLE GEP
+  { 0xA1F2, BIDI_L   },  // YI SYLLABLE GUT
+  { 0xA1F3, BIDI_L   },  // YI SYLLABLE GUX
+  { 0xA1F4, BIDI_L   },  // YI SYLLABLE GU
+  { 0xA1F5, BIDI_L   },  // YI SYLLABLE GUP
+  { 0xA1F6, BIDI_L   },  // YI SYLLABLE GURX
+  { 0xA1F7, BIDI_L   },  // YI SYLLABLE GUR
+  { 0xA1F8, BIDI_L   },  // YI SYLLABLE KIT
+  { 0xA1F9, BIDI_L   },  // YI SYLLABLE KIX
+  { 0xA1FA, BIDI_L   },  // YI SYLLABLE KI
+  { 0xA1FB, BIDI_L   },  // YI SYLLABLE KIP
+  { 0xA1FC, BIDI_L   },  // YI SYLLABLE KIEX
+  { 0xA1FD, BIDI_L   },  // YI SYLLABLE KIE
+  { 0xA1FE, BIDI_L   },  // YI SYLLABLE KIEP
+  { 0xA1FF, BIDI_L   },  // YI SYLLABLE KAT
+  { 0xA200, BIDI_L   },  // YI SYLLABLE KAX
+  { 0xA201, BIDI_L   },  // YI SYLLABLE KA
+  { 0xA202, BIDI_L   },  // YI SYLLABLE KAP
+  { 0xA203, BIDI_L   },  // YI SYLLABLE KUOX
+  { 0xA204, BIDI_L   },  // YI SYLLABLE KUO
+  { 0xA205, BIDI_L   },  // YI SYLLABLE KUOP
+  { 0xA206, BIDI_L   },  // YI SYLLABLE KOT
+  { 0xA207, BIDI_L   },  // YI SYLLABLE KOX
+  { 0xA208, BIDI_L   },  // YI SYLLABLE KO
+  { 0xA209, BIDI_L   },  // YI SYLLABLE KOP
+  { 0xA20A, BIDI_L   },  // YI SYLLABLE KET
+  { 0xA20B, BIDI_L   },  // YI SYLLABLE KEX
+  { 0xA20C, BIDI_L   },  // YI SYLLABLE KE
+  { 0xA20D, BIDI_L   },  // YI SYLLABLE KEP
+  { 0xA20E, BIDI_L   },  // YI SYLLABLE KUT
+  { 0xA20F, BIDI_L   },  // YI SYLLABLE KUX
+  { 0xA210, BIDI_L   },  // YI SYLLABLE KU
+  { 0xA211, BIDI_L   },  // YI SYLLABLE KUP
+  { 0xA212, BIDI_L   },  // YI SYLLABLE KURX
+  { 0xA213, BIDI_L   },  // YI SYLLABLE KUR
+  { 0xA214, BIDI_L   },  // YI SYLLABLE GGIT
+  { 0xA215, BIDI_L   },  // YI SYLLABLE GGIX
+  { 0xA216, BIDI_L   },  // YI SYLLABLE GGI
+  { 0xA217, BIDI_L   },  // YI SYLLABLE GGIEX
+  { 0xA218, BIDI_L   },  // YI SYLLABLE GGIE
+  { 0xA219, BIDI_L   },  // YI SYLLABLE GGIEP
+  { 0xA21A, BIDI_L   },  // YI SYLLABLE GGAT
+  { 0xA21B, BIDI_L   },  // YI SYLLABLE GGAX
+  { 0xA21C, BIDI_L   },  // YI SYLLABLE GGA
+  { 0xA21D, BIDI_L   },  // YI SYLLABLE GGAP
+  { 0xA21E, BIDI_L   },  // YI SYLLABLE GGUOT
+  { 0xA21F, BIDI_L   },  // YI SYLLABLE GGUOX
+  { 0xA220, BIDI_L   },  // YI SYLLABLE GGUO
+  { 0xA221, BIDI_L   },  // YI SYLLABLE GGUOP
+  { 0xA222, BIDI_L   },  // YI SYLLABLE GGOT
+  { 0xA223, BIDI_L   },  // YI SYLLABLE GGOX
+  { 0xA224, BIDI_L   },  // YI SYLLABLE GGO
+  { 0xA225, BIDI_L   },  // YI SYLLABLE GGOP
+  { 0xA226, BIDI_L   },  // YI SYLLABLE GGET
+  { 0xA227, BIDI_L   },  // YI SYLLABLE GGEX
+  { 0xA228, BIDI_L   },  // YI SYLLABLE GGE
+  { 0xA229, BIDI_L   },  // YI SYLLABLE GGEP
+  { 0xA22A, BIDI_L   },  // YI SYLLABLE GGUT
+  { 0xA22B, BIDI_L   },  // YI SYLLABLE GGUX
+  { 0xA22C, BIDI_L   },  // YI SYLLABLE GGU
+  { 0xA22D, BIDI_L   },  // YI SYLLABLE GGUP
+  { 0xA22E, BIDI_L   },  // YI SYLLABLE GGURX
+  { 0xA22F, BIDI_L   },  // YI SYLLABLE GGUR
+  { 0xA230, BIDI_L   },  // YI SYLLABLE MGIEX
+  { 0xA231, BIDI_L   },  // YI SYLLABLE MGIE
+  { 0xA232, BIDI_L   },  // YI SYLLABLE MGAT
+  { 0xA233, BIDI_L   },  // YI SYLLABLE MGAX
+  { 0xA234, BIDI_L   },  // YI SYLLABLE MGA
+  { 0xA235, BIDI_L   },  // YI SYLLABLE MGAP
+  { 0xA236, BIDI_L   },  // YI SYLLABLE MGUOX
+  { 0xA237, BIDI_L   },  // YI SYLLABLE MGUO
+  { 0xA238, BIDI_L   },  // YI SYLLABLE MGUOP
+  { 0xA239, BIDI_L   },  // YI SYLLABLE MGOT
+  { 0xA23A, BIDI_L   },  // YI SYLLABLE MGOX
+  { 0xA23B, BIDI_L   },  // YI SYLLABLE MGO
+  { 0xA23C, BIDI_L   },  // YI SYLLABLE MGOP
+  { 0xA23D, BIDI_L   },  // YI SYLLABLE MGEX
+  { 0xA23E, BIDI_L   },  // YI SYLLABLE MGE
+  { 0xA23F, BIDI_L   },  // YI SYLLABLE MGEP
+  { 0xA240, BIDI_L   },  // YI SYLLABLE MGUT
+  { 0xA241, BIDI_L   },  // YI SYLLABLE MGUX
+  { 0xA242, BIDI_L   },  // YI SYLLABLE MGU
+  { 0xA243, BIDI_L   },  // YI SYLLABLE MGUP
+  { 0xA244, BIDI_L   },  // YI SYLLABLE MGURX
+  { 0xA245, BIDI_L   },  // YI SYLLABLE MGUR
+  { 0xA246, BIDI_L   },  // YI SYLLABLE HXIT
+  { 0xA247, BIDI_L   },  // YI SYLLABLE HXIX
+  { 0xA248, BIDI_L   },  // YI SYLLABLE HXI
+  { 0xA249, BIDI_L   },  // YI SYLLABLE HXIP
+  { 0xA24A, BIDI_L   },  // YI SYLLABLE HXIET
+  { 0xA24B, BIDI_L   },  // YI SYLLABLE HXIEX
+  { 0xA24C, BIDI_L   },  // YI SYLLABLE HXIE
+  { 0xA24D, BIDI_L   },  // YI SYLLABLE HXIEP
+  { 0xA24E, BIDI_L   },  // YI SYLLABLE HXAT
+  { 0xA24F, BIDI_L   },  // YI SYLLABLE HXAX
+  { 0xA250, BIDI_L   },  // YI SYLLABLE HXA
+  { 0xA251, BIDI_L   },  // YI SYLLABLE HXAP
+  { 0xA252, BIDI_L   },  // YI SYLLABLE HXUOT
+  { 0xA253, BIDI_L   },  // YI SYLLABLE HXUOX
+  { 0xA254, BIDI_L   },  // YI SYLLABLE HXUO
+  { 0xA255, BIDI_L   },  // YI SYLLABLE HXUOP
+  { 0xA256, BIDI_L   },  // YI SYLLABLE HXOT
+  { 0xA257, BIDI_L   },  // YI SYLLABLE HXOX
+  { 0xA258, BIDI_L   },  // YI SYLLABLE HXO
+  { 0xA259, BIDI_L   },  // YI SYLLABLE HXOP
+  { 0xA25A, BIDI_L   },  // YI SYLLABLE HXEX
+  { 0xA25B, BIDI_L   },  // YI SYLLABLE HXE
+  { 0xA25C, BIDI_L   },  // YI SYLLABLE HXEP
+  { 0xA25D, BIDI_L   },  // YI SYLLABLE NGIEX
+  { 0xA25E, BIDI_L   },  // YI SYLLABLE NGIE
+  { 0xA25F, BIDI_L   },  // YI SYLLABLE NGIEP
+  { 0xA260, BIDI_L   },  // YI SYLLABLE NGAT
+  { 0xA261, BIDI_L   },  // YI SYLLABLE NGAX
+  { 0xA262, BIDI_L   },  // YI SYLLABLE NGA
+  { 0xA263, BIDI_L   },  // YI SYLLABLE NGAP
+  { 0xA264, BIDI_L   },  // YI SYLLABLE NGUOT
+  { 0xA265, BIDI_L   },  // YI SYLLABLE NGUOX
+  { 0xA266, BIDI_L   },  // YI SYLLABLE NGUO
+  { 0xA267, BIDI_L   },  // YI SYLLABLE NGOT
+  { 0xA268, BIDI_L   },  // YI SYLLABLE NGOX
+  { 0xA269, BIDI_L   },  // YI SYLLABLE NGO
+  { 0xA26A, BIDI_L   },  // YI SYLLABLE NGOP
+  { 0xA26B, BIDI_L   },  // YI SYLLABLE NGEX
+  { 0xA26C, BIDI_L   },  // YI SYLLABLE NGE
+  { 0xA26D, BIDI_L   },  // YI SYLLABLE NGEP
+  { 0xA26E, BIDI_L   },  // YI SYLLABLE HIT
+  { 0xA26F, BIDI_L   },  // YI SYLLABLE HIEX
+  { 0xA270, BIDI_L   },  // YI SYLLABLE HIE
+  { 0xA271, BIDI_L   },  // YI SYLLABLE HAT
+  { 0xA272, BIDI_L   },  // YI SYLLABLE HAX
+  { 0xA273, BIDI_L   },  // YI SYLLABLE HA
+  { 0xA274, BIDI_L   },  // YI SYLLABLE HAP
+  { 0xA275, BIDI_L   },  // YI SYLLABLE HUOT
+  { 0xA276, BIDI_L   },  // YI SYLLABLE HUOX
+  { 0xA277, BIDI_L   },  // YI SYLLABLE HUO
+  { 0xA278, BIDI_L   },  // YI SYLLABLE HUOP
+  { 0xA279, BIDI_L   },  // YI SYLLABLE HOT
+  { 0xA27A, BIDI_L   },  // YI SYLLABLE HOX
+  { 0xA27B, BIDI_L   },  // YI SYLLABLE HO
+  { 0xA27C, BIDI_L   },  // YI SYLLABLE HOP
+  { 0xA27D, BIDI_L   },  // YI SYLLABLE HEX
+  { 0xA27E, BIDI_L   },  // YI SYLLABLE HE
+  { 0xA27F, BIDI_L   },  // YI SYLLABLE HEP
+  { 0xA280, BIDI_L   },  // YI SYLLABLE WAT
+  { 0xA281, BIDI_L   },  // YI SYLLABLE WAX
+  { 0xA282, BIDI_L   },  // YI SYLLABLE WA
+  { 0xA283, BIDI_L   },  // YI SYLLABLE WAP
+  { 0xA284, BIDI_L   },  // YI SYLLABLE WUOX
+  { 0xA285, BIDI_L   },  // YI SYLLABLE WUO
+  { 0xA286, BIDI_L   },  // YI SYLLABLE WUOP
+  { 0xA287, BIDI_L   },  // YI SYLLABLE WOX
+  { 0xA288, BIDI_L   },  // YI SYLLABLE WO
+  { 0xA289, BIDI_L   },  // YI SYLLABLE WOP
+  { 0xA28A, BIDI_L   },  // YI SYLLABLE WEX
+  { 0xA28B, BIDI_L   },  // YI SYLLABLE WE
+  { 0xA28C, BIDI_L   },  // YI SYLLABLE WEP
+  { 0xA28D, BIDI_L   },  // YI SYLLABLE ZIT
+  { 0xA28E, BIDI_L   },  // YI SYLLABLE ZIX
+  { 0xA28F, BIDI_L   },  // YI SYLLABLE ZI
+  { 0xA290, BIDI_L   },  // YI SYLLABLE ZIP
+  { 0xA291, BIDI_L   },  // YI SYLLABLE ZIEX
+  { 0xA292, BIDI_L   },  // YI SYLLABLE ZIE
+  { 0xA293, BIDI_L   },  // YI SYLLABLE ZIEP
+  { 0xA294, BIDI_L   },  // YI SYLLABLE ZAT
+  { 0xA295, BIDI_L   },  // YI SYLLABLE ZAX
+  { 0xA296, BIDI_L   },  // YI SYLLABLE ZA
+  { 0xA297, BIDI_L   },  // YI SYLLABLE ZAP
+  { 0xA298, BIDI_L   },  // YI SYLLABLE ZUOX
+  { 0xA299, BIDI_L   },  // YI SYLLABLE ZUO
+  { 0xA29A, BIDI_L   },  // YI SYLLABLE ZUOP
+  { 0xA29B, BIDI_L   },  // YI SYLLABLE ZOT
+  { 0xA29C, BIDI_L   },  // YI SYLLABLE ZOX
+  { 0xA29D, BIDI_L   },  // YI SYLLABLE ZO
+  { 0xA29E, BIDI_L   },  // YI SYLLABLE ZOP
+  { 0xA29F, BIDI_L   },  // YI SYLLABLE ZEX
+  { 0xA2A0, BIDI_L   },  // YI SYLLABLE ZE
+  { 0xA2A1, BIDI_L   },  // YI SYLLABLE ZEP
+  { 0xA2A2, BIDI_L   },  // YI SYLLABLE ZUT
+  { 0xA2A3, BIDI_L   },  // YI SYLLABLE ZUX
+  { 0xA2A4, BIDI_L   },  // YI SYLLABLE ZU
+  { 0xA2A5, BIDI_L   },  // YI SYLLABLE ZUP
+  { 0xA2A6, BIDI_L   },  // YI SYLLABLE ZURX
+  { 0xA2A7, BIDI_L   },  // YI SYLLABLE ZUR
+  { 0xA2A8, BIDI_L   },  // YI SYLLABLE ZYT
+  { 0xA2A9, BIDI_L   },  // YI SYLLABLE ZYX
+  { 0xA2AA, BIDI_L   },  // YI SYLLABLE ZY
+  { 0xA2AB, BIDI_L   },  // YI SYLLABLE ZYP
+  { 0xA2AC, BIDI_L   },  // YI SYLLABLE ZYRX
+  { 0xA2AD, BIDI_L   },  // YI SYLLABLE ZYR
+  { 0xA2AE, BIDI_L   },  // YI SYLLABLE CIT
+  { 0xA2AF, BIDI_L   },  // YI SYLLABLE CIX
+  { 0xA2B0, BIDI_L   },  // YI SYLLABLE CI
+  { 0xA2B1, BIDI_L   },  // YI SYLLABLE CIP
+  { 0xA2B2, BIDI_L   },  // YI SYLLABLE CIET
+  { 0xA2B3, BIDI_L   },  // YI SYLLABLE CIEX
+  { 0xA2B4, BIDI_L   },  // YI SYLLABLE CIE
+  { 0xA2B5, BIDI_L   },  // YI SYLLABLE CIEP
+  { 0xA2B6, BIDI_L   },  // YI SYLLABLE CAT
+  { 0xA2B7, BIDI_L   },  // YI SYLLABLE CAX
+  { 0xA2B8, BIDI_L   },  // YI SYLLABLE CA
+  { 0xA2B9, BIDI_L   },  // YI SYLLABLE CAP
+  { 0xA2BA, BIDI_L   },  // YI SYLLABLE CUOX
+  { 0xA2BB, BIDI_L   },  // YI SYLLABLE CUO
+  { 0xA2BC, BIDI_L   },  // YI SYLLABLE CUOP
+  { 0xA2BD, BIDI_L   },  // YI SYLLABLE COT
+  { 0xA2BE, BIDI_L   },  // YI SYLLABLE COX
+  { 0xA2BF, BIDI_L   },  // YI SYLLABLE CO
+  { 0xA2C0, BIDI_L   },  // YI SYLLABLE COP
+  { 0xA2C1, BIDI_L   },  // YI SYLLABLE CEX
+  { 0xA2C2, BIDI_L   },  // YI SYLLABLE CE
+  { 0xA2C3, BIDI_L   },  // YI SYLLABLE CEP
+  { 0xA2C4, BIDI_L   },  // YI SYLLABLE CUT
+  { 0xA2C5, BIDI_L   },  // YI SYLLABLE CUX
+  { 0xA2C6, BIDI_L   },  // YI SYLLABLE CU
+  { 0xA2C7, BIDI_L   },  // YI SYLLABLE CUP
+  { 0xA2C8, BIDI_L   },  // YI SYLLABLE CURX
+  { 0xA2C9, BIDI_L   },  // YI SYLLABLE CUR
+  { 0xA2CA, BIDI_L   },  // YI SYLLABLE CYT
+  { 0xA2CB, BIDI_L   },  // YI SYLLABLE CYX
+  { 0xA2CC, BIDI_L   },  // YI SYLLABLE CY
+  { 0xA2CD, BIDI_L   },  // YI SYLLABLE CYP
+  { 0xA2CE, BIDI_L   },  // YI SYLLABLE CYRX
+  { 0xA2CF, BIDI_L   },  // YI SYLLABLE CYR
+  { 0xA2D0, BIDI_L   },  // YI SYLLABLE ZZIT
+  { 0xA2D1, BIDI_L   },  // YI SYLLABLE ZZIX
+  { 0xA2D2, BIDI_L   },  // YI SYLLABLE ZZI
+  { 0xA2D3, BIDI_L   },  // YI SYLLABLE ZZIP
+  { 0xA2D4, BIDI_L   },  // YI SYLLABLE ZZIET
+  { 0xA2D5, BIDI_L   },  // YI SYLLABLE ZZIEX
+  { 0xA2D6, BIDI_L   },  // YI SYLLABLE ZZIE
+  { 0xA2D7, BIDI_L   },  // YI SYLLABLE ZZIEP
+  { 0xA2D8, BIDI_L   },  // YI SYLLABLE ZZAT
+  { 0xA2D9, BIDI_L   },  // YI SYLLABLE ZZAX
+  { 0xA2DA, BIDI_L   },  // YI SYLLABLE ZZA
+  { 0xA2DB, BIDI_L   },  // YI SYLLABLE ZZAP
+  { 0xA2DC, BIDI_L   },  // YI SYLLABLE ZZOX
+  { 0xA2DD, BIDI_L   },  // YI SYLLABLE ZZO
+  { 0xA2DE, BIDI_L   },  // YI SYLLABLE ZZOP
+  { 0xA2DF, BIDI_L   },  // YI SYLLABLE ZZEX
+  { 0xA2E0, BIDI_L   },  // YI SYLLABLE ZZE
+  { 0xA2E1, BIDI_L   },  // YI SYLLABLE ZZEP
+  { 0xA2E2, BIDI_L   },  // YI SYLLABLE ZZUX
+  { 0xA2E3, BIDI_L   },  // YI SYLLABLE ZZU
+  { 0xA2E4, BIDI_L   },  // YI SYLLABLE ZZUP
+  { 0xA2E5, BIDI_L   },  // YI SYLLABLE ZZURX
+  { 0xA2E6, BIDI_L   },  // YI SYLLABLE ZZUR
+  { 0xA2E7, BIDI_L   },  // YI SYLLABLE ZZYT
+  { 0xA2E8, BIDI_L   },  // YI SYLLABLE ZZYX
+  { 0xA2E9, BIDI_L   },  // YI SYLLABLE ZZY
+  { 0xA2EA, BIDI_L   },  // YI SYLLABLE ZZYP
+  { 0xA2EB, BIDI_L   },  // YI SYLLABLE ZZYRX
+  { 0xA2EC, BIDI_L   },  // YI SYLLABLE ZZYR
+  { 0xA2ED, BIDI_L   },  // YI SYLLABLE NZIT
+  { 0xA2EE, BIDI_L   },  // YI SYLLABLE NZIX
+  { 0xA2EF, BIDI_L   },  // YI SYLLABLE NZI
+  { 0xA2F0, BIDI_L   },  // YI SYLLABLE NZIP
+  { 0xA2F1, BIDI_L   },  // YI SYLLABLE NZIEX
+  { 0xA2F2, BIDI_L   },  // YI SYLLABLE NZIE
+  { 0xA2F3, BIDI_L   },  // YI SYLLABLE NZIEP
+  { 0xA2F4, BIDI_L   },  // YI SYLLABLE NZAT
+  { 0xA2F5, BIDI_L   },  // YI SYLLABLE NZAX
+  { 0xA2F6, BIDI_L   },  // YI SYLLABLE NZA
+  { 0xA2F7, BIDI_L   },  // YI SYLLABLE NZAP
+  { 0xA2F8, BIDI_L   },  // YI SYLLABLE NZUOX
+  { 0xA2F9, BIDI_L   },  // YI SYLLABLE NZUO
+  { 0xA2FA, BIDI_L   },  // YI SYLLABLE NZOX
+  { 0xA2FB, BIDI_L   },  // YI SYLLABLE NZOP
+  { 0xA2FC, BIDI_L   },  // YI SYLLABLE NZEX
+  { 0xA2FD, BIDI_L   },  // YI SYLLABLE NZE
+  { 0xA2FE, BIDI_L   },  // YI SYLLABLE NZUX
+  { 0xA2FF, BIDI_L   },  // YI SYLLABLE NZU
+  { 0xA300, BIDI_L   },  // YI SYLLABLE NZUP
+  { 0xA301, BIDI_L   },  // YI SYLLABLE NZURX
+  { 0xA302, BIDI_L   },  // YI SYLLABLE NZUR
+  { 0xA303, BIDI_L   },  // YI SYLLABLE NZYT
+  { 0xA304, BIDI_L   },  // YI SYLLABLE NZYX
+  { 0xA305, BIDI_L   },  // YI SYLLABLE NZY
+  { 0xA306, BIDI_L   },  // YI SYLLABLE NZYP
+  { 0xA307, BIDI_L   },  // YI SYLLABLE NZYRX
+  { 0xA308, BIDI_L   },  // YI SYLLABLE NZYR
+  { 0xA309, BIDI_L   },  // YI SYLLABLE SIT
+  { 0xA30A, BIDI_L   },  // YI SYLLABLE SIX
+  { 0xA30B, BIDI_L   },  // YI SYLLABLE SI
+  { 0xA30C, BIDI_L   },  // YI SYLLABLE SIP
+  { 0xA30D, BIDI_L   },  // YI SYLLABLE SIEX
+  { 0xA30E, BIDI_L   },  // YI SYLLABLE SIE
+  { 0xA30F, BIDI_L   },  // YI SYLLABLE SIEP
+  { 0xA310, BIDI_L   },  // YI SYLLABLE SAT
+  { 0xA311, BIDI_L   },  // YI SYLLABLE SAX
+  { 0xA312, BIDI_L   },  // YI SYLLABLE SA
+  { 0xA313, BIDI_L   },  // YI SYLLABLE SAP
+  { 0xA314, BIDI_L   },  // YI SYLLABLE SUOX
+  { 0xA315, BIDI_L   },  // YI SYLLABLE SUO
+  { 0xA316, BIDI_L   },  // YI SYLLABLE SUOP
+  { 0xA317, BIDI_L   },  // YI SYLLABLE SOT
+  { 0xA318, BIDI_L   },  // YI SYLLABLE SOX
+  { 0xA319, BIDI_L   },  // YI SYLLABLE SO
+  { 0xA31A, BIDI_L   },  // YI SYLLABLE SOP
+  { 0xA31B, BIDI_L   },  // YI SYLLABLE SEX
+  { 0xA31C, BIDI_L   },  // YI SYLLABLE SE
+  { 0xA31D, BIDI_L   },  // YI SYLLABLE SEP
+  { 0xA31E, BIDI_L   },  // YI SYLLABLE SUT
+  { 0xA31F, BIDI_L   },  // YI SYLLABLE SUX
+  { 0xA320, BIDI_L   },  // YI SYLLABLE SU
+  { 0xA321, BIDI_L   },  // YI SYLLABLE SUP
+  { 0xA322, BIDI_L   },  // YI SYLLABLE SURX
+  { 0xA323, BIDI_L   },  // YI SYLLABLE SUR
+  { 0xA324, BIDI_L   },  // YI SYLLABLE SYT
+  { 0xA325, BIDI_L   },  // YI SYLLABLE SYX
+  { 0xA326, BIDI_L   },  // YI SYLLABLE SY
+  { 0xA327, BIDI_L   },  // YI SYLLABLE SYP
+  { 0xA328, BIDI_L   },  // YI SYLLABLE SYRX
+  { 0xA329, BIDI_L   },  // YI SYLLABLE SYR
+  { 0xA32A, BIDI_L   },  // YI SYLLABLE SSIT
+  { 0xA32B, BIDI_L   },  // YI SYLLABLE SSIX
+  { 0xA32C, BIDI_L   },  // YI SYLLABLE SSI
+  { 0xA32D, BIDI_L   },  // YI SYLLABLE SSIP
+  { 0xA32E, BIDI_L   },  // YI SYLLABLE SSIEX
+  { 0xA32F, BIDI_L   },  // YI SYLLABLE SSIE
+  { 0xA330, BIDI_L   },  // YI SYLLABLE SSIEP
+  { 0xA331, BIDI_L   },  // YI SYLLABLE SSAT
+  { 0xA332, BIDI_L   },  // YI SYLLABLE SSAX
+  { 0xA333, BIDI_L   },  // YI SYLLABLE SSA
+  { 0xA334, BIDI_L   },  // YI SYLLABLE SSAP
+  { 0xA335, BIDI_L   },  // YI SYLLABLE SSOT
+  { 0xA336, BIDI_L   },  // YI SYLLABLE SSOX
+  { 0xA337, BIDI_L   },  // YI SYLLABLE SSO
+  { 0xA338, BIDI_L   },  // YI SYLLABLE SSOP
+  { 0xA339, BIDI_L   },  // YI SYLLABLE SSEX
+  { 0xA33A, BIDI_L   },  // YI SYLLABLE SSE
+  { 0xA33B, BIDI_L   },  // YI SYLLABLE SSEP
+  { 0xA33C, BIDI_L   },  // YI SYLLABLE SSUT
+  { 0xA33D, BIDI_L   },  // YI SYLLABLE SSUX
+  { 0xA33E, BIDI_L   },  // YI SYLLABLE SSU
+  { 0xA33F, BIDI_L   },  // YI SYLLABLE SSUP
+  { 0xA340, BIDI_L   },  // YI SYLLABLE SSYT
+  { 0xA341, BIDI_L   },  // YI SYLLABLE SSYX
+  { 0xA342, BIDI_L   },  // YI SYLLABLE SSY
+  { 0xA343, BIDI_L   },  // YI SYLLABLE SSYP
+  { 0xA344, BIDI_L   },  // YI SYLLABLE SSYRX
+  { 0xA345, BIDI_L   },  // YI SYLLABLE SSYR
+  { 0xA346, BIDI_L   },  // YI SYLLABLE ZHAT
+  { 0xA347, BIDI_L   },  // YI SYLLABLE ZHAX
+  { 0xA348, BIDI_L   },  // YI SYLLABLE ZHA
+  { 0xA349, BIDI_L   },  // YI SYLLABLE ZHAP
+  { 0xA34A, BIDI_L   },  // YI SYLLABLE ZHUOX
+  { 0xA34B, BIDI_L   },  // YI SYLLABLE ZHUO
+  { 0xA34C, BIDI_L   },  // YI SYLLABLE ZHUOP
+  { 0xA34D, BIDI_L   },  // YI SYLLABLE ZHOT
+  { 0xA34E, BIDI_L   },  // YI SYLLABLE ZHOX
+  { 0xA34F, BIDI_L   },  // YI SYLLABLE ZHO
+  { 0xA350, BIDI_L   },  // YI SYLLABLE ZHOP
+  { 0xA351, BIDI_L   },  // YI SYLLABLE ZHET
+  { 0xA352, BIDI_L   },  // YI SYLLABLE ZHEX
+  { 0xA353, BIDI_L   },  // YI SYLLABLE ZHE
+  { 0xA354, BIDI_L   },  // YI SYLLABLE ZHEP
+  { 0xA355, BIDI_L   },  // YI SYLLABLE ZHUT
+  { 0xA356, BIDI_L   },  // YI SYLLABLE ZHUX
+  { 0xA357, BIDI_L   },  // YI SYLLABLE ZHU
+  { 0xA358, BIDI_L   },  // YI SYLLABLE ZHUP
+  { 0xA359, BIDI_L   },  // YI SYLLABLE ZHURX
+  { 0xA35A, BIDI_L   },  // YI SYLLABLE ZHUR
+  { 0xA35B, BIDI_L   },  // YI SYLLABLE ZHYT
+  { 0xA35C, BIDI_L   },  // YI SYLLABLE ZHYX
+  { 0xA35D, BIDI_L   },  // YI SYLLABLE ZHY
+  { 0xA35E, BIDI_L   },  // YI SYLLABLE ZHYP
+  { 0xA35F, BIDI_L   },  // YI SYLLABLE ZHYRX
+  { 0xA360, BIDI_L   },  // YI SYLLABLE ZHYR
+  { 0xA361, BIDI_L   },  // YI SYLLABLE CHAT
+  { 0xA362, BIDI_L   },  // YI SYLLABLE CHAX
+  { 0xA363, BIDI_L   },  // YI SYLLABLE CHA
+  { 0xA364, BIDI_L   },  // YI SYLLABLE CHAP
+  { 0xA365, BIDI_L   },  // YI SYLLABLE CHUOT
+  { 0xA366, BIDI_L   },  // YI SYLLABLE CHUOX
+  { 0xA367, BIDI_L   },  // YI SYLLABLE CHUO
+  { 0xA368, BIDI_L   },  // YI SYLLABLE CHUOP
+  { 0xA369, BIDI_L   },  // YI SYLLABLE CHOT
+  { 0xA36A, BIDI_L   },  // YI SYLLABLE CHOX
+  { 0xA36B, BIDI_L   },  // YI SYLLABLE CHO
+  { 0xA36C, BIDI_L   },  // YI SYLLABLE CHOP
+  { 0xA36D, BIDI_L   },  // YI SYLLABLE CHET
+  { 0xA36E, BIDI_L   },  // YI SYLLABLE CHEX
+  { 0xA36F, BIDI_L   },  // YI SYLLABLE CHE
+  { 0xA370, BIDI_L   },  // YI SYLLABLE CHEP
+  { 0xA371, BIDI_L   },  // YI SYLLABLE CHUX
+  { 0xA372, BIDI_L   },  // YI SYLLABLE CHU
+  { 0xA373, BIDI_L   },  // YI SYLLABLE CHUP
+  { 0xA374, BIDI_L   },  // YI SYLLABLE CHURX
+  { 0xA375, BIDI_L   },  // YI SYLLABLE CHUR
+  { 0xA376, BIDI_L   },  // YI SYLLABLE CHYT
+  { 0xA377, BIDI_L   },  // YI SYLLABLE CHYX
+  { 0xA378, BIDI_L   },  // YI SYLLABLE CHY
+  { 0xA379, BIDI_L   },  // YI SYLLABLE CHYP
+  { 0xA37A, BIDI_L   },  // YI SYLLABLE CHYRX
+  { 0xA37B, BIDI_L   },  // YI SYLLABLE CHYR
+  { 0xA37C, BIDI_L   },  // YI SYLLABLE RRAX
+  { 0xA37D, BIDI_L   },  // YI SYLLABLE RRA
+  { 0xA37E, BIDI_L   },  // YI SYLLABLE RRUOX
+  { 0xA37F, BIDI_L   },  // YI SYLLABLE RRUO
+  { 0xA380, BIDI_L   },  // YI SYLLABLE RROT
+  { 0xA381, BIDI_L   },  // YI SYLLABLE RROX
+  { 0xA382, BIDI_L   },  // YI SYLLABLE RRO
+  { 0xA383, BIDI_L   },  // YI SYLLABLE RROP
+  { 0xA384, BIDI_L   },  // YI SYLLABLE RRET
+  { 0xA385, BIDI_L   },  // YI SYLLABLE RREX
+  { 0xA386, BIDI_L   },  // YI SYLLABLE RRE
+  { 0xA387, BIDI_L   },  // YI SYLLABLE RREP
+  { 0xA388, BIDI_L   },  // YI SYLLABLE RRUT
+  { 0xA389, BIDI_L   },  // YI SYLLABLE RRUX
+  { 0xA38A, BIDI_L   },  // YI SYLLABLE RRU
+  { 0xA38B, BIDI_L   },  // YI SYLLABLE RRUP
+  { 0xA38C, BIDI_L   },  // YI SYLLABLE RRURX
+  { 0xA38D, BIDI_L   },  // YI SYLLABLE RRUR
+  { 0xA38E, BIDI_L   },  // YI SYLLABLE RRYT
+  { 0xA38F, BIDI_L   },  // YI SYLLABLE RRYX
+  { 0xA390, BIDI_L   },  // YI SYLLABLE RRY
+  { 0xA391, BIDI_L   },  // YI SYLLABLE RRYP
+  { 0xA392, BIDI_L   },  // YI SYLLABLE RRYRX
+  { 0xA393, BIDI_L   },  // YI SYLLABLE RRYR
+  { 0xA394, BIDI_L   },  // YI SYLLABLE NRAT
+  { 0xA395, BIDI_L   },  // YI SYLLABLE NRAX
+  { 0xA396, BIDI_L   },  // YI SYLLABLE NRA
+  { 0xA397, BIDI_L   },  // YI SYLLABLE NRAP
+  { 0xA398, BIDI_L   },  // YI SYLLABLE NROX
+  { 0xA399, BIDI_L   },  // YI SYLLABLE NRO
+  { 0xA39A, BIDI_L   },  // YI SYLLABLE NROP
+  { 0xA39B, BIDI_L   },  // YI SYLLABLE NRET
+  { 0xA39C, BIDI_L   },  // YI SYLLABLE NREX
+  { 0xA39D, BIDI_L   },  // YI SYLLABLE NRE
+  { 0xA39E, BIDI_L   },  // YI SYLLABLE NREP
+  { 0xA39F, BIDI_L   },  // YI SYLLABLE NRUT
+  { 0xA3A0, BIDI_L   },  // YI SYLLABLE NRUX
+  { 0xA3A1, BIDI_L   },  // YI SYLLABLE NRU
+  { 0xA3A2, BIDI_L   },  // YI SYLLABLE NRUP
+  { 0xA3A3, BIDI_L   },  // YI SYLLABLE NRURX
+  { 0xA3A4, BIDI_L   },  // YI SYLLABLE NRUR
+  { 0xA3A5, BIDI_L   },  // YI SYLLABLE NRYT
+  { 0xA3A6, BIDI_L   },  // YI SYLLABLE NRYX
+  { 0xA3A7, BIDI_L   },  // YI SYLLABLE NRY
+  { 0xA3A8, BIDI_L   },  // YI SYLLABLE NRYP
+  { 0xA3A9, BIDI_L   },  // YI SYLLABLE NRYRX
+  { 0xA3AA, BIDI_L   },  // YI SYLLABLE NRYR
+  { 0xA3AB, BIDI_L   },  // YI SYLLABLE SHAT
+  { 0xA3AC, BIDI_L   },  // YI SYLLABLE SHAX
+  { 0xA3AD, BIDI_L   },  // YI SYLLABLE SHA
+  { 0xA3AE, BIDI_L   },  // YI SYLLABLE SHAP
+  { 0xA3AF, BIDI_L   },  // YI SYLLABLE SHUOX
+  { 0xA3B0, BIDI_L   },  // YI SYLLABLE SHUO
+  { 0xA3B1, BIDI_L   },  // YI SYLLABLE SHUOP
+  { 0xA3B2, BIDI_L   },  // YI SYLLABLE SHOT
+  { 0xA3B3, BIDI_L   },  // YI SYLLABLE SHOX
+  { 0xA3B4, BIDI_L   },  // YI SYLLABLE SHO
+  { 0xA3B5, BIDI_L   },  // YI SYLLABLE SHOP
+  { 0xA3B6, BIDI_L   },  // YI SYLLABLE SHET
+  { 0xA3B7, BIDI_L   },  // YI SYLLABLE SHEX
+  { 0xA3B8, BIDI_L   },  // YI SYLLABLE SHE
+  { 0xA3B9, BIDI_L   },  // YI SYLLABLE SHEP
+  { 0xA3BA, BIDI_L   },  // YI SYLLABLE SHUT
+  { 0xA3BB, BIDI_L   },  // YI SYLLABLE SHUX
+  { 0xA3BC, BIDI_L   },  // YI SYLLABLE SHU
+  { 0xA3BD, BIDI_L   },  // YI SYLLABLE SHUP
+  { 0xA3BE, BIDI_L   },  // YI SYLLABLE SHURX
+  { 0xA3BF, BIDI_L   },  // YI SYLLABLE SHUR
+  { 0xA3C0, BIDI_L   },  // YI SYLLABLE SHYT
+  { 0xA3C1, BIDI_L   },  // YI SYLLABLE SHYX
+  { 0xA3C2, BIDI_L   },  // YI SYLLABLE SHY
+  { 0xA3C3, BIDI_L   },  // YI SYLLABLE SHYP
+  { 0xA3C4, BIDI_L   },  // YI SYLLABLE SHYRX
+  { 0xA3C5, BIDI_L   },  // YI SYLLABLE SHYR
+  { 0xA3C6, BIDI_L   },  // YI SYLLABLE RAT
+  { 0xA3C7, BIDI_L   },  // YI SYLLABLE RAX
+  { 0xA3C8, BIDI_L   },  // YI SYLLABLE RA
+  { 0xA3C9, BIDI_L   },  // YI SYLLABLE RAP
+  { 0xA3CA, BIDI_L   },  // YI SYLLABLE RUOX
+  { 0xA3CB, BIDI_L   },  // YI SYLLABLE RUO
+  { 0xA3CC, BIDI_L   },  // YI SYLLABLE RUOP
+  { 0xA3CD, BIDI_L   },  // YI SYLLABLE ROT
+  { 0xA3CE, BIDI_L   },  // YI SYLLABLE ROX
+  { 0xA3CF, BIDI_L   },  // YI SYLLABLE RO
+  { 0xA3D0, BIDI_L   },  // YI SYLLABLE ROP
+  { 0xA3D1, BIDI_L   },  // YI SYLLABLE REX
+  { 0xA3D2, BIDI_L   },  // YI SYLLABLE RE
+  { 0xA3D3, BIDI_L   },  // YI SYLLABLE REP
+  { 0xA3D4, BIDI_L   },  // YI SYLLABLE RUT
+  { 0xA3D5, BIDI_L   },  // YI SYLLABLE RUX
+  { 0xA3D6, BIDI_L   },  // YI SYLLABLE RU
+  { 0xA3D7, BIDI_L   },  // YI SYLLABLE RUP
+  { 0xA3D8, BIDI_L   },  // YI SYLLABLE RURX
+  { 0xA3D9, BIDI_L   },  // YI SYLLABLE RUR
+  { 0xA3DA, BIDI_L   },  // YI SYLLABLE RYT
+  { 0xA3DB, BIDI_L   },  // YI SYLLABLE RYX
+  { 0xA3DC, BIDI_L   },  // YI SYLLABLE RY
+  { 0xA3DD, BIDI_L   },  // YI SYLLABLE RYP
+  { 0xA3DE, BIDI_L   },  // YI SYLLABLE RYRX
+  { 0xA3DF, BIDI_L   },  // YI SYLLABLE RYR
+  { 0xA3E0, BIDI_L   },  // YI SYLLABLE JIT
+  { 0xA3E1, BIDI_L   },  // YI SYLLABLE JIX
+  { 0xA3E2, BIDI_L   },  // YI SYLLABLE JI
+  { 0xA3E3, BIDI_L   },  // YI SYLLABLE JIP
+  { 0xA3E4, BIDI_L   },  // YI SYLLABLE JIET
+  { 0xA3E5, BIDI_L   },  // YI SYLLABLE JIEX
+  { 0xA3E6, BIDI_L   },  // YI SYLLABLE JIE
+  { 0xA3E7, BIDI_L   },  // YI SYLLABLE JIEP
+  { 0xA3E8, BIDI_L   },  // YI SYLLABLE JUOT
+  { 0xA3E9, BIDI_L   },  // YI SYLLABLE JUOX
+  { 0xA3EA, BIDI_L   },  // YI SYLLABLE JUO
+  { 0xA3EB, BIDI_L   },  // YI SYLLABLE JUOP
+  { 0xA3EC, BIDI_L   },  // YI SYLLABLE JOT
+  { 0xA3ED, BIDI_L   },  // YI SYLLABLE JOX
+  { 0xA3EE, BIDI_L   },  // YI SYLLABLE JO
+  { 0xA3EF, BIDI_L   },  // YI SYLLABLE JOP
+  { 0xA3F0, BIDI_L   },  // YI SYLLABLE JUT
+  { 0xA3F1, BIDI_L   },  // YI SYLLABLE JUX
+  { 0xA3F2, BIDI_L   },  // YI SYLLABLE JU
+  { 0xA3F3, BIDI_L   },  // YI SYLLABLE JUP
+  { 0xA3F4, BIDI_L   },  // YI SYLLABLE JURX
+  { 0xA3F5, BIDI_L   },  // YI SYLLABLE JUR
+  { 0xA3F6, BIDI_L   },  // YI SYLLABLE JYT
+  { 0xA3F7, BIDI_L   },  // YI SYLLABLE JYX
+  { 0xA3F8, BIDI_L   },  // YI SYLLABLE JY
+  { 0xA3F9, BIDI_L   },  // YI SYLLABLE JYP
+  { 0xA3FA, BIDI_L   },  // YI SYLLABLE JYRX
+  { 0xA3FB, BIDI_L   },  // YI SYLLABLE JYR
+  { 0xA3FC, BIDI_L   },  // YI SYLLABLE QIT
+  { 0xA3FD, BIDI_L   },  // YI SYLLABLE QIX
+  { 0xA3FE, BIDI_L   },  // YI SYLLABLE QI
+  { 0xA3FF, BIDI_L   },  // YI SYLLABLE QIP
+  { 0xA400, BIDI_L   },  // YI SYLLABLE QIET
+  { 0xA401, BIDI_L   },  // YI SYLLABLE QIEX
+  { 0xA402, BIDI_L   },  // YI SYLLABLE QIE
+  { 0xA403, BIDI_L   },  // YI SYLLABLE QIEP
+  { 0xA404, BIDI_L   },  // YI SYLLABLE QUOT
+  { 0xA405, BIDI_L   },  // YI SYLLABLE QUOX
+  { 0xA406, BIDI_L   },  // YI SYLLABLE QUO
+  { 0xA407, BIDI_L   },  // YI SYLLABLE QUOP
+  { 0xA408, BIDI_L   },  // YI SYLLABLE QOT
+  { 0xA409, BIDI_L   },  // YI SYLLABLE QOX
+  { 0xA40A, BIDI_L   },  // YI SYLLABLE QO
+  { 0xA40B, BIDI_L   },  // YI SYLLABLE QOP
+  { 0xA40C, BIDI_L   },  // YI SYLLABLE QUT
+  { 0xA40D, BIDI_L   },  // YI SYLLABLE QUX
+  { 0xA40E, BIDI_L   },  // YI SYLLABLE QU
+  { 0xA40F, BIDI_L   },  // YI SYLLABLE QUP
+  { 0xA410, BIDI_L   },  // YI SYLLABLE QURX
+  { 0xA411, BIDI_L   },  // YI SYLLABLE QUR
+  { 0xA412, BIDI_L   },  // YI SYLLABLE QYT
+  { 0xA413, BIDI_L   },  // YI SYLLABLE QYX
+  { 0xA414, BIDI_L   },  // YI SYLLABLE QY
+  { 0xA415, BIDI_L   },  // YI SYLLABLE QYP
+  { 0xA416, BIDI_L   },  // YI SYLLABLE QYRX
+  { 0xA417, BIDI_L   },  // YI SYLLABLE QYR
+  { 0xA418, BIDI_L   },  // YI SYLLABLE JJIT
+  { 0xA419, BIDI_L   },  // YI SYLLABLE JJIX
+  { 0xA41A, BIDI_L   },  // YI SYLLABLE JJI
+  { 0xA41B, BIDI_L   },  // YI SYLLABLE JJIP
+  { 0xA41C, BIDI_L   },  // YI SYLLABLE JJIET
+  { 0xA41D, BIDI_L   },  // YI SYLLABLE JJIEX
+  { 0xA41E, BIDI_L   },  // YI SYLLABLE JJIE
+  { 0xA41F, BIDI_L   },  // YI SYLLABLE JJIEP
+  { 0xA420, BIDI_L   },  // YI SYLLABLE JJUOX
+  { 0xA421, BIDI_L   },  // YI SYLLABLE JJUO
+  { 0xA422, BIDI_L   },  // YI SYLLABLE JJUOP
+  { 0xA423, BIDI_L   },  // YI SYLLABLE JJOT
+  { 0xA424, BIDI_L   },  // YI SYLLABLE JJOX
+  { 0xA425, BIDI_L   },  // YI SYLLABLE JJO
+  { 0xA426, BIDI_L   },  // YI SYLLABLE JJOP
+  { 0xA427, BIDI_L   },  // YI SYLLABLE JJUT
+  { 0xA428, BIDI_L   },  // YI SYLLABLE JJUX
+  { 0xA429, BIDI_L   },  // YI SYLLABLE JJU
+  { 0xA42A, BIDI_L   },  // YI SYLLABLE JJUP
+  { 0xA42B, BIDI_L   },  // YI SYLLABLE JJURX
+  { 0xA42C, BIDI_L   },  // YI SYLLABLE JJUR
+  { 0xA42D, BIDI_L   },  // YI SYLLABLE JJYT
+  { 0xA42E, BIDI_L   },  // YI SYLLABLE JJYX
+  { 0xA42F, BIDI_L   },  // YI SYLLABLE JJY
+  { 0xA430, BIDI_L   },  // YI SYLLABLE JJYP
+  { 0xA431, BIDI_L   },  // YI SYLLABLE NJIT
+  { 0xA432, BIDI_L   },  // YI SYLLABLE NJIX
+  { 0xA433, BIDI_L   },  // YI SYLLABLE NJI
+  { 0xA434, BIDI_L   },  // YI SYLLABLE NJIP
+  { 0xA435, BIDI_L   },  // YI SYLLABLE NJIET
+  { 0xA436, BIDI_L   },  // YI SYLLABLE NJIEX
+  { 0xA437, BIDI_L   },  // YI SYLLABLE NJIE
+  { 0xA438, BIDI_L   },  // YI SYLLABLE NJIEP
+  { 0xA439, BIDI_L   },  // YI SYLLABLE NJUOX
+  { 0xA43A, BIDI_L   },  // YI SYLLABLE NJUO
+  { 0xA43B, BIDI_L   },  // YI SYLLABLE NJOT
+  { 0xA43C, BIDI_L   },  // YI SYLLABLE NJOX
+  { 0xA43D, BIDI_L   },  // YI SYLLABLE NJO
+  { 0xA43E, BIDI_L   },  // YI SYLLABLE NJOP
+  { 0xA43F, BIDI_L   },  // YI SYLLABLE NJUX
+  { 0xA440, BIDI_L   },  // YI SYLLABLE NJU
+  { 0xA441, BIDI_L   },  // YI SYLLABLE NJUP
+  { 0xA442, BIDI_L   },  // YI SYLLABLE NJURX
+  { 0xA443, BIDI_L   },  // YI SYLLABLE NJUR
+  { 0xA444, BIDI_L   },  // YI SYLLABLE NJYT
+  { 0xA445, BIDI_L   },  // YI SYLLABLE NJYX
+  { 0xA446, BIDI_L   },  // YI SYLLABLE NJY
+  { 0xA447, BIDI_L   },  // YI SYLLABLE NJYP
+  { 0xA448, BIDI_L   },  // YI SYLLABLE NJYRX
+  { 0xA449, BIDI_L   },  // YI SYLLABLE NJYR
+  { 0xA44A, BIDI_L   },  // YI SYLLABLE NYIT
+  { 0xA44B, BIDI_L   },  // YI SYLLABLE NYIX
+  { 0xA44C, BIDI_L   },  // YI SYLLABLE NYI
+  { 0xA44D, BIDI_L   },  // YI SYLLABLE NYIP
+  { 0xA44E, BIDI_L   },  // YI SYLLABLE NYIET
+  { 0xA44F, BIDI_L   },  // YI SYLLABLE NYIEX
+  { 0xA450, BIDI_L   },  // YI SYLLABLE NYIE
+  { 0xA451, BIDI_L   },  // YI SYLLABLE NYIEP
+  { 0xA452, BIDI_L   },  // YI SYLLABLE NYUOX
+  { 0xA453, BIDI_L   },  // YI SYLLABLE NYUO
+  { 0xA454, BIDI_L   },  // YI SYLLABLE NYUOP
+  { 0xA455, BIDI_L   },  // YI SYLLABLE NYOT
+  { 0xA456, BIDI_L   },  // YI SYLLABLE NYOX
+  { 0xA457, BIDI_L   },  // YI SYLLABLE NYO
+  { 0xA458, BIDI_L   },  // YI SYLLABLE NYOP
+  { 0xA459, BIDI_L   },  // YI SYLLABLE NYUT
+  { 0xA45A, BIDI_L   },  // YI SYLLABLE NYUX
+  { 0xA45B, BIDI_L   },  // YI SYLLABLE NYU
+  { 0xA45C, BIDI_L   },  // YI SYLLABLE NYUP
+  { 0xA45D, BIDI_L   },  // YI SYLLABLE XIT
+  { 0xA45E, BIDI_L   },  // YI SYLLABLE XIX
+  { 0xA45F, BIDI_L   },  // YI SYLLABLE XI
+  { 0xA460, BIDI_L   },  // YI SYLLABLE XIP
+  { 0xA461, BIDI_L   },  // YI SYLLABLE XIET
+  { 0xA462, BIDI_L   },  // YI SYLLABLE XIEX
+  { 0xA463, BIDI_L   },  // YI SYLLABLE XIE
+  { 0xA464, BIDI_L   },  // YI SYLLABLE XIEP
+  { 0xA465, BIDI_L   },  // YI SYLLABLE XUOX
+  { 0xA466, BIDI_L   },  // YI SYLLABLE XUO
+  { 0xA467, BIDI_L   },  // YI SYLLABLE XOT
+  { 0xA468, BIDI_L   },  // YI SYLLABLE XOX
+  { 0xA469, BIDI_L   },  // YI SYLLABLE XO
+  { 0xA46A, BIDI_L   },  // YI SYLLABLE XOP
+  { 0xA46B, BIDI_L   },  // YI SYLLABLE XYT
+  { 0xA46C, BIDI_L   },  // YI SYLLABLE XYX
+  { 0xA46D, BIDI_L   },  // YI SYLLABLE XY
+  { 0xA46E, BIDI_L   },  // YI SYLLABLE XYP
+  { 0xA46F, BIDI_L   },  // YI SYLLABLE XYRX
+  { 0xA470, BIDI_L   },  // YI SYLLABLE XYR
+  { 0xA471, BIDI_L   },  // YI SYLLABLE YIT
+  { 0xA472, BIDI_L   },  // YI SYLLABLE YIX
+  { 0xA473, BIDI_L   },  // YI SYLLABLE YI
+  { 0xA474, BIDI_L   },  // YI SYLLABLE YIP
+  { 0xA475, BIDI_L   },  // YI SYLLABLE YIET
+  { 0xA476, BIDI_L   },  // YI SYLLABLE YIEX
+  { 0xA477, BIDI_L   },  // YI SYLLABLE YIE
+  { 0xA478, BIDI_L   },  // YI SYLLABLE YIEP
+  { 0xA479, BIDI_L   },  // YI SYLLABLE YUOT
+  { 0xA47A, BIDI_L   },  // YI SYLLABLE YUOX
+  { 0xA47B, BIDI_L   },  // YI SYLLABLE YUO
+  { 0xA47C, BIDI_L   },  // YI SYLLABLE YUOP
+  { 0xA47D, BIDI_L   },  // YI SYLLABLE YOT
+  { 0xA47E, BIDI_L   },  // YI SYLLABLE YOX
+  { 0xA47F, BIDI_L   },  // YI SYLLABLE YO
+  { 0xA480, BIDI_L   },  // YI SYLLABLE YOP
+  { 0xA481, BIDI_L   },  // YI SYLLABLE YUT
+  { 0xA482, BIDI_L   },  // YI SYLLABLE YUX
+  { 0xA483, BIDI_L   },  // YI SYLLABLE YU
+  { 0xA484, BIDI_L   },  // YI SYLLABLE YUP
+  { 0xA485, BIDI_L   },  // YI SYLLABLE YURX
+  { 0xA486, BIDI_L   },  // YI SYLLABLE YUR
+  { 0xA487, BIDI_L   },  // YI SYLLABLE YYT
+  { 0xA488, BIDI_L   },  // YI SYLLABLE YYX
+  { 0xA489, BIDI_L   },  // YI SYLLABLE YY
+  { 0xA48A, BIDI_L   },  // YI SYLLABLE YYP
+  { 0xA48B, BIDI_L   },  // YI SYLLABLE YYRX
+  { 0xA48C, BIDI_L   },  // YI SYLLABLE YYR
+  { 0xA490, BIDI_ON  },  // YI RADICAL QOT
+  { 0xA491, BIDI_ON  },  // YI RADICAL LI
+  { 0xA492, BIDI_ON  },  // YI RADICAL KIT
+  { 0xA493, BIDI_ON  },  // YI RADICAL NYIP
+  { 0xA494, BIDI_ON  },  // YI RADICAL CYP
+  { 0xA495, BIDI_ON  },  // YI RADICAL SSI
+  { 0xA496, BIDI_ON  },  // YI RADICAL GGOP
+  { 0xA497, BIDI_ON  },  // YI RADICAL GEP
+  { 0xA498, BIDI_ON  },  // YI RADICAL MI
+  { 0xA499, BIDI_ON  },  // YI RADICAL HXIT
+  { 0xA49A, BIDI_ON  },  // YI RADICAL LYR
+  { 0xA49B, BIDI_ON  },  // YI RADICAL BBUT
+  { 0xA49C, BIDI_ON  },  // YI RADICAL MOP
+  { 0xA49D, BIDI_ON  },  // YI RADICAL YO
+  { 0xA49E, BIDI_ON  },  // YI RADICAL PUT
+  { 0xA49F, BIDI_ON  },  // YI RADICAL HXUO
+  { 0xA4A0, BIDI_ON  },  // YI RADICAL TAT
+  { 0xA4A1, BIDI_ON  },  // YI RADICAL GA
+  { 0xA4A2, BIDI_ON  },  // YI RADICAL ZUP
+  { 0xA4A3, BIDI_ON  },  // YI RADICAL CYT
+  { 0xA4A4, BIDI_ON  },  // YI RADICAL DDUR
+  { 0xA4A5, BIDI_ON  },  // YI RADICAL BUR
+  { 0xA4A6, BIDI_ON  },  // YI RADICAL GGUO
+  { 0xA4A7, BIDI_ON  },  // YI RADICAL NYOP
+  { 0xA4A8, BIDI_ON  },  // YI RADICAL TU
+  { 0xA4A9, BIDI_ON  },  // YI RADICAL OP
+  { 0xA4AA, BIDI_ON  },  // YI RADICAL JJUT
+  { 0xA4AB, BIDI_ON  },  // YI RADICAL ZOT
+  { 0xA4AC, BIDI_ON  },  // YI RADICAL PYT
+  { 0xA4AD, BIDI_ON  },  // YI RADICAL HMO
+  { 0xA4AE, BIDI_ON  },  // YI RADICAL YIT
+  { 0xA4AF, BIDI_ON  },  // YI RADICAL VUR
+  { 0xA4B0, BIDI_ON  },  // YI RADICAL SHY
+  { 0xA4B1, BIDI_ON  },  // YI RADICAL VEP
+  { 0xA4B2, BIDI_ON  },  // YI RADICAL ZA
+  { 0xA4B3, BIDI_ON  },  // YI RADICAL JO
+  { 0xA4B4, BIDI_ON  },  // YI RADICAL NZUP
+  { 0xA4B5, BIDI_ON  },  // YI RADICAL JJY
+  { 0xA4B6, BIDI_ON  },  // YI RADICAL GOT
+  { 0xA4B7, BIDI_ON  },  // YI RADICAL JJIE
+  { 0xA4B8, BIDI_ON  },  // YI RADICAL WO
+  { 0xA4B9, BIDI_ON  },  // YI RADICAL DU
+  { 0xA4BA, BIDI_ON  },  // YI RADICAL SHUR
+  { 0xA4BB, BIDI_ON  },  // YI RADICAL LIE
+  { 0xA4BC, BIDI_ON  },  // YI RADICAL CY
+  { 0xA4BD, BIDI_ON  },  // YI RADICAL CUOP
+  { 0xA4BE, BIDI_ON  },  // YI RADICAL CIP
+  { 0xA4BF, BIDI_ON  },  // YI RADICAL HXOP
+  { 0xA4C0, BIDI_ON  },  // YI RADICAL SHAT
+  { 0xA4C1, BIDI_ON  },  // YI RADICAL ZUR
+  { 0xA4C2, BIDI_ON  },  // YI RADICAL SHOP
+  { 0xA4C3, BIDI_ON  },  // YI RADICAL CHE
+  { 0xA4C4, BIDI_ON  },  // YI RADICAL ZZIET
+  { 0xA4C5, BIDI_ON  },  // YI RADICAL NBIE
+  { 0xA4C6, BIDI_ON  },  // YI RADICAL KE
+  { 0xA4D0, BIDI_L   },  // LISU LETTER BA
+  { 0xA4D1, BIDI_L   },  // LISU LETTER PA
+  { 0xA4D2, BIDI_L   },  // LISU LETTER PHA
+  { 0xA4D3, BIDI_L   },  // LISU LETTER DA
+  { 0xA4D4, BIDI_L   },  // LISU LETTER TA
+  { 0xA4D5, BIDI_L   },  // LISU LETTER THA
+  { 0xA4D6, BIDI_L   },  // LISU LETTER GA
+  { 0xA4D7, BIDI_L   },  // LISU LETTER KA
+  { 0xA4D8, BIDI_L   },  // LISU LETTER KHA
+  { 0xA4D9, BIDI_L   },  // LISU LETTER JA
+  { 0xA4DA, BIDI_L   },  // LISU LETTER CA
+  { 0xA4DB, BIDI_L   },  // LISU LETTER CHA
+  { 0xA4DC, BIDI_L   },  // LISU LETTER DZA
+  { 0xA4DD, BIDI_L   },  // LISU LETTER TSA
+  { 0xA4DE, BIDI_L   },  // LISU LETTER TSHA
+  { 0xA4DF, BIDI_L   },  // LISU LETTER MA
+  { 0xA4E0, BIDI_L   },  // LISU LETTER NA
+  { 0xA4E1, BIDI_L   },  // LISU LETTER LA
+  { 0xA4E2, BIDI_L   },  // LISU LETTER SA
+  { 0xA4E3, BIDI_L   },  // LISU LETTER ZHA
+  { 0xA4E4, BIDI_L   },  // LISU LETTER ZA
+  { 0xA4E5, BIDI_L   },  // LISU LETTER NGA
+  { 0xA4E6, BIDI_L   },  // LISU LETTER HA
+  { 0xA4E7, BIDI_L   },  // LISU LETTER XA
+  { 0xA4E8, BIDI_L   },  // LISU LETTER HHA
+  { 0xA4E9, BIDI_L   },  // LISU LETTER FA
+  { 0xA4EA, BIDI_L   },  // LISU LETTER WA
+  { 0xA4EB, BIDI_L   },  // LISU LETTER SHA
+  { 0xA4EC, BIDI_L   },  // LISU LETTER YA
+  { 0xA4ED, BIDI_L   },  // LISU LETTER GHA
+  { 0xA4EE, BIDI_L   },  // LISU LETTER A
+  { 0xA4EF, BIDI_L   },  // LISU LETTER AE
+  { 0xA4F0, BIDI_L   },  // LISU LETTER E
+  { 0xA4F1, BIDI_L   },  // LISU LETTER EU
+  { 0xA4F2, BIDI_L   },  // LISU LETTER I
+  { 0xA4F3, BIDI_L   },  // LISU LETTER O
+  { 0xA4F4, BIDI_L   },  // LISU LETTER U
+  { 0xA4F5, BIDI_L   },  // LISU LETTER UE
+  { 0xA4F6, BIDI_L   },  // LISU LETTER UH
+  { 0xA4F7, BIDI_L   },  // LISU LETTER OE
+  { 0xA4F8, BIDI_L   },  // LISU LETTER TONE MYA TI
+  { 0xA4F9, BIDI_L   },  // LISU LETTER TONE NA PO
+  { 0xA4FA, BIDI_L   },  // LISU LETTER TONE MYA CYA
+  { 0xA4FB, BIDI_L   },  // LISU LETTER TONE MYA BO
+  { 0xA4FC, BIDI_L   },  // LISU LETTER TONE MYA NA
+  { 0xA4FD, BIDI_L   },  // LISU LETTER TONE MYA JEU
+  { 0xA4FE, BIDI_L   },  // LISU PUNCTUATION COMMA
+  { 0xA4FF, BIDI_L   },  // LISU PUNCTUATION FULL STOP
+  { 0xA500, BIDI_L   },  // VAI SYLLABLE EE
+  { 0xA501, BIDI_L   },  // VAI SYLLABLE EEN
+  { 0xA502, BIDI_L   },  // VAI SYLLABLE HEE
+  { 0xA503, BIDI_L   },  // VAI SYLLABLE WEE
+  { 0xA504, BIDI_L   },  // VAI SYLLABLE WEEN
+  { 0xA505, BIDI_L   },  // VAI SYLLABLE PEE
+  { 0xA506, BIDI_L   },  // VAI SYLLABLE BHEE
+  { 0xA507, BIDI_L   },  // VAI SYLLABLE BEE
+  { 0xA508, BIDI_L   },  // VAI SYLLABLE MBEE
+  { 0xA509, BIDI_L   },  // VAI SYLLABLE KPEE
+  { 0xA50A, BIDI_L   },  // VAI SYLLABLE MGBEE
+  { 0xA50B, BIDI_L   },  // VAI SYLLABLE GBEE
+  { 0xA50C, BIDI_L   },  // VAI SYLLABLE FEE
+  { 0xA50D, BIDI_L   },  // VAI SYLLABLE VEE
+  { 0xA50E, BIDI_L   },  // VAI SYLLABLE TEE
+  { 0xA50F, BIDI_L   },  // VAI SYLLABLE THEE
+  { 0xA510, BIDI_L   },  // VAI SYLLABLE DHEE
+  { 0xA511, BIDI_L   },  // VAI SYLLABLE DHHEE
+  { 0xA512, BIDI_L   },  // VAI SYLLABLE LEE
+  { 0xA513, BIDI_L   },  // VAI SYLLABLE REE
+  { 0xA514, BIDI_L   },  // VAI SYLLABLE DEE
+  { 0xA515, BIDI_L   },  // VAI SYLLABLE NDEE
+  { 0xA516, BIDI_L   },  // VAI SYLLABLE SEE
+  { 0xA517, BIDI_L   },  // VAI SYLLABLE SHEE
+  { 0xA518, BIDI_L   },  // VAI SYLLABLE ZEE
+  { 0xA519, BIDI_L   },  // VAI SYLLABLE ZHEE
+  { 0xA51A, BIDI_L   },  // VAI SYLLABLE CEE
+  { 0xA51B, BIDI_L   },  // VAI SYLLABLE JEE
+  { 0xA51C, BIDI_L   },  // VAI SYLLABLE NJEE
+  { 0xA51D, BIDI_L   },  // VAI SYLLABLE YEE
+  { 0xA51E, BIDI_L   },  // VAI SYLLABLE KEE
+  { 0xA51F, BIDI_L   },  // VAI SYLLABLE NGGEE
+  { 0xA520, BIDI_L   },  // VAI SYLLABLE GEE
+  { 0xA521, BIDI_L   },  // VAI SYLLABLE MEE
+  { 0xA522, BIDI_L   },  // VAI SYLLABLE NEE
+  { 0xA523, BIDI_L   },  // VAI SYLLABLE NYEE
+  { 0xA524, BIDI_L   },  // VAI SYLLABLE I
+  { 0xA525, BIDI_L   },  // VAI SYLLABLE IN
+  { 0xA526, BIDI_L   },  // VAI SYLLABLE HI
+  { 0xA527, BIDI_L   },  // VAI SYLLABLE HIN
+  { 0xA528, BIDI_L   },  // VAI SYLLABLE WI
+  { 0xA529, BIDI_L   },  // VAI SYLLABLE WIN
+  { 0xA52A, BIDI_L   },  // VAI SYLLABLE PI
+  { 0xA52B, BIDI_L   },  // VAI SYLLABLE BHI
+  { 0xA52C, BIDI_L   },  // VAI SYLLABLE BI
+  { 0xA52D, BIDI_L   },  // VAI SYLLABLE MBI
+  { 0xA52E, BIDI_L   },  // VAI SYLLABLE KPI
+  { 0xA52F, BIDI_L   },  // VAI SYLLABLE MGBI
+  { 0xA530, BIDI_L   },  // VAI SYLLABLE GBI
+  { 0xA531, BIDI_L   },  // VAI SYLLABLE FI
+  { 0xA532, BIDI_L   },  // VAI SYLLABLE VI
+  { 0xA533, BIDI_L   },  // VAI SYLLABLE TI
+  { 0xA534, BIDI_L   },  // VAI SYLLABLE THI
+  { 0xA535, BIDI_L   },  // VAI SYLLABLE DHI
+  { 0xA536, BIDI_L   },  // VAI SYLLABLE DHHI
+  { 0xA537, BIDI_L   },  // VAI SYLLABLE LI
+  { 0xA538, BIDI_L   },  // VAI SYLLABLE RI
+  { 0xA539, BIDI_L   },  // VAI SYLLABLE DI
+  { 0xA53A, BIDI_L   },  // VAI SYLLABLE NDI
+  { 0xA53B, BIDI_L   },  // VAI SYLLABLE SI
+  { 0xA53C, BIDI_L   },  // VAI SYLLABLE SHI
+  { 0xA53D, BIDI_L   },  // VAI SYLLABLE ZI
+  { 0xA53E, BIDI_L   },  // VAI SYLLABLE ZHI
+  { 0xA53F, BIDI_L   },  // VAI SYLLABLE CI
+  { 0xA540, BIDI_L   },  // VAI SYLLABLE JI
+  { 0xA541, BIDI_L   },  // VAI SYLLABLE NJI
+  { 0xA542, BIDI_L   },  // VAI SYLLABLE YI
+  { 0xA543, BIDI_L   },  // VAI SYLLABLE KI
+  { 0xA544, BIDI_L   },  // VAI SYLLABLE NGGI
+  { 0xA545, BIDI_L   },  // VAI SYLLABLE GI
+  { 0xA546, BIDI_L   },  // VAI SYLLABLE MI
+  { 0xA547, BIDI_L   },  // VAI SYLLABLE NI
+  { 0xA548, BIDI_L   },  // VAI SYLLABLE NYI
+  { 0xA549, BIDI_L   },  // VAI SYLLABLE A
+  { 0xA54A, BIDI_L   },  // VAI SYLLABLE AN
+  { 0xA54B, BIDI_L   },  // VAI SYLLABLE NGAN
+  { 0xA54C, BIDI_L   },  // VAI SYLLABLE HA
+  { 0xA54D, BIDI_L   },  // VAI SYLLABLE HAN
+  { 0xA54E, BIDI_L   },  // VAI SYLLABLE WA
+  { 0xA54F, BIDI_L   },  // VAI SYLLABLE WAN
+  { 0xA550, BIDI_L   },  // VAI SYLLABLE PA
+  { 0xA551, BIDI_L   },  // VAI SYLLABLE BHA
+  { 0xA552, BIDI_L   },  // VAI SYLLABLE BA
+  { 0xA553, BIDI_L   },  // VAI SYLLABLE MBA
+  { 0xA554, BIDI_L   },  // VAI SYLLABLE KPA
+  { 0xA555, BIDI_L   },  // VAI SYLLABLE KPAN
+  { 0xA556, BIDI_L   },  // VAI SYLLABLE MGBA
+  { 0xA557, BIDI_L   },  // VAI SYLLABLE GBA
+  { 0xA558, BIDI_L   },  // VAI SYLLABLE FA
+  { 0xA559, BIDI_L   },  // VAI SYLLABLE VA
+  { 0xA55A, BIDI_L   },  // VAI SYLLABLE TA
+  { 0xA55B, BIDI_L   },  // VAI SYLLABLE THA
+  { 0xA55C, BIDI_L   },  // VAI SYLLABLE DHA
+  { 0xA55D, BIDI_L   },  // VAI SYLLABLE DHHA
+  { 0xA55E, BIDI_L   },  // VAI SYLLABLE LA
+  { 0xA55F, BIDI_L   },  // VAI SYLLABLE RA
+  { 0xA560, BIDI_L   },  // VAI SYLLABLE DA
+  { 0xA561, BIDI_L   },  // VAI SYLLABLE NDA
+  { 0xA562, BIDI_L   },  // VAI SYLLABLE SA
+  { 0xA563, BIDI_L   },  // VAI SYLLABLE SHA
+  { 0xA564, BIDI_L   },  // VAI SYLLABLE ZA
+  { 0xA565, BIDI_L   },  // VAI SYLLABLE ZHA
+  { 0xA566, BIDI_L   },  // VAI SYLLABLE CA
+  { 0xA567, BIDI_L   },  // VAI SYLLABLE JA
+  { 0xA568, BIDI_L   },  // VAI SYLLABLE NJA
+  { 0xA569, BIDI_L   },  // VAI SYLLABLE YA
+  { 0xA56A, BIDI_L   },  // VAI SYLLABLE KA
+  { 0xA56B, BIDI_L   },  // VAI SYLLABLE KAN
+  { 0xA56C, BIDI_L   },  // VAI SYLLABLE NGGA
+  { 0xA56D, BIDI_L   },  // VAI SYLLABLE GA
+  { 0xA56E, BIDI_L   },  // VAI SYLLABLE MA
+  { 0xA56F, BIDI_L   },  // VAI SYLLABLE NA
+  { 0xA570, BIDI_L   },  // VAI SYLLABLE NYA
+  { 0xA571, BIDI_L   },  // VAI SYLLABLE OO
+  { 0xA572, BIDI_L   },  // VAI SYLLABLE OON
+  { 0xA573, BIDI_L   },  // VAI SYLLABLE HOO
+  { 0xA574, BIDI_L   },  // VAI SYLLABLE WOO
+  { 0xA575, BIDI_L   },  // VAI SYLLABLE WOON
+  { 0xA576, BIDI_L   },  // VAI SYLLABLE POO
+  { 0xA577, BIDI_L   },  // VAI SYLLABLE BHOO
+  { 0xA578, BIDI_L   },  // VAI SYLLABLE BOO
+  { 0xA579, BIDI_L   },  // VAI SYLLABLE MBOO
+  { 0xA57A, BIDI_L   },  // VAI SYLLABLE KPOO
+  { 0xA57B, BIDI_L   },  // VAI SYLLABLE MGBOO
+  { 0xA57C, BIDI_L   },  // VAI SYLLABLE GBOO
+  { 0xA57D, BIDI_L   },  // VAI SYLLABLE FOO
+  { 0xA57E, BIDI_L   },  // VAI SYLLABLE VOO
+  { 0xA57F, BIDI_L   },  // VAI SYLLABLE TOO
+  { 0xA580, BIDI_L   },  // VAI SYLLABLE THOO
+  { 0xA581, BIDI_L   },  // VAI SYLLABLE DHOO
+  { 0xA582, BIDI_L   },  // VAI SYLLABLE DHHOO
+  { 0xA583, BIDI_L   },  // VAI SYLLABLE LOO
+  { 0xA584, BIDI_L   },  // VAI SYLLABLE ROO
+  { 0xA585, BIDI_L   },  // VAI SYLLABLE DOO
+  { 0xA586, BIDI_L   },  // VAI SYLLABLE NDOO
+  { 0xA587, BIDI_L   },  // VAI SYLLABLE SOO
+  { 0xA588, BIDI_L   },  // VAI SYLLABLE SHOO
+  { 0xA589, BIDI_L   },  // VAI SYLLABLE ZOO
+  { 0xA58A, BIDI_L   },  // VAI SYLLABLE ZHOO
+  { 0xA58B, BIDI_L   },  // VAI SYLLABLE COO
+  { 0xA58C, BIDI_L   },  // VAI SYLLABLE JOO
+  { 0xA58D, BIDI_L   },  // VAI SYLLABLE NJOO
+  { 0xA58E, BIDI_L   },  // VAI SYLLABLE YOO
+  { 0xA58F, BIDI_L   },  // VAI SYLLABLE KOO
+  { 0xA590, BIDI_L   },  // VAI SYLLABLE NGGOO
+  { 0xA591, BIDI_L   },  // VAI SYLLABLE GOO
+  { 0xA592, BIDI_L   },  // VAI SYLLABLE MOO
+  { 0xA593, BIDI_L   },  // VAI SYLLABLE NOO
+  { 0xA594, BIDI_L   },  // VAI SYLLABLE NYOO
+  { 0xA595, BIDI_L   },  // VAI SYLLABLE U
+  { 0xA596, BIDI_L   },  // VAI SYLLABLE UN
+  { 0xA597, BIDI_L   },  // VAI SYLLABLE HU
+  { 0xA598, BIDI_L   },  // VAI SYLLABLE HUN
+  { 0xA599, BIDI_L   },  // VAI SYLLABLE WU
+  { 0xA59A, BIDI_L   },  // VAI SYLLABLE WUN
+  { 0xA59B, BIDI_L   },  // VAI SYLLABLE PU
+  { 0xA59C, BIDI_L   },  // VAI SYLLABLE BHU
+  { 0xA59D, BIDI_L   },  // VAI SYLLABLE BU
+  { 0xA59E, BIDI_L   },  // VAI SYLLABLE MBU
+  { 0xA59F, BIDI_L   },  // VAI SYLLABLE KPU
+  { 0xA5A0, BIDI_L   },  // VAI SYLLABLE MGBU
+  { 0xA5A1, BIDI_L   },  // VAI SYLLABLE GBU
+  { 0xA5A2, BIDI_L   },  // VAI SYLLABLE FU
+  { 0xA5A3, BIDI_L   },  // VAI SYLLABLE VU
+  { 0xA5A4, BIDI_L   },  // VAI SYLLABLE TU
+  { 0xA5A5, BIDI_L   },  // VAI SYLLABLE THU
+  { 0xA5A6, BIDI_L   },  // VAI SYLLABLE DHU
+  { 0xA5A7, BIDI_L   },  // VAI SYLLABLE DHHU
+  { 0xA5A8, BIDI_L   },  // VAI SYLLABLE LU
+  { 0xA5A9, BIDI_L   },  // VAI SYLLABLE RU
+  { 0xA5AA, BIDI_L   },  // VAI SYLLABLE DU
+  { 0xA5AB, BIDI_L   },  // VAI SYLLABLE NDU
+  { 0xA5AC, BIDI_L   },  // VAI SYLLABLE SU
+  { 0xA5AD, BIDI_L   },  // VAI SYLLABLE SHU
+  { 0xA5AE, BIDI_L   },  // VAI SYLLABLE ZU
+  { 0xA5AF, BIDI_L   },  // VAI SYLLABLE ZHU
+  { 0xA5B0, BIDI_L   },  // VAI SYLLABLE CU
+  { 0xA5B1, BIDI_L   },  // VAI SYLLABLE JU
+  { 0xA5B2, BIDI_L   },  // VAI SYLLABLE NJU
+  { 0xA5B3, BIDI_L   },  // VAI SYLLABLE YU
+  { 0xA5B4, BIDI_L   },  // VAI SYLLABLE KU
+  { 0xA5B5, BIDI_L   },  // VAI SYLLABLE NGGU
+  { 0xA5B6, BIDI_L   },  // VAI SYLLABLE GU
+  { 0xA5B7, BIDI_L   },  // VAI SYLLABLE MU
+  { 0xA5B8, BIDI_L   },  // VAI SYLLABLE NU
+  { 0xA5B9, BIDI_L   },  // VAI SYLLABLE NYU
+  { 0xA5BA, BIDI_L   },  // VAI SYLLABLE O
+  { 0xA5BB, BIDI_L   },  // VAI SYLLABLE ON
+  { 0xA5BC, BIDI_L   },  // VAI SYLLABLE NGON
+  { 0xA5BD, BIDI_L   },  // VAI SYLLABLE HO
+  { 0xA5BE, BIDI_L   },  // VAI SYLLABLE HON
+  { 0xA5BF, BIDI_L   },  // VAI SYLLABLE WO
+  { 0xA5C0, BIDI_L   },  // VAI SYLLABLE WON
+  { 0xA5C1, BIDI_L   },  // VAI SYLLABLE PO
+  { 0xA5C2, BIDI_L   },  // VAI SYLLABLE BHO
+  { 0xA5C3, BIDI_L   },  // VAI SYLLABLE BO
+  { 0xA5C4, BIDI_L   },  // VAI SYLLABLE MBO
+  { 0xA5C5, BIDI_L   },  // VAI SYLLABLE KPO
+  { 0xA5C6, BIDI_L   },  // VAI SYLLABLE MGBO
+  { 0xA5C7, BIDI_L   },  // VAI SYLLABLE GBO
+  { 0xA5C8, BIDI_L   },  // VAI SYLLABLE GBON
+  { 0xA5C9, BIDI_L   },  // VAI SYLLABLE FO
+  { 0xA5CA, BIDI_L   },  // VAI SYLLABLE VO
+  { 0xA5CB, BIDI_L   },  // VAI SYLLABLE TO
+  { 0xA5CC, BIDI_L   },  // VAI SYLLABLE THO
+  { 0xA5CD, BIDI_L   },  // VAI SYLLABLE DHO
+  { 0xA5CE, BIDI_L   },  // VAI SYLLABLE DHHO
+  { 0xA5CF, BIDI_L   },  // VAI SYLLABLE LO
+  { 0xA5D0, BIDI_L   },  // VAI SYLLABLE RO
+  { 0xA5D1, BIDI_L   },  // VAI SYLLABLE DO
+  { 0xA5D2, BIDI_L   },  // VAI SYLLABLE NDO
+  { 0xA5D3, BIDI_L   },  // VAI SYLLABLE SO
+  { 0xA5D4, BIDI_L   },  // VAI SYLLABLE SHO
+  { 0xA5D5, BIDI_L   },  // VAI SYLLABLE ZO
+  { 0xA5D6, BIDI_L   },  // VAI SYLLABLE ZHO
+  { 0xA5D7, BIDI_L   },  // VAI SYLLABLE CO
+  { 0xA5D8, BIDI_L   },  // VAI SYLLABLE JO
+  { 0xA5D9, BIDI_L   },  // VAI SYLLABLE NJO
+  { 0xA5DA, BIDI_L   },  // VAI SYLLABLE YO
+  { 0xA5DB, BIDI_L   },  // VAI SYLLABLE KO
+  { 0xA5DC, BIDI_L   },  // VAI SYLLABLE NGGO
+  { 0xA5DD, BIDI_L   },  // VAI SYLLABLE GO
+  { 0xA5DE, BIDI_L   },  // VAI SYLLABLE MO
+  { 0xA5DF, BIDI_L   },  // VAI SYLLABLE NO
+  { 0xA5E0, BIDI_L   },  // VAI SYLLABLE NYO
+  { 0xA5E1, BIDI_L   },  // VAI SYLLABLE E
+  { 0xA5E2, BIDI_L   },  // VAI SYLLABLE EN
+  { 0xA5E3, BIDI_L   },  // VAI SYLLABLE NGEN
+  { 0xA5E4, BIDI_L   },  // VAI SYLLABLE HE
+  { 0xA5E5, BIDI_L   },  // VAI SYLLABLE HEN
+  { 0xA5E6, BIDI_L   },  // VAI SYLLABLE WE
+  { 0xA5E7, BIDI_L   },  // VAI SYLLABLE WEN
+  { 0xA5E8, BIDI_L   },  // VAI SYLLABLE PE
+  { 0xA5E9, BIDI_L   },  // VAI SYLLABLE BHE
+  { 0xA5EA, BIDI_L   },  // VAI SYLLABLE BE
+  { 0xA5EB, BIDI_L   },  // VAI SYLLABLE MBE
+  { 0xA5EC, BIDI_L   },  // VAI SYLLABLE KPE
+  { 0xA5ED, BIDI_L   },  // VAI SYLLABLE KPEN
+  { 0xA5EE, BIDI_L   },  // VAI SYLLABLE MGBE
+  { 0xA5EF, BIDI_L   },  // VAI SYLLABLE GBE
+  { 0xA5F0, BIDI_L   },  // VAI SYLLABLE GBEN
+  { 0xA5F1, BIDI_L   },  // VAI SYLLABLE FE
+  { 0xA5F2, BIDI_L   },  // VAI SYLLABLE VE
+  { 0xA5F3, BIDI_L   },  // VAI SYLLABLE TE
+  { 0xA5F4, BIDI_L   },  // VAI SYLLABLE THE
+  { 0xA5F5, BIDI_L   },  // VAI SYLLABLE DHE
+  { 0xA5F6, BIDI_L   },  // VAI SYLLABLE DHHE
+  { 0xA5F7, BIDI_L   },  // VAI SYLLABLE LE
+  { 0xA5F8, BIDI_L   },  // VAI SYLLABLE RE
+  { 0xA5F9, BIDI_L   },  // VAI SYLLABLE DE
+  { 0xA5FA, BIDI_L   },  // VAI SYLLABLE NDE
+  { 0xA5FB, BIDI_L   },  // VAI SYLLABLE SE
+  { 0xA5FC, BIDI_L   },  // VAI SYLLABLE SHE
+  { 0xA5FD, BIDI_L   },  // VAI SYLLABLE ZE
+  { 0xA5FE, BIDI_L   },  // VAI SYLLABLE ZHE
+  { 0xA5FF, BIDI_L   },  // VAI SYLLABLE CE
+  { 0xA600, BIDI_L   },  // VAI SYLLABLE JE
+  { 0xA601, BIDI_L   },  // VAI SYLLABLE NJE
+  { 0xA602, BIDI_L   },  // VAI SYLLABLE YE
+  { 0xA603, BIDI_L   },  // VAI SYLLABLE KE
+  { 0xA604, BIDI_L   },  // VAI SYLLABLE NGGE
+  { 0xA605, BIDI_L   },  // VAI SYLLABLE NGGEN
+  { 0xA606, BIDI_L   },  // VAI SYLLABLE GE
+  { 0xA607, BIDI_L   },  // VAI SYLLABLE GEN
+  { 0xA608, BIDI_L   },  // VAI SYLLABLE ME
+  { 0xA609, BIDI_L   },  // VAI SYLLABLE NE
+  { 0xA60A, BIDI_L   },  // VAI SYLLABLE NYE
+  { 0xA60B, BIDI_L   },  // VAI SYLLABLE NG
+  { 0xA60C, BIDI_L   },  // VAI SYLLABLE LENGTHENER
+  { 0xA60D, BIDI_ON  },  // VAI COMMA
+  { 0xA60E, BIDI_ON  },  // VAI FULL STOP
+  { 0xA60F, BIDI_ON  },  // VAI QUESTION MARK
+  { 0xA610, BIDI_L   },  // VAI SYLLABLE NDOLE FA
+  { 0xA611, BIDI_L   },  // VAI SYLLABLE NDOLE KA
+  { 0xA612, BIDI_L   },  // VAI SYLLABLE NDOLE SOO
+  { 0xA613, BIDI_L   },  // VAI SYMBOL FEENG
+  { 0xA614, BIDI_L   },  // VAI SYMBOL KEENG
+  { 0xA615, BIDI_L   },  // VAI SYMBOL TING
+  { 0xA616, BIDI_L   },  // VAI SYMBOL NII
+  { 0xA617, BIDI_L   },  // VAI SYMBOL BANG
+  { 0xA618, BIDI_L   },  // VAI SYMBOL FAA
+  { 0xA619, BIDI_L   },  // VAI SYMBOL TAA
+  { 0xA61A, BIDI_L   },  // VAI SYMBOL DANG
+  { 0xA61B, BIDI_L   },  // VAI SYMBOL DOONG
+  { 0xA61C, BIDI_L   },  // VAI SYMBOL KUNG
+  { 0xA61D, BIDI_L   },  // VAI SYMBOL TONG
+  { 0xA61E, BIDI_L   },  // VAI SYMBOL DO-O
+  { 0xA61F, BIDI_L   },  // VAI SYMBOL JONG
+  { 0xA620, BIDI_L   },  // VAI DIGIT ZERO
+  { 0xA621, BIDI_L   },  // VAI DIGIT ONE
+  { 0xA622, BIDI_L   },  // VAI DIGIT TWO
+  { 0xA623, BIDI_L   },  // VAI DIGIT THREE
+  { 0xA624, BIDI_L   },  // VAI DIGIT FOUR
+  { 0xA625, BIDI_L   },  // VAI DIGIT FIVE
+  { 0xA626, BIDI_L   },  // VAI DIGIT SIX
+  { 0xA627, BIDI_L   },  // VAI DIGIT SEVEN
+  { 0xA628, BIDI_L   },  // VAI DIGIT EIGHT
+  { 0xA629, BIDI_L   },  // VAI DIGIT NINE
+  { 0xA62A, BIDI_L   },  // VAI SYLLABLE NDOLE MA
+  { 0xA62B, BIDI_L   },  // VAI SYLLABLE NDOLE DO
+  { 0xA640, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZEMLYA
+  { 0xA641, BIDI_L   },  // CYRILLIC SMALL LETTER ZEMLYA
+  { 0xA642, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZELO
+  { 0xA643, BIDI_L   },  // CYRILLIC SMALL LETTER DZELO
+  { 0xA644, BIDI_L   },  // CYRILLIC CAPITAL LETTER REVERSED DZE
+  { 0xA645, BIDI_L   },  // CYRILLIC SMALL LETTER REVERSED DZE
+  { 0xA646, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTA
+  { 0xA647, BIDI_L   },  // CYRILLIC SMALL LETTER IOTA
+  { 0xA648, BIDI_L   },  // CYRILLIC CAPITAL LETTER DJERV
+  { 0xA649, BIDI_L   },  // CYRILLIC SMALL LETTER DJERV
+  { 0xA64A, BIDI_L   },  // CYRILLIC CAPITAL LETTER MONOGRAPH UK
+  { 0xA64B, BIDI_L   },  // CYRILLIC SMALL LETTER MONOGRAPH UK
+  { 0xA64C, BIDI_L   },  // CYRILLIC CAPITAL LETTER BROAD OMEGA
+  { 0xA64D, BIDI_L   },  // CYRILLIC SMALL LETTER BROAD OMEGA
+  { 0xA64E, BIDI_L   },  // CYRILLIC CAPITAL LETTER NEUTRAL YER
+  { 0xA64F, BIDI_L   },  // CYRILLIC SMALL LETTER NEUTRAL YER
+  { 0xA650, BIDI_L   },  // CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+  { 0xA651, BIDI_L   },  // CYRILLIC SMALL LETTER YERU WITH BACK YER
+  { 0xA652, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED YAT
+  { 0xA653, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED YAT
+  { 0xA654, BIDI_L   },  // CYRILLIC CAPITAL LETTER REVERSED YU
+  { 0xA655, BIDI_L   },  // CYRILLIC SMALL LETTER REVERSED YU
+  { 0xA656, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED A
+  { 0xA657, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED A
+  { 0xA658, BIDI_L   },  // CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+  { 0xA659, BIDI_L   },  // CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+  { 0xA65A, BIDI_L   },  // CYRILLIC CAPITAL LETTER BLENDED YUS
+  { 0xA65B, BIDI_L   },  // CYRILLIC SMALL LETTER BLENDED YUS
+  { 0xA65C, BIDI_L   },  // CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+  { 0xA65D, BIDI_L   },  // CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+  { 0xA65E, BIDI_L   },  // CYRILLIC CAPITAL LETTER YN
+  { 0xA65F, BIDI_L   },  // CYRILLIC SMALL LETTER YN
+  { 0xA660, BIDI_L   },  // CYRILLIC CAPITAL LETTER REVERSED TSE
+  { 0xA661, BIDI_L   },  // CYRILLIC SMALL LETTER REVERSED TSE
+  { 0xA662, BIDI_L   },  // CYRILLIC CAPITAL LETTER SOFT DE
+  { 0xA663, BIDI_L   },  // CYRILLIC SMALL LETTER SOFT DE
+  { 0xA664, BIDI_L   },  // CYRILLIC CAPITAL LETTER SOFT EL
+  { 0xA665, BIDI_L   },  // CYRILLIC SMALL LETTER SOFT EL
+  { 0xA666, BIDI_L   },  // CYRILLIC CAPITAL LETTER SOFT EM
+  { 0xA667, BIDI_L   },  // CYRILLIC SMALL LETTER SOFT EM
+  { 0xA668, BIDI_L   },  // CYRILLIC CAPITAL LETTER MONOCULAR O
+  { 0xA669, BIDI_L   },  // CYRILLIC SMALL LETTER MONOCULAR O
+  { 0xA66A, BIDI_L   },  // CYRILLIC CAPITAL LETTER BINOCULAR O
+  { 0xA66B, BIDI_L   },  // CYRILLIC SMALL LETTER BINOCULAR O
+  { 0xA66C, BIDI_L   },  // CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+  { 0xA66D, BIDI_L   },  // CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+  { 0xA66E, BIDI_L   },  // CYRILLIC LETTER MULTIOCULAR O
+  { 0xA66F, BIDI_NSM },  // COMBINING CYRILLIC VZMET
+  { 0xA670, BIDI_NSM },  // COMBINING CYRILLIC TEN MILLIONS SIGN
+  { 0xA671, BIDI_NSM },  // COMBINING CYRILLIC HUNDRED MILLIONS SIGN
+  { 0xA672, BIDI_NSM },  // COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+  { 0xA673, BIDI_ON  },  // SLAVONIC ASTERISK
+  { 0xA674, BIDI_NSM },  // COMBINING CYRILLIC LETTER UKRAINIAN IE
+  { 0xA675, BIDI_NSM },  // COMBINING CYRILLIC LETTER I
+  { 0xA676, BIDI_NSM },  // COMBINING CYRILLIC LETTER YI
+  { 0xA677, BIDI_NSM },  // COMBINING CYRILLIC LETTER U
+  { 0xA678, BIDI_NSM },  // COMBINING CYRILLIC LETTER HARD SIGN
+  { 0xA679, BIDI_NSM },  // COMBINING CYRILLIC LETTER YERU
+  { 0xA67A, BIDI_NSM },  // COMBINING CYRILLIC LETTER SOFT SIGN
+  { 0xA67B, BIDI_NSM },  // COMBINING CYRILLIC LETTER OMEGA
+  { 0xA67C, BIDI_NSM },  // COMBINING CYRILLIC KAVYKA
+  { 0xA67D, BIDI_NSM },  // COMBINING CYRILLIC PAYEROK
+  { 0xA67E, BIDI_ON  },  // CYRILLIC KAVYKA
+  { 0xA67F, BIDI_ON  },  // CYRILLIC PAYEROK
+  { 0xA680, BIDI_L   },  // CYRILLIC CAPITAL LETTER DWE
+  { 0xA681, BIDI_L   },  // CYRILLIC SMALL LETTER DWE
+  { 0xA682, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZWE
+  { 0xA683, BIDI_L   },  // CYRILLIC SMALL LETTER DZWE
+  { 0xA684, BIDI_L   },  // CYRILLIC CAPITAL LETTER ZHWE
+  { 0xA685, BIDI_L   },  // CYRILLIC SMALL LETTER ZHWE
+  { 0xA686, BIDI_L   },  // CYRILLIC CAPITAL LETTER CCHE
+  { 0xA687, BIDI_L   },  // CYRILLIC SMALL LETTER CCHE
+  { 0xA688, BIDI_L   },  // CYRILLIC CAPITAL LETTER DZZE
+  { 0xA689, BIDI_L   },  // CYRILLIC SMALL LETTER DZZE
+  { 0xA68A, BIDI_L   },  // CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+  { 0xA68B, BIDI_L   },  // CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+  { 0xA68C, BIDI_L   },  // CYRILLIC CAPITAL LETTER TWE
+  { 0xA68D, BIDI_L   },  // CYRILLIC SMALL LETTER TWE
+  { 0xA68E, BIDI_L   },  // CYRILLIC CAPITAL LETTER TSWE
+  { 0xA68F, BIDI_L   },  // CYRILLIC SMALL LETTER TSWE
+  { 0xA690, BIDI_L   },  // CYRILLIC CAPITAL LETTER TSSE
+  { 0xA691, BIDI_L   },  // CYRILLIC SMALL LETTER TSSE
+  { 0xA692, BIDI_L   },  // CYRILLIC CAPITAL LETTER TCHE
+  { 0xA693, BIDI_L   },  // CYRILLIC SMALL LETTER TCHE
+  { 0xA694, BIDI_L   },  // CYRILLIC CAPITAL LETTER HWE
+  { 0xA695, BIDI_L   },  // CYRILLIC SMALL LETTER HWE
+  { 0xA696, BIDI_L   },  // CYRILLIC CAPITAL LETTER SHWE
+  { 0xA697, BIDI_L   },  // CYRILLIC SMALL LETTER SHWE
+  { 0xA698, BIDI_L   },  // CYRILLIC CAPITAL LETTER DOUBLE O
+  { 0xA699, BIDI_L   },  // CYRILLIC SMALL LETTER DOUBLE O
+  { 0xA69A, BIDI_L   },  // CYRILLIC CAPITAL LETTER CROSSED O
+  { 0xA69B, BIDI_L   },  // CYRILLIC SMALL LETTER CROSSED O
+  { 0xA69C, BIDI_L   },  // MODIFIER LETTER CYRILLIC HARD SIGN
+  { 0xA69D, BIDI_L   },  // MODIFIER LETTER CYRILLIC SOFT SIGN
+  { 0xA69E, BIDI_NSM },  // COMBINING CYRILLIC LETTER EF
+  { 0xA69F, BIDI_NSM },  // COMBINING CYRILLIC LETTER IOTIFIED E
+  { 0xA6A0, BIDI_L   },  // BAMUM LETTER A
+  { 0xA6A1, BIDI_L   },  // BAMUM LETTER KA
+  { 0xA6A2, BIDI_L   },  // BAMUM LETTER U
+  { 0xA6A3, BIDI_L   },  // BAMUM LETTER KU
+  { 0xA6A4, BIDI_L   },  // BAMUM LETTER EE
+  { 0xA6A5, BIDI_L   },  // BAMUM LETTER REE
+  { 0xA6A6, BIDI_L   },  // BAMUM LETTER TAE
+  { 0xA6A7, BIDI_L   },  // BAMUM LETTER O
+  { 0xA6A8, BIDI_L   },  // BAMUM LETTER NYI
+  { 0xA6A9, BIDI_L   },  // BAMUM LETTER I
+  { 0xA6AA, BIDI_L   },  // BAMUM LETTER LA
+  { 0xA6AB, BIDI_L   },  // BAMUM LETTER PA
+  { 0xA6AC, BIDI_L   },  // BAMUM LETTER RII
+  { 0xA6AD, BIDI_L   },  // BAMUM LETTER RIEE
+  { 0xA6AE, BIDI_L   },  // BAMUM LETTER LEEEE
+  { 0xA6AF, BIDI_L   },  // BAMUM LETTER MEEEE
+  { 0xA6B0, BIDI_L   },  // BAMUM LETTER TAA
+  { 0xA6B1, BIDI_L   },  // BAMUM LETTER NDAA
+  { 0xA6B2, BIDI_L   },  // BAMUM LETTER NJAEM
+  { 0xA6B3, BIDI_L   },  // BAMUM LETTER M
+  { 0xA6B4, BIDI_L   },  // BAMUM LETTER SUU
+  { 0xA6B5, BIDI_L   },  // BAMUM LETTER MU
+  { 0xA6B6, BIDI_L   },  // BAMUM LETTER SHII
+  { 0xA6B7, BIDI_L   },  // BAMUM LETTER SI
+  { 0xA6B8, BIDI_L   },  // BAMUM LETTER SHEUX
+  { 0xA6B9, BIDI_L   },  // BAMUM LETTER SEUX
+  { 0xA6BA, BIDI_L   },  // BAMUM LETTER KYEE
+  { 0xA6BB, BIDI_L   },  // BAMUM LETTER KET
+  { 0xA6BC, BIDI_L   },  // BAMUM LETTER NUAE
+  { 0xA6BD, BIDI_L   },  // BAMUM LETTER NU
+  { 0xA6BE, BIDI_L   },  // BAMUM LETTER NJUAE
+  { 0xA6BF, BIDI_L   },  // BAMUM LETTER YOQ
+  { 0xA6C0, BIDI_L   },  // BAMUM LETTER SHU
+  { 0xA6C1, BIDI_L   },  // BAMUM LETTER YUQ
+  { 0xA6C2, BIDI_L   },  // BAMUM LETTER YA
+  { 0xA6C3, BIDI_L   },  // BAMUM LETTER NSHA
+  { 0xA6C4, BIDI_L   },  // BAMUM LETTER KEUX
+  { 0xA6C5, BIDI_L   },  // BAMUM LETTER PEUX
+  { 0xA6C6, BIDI_L   },  // BAMUM LETTER NJEE
+  { 0xA6C7, BIDI_L   },  // BAMUM LETTER NTEE
+  { 0xA6C8, BIDI_L   },  // BAMUM LETTER PUE
+  { 0xA6C9, BIDI_L   },  // BAMUM LETTER WUE
+  { 0xA6CA, BIDI_L   },  // BAMUM LETTER PEE
+  { 0xA6CB, BIDI_L   },  // BAMUM LETTER FEE
+  { 0xA6CC, BIDI_L   },  // BAMUM LETTER RU
+  { 0xA6CD, BIDI_L   },  // BAMUM LETTER LU
+  { 0xA6CE, BIDI_L   },  // BAMUM LETTER MI
+  { 0xA6CF, BIDI_L   },  // BAMUM LETTER NI
+  { 0xA6D0, BIDI_L   },  // BAMUM LETTER REUX
+  { 0xA6D1, BIDI_L   },  // BAMUM LETTER RAE
+  { 0xA6D2, BIDI_L   },  // BAMUM LETTER KEN
+  { 0xA6D3, BIDI_L   },  // BAMUM LETTER NGKWAEN
+  { 0xA6D4, BIDI_L   },  // BAMUM LETTER NGGA
+  { 0xA6D5, BIDI_L   },  // BAMUM LETTER NGA
+  { 0xA6D6, BIDI_L   },  // BAMUM LETTER SHO
+  { 0xA6D7, BIDI_L   },  // BAMUM LETTER PUAE
+  { 0xA6D8, BIDI_L   },  // BAMUM LETTER FU
+  { 0xA6D9, BIDI_L   },  // BAMUM LETTER FOM
+  { 0xA6DA, BIDI_L   },  // BAMUM LETTER WA
+  { 0xA6DB, BIDI_L   },  // BAMUM LETTER NA
+  { 0xA6DC, BIDI_L   },  // BAMUM LETTER LI
+  { 0xA6DD, BIDI_L   },  // BAMUM LETTER PI
+  { 0xA6DE, BIDI_L   },  // BAMUM LETTER LOQ
+  { 0xA6DF, BIDI_L   },  // BAMUM LETTER KO
+  { 0xA6E0, BIDI_L   },  // BAMUM LETTER MBEN
+  { 0xA6E1, BIDI_L   },  // BAMUM LETTER REN
+  { 0xA6E2, BIDI_L   },  // BAMUM LETTER MEN
+  { 0xA6E3, BIDI_L   },  // BAMUM LETTER MA
+  { 0xA6E4, BIDI_L   },  // BAMUM LETTER TI
+  { 0xA6E5, BIDI_L   },  // BAMUM LETTER KI
+  { 0xA6E6, BIDI_L   },  // BAMUM LETTER MO
+  { 0xA6E7, BIDI_L   },  // BAMUM LETTER MBAA
+  { 0xA6E8, BIDI_L   },  // BAMUM LETTER TET
+  { 0xA6E9, BIDI_L   },  // BAMUM LETTER KPA
+  { 0xA6EA, BIDI_L   },  // BAMUM LETTER TEN
+  { 0xA6EB, BIDI_L   },  // BAMUM LETTER NTUU
+  { 0xA6EC, BIDI_L   },  // BAMUM LETTER SAMBA
+  { 0xA6ED, BIDI_L   },  // BAMUM LETTER FAAMAE
+  { 0xA6EE, BIDI_L   },  // BAMUM LETTER KOVUU
+  { 0xA6EF, BIDI_L   },  // BAMUM LETTER KOGHOM
+  { 0xA6F0, BIDI_NSM },  // BAMUM COMBINING MARK KOQNDON
+  { 0xA6F1, BIDI_NSM },  // BAMUM COMBINING MARK TUKWENTIS
+  { 0xA6F2, BIDI_L   },  // BAMUM NJAEMLI
+  { 0xA6F3, BIDI_L   },  // BAMUM FULL STOP
+  { 0xA6F4, BIDI_L   },  // BAMUM COLON
+  { 0xA6F5, BIDI_L   },  // BAMUM COMMA
+  { 0xA6F6, BIDI_L   },  // BAMUM SEMICOLON
+  { 0xA6F7, BIDI_L   },  // BAMUM QUESTION MARK
+  { 0xA700, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YIN PING
+  { 0xA701, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YANG PING
+  { 0xA702, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YIN SHANG
+  { 0xA703, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YANG SHANG
+  { 0xA704, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YIN QU
+  { 0xA705, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YANG QU
+  { 0xA706, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YIN RU
+  { 0xA707, BIDI_ON  },  // MODIFIER LETTER CHINESE TONE YANG RU
+  { 0xA708, BIDI_ON  },  // MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+  { 0xA709, BIDI_ON  },  // MODIFIER LETTER HIGH DOTTED TONE BAR
+  { 0xA70A, BIDI_ON  },  // MODIFIER LETTER MID DOTTED TONE BAR
+  { 0xA70B, BIDI_ON  },  // MODIFIER LETTER LOW DOTTED TONE BAR
+  { 0xA70C, BIDI_ON  },  // MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+  { 0xA70D, BIDI_ON  },  // MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+  { 0xA70E, BIDI_ON  },  // MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+  { 0xA70F, BIDI_ON  },  // MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+  { 0xA710, BIDI_ON  },  // MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+  { 0xA711, BIDI_ON  },  // MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+  { 0xA712, BIDI_ON  },  // MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+  { 0xA713, BIDI_ON  },  // MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+  { 0xA714, BIDI_ON  },  // MODIFIER LETTER MID LEFT-STEM TONE BAR
+  { 0xA715, BIDI_ON  },  // MODIFIER LETTER LOW LEFT-STEM TONE BAR
+  { 0xA716, BIDI_ON  },  // MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+  { 0xA717, BIDI_ON  },  // MODIFIER LETTER DOT VERTICAL BAR
+  { 0xA718, BIDI_ON  },  // MODIFIER LETTER DOT SLASH
+  { 0xA719, BIDI_ON  },  // MODIFIER LETTER DOT HORIZONTAL BAR
+  { 0xA71A, BIDI_ON  },  // MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+  { 0xA71B, BIDI_ON  },  // MODIFIER LETTER RAISED UP ARROW
+  { 0xA71C, BIDI_ON  },  // MODIFIER LETTER RAISED DOWN ARROW
+  { 0xA71D, BIDI_ON  },  // MODIFIER LETTER RAISED EXCLAMATION MARK
+  { 0xA71E, BIDI_ON  },  // MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK
+  { 0xA71F, BIDI_ON  },  // MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+  { 0xA720, BIDI_ON  },  // MODIFIER LETTER STRESS AND HIGH TONE
+  { 0xA721, BIDI_ON  },  // MODIFIER LETTER STRESS AND LOW TONE
+  { 0xA722, BIDI_L   },  // LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+  { 0xA723, BIDI_L   },  // LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+  { 0xA724, BIDI_L   },  // LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+  { 0xA725, BIDI_L   },  // LATIN SMALL LETTER EGYPTOLOGICAL AIN
+  { 0xA726, BIDI_L   },  // LATIN CAPITAL LETTER HENG
+  { 0xA727, BIDI_L   },  // LATIN SMALL LETTER HENG
+  { 0xA728, BIDI_L   },  // LATIN CAPITAL LETTER TZ
+  { 0xA729, BIDI_L   },  // LATIN SMALL LETTER TZ
+  { 0xA72A, BIDI_L   },  // LATIN CAPITAL LETTER TRESILLO
+  { 0xA72B, BIDI_L   },  // LATIN SMALL LETTER TRESILLO
+  { 0xA72C, BIDI_L   },  // LATIN CAPITAL LETTER CUATRILLO
+  { 0xA72D, BIDI_L   },  // LATIN SMALL LETTER CUATRILLO
+  { 0xA72E, BIDI_L   },  // LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+  { 0xA72F, BIDI_L   },  // LATIN SMALL LETTER CUATRILLO WITH COMMA
+  { 0xA730, BIDI_L   },  // LATIN LETTER SMALL CAPITAL F
+  { 0xA731, BIDI_L   },  // LATIN LETTER SMALL CAPITAL S
+  { 0xA732, BIDI_L   },  // LATIN CAPITAL LETTER AA
+  { 0xA733, BIDI_L   },  // LATIN SMALL LETTER AA
+  { 0xA734, BIDI_L   },  // LATIN CAPITAL LETTER AO
+  { 0xA735, BIDI_L   },  // LATIN SMALL LETTER AO
+  { 0xA736, BIDI_L   },  // LATIN CAPITAL LETTER AU
+  { 0xA737, BIDI_L   },  // LATIN SMALL LETTER AU
+  { 0xA738, BIDI_L   },  // LATIN CAPITAL LETTER AV
+  { 0xA739, BIDI_L   },  // LATIN SMALL LETTER AV
+  { 0xA73A, BIDI_L   },  // LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+  { 0xA73B, BIDI_L   },  // LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+  { 0xA73C, BIDI_L   },  // LATIN CAPITAL LETTER AY
+  { 0xA73D, BIDI_L   },  // LATIN SMALL LETTER AY
+  { 0xA73E, BIDI_L   },  // LATIN CAPITAL LETTER REVERSED C WITH DOT
+  { 0xA73F, BIDI_L   },  // LATIN SMALL LETTER REVERSED C WITH DOT
+  { 0xA740, BIDI_L   },  // LATIN CAPITAL LETTER K WITH STROKE
+  { 0xA741, BIDI_L   },  // LATIN SMALL LETTER K WITH STROKE
+  { 0xA742, BIDI_L   },  // LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+  { 0xA743, BIDI_L   },  // LATIN SMALL LETTER K WITH DIAGONAL STROKE
+  { 0xA744, BIDI_L   },  // LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+  { 0xA745, BIDI_L   },  // LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+  { 0xA746, BIDI_L   },  // LATIN CAPITAL LETTER BROKEN L
+  { 0xA747, BIDI_L   },  // LATIN SMALL LETTER BROKEN L
+  { 0xA748, BIDI_L   },  // LATIN CAPITAL LETTER L WITH HIGH STROKE
+  { 0xA749, BIDI_L   },  // LATIN SMALL LETTER L WITH HIGH STROKE
+  { 0xA74A, BIDI_L   },  // LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+  { 0xA74B, BIDI_L   },  // LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+  { 0xA74C, BIDI_L   },  // LATIN CAPITAL LETTER O WITH LOOP
+  { 0xA74D, BIDI_L   },  // LATIN SMALL LETTER O WITH LOOP
+  { 0xA74E, BIDI_L   },  // LATIN CAPITAL LETTER OO
+  { 0xA74F, BIDI_L   },  // LATIN SMALL LETTER OO
+  { 0xA750, BIDI_L   },  // LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+  { 0xA751, BIDI_L   },  // LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+  { 0xA752, BIDI_L   },  // LATIN CAPITAL LETTER P WITH FLOURISH
+  { 0xA753, BIDI_L   },  // LATIN SMALL LETTER P WITH FLOURISH
+  { 0xA754, BIDI_L   },  // LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+  { 0xA755, BIDI_L   },  // LATIN SMALL LETTER P WITH SQUIRREL TAIL
+  { 0xA756, BIDI_L   },  // LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+  { 0xA757, BIDI_L   },  // LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+  { 0xA758, BIDI_L   },  // LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+  { 0xA759, BIDI_L   },  // LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+  { 0xA75A, BIDI_L   },  // LATIN CAPITAL LETTER R ROTUNDA
+  { 0xA75B, BIDI_L   },  // LATIN SMALL LETTER R ROTUNDA
+  { 0xA75C, BIDI_L   },  // LATIN CAPITAL LETTER RUM ROTUNDA
+  { 0xA75D, BIDI_L   },  // LATIN SMALL LETTER RUM ROTUNDA
+  { 0xA75E, BIDI_L   },  // LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+  { 0xA75F, BIDI_L   },  // LATIN SMALL LETTER V WITH DIAGONAL STROKE
+  { 0xA760, BIDI_L   },  // LATIN CAPITAL LETTER VY
+  { 0xA761, BIDI_L   },  // LATIN SMALL LETTER VY
+  { 0xA762, BIDI_L   },  // LATIN CAPITAL LETTER VISIGOTHIC Z
+  { 0xA763, BIDI_L   },  // LATIN SMALL LETTER VISIGOTHIC Z
+  { 0xA764, BIDI_L   },  // LATIN CAPITAL LETTER THORN WITH STROKE
+  { 0xA765, BIDI_L   },  // LATIN SMALL LETTER THORN WITH STROKE
+  { 0xA766, BIDI_L   },  // LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+  { 0xA767, BIDI_L   },  // LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+  { 0xA768, BIDI_L   },  // LATIN CAPITAL LETTER VEND
+  { 0xA769, BIDI_L   },  // LATIN SMALL LETTER VEND
+  { 0xA76A, BIDI_L   },  // LATIN CAPITAL LETTER ET
+  { 0xA76B, BIDI_L   },  // LATIN SMALL LETTER ET
+  { 0xA76C, BIDI_L   },  // LATIN CAPITAL LETTER IS
+  { 0xA76D, BIDI_L   },  // LATIN SMALL LETTER IS
+  { 0xA76E, BIDI_L   },  // LATIN CAPITAL LETTER CON
+  { 0xA76F, BIDI_L   },  // LATIN SMALL LETTER CON
+  { 0xA770, BIDI_L   },  // MODIFIER LETTER US
+  { 0xA771, BIDI_L   },  // LATIN SMALL LETTER DUM
+  { 0xA772, BIDI_L   },  // LATIN SMALL LETTER LUM
+  { 0xA773, BIDI_L   },  // LATIN SMALL LETTER MUM
+  { 0xA774, BIDI_L   },  // LATIN SMALL LETTER NUM
+  { 0xA775, BIDI_L   },  // LATIN SMALL LETTER RUM
+  { 0xA776, BIDI_L   },  // LATIN LETTER SMALL CAPITAL RUM
+  { 0xA777, BIDI_L   },  // LATIN SMALL LETTER TUM
+  { 0xA778, BIDI_L   },  // LATIN SMALL LETTER UM
+  { 0xA779, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR D
+  { 0xA77A, BIDI_L   },  // LATIN SMALL LETTER INSULAR D
+  { 0xA77B, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR F
+  { 0xA77C, BIDI_L   },  // LATIN SMALL LETTER INSULAR F
+  { 0xA77D, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR G
+  { 0xA77E, BIDI_L   },  // LATIN CAPITAL LETTER TURNED INSULAR G
+  { 0xA77F, BIDI_L   },  // LATIN SMALL LETTER TURNED INSULAR G
+  { 0xA780, BIDI_L   },  // LATIN CAPITAL LETTER TURNED L
+  { 0xA781, BIDI_L   },  // LATIN SMALL LETTER TURNED L
+  { 0xA782, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR R
+  { 0xA783, BIDI_L   },  // LATIN SMALL LETTER INSULAR R
+  { 0xA784, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR S
+  { 0xA785, BIDI_L   },  // LATIN SMALL LETTER INSULAR S
+  { 0xA786, BIDI_L   },  // LATIN CAPITAL LETTER INSULAR T
+  { 0xA787, BIDI_L   },  // LATIN SMALL LETTER INSULAR T
+  { 0xA788, BIDI_ON  },  // MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+  { 0xA789, BIDI_L   },  // MODIFIER LETTER COLON
+  { 0xA78A, BIDI_L   },  // MODIFIER LETTER SHORT EQUALS SIGN
+  { 0xA78B, BIDI_L   },  // LATIN CAPITAL LETTER SALTILLO
+  { 0xA78C, BIDI_L   },  // LATIN SMALL LETTER SALTILLO
+  { 0xA78D, BIDI_L   },  // LATIN CAPITAL LETTER TURNED H
+  { 0xA78E, BIDI_L   },  // LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+  { 0xA78F, BIDI_L   },  // LATIN LETTER SINOLOGICAL DOT
+  { 0xA790, BIDI_L   },  // LATIN CAPITAL LETTER N WITH DESCENDER
+  { 0xA791, BIDI_L   },  // LATIN SMALL LETTER N WITH DESCENDER
+  { 0xA792, BIDI_L   },  // LATIN CAPITAL LETTER C WITH BAR
+  { 0xA793, BIDI_L   },  // LATIN SMALL LETTER C WITH BAR
+  { 0xA794, BIDI_L   },  // LATIN SMALL LETTER C WITH PALATAL HOOK
+  { 0xA795, BIDI_L   },  // LATIN SMALL LETTER H WITH PALATAL HOOK
+  { 0xA796, BIDI_L   },  // LATIN CAPITAL LETTER B WITH FLOURISH
+  { 0xA797, BIDI_L   },  // LATIN SMALL LETTER B WITH FLOURISH
+  { 0xA798, BIDI_L   },  // LATIN CAPITAL LETTER F WITH STROKE
+  { 0xA799, BIDI_L   },  // LATIN SMALL LETTER F WITH STROKE
+  { 0xA79A, BIDI_L   },  // LATIN CAPITAL LETTER VOLAPUK AE
+  { 0xA79B, BIDI_L   },  // LATIN SMALL LETTER VOLAPUK AE
+  { 0xA79C, BIDI_L   },  // LATIN CAPITAL LETTER VOLAPUK OE
+  { 0xA79D, BIDI_L   },  // LATIN SMALL LETTER VOLAPUK OE
+  { 0xA79E, BIDI_L   },  // LATIN CAPITAL LETTER VOLAPUK UE
+  { 0xA79F, BIDI_L   },  // LATIN SMALL LETTER VOLAPUK UE
+  { 0xA7A0, BIDI_L   },  // LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+  { 0xA7A1, BIDI_L   },  // LATIN SMALL LETTER G WITH OBLIQUE STROKE
+  { 0xA7A2, BIDI_L   },  // LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+  { 0xA7A3, BIDI_L   },  // LATIN SMALL LETTER K WITH OBLIQUE STROKE
+  { 0xA7A4, BIDI_L   },  // LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+  { 0xA7A5, BIDI_L   },  // LATIN SMALL LETTER N WITH OBLIQUE STROKE
+  { 0xA7A6, BIDI_L   },  // LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+  { 0xA7A7, BIDI_L   },  // LATIN SMALL LETTER R WITH OBLIQUE STROKE
+  { 0xA7A8, BIDI_L   },  // LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+  { 0xA7A9, BIDI_L   },  // LATIN SMALL LETTER S WITH OBLIQUE STROKE
+  { 0xA7AA, BIDI_L   },  // LATIN CAPITAL LETTER H WITH HOOK
+  { 0xA7AB, BIDI_L   },  // LATIN CAPITAL LETTER REVERSED OPEN E
+  { 0xA7AC, BIDI_L   },  // LATIN CAPITAL LETTER SCRIPT G
+  { 0xA7AD, BIDI_L   },  // LATIN CAPITAL LETTER L WITH BELT
+  { 0xA7B0, BIDI_L   },  // LATIN CAPITAL LETTER TURNED K
+  { 0xA7B1, BIDI_L   },  // LATIN CAPITAL LETTER TURNED T
+  { 0xA7B2, BIDI_L   },  // LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+  { 0xA7B3, BIDI_L   },  // LATIN CAPITAL LETTER CHI
+  { 0xA7B4, BIDI_L   },  // LATIN CAPITAL LETTER BETA
+  { 0xA7B5, BIDI_L   },  // LATIN SMALL LETTER BETA
+  { 0xA7B6, BIDI_L   },  // LATIN CAPITAL LETTER OMEGA
+  { 0xA7B7, BIDI_L   },  // LATIN SMALL LETTER OMEGA
+  { 0xA7F7, BIDI_L   },  // LATIN EPIGRAPHIC LETTER SIDEWAYS I
+  { 0xA7F8, BIDI_L   },  // MODIFIER LETTER CAPITAL H WITH STROKE
+  { 0xA7F9, BIDI_L   },  // MODIFIER LETTER SMALL LIGATURE OE
+  { 0xA7FA, BIDI_L   },  // LATIN LETTER SMALL CAPITAL TURNED M
+  { 0xA7FB, BIDI_L   },  // LATIN EPIGRAPHIC LETTER REVERSED F
+  { 0xA7FC, BIDI_L   },  // LATIN EPIGRAPHIC LETTER REVERSED P
+  { 0xA7FD, BIDI_L   },  // LATIN EPIGRAPHIC LETTER INVERTED M
+  { 0xA7FE, BIDI_L   },  // LATIN EPIGRAPHIC LETTER I LONGA
+  { 0xA7FF, BIDI_L   },  // LATIN EPIGRAPHIC LETTER ARCHAIC M
+  { 0xA800, BIDI_L   },  // SYLOTI NAGRI LETTER A
+  { 0xA801, BIDI_L   },  // SYLOTI NAGRI LETTER I
+  { 0xA802, BIDI_NSM },  // SYLOTI NAGRI SIGN DVISVARA
+  { 0xA803, BIDI_L   },  // SYLOTI NAGRI LETTER U
+  { 0xA804, BIDI_L   },  // SYLOTI NAGRI LETTER E
+  { 0xA805, BIDI_L   },  // SYLOTI NAGRI LETTER O
+  { 0xA806, BIDI_NSM },  // SYLOTI NAGRI SIGN HASANTA
+  { 0xA807, BIDI_L   },  // SYLOTI NAGRI LETTER KO
+  { 0xA808, BIDI_L   },  // SYLOTI NAGRI LETTER KHO
+  { 0xA809, BIDI_L   },  // SYLOTI NAGRI LETTER GO
+  { 0xA80A, BIDI_L   },  // SYLOTI NAGRI LETTER GHO
+  { 0xA80B, BIDI_NSM },  // SYLOTI NAGRI SIGN ANUSVARA
+  { 0xA80C, BIDI_L   },  // SYLOTI NAGRI LETTER CO
+  { 0xA80D, BIDI_L   },  // SYLOTI NAGRI LETTER CHO
+  { 0xA80E, BIDI_L   },  // SYLOTI NAGRI LETTER JO
+  { 0xA80F, BIDI_L   },  // SYLOTI NAGRI LETTER JHO
+  { 0xA810, BIDI_L   },  // SYLOTI NAGRI LETTER TTO
+  { 0xA811, BIDI_L   },  // SYLOTI NAGRI LETTER TTHO
+  { 0xA812, BIDI_L   },  // SYLOTI NAGRI LETTER DDO
+  { 0xA813, BIDI_L   },  // SYLOTI NAGRI LETTER DDHO
+  { 0xA814, BIDI_L   },  // SYLOTI NAGRI LETTER TO
+  { 0xA815, BIDI_L   },  // SYLOTI NAGRI LETTER THO
+  { 0xA816, BIDI_L   },  // SYLOTI NAGRI LETTER DO
+  { 0xA817, BIDI_L   },  // SYLOTI NAGRI LETTER DHO
+  { 0xA818, BIDI_L   },  // SYLOTI NAGRI LETTER NO
+  { 0xA819, BIDI_L   },  // SYLOTI NAGRI LETTER PO
+  { 0xA81A, BIDI_L   },  // SYLOTI NAGRI LETTER PHO
+  { 0xA81B, BIDI_L   },  // SYLOTI NAGRI LETTER BO
+  { 0xA81C, BIDI_L   },  // SYLOTI NAGRI LETTER BHO
+  { 0xA81D, BIDI_L   },  // SYLOTI NAGRI LETTER MO
+  { 0xA81E, BIDI_L   },  // SYLOTI NAGRI LETTER RO
+  { 0xA81F, BIDI_L   },  // SYLOTI NAGRI LETTER LO
+  { 0xA820, BIDI_L   },  // SYLOTI NAGRI LETTER RRO
+  { 0xA821, BIDI_L   },  // SYLOTI NAGRI LETTER SO
+  { 0xA822, BIDI_L   },  // SYLOTI NAGRI LETTER HO
+  { 0xA823, BIDI_L   },  // SYLOTI NAGRI VOWEL SIGN A
+  { 0xA824, BIDI_L   },  // SYLOTI NAGRI VOWEL SIGN I
+  { 0xA825, BIDI_NSM },  // SYLOTI NAGRI VOWEL SIGN U
+  { 0xA826, BIDI_NSM },  // SYLOTI NAGRI VOWEL SIGN E
+  { 0xA827, BIDI_L   },  // SYLOTI NAGRI VOWEL SIGN OO
+  { 0xA828, BIDI_ON  },  // SYLOTI NAGRI POETRY MARK-1
+  { 0xA829, BIDI_ON  },  // SYLOTI NAGRI POETRY MARK-2
+  { 0xA82A, BIDI_ON  },  // SYLOTI NAGRI POETRY MARK-3
+  { 0xA82B, BIDI_ON  },  // SYLOTI NAGRI POETRY MARK-4
+  { 0xA830, BIDI_L   },  // NORTH INDIC FRACTION ONE QUARTER
+  { 0xA831, BIDI_L   },  // NORTH INDIC FRACTION ONE HALF
+  { 0xA832, BIDI_L   },  // NORTH INDIC FRACTION THREE QUARTERS
+  { 0xA833, BIDI_L   },  // NORTH INDIC FRACTION ONE SIXTEENTH
+  { 0xA834, BIDI_L   },  // NORTH INDIC FRACTION ONE EIGHTH
+  { 0xA835, BIDI_L   },  // NORTH INDIC FRACTION THREE SIXTEENTHS
+  { 0xA836, BIDI_L   },  // NORTH INDIC QUARTER MARK
+  { 0xA837, BIDI_L   },  // NORTH INDIC PLACEHOLDER MARK
+  { 0xA838, BIDI_ET  },  // NORTH INDIC RUPEE MARK
+  { 0xA839, BIDI_ET  },  // NORTH INDIC QUANTITY MARK
+  { 0xA840, BIDI_L   },  // PHAGS-PA LETTER KA
+  { 0xA841, BIDI_L   },  // PHAGS-PA LETTER KHA
+  { 0xA842, BIDI_L   },  // PHAGS-PA LETTER GA
+  { 0xA843, BIDI_L   },  // PHAGS-PA LETTER NGA
+  { 0xA844, BIDI_L   },  // PHAGS-PA LETTER CA
+  { 0xA845, BIDI_L   },  // PHAGS-PA LETTER CHA
+  { 0xA846, BIDI_L   },  // PHAGS-PA LETTER JA
+  { 0xA847, BIDI_L   },  // PHAGS-PA LETTER NYA
+  { 0xA848, BIDI_L   },  // PHAGS-PA LETTER TA
+  { 0xA849, BIDI_L   },  // PHAGS-PA LETTER THA
+  { 0xA84A, BIDI_L   },  // PHAGS-PA LETTER DA
+  { 0xA84B, BIDI_L   },  // PHAGS-PA LETTER NA
+  { 0xA84C, BIDI_L   },  // PHAGS-PA LETTER PA
+  { 0xA84D, BIDI_L   },  // PHAGS-PA LETTER PHA
+  { 0xA84E, BIDI_L   },  // PHAGS-PA LETTER BA
+  { 0xA84F, BIDI_L   },  // PHAGS-PA LETTER MA
+  { 0xA850, BIDI_L   },  // PHAGS-PA LETTER TSA
+  { 0xA851, BIDI_L   },  // PHAGS-PA LETTER TSHA
+  { 0xA852, BIDI_L   },  // PHAGS-PA LETTER DZA
+  { 0xA853, BIDI_L   },  // PHAGS-PA LETTER WA
+  { 0xA854, BIDI_L   },  // PHAGS-PA LETTER ZHA
+  { 0xA855, BIDI_L   },  // PHAGS-PA LETTER ZA
+  { 0xA856, BIDI_L   },  // PHAGS-PA LETTER SMALL A
+  { 0xA857, BIDI_L   },  // PHAGS-PA LETTER YA
+  { 0xA858, BIDI_L   },  // PHAGS-PA LETTER RA
+  { 0xA859, BIDI_L   },  // PHAGS-PA LETTER LA
+  { 0xA85A, BIDI_L   },  // PHAGS-PA LETTER SHA
+  { 0xA85B, BIDI_L   },  // PHAGS-PA LETTER SA
+  { 0xA85C, BIDI_L   },  // PHAGS-PA LETTER HA
+  { 0xA85D, BIDI_L   },  // PHAGS-PA LETTER A
+  { 0xA85E, BIDI_L   },  // PHAGS-PA LETTER I
+  { 0xA85F, BIDI_L   },  // PHAGS-PA LETTER U
+  { 0xA860, BIDI_L   },  // PHAGS-PA LETTER E
+  { 0xA861, BIDI_L   },  // PHAGS-PA LETTER O
+  { 0xA862, BIDI_L   },  // PHAGS-PA LETTER QA
+  { 0xA863, BIDI_L   },  // PHAGS-PA LETTER XA
+  { 0xA864, BIDI_L   },  // PHAGS-PA LETTER FA
+  { 0xA865, BIDI_L   },  // PHAGS-PA LETTER GGA
+  { 0xA866, BIDI_L   },  // PHAGS-PA LETTER EE
+  { 0xA867, BIDI_L   },  // PHAGS-PA SUBJOINED LETTER WA
+  { 0xA868, BIDI_L   },  // PHAGS-PA SUBJOINED LETTER YA
+  { 0xA869, BIDI_L   },  // PHAGS-PA LETTER TTA
+  { 0xA86A, BIDI_L   },  // PHAGS-PA LETTER TTHA
+  { 0xA86B, BIDI_L   },  // PHAGS-PA LETTER DDA
+  { 0xA86C, BIDI_L   },  // PHAGS-PA LETTER NNA
+  { 0xA86D, BIDI_L   },  // PHAGS-PA LETTER ALTERNATE YA
+  { 0xA86E, BIDI_L   },  // PHAGS-PA LETTER VOICELESS SHA
+  { 0xA86F, BIDI_L   },  // PHAGS-PA LETTER VOICED HA
+  { 0xA870, BIDI_L   },  // PHAGS-PA LETTER ASPIRATED FA
+  { 0xA871, BIDI_L   },  // PHAGS-PA SUBJOINED LETTER RA
+  { 0xA872, BIDI_L   },  // PHAGS-PA SUPERFIXED LETTER RA
+  { 0xA873, BIDI_L   },  // PHAGS-PA LETTER CANDRABINDU
+  { 0xA874, BIDI_ON  },  // PHAGS-PA SINGLE HEAD MARK
+  { 0xA875, BIDI_ON  },  // PHAGS-PA DOUBLE HEAD MARK
+  { 0xA876, BIDI_ON  },  // PHAGS-PA MARK SHAD
+  { 0xA877, BIDI_ON  },  // PHAGS-PA MARK DOUBLE SHAD
+  { 0xA880, BIDI_L   },  // SAURASHTRA SIGN ANUSVARA
+  { 0xA881, BIDI_L   },  // SAURASHTRA SIGN VISARGA
+  { 0xA882, BIDI_L   },  // SAURASHTRA LETTER A
+  { 0xA883, BIDI_L   },  // SAURASHTRA LETTER AA
+  { 0xA884, BIDI_L   },  // SAURASHTRA LETTER I
+  { 0xA885, BIDI_L   },  // SAURASHTRA LETTER II
+  { 0xA886, BIDI_L   },  // SAURASHTRA LETTER U
+  { 0xA887, BIDI_L   },  // SAURASHTRA LETTER UU
+  { 0xA888, BIDI_L   },  // SAURASHTRA LETTER VOCALIC R
+  { 0xA889, BIDI_L   },  // SAURASHTRA LETTER VOCALIC RR
+  { 0xA88A, BIDI_L   },  // SAURASHTRA LETTER VOCALIC L
+  { 0xA88B, BIDI_L   },  // SAURASHTRA LETTER VOCALIC LL
+  { 0xA88C, BIDI_L   },  // SAURASHTRA LETTER E
+  { 0xA88D, BIDI_L   },  // SAURASHTRA LETTER EE
+  { 0xA88E, BIDI_L   },  // SAURASHTRA LETTER AI
+  { 0xA88F, BIDI_L   },  // SAURASHTRA LETTER O
+  { 0xA890, BIDI_L   },  // SAURASHTRA LETTER OO
+  { 0xA891, BIDI_L   },  // SAURASHTRA LETTER AU
+  { 0xA892, BIDI_L   },  // SAURASHTRA LETTER KA
+  { 0xA893, BIDI_L   },  // SAURASHTRA LETTER KHA
+  { 0xA894, BIDI_L   },  // SAURASHTRA LETTER GA
+  { 0xA895, BIDI_L   },  // SAURASHTRA LETTER GHA
+  { 0xA896, BIDI_L   },  // SAURASHTRA LETTER NGA
+  { 0xA897, BIDI_L   },  // SAURASHTRA LETTER CA
+  { 0xA898, BIDI_L   },  // SAURASHTRA LETTER CHA
+  { 0xA899, BIDI_L   },  // SAURASHTRA LETTER JA
+  { 0xA89A, BIDI_L   },  // SAURASHTRA LETTER JHA
+  { 0xA89B, BIDI_L   },  // SAURASHTRA LETTER NYA
+  { 0xA89C, BIDI_L   },  // SAURASHTRA LETTER TTA
+  { 0xA89D, BIDI_L   },  // SAURASHTRA LETTER TTHA
+  { 0xA89E, BIDI_L   },  // SAURASHTRA LETTER DDA
+  { 0xA89F, BIDI_L   },  // SAURASHTRA LETTER DDHA
+  { 0xA8A0, BIDI_L   },  // SAURASHTRA LETTER NNA
+  { 0xA8A1, BIDI_L   },  // SAURASHTRA LETTER TA
+  { 0xA8A2, BIDI_L   },  // SAURASHTRA LETTER THA
+  { 0xA8A3, BIDI_L   },  // SAURASHTRA LETTER DA
+  { 0xA8A4, BIDI_L   },  // SAURASHTRA LETTER DHA
+  { 0xA8A5, BIDI_L   },  // SAURASHTRA LETTER NA
+  { 0xA8A6, BIDI_L   },  // SAURASHTRA LETTER PA
+  { 0xA8A7, BIDI_L   },  // SAURASHTRA LETTER PHA
+  { 0xA8A8, BIDI_L   },  // SAURASHTRA LETTER BA
+  { 0xA8A9, BIDI_L   },  // SAURASHTRA LETTER BHA
+  { 0xA8AA, BIDI_L   },  // SAURASHTRA LETTER MA
+  { 0xA8AB, BIDI_L   },  // SAURASHTRA LETTER YA
+  { 0xA8AC, BIDI_L   },  // SAURASHTRA LETTER RA
+  { 0xA8AD, BIDI_L   },  // SAURASHTRA LETTER LA
+  { 0xA8AE, BIDI_L   },  // SAURASHTRA LETTER VA
+  { 0xA8AF, BIDI_L   },  // SAURASHTRA LETTER SHA
+  { 0xA8B0, BIDI_L   },  // SAURASHTRA LETTER SSA
+  { 0xA8B1, BIDI_L   },  // SAURASHTRA LETTER SA
+  { 0xA8B2, BIDI_L   },  // SAURASHTRA LETTER HA
+  { 0xA8B3, BIDI_L   },  // SAURASHTRA LETTER LLA
+  { 0xA8B4, BIDI_L   },  // SAURASHTRA CONSONANT SIGN HAARU
+  { 0xA8B5, BIDI_L   },  // SAURASHTRA VOWEL SIGN AA
+  { 0xA8B6, BIDI_L   },  // SAURASHTRA VOWEL SIGN I
+  { 0xA8B7, BIDI_L   },  // SAURASHTRA VOWEL SIGN II
+  { 0xA8B8, BIDI_L   },  // SAURASHTRA VOWEL SIGN U
+  { 0xA8B9, BIDI_L   },  // SAURASHTRA VOWEL SIGN UU
+  { 0xA8BA, BIDI_L   },  // SAURASHTRA VOWEL SIGN VOCALIC R
+  { 0xA8BB, BIDI_L   },  // SAURASHTRA VOWEL SIGN VOCALIC RR
+  { 0xA8BC, BIDI_L   },  // SAURASHTRA VOWEL SIGN VOCALIC L
+  { 0xA8BD, BIDI_L   },  // SAURASHTRA VOWEL SIGN VOCALIC LL
+  { 0xA8BE, BIDI_L   },  // SAURASHTRA VOWEL SIGN E
+  { 0xA8BF, BIDI_L   },  // SAURASHTRA VOWEL SIGN EE
+  { 0xA8C0, BIDI_L   },  // SAURASHTRA VOWEL SIGN AI
+  { 0xA8C1, BIDI_L   },  // SAURASHTRA VOWEL SIGN O
+  { 0xA8C2, BIDI_L   },  // SAURASHTRA VOWEL SIGN OO
+  { 0xA8C3, BIDI_L   },  // SAURASHTRA VOWEL SIGN AU
+  { 0xA8C4, BIDI_NSM },  // SAURASHTRA SIGN VIRAMA
+  { 0xA8CE, BIDI_L   },  // SAURASHTRA DANDA
+  { 0xA8CF, BIDI_L   },  // SAURASHTRA DOUBLE DANDA
+  { 0xA8D0, BIDI_L   },  // SAURASHTRA DIGIT ZERO
+  { 0xA8D1, BIDI_L   },  // SAURASHTRA DIGIT ONE
+  { 0xA8D2, BIDI_L   },  // SAURASHTRA DIGIT TWO
+  { 0xA8D3, BIDI_L   },  // SAURASHTRA DIGIT THREE
+  { 0xA8D4, BIDI_L   },  // SAURASHTRA DIGIT FOUR
+  { 0xA8D5, BIDI_L   },  // SAURASHTRA DIGIT FIVE
+  { 0xA8D6, BIDI_L   },  // SAURASHTRA DIGIT SIX
+  { 0xA8D7, BIDI_L   },  // SAURASHTRA DIGIT SEVEN
+  { 0xA8D8, BIDI_L   },  // SAURASHTRA DIGIT EIGHT
+  { 0xA8D9, BIDI_L   },  // SAURASHTRA DIGIT NINE
+  { 0xA8E0, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT ZERO
+  { 0xA8E1, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT ONE
+  { 0xA8E2, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT TWO
+  { 0xA8E3, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT THREE
+  { 0xA8E4, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT FOUR
+  { 0xA8E5, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT FIVE
+  { 0xA8E6, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT SIX
+  { 0xA8E7, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT SEVEN
+  { 0xA8E8, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT EIGHT
+  { 0xA8E9, BIDI_NSM },  // COMBINING DEVANAGARI DIGIT NINE
+  { 0xA8EA, BIDI_NSM },  // COMBINING DEVANAGARI LETTER A
+  { 0xA8EB, BIDI_NSM },  // COMBINING DEVANAGARI LETTER U
+  { 0xA8EC, BIDI_NSM },  // COMBINING DEVANAGARI LETTER KA
+  { 0xA8ED, BIDI_NSM },  // COMBINING DEVANAGARI LETTER NA
+  { 0xA8EE, BIDI_NSM },  // COMBINING DEVANAGARI LETTER PA
+  { 0xA8EF, BIDI_NSM },  // COMBINING DEVANAGARI LETTER RA
+  { 0xA8F0, BIDI_NSM },  // COMBINING DEVANAGARI LETTER VI
+  { 0xA8F1, BIDI_NSM },  // COMBINING DEVANAGARI SIGN AVAGRAHA
+  { 0xA8F2, BIDI_L   },  // DEVANAGARI SIGN SPACING CANDRABINDU
+  { 0xA8F3, BIDI_L   },  // DEVANAGARI SIGN CANDRABINDU VIRAMA
+  { 0xA8F4, BIDI_L   },  // DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
+  { 0xA8F5, BIDI_L   },  // DEVANAGARI SIGN CANDRABINDU TWO
+  { 0xA8F6, BIDI_L   },  // DEVANAGARI SIGN CANDRABINDU THREE
+  { 0xA8F7, BIDI_L   },  // DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+  { 0xA8F8, BIDI_L   },  // DEVANAGARI SIGN PUSHPIKA
+  { 0xA8F9, BIDI_L   },  // DEVANAGARI GAP FILLER
+  { 0xA8FA, BIDI_L   },  // DEVANAGARI CARET
+  { 0xA8FB, BIDI_L   },  // DEVANAGARI HEADSTROKE
+  { 0xA8FC, BIDI_L   },  // DEVANAGARI SIGN SIDDHAM
+  { 0xA8FD, BIDI_L   },  // DEVANAGARI JAIN OM
+  { 0xA900, BIDI_L   },  // KAYAH LI DIGIT ZERO
+  { 0xA901, BIDI_L   },  // KAYAH LI DIGIT ONE
+  { 0xA902, BIDI_L   },  // KAYAH LI DIGIT TWO
+  { 0xA903, BIDI_L   },  // KAYAH LI DIGIT THREE
+  { 0xA904, BIDI_L   },  // KAYAH LI DIGIT FOUR
+  { 0xA905, BIDI_L   },  // KAYAH LI DIGIT FIVE
+  { 0xA906, BIDI_L   },  // KAYAH LI DIGIT SIX
+  { 0xA907, BIDI_L   },  // KAYAH LI DIGIT SEVEN
+  { 0xA908, BIDI_L   },  // KAYAH LI DIGIT EIGHT
+  { 0xA909, BIDI_L   },  // KAYAH LI DIGIT NINE
+  { 0xA90A, BIDI_L   },  // KAYAH LI LETTER KA
+  { 0xA90B, BIDI_L   },  // KAYAH LI LETTER KHA
+  { 0xA90C, BIDI_L   },  // KAYAH LI LETTER GA
+  { 0xA90D, BIDI_L   },  // KAYAH LI LETTER NGA
+  { 0xA90E, BIDI_L   },  // KAYAH LI LETTER SA
+  { 0xA90F, BIDI_L   },  // KAYAH LI LETTER SHA
+  { 0xA910, BIDI_L   },  // KAYAH LI LETTER ZA
+  { 0xA911, BIDI_L   },  // KAYAH LI LETTER NYA
+  { 0xA912, BIDI_L   },  // KAYAH LI LETTER TA
+  { 0xA913, BIDI_L   },  // KAYAH LI LETTER HTA
+  { 0xA914, BIDI_L   },  // KAYAH LI LETTER NA
+  { 0xA915, BIDI_L   },  // KAYAH LI LETTER PA
+  { 0xA916, BIDI_L   },  // KAYAH LI LETTER PHA
+  { 0xA917, BIDI_L   },  // KAYAH LI LETTER MA
+  { 0xA918, BIDI_L   },  // KAYAH LI LETTER DA
+  { 0xA919, BIDI_L   },  // KAYAH LI LETTER BA
+  { 0xA91A, BIDI_L   },  // KAYAH LI LETTER RA
+  { 0xA91B, BIDI_L   },  // KAYAH LI LETTER YA
+  { 0xA91C, BIDI_L   },  // KAYAH LI LETTER LA
+  { 0xA91D, BIDI_L   },  // KAYAH LI LETTER WA
+  { 0xA91E, BIDI_L   },  // KAYAH LI LETTER THA
+  { 0xA91F, BIDI_L   },  // KAYAH LI LETTER HA
+  { 0xA920, BIDI_L   },  // KAYAH LI LETTER VA
+  { 0xA921, BIDI_L   },  // KAYAH LI LETTER CA
+  { 0xA922, BIDI_L   },  // KAYAH LI LETTER A
+  { 0xA923, BIDI_L   },  // KAYAH LI LETTER OE
+  { 0xA924, BIDI_L   },  // KAYAH LI LETTER I
+  { 0xA925, BIDI_L   },  // KAYAH LI LETTER OO
+  { 0xA926, BIDI_NSM },  // KAYAH LI VOWEL UE
+  { 0xA927, BIDI_NSM },  // KAYAH LI VOWEL E
+  { 0xA928, BIDI_NSM },  // KAYAH LI VOWEL U
+  { 0xA929, BIDI_NSM },  // KAYAH LI VOWEL EE
+  { 0xA92A, BIDI_NSM },  // KAYAH LI VOWEL O
+  { 0xA92B, BIDI_NSM },  // KAYAH LI TONE PLOPHU
+  { 0xA92C, BIDI_NSM },  // KAYAH LI TONE CALYA
+  { 0xA92D, BIDI_NSM },  // KAYAH LI TONE CALYA PLOPHU
+  { 0xA92E, BIDI_L   },  // KAYAH LI SIGN CWI
+  { 0xA92F, BIDI_L   },  // KAYAH LI SIGN SHYA
+  { 0xA930, BIDI_L   },  // REJANG LETTER KA
+  { 0xA931, BIDI_L   },  // REJANG LETTER GA
+  { 0xA932, BIDI_L   },  // REJANG LETTER NGA
+  { 0xA933, BIDI_L   },  // REJANG LETTER TA
+  { 0xA934, BIDI_L   },  // REJANG LETTER DA
+  { 0xA935, BIDI_L   },  // REJANG LETTER NA
+  { 0xA936, BIDI_L   },  // REJANG LETTER PA
+  { 0xA937, BIDI_L   },  // REJANG LETTER BA
+  { 0xA938, BIDI_L   },  // REJANG LETTER MA
+  { 0xA939, BIDI_L   },  // REJANG LETTER CA
+  { 0xA93A, BIDI_L   },  // REJANG LETTER JA
+  { 0xA93B, BIDI_L   },  // REJANG LETTER NYA
+  { 0xA93C, BIDI_L   },  // REJANG LETTER SA
+  { 0xA93D, BIDI_L   },  // REJANG LETTER RA
+  { 0xA93E, BIDI_L   },  // REJANG LETTER LA
+  { 0xA93F, BIDI_L   },  // REJANG LETTER YA
+  { 0xA940, BIDI_L   },  // REJANG LETTER WA
+  { 0xA941, BIDI_L   },  // REJANG LETTER HA
+  { 0xA942, BIDI_L   },  // REJANG LETTER MBA
+  { 0xA943, BIDI_L   },  // REJANG LETTER NGGA
+  { 0xA944, BIDI_L   },  // REJANG LETTER NDA
+  { 0xA945, BIDI_L   },  // REJANG LETTER NYJA
+  { 0xA946, BIDI_L   },  // REJANG LETTER A
+  { 0xA947, BIDI_NSM },  // REJANG VOWEL SIGN I
+  { 0xA948, BIDI_NSM },  // REJANG VOWEL SIGN U
+  { 0xA949, BIDI_NSM },  // REJANG VOWEL SIGN E
+  { 0xA94A, BIDI_NSM },  // REJANG VOWEL SIGN AI
+  { 0xA94B, BIDI_NSM },  // REJANG VOWEL SIGN O
+  { 0xA94C, BIDI_NSM },  // REJANG VOWEL SIGN AU
+  { 0xA94D, BIDI_NSM },  // REJANG VOWEL SIGN EU
+  { 0xA94E, BIDI_NSM },  // REJANG VOWEL SIGN EA
+  { 0xA94F, BIDI_NSM },  // REJANG CONSONANT SIGN NG
+  { 0xA950, BIDI_NSM },  // REJANG CONSONANT SIGN N
+  { 0xA951, BIDI_NSM },  // REJANG CONSONANT SIGN R
+  { 0xA952, BIDI_L   },  // REJANG CONSONANT SIGN H
+  { 0xA953, BIDI_L   },  // REJANG VIRAMA
+  { 0xA95F, BIDI_L   },  // REJANG SECTION MARK
+  { 0xA960, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-MIEUM
+  { 0xA961, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-PIEUP
+  { 0xA962, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-SIOS
+  { 0xA963, BIDI_L   },  // HANGUL CHOSEONG TIKEUT-CIEUC
+  { 0xA964, BIDI_L   },  // HANGUL CHOSEONG RIEUL-KIYEOK
+  { 0xA965, BIDI_L   },  // HANGUL CHOSEONG RIEUL-SSANGKIYEOK
+  { 0xA966, BIDI_L   },  // HANGUL CHOSEONG RIEUL-TIKEUT
+  { 0xA967, BIDI_L   },  // HANGUL CHOSEONG RIEUL-SSANGTIKEUT
+  { 0xA968, BIDI_L   },  // HANGUL CHOSEONG RIEUL-MIEUM
+  { 0xA969, BIDI_L   },  // HANGUL CHOSEONG RIEUL-PIEUP
+  { 0xA96A, BIDI_L   },  // HANGUL CHOSEONG RIEUL-SSANGPIEUP
+  { 0xA96B, BIDI_L   },  // HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
+  { 0xA96C, BIDI_L   },  // HANGUL CHOSEONG RIEUL-SIOS
+  { 0xA96D, BIDI_L   },  // HANGUL CHOSEONG RIEUL-CIEUC
+  { 0xA96E, BIDI_L   },  // HANGUL CHOSEONG RIEUL-KHIEUKH
+  { 0xA96F, BIDI_L   },  // HANGUL CHOSEONG MIEUM-KIYEOK
+  { 0xA970, BIDI_L   },  // HANGUL CHOSEONG MIEUM-TIKEUT
+  { 0xA971, BIDI_L   },  // HANGUL CHOSEONG MIEUM-SIOS
+  { 0xA972, BIDI_L   },  // HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
+  { 0xA973, BIDI_L   },  // HANGUL CHOSEONG PIEUP-KHIEUKH
+  { 0xA974, BIDI_L   },  // HANGUL CHOSEONG PIEUP-HIEUH
+  { 0xA975, BIDI_L   },  // HANGUL CHOSEONG SSANGSIOS-PIEUP
+  { 0xA976, BIDI_L   },  // HANGUL CHOSEONG IEUNG-RIEUL
+  { 0xA977, BIDI_L   },  // HANGUL CHOSEONG IEUNG-HIEUH
+  { 0xA978, BIDI_L   },  // HANGUL CHOSEONG SSANGCIEUC-HIEUH
+  { 0xA979, BIDI_L   },  // HANGUL CHOSEONG SSANGTHIEUTH
+  { 0xA97A, BIDI_L   },  // HANGUL CHOSEONG PHIEUPH-HIEUH
+  { 0xA97B, BIDI_L   },  // HANGUL CHOSEONG HIEUH-SIOS
+  { 0xA97C, BIDI_L   },  // HANGUL CHOSEONG SSANGYEORINHIEUH
+  { 0xA980, BIDI_NSM },  // JAVANESE SIGN PANYANGGA
+  { 0xA981, BIDI_NSM },  // JAVANESE SIGN CECAK
+  { 0xA982, BIDI_NSM },  // JAVANESE SIGN LAYAR
+  { 0xA983, BIDI_L   },  // JAVANESE SIGN WIGNYAN
+  { 0xA984, BIDI_L   },  // JAVANESE LETTER A
+  { 0xA985, BIDI_L   },  // JAVANESE LETTER I KAWI
+  { 0xA986, BIDI_L   },  // JAVANESE LETTER I
+  { 0xA987, BIDI_L   },  // JAVANESE LETTER II
+  { 0xA988, BIDI_L   },  // JAVANESE LETTER U
+  { 0xA989, BIDI_L   },  // JAVANESE LETTER PA CEREK
+  { 0xA98A, BIDI_L   },  // JAVANESE LETTER NGA LELET
+  { 0xA98B, BIDI_L   },  // JAVANESE LETTER NGA LELET RASWADI
+  { 0xA98C, BIDI_L   },  // JAVANESE LETTER E
+  { 0xA98D, BIDI_L   },  // JAVANESE LETTER AI
+  { 0xA98E, BIDI_L   },  // JAVANESE LETTER O
+  { 0xA98F, BIDI_L   },  // JAVANESE LETTER KA
+  { 0xA990, BIDI_L   },  // JAVANESE LETTER KA SASAK
+  { 0xA991, BIDI_L   },  // JAVANESE LETTER KA MURDA
+  { 0xA992, BIDI_L   },  // JAVANESE LETTER GA
+  { 0xA993, BIDI_L   },  // JAVANESE LETTER GA MURDA
+  { 0xA994, BIDI_L   },  // JAVANESE LETTER NGA
+  { 0xA995, BIDI_L   },  // JAVANESE LETTER CA
+  { 0xA996, BIDI_L   },  // JAVANESE LETTER CA MURDA
+  { 0xA997, BIDI_L   },  // JAVANESE LETTER JA
+  { 0xA998, BIDI_L   },  // JAVANESE LETTER NYA MURDA
+  { 0xA999, BIDI_L   },  // JAVANESE LETTER JA MAHAPRANA
+  { 0xA99A, BIDI_L   },  // JAVANESE LETTER NYA
+  { 0xA99B, BIDI_L   },  // JAVANESE LETTER TTA
+  { 0xA99C, BIDI_L   },  // JAVANESE LETTER TTA MAHAPRANA
+  { 0xA99D, BIDI_L   },  // JAVANESE LETTER DDA
+  { 0xA99E, BIDI_L   },  // JAVANESE LETTER DDA MAHAPRANA
+  { 0xA99F, BIDI_L   },  // JAVANESE LETTER NA MURDA
+  { 0xA9A0, BIDI_L   },  // JAVANESE LETTER TA
+  { 0xA9A1, BIDI_L   },  // JAVANESE LETTER TA MURDA
+  { 0xA9A2, BIDI_L   },  // JAVANESE LETTER DA
+  { 0xA9A3, BIDI_L   },  // JAVANESE LETTER DA MAHAPRANA
+  { 0xA9A4, BIDI_L   },  // JAVANESE LETTER NA
+  { 0xA9A5, BIDI_L   },  // JAVANESE LETTER PA
+  { 0xA9A6, BIDI_L   },  // JAVANESE LETTER PA MURDA
+  { 0xA9A7, BIDI_L   },  // JAVANESE LETTER BA
+  { 0xA9A8, BIDI_L   },  // JAVANESE LETTER BA MURDA
+  { 0xA9A9, BIDI_L   },  // JAVANESE LETTER MA
+  { 0xA9AA, BIDI_L   },  // JAVANESE LETTER YA
+  { 0xA9AB, BIDI_L   },  // JAVANESE LETTER RA
+  { 0xA9AC, BIDI_L   },  // JAVANESE LETTER RA AGUNG
+  { 0xA9AD, BIDI_L   },  // JAVANESE LETTER LA
+  { 0xA9AE, BIDI_L   },  // JAVANESE LETTER WA
+  { 0xA9AF, BIDI_L   },  // JAVANESE LETTER SA MURDA
+  { 0xA9B0, BIDI_L   },  // JAVANESE LETTER SA MAHAPRANA
+  { 0xA9B1, BIDI_L   },  // JAVANESE LETTER SA
+  { 0xA9B2, BIDI_L   },  // JAVANESE LETTER HA
+  { 0xA9B3, BIDI_NSM },  // JAVANESE SIGN CECAK TELU
+  { 0xA9B4, BIDI_L   },  // JAVANESE VOWEL SIGN TARUNG
+  { 0xA9B5, BIDI_L   },  // JAVANESE VOWEL SIGN TOLONG
+  { 0xA9B6, BIDI_NSM },  // JAVANESE VOWEL SIGN WULU
+  { 0xA9B7, BIDI_NSM },  // JAVANESE VOWEL SIGN WULU MELIK
+  { 0xA9B8, BIDI_NSM },  // JAVANESE VOWEL SIGN SUKU
+  { 0xA9B9, BIDI_NSM },  // JAVANESE VOWEL SIGN SUKU MENDUT
+  { 0xA9BA, BIDI_L   },  // JAVANESE VOWEL SIGN TALING
+  { 0xA9BB, BIDI_L   },  // JAVANESE VOWEL SIGN DIRGA MURE
+  { 0xA9BC, BIDI_NSM },  // JAVANESE VOWEL SIGN PEPET
+  { 0xA9BD, BIDI_L   },  // JAVANESE CONSONANT SIGN KERET
+  { 0xA9BE, BIDI_L   },  // JAVANESE CONSONANT SIGN PENGKAL
+  { 0xA9BF, BIDI_L   },  // JAVANESE CONSONANT SIGN CAKRA
+  { 0xA9C0, BIDI_L   },  // JAVANESE PANGKON
+  { 0xA9C1, BIDI_L   },  // JAVANESE LEFT RERENGGAN
+  { 0xA9C2, BIDI_L   },  // JAVANESE RIGHT RERENGGAN
+  { 0xA9C3, BIDI_L   },  // JAVANESE PADA ANDAP
+  { 0xA9C4, BIDI_L   },  // JAVANESE PADA MADYA
+  { 0xA9C5, BIDI_L   },  // JAVANESE PADA LUHUR
+  { 0xA9C6, BIDI_L   },  // JAVANESE PADA WINDU
+  { 0xA9C7, BIDI_L   },  // JAVANESE PADA PANGKAT
+  { 0xA9C8, BIDI_L   },  // JAVANESE PADA LINGSA
+  { 0xA9C9, BIDI_L   },  // JAVANESE PADA LUNGSI
+  { 0xA9CA, BIDI_L   },  // JAVANESE PADA ADEG
+  { 0xA9CB, BIDI_L   },  // JAVANESE PADA ADEG ADEG
+  { 0xA9CC, BIDI_L   },  // JAVANESE PADA PISELEH
+  { 0xA9CD, BIDI_L   },  // JAVANESE TURNED PADA PISELEH
+  { 0xA9CF, BIDI_L   },  // JAVANESE PANGRANGKEP
+  { 0xA9D0, BIDI_L   },  // JAVANESE DIGIT ZERO
+  { 0xA9D1, BIDI_L   },  // JAVANESE DIGIT ONE
+  { 0xA9D2, BIDI_L   },  // JAVANESE DIGIT TWO
+  { 0xA9D3, BIDI_L   },  // JAVANESE DIGIT THREE
+  { 0xA9D4, BIDI_L   },  // JAVANESE DIGIT FOUR
+  { 0xA9D5, BIDI_L   },  // JAVANESE DIGIT FIVE
+  { 0xA9D6, BIDI_L   },  // JAVANESE DIGIT SIX
+  { 0xA9D7, BIDI_L   },  // JAVANESE DIGIT SEVEN
+  { 0xA9D8, BIDI_L   },  // JAVANESE DIGIT EIGHT
+  { 0xA9D9, BIDI_L   },  // JAVANESE DIGIT NINE
+  { 0xA9DE, BIDI_L   },  // JAVANESE PADA TIRTA TUMETES
+  { 0xA9DF, BIDI_L   },  // JAVANESE PADA ISEN-ISEN
+  { 0xA9E0, BIDI_L   },  // MYANMAR LETTER SHAN GHA
+  { 0xA9E1, BIDI_L   },  // MYANMAR LETTER SHAN CHA
+  { 0xA9E2, BIDI_L   },  // MYANMAR LETTER SHAN JHA
+  { 0xA9E3, BIDI_L   },  // MYANMAR LETTER SHAN NNA
+  { 0xA9E4, BIDI_L   },  // MYANMAR LETTER SHAN BHA
+  { 0xA9E5, BIDI_NSM },  // MYANMAR SIGN SHAN SAW
+  { 0xA9E6, BIDI_L   },  // MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+  { 0xA9E7, BIDI_L   },  // MYANMAR LETTER TAI LAING NYA
+  { 0xA9E8, BIDI_L   },  // MYANMAR LETTER TAI LAING FA
+  { 0xA9E9, BIDI_L   },  // MYANMAR LETTER TAI LAING GA
+  { 0xA9EA, BIDI_L   },  // MYANMAR LETTER TAI LAING GHA
+  { 0xA9EB, BIDI_L   },  // MYANMAR LETTER TAI LAING JA
+  { 0xA9EC, BIDI_L   },  // MYANMAR LETTER TAI LAING JHA
+  { 0xA9ED, BIDI_L   },  // MYANMAR LETTER TAI LAING DDA
+  { 0xA9EE, BIDI_L   },  // MYANMAR LETTER TAI LAING DDHA
+  { 0xA9EF, BIDI_L   },  // MYANMAR LETTER TAI LAING NNA
+  { 0xA9F0, BIDI_L   },  // MYANMAR TAI LAING DIGIT ZERO
+  { 0xA9F1, BIDI_L   },  // MYANMAR TAI LAING DIGIT ONE
+  { 0xA9F2, BIDI_L   },  // MYANMAR TAI LAING DIGIT TWO
+  { 0xA9F3, BIDI_L   },  // MYANMAR TAI LAING DIGIT THREE
+  { 0xA9F4, BIDI_L   },  // MYANMAR TAI LAING DIGIT FOUR
+  { 0xA9F5, BIDI_L   },  // MYANMAR TAI LAING DIGIT FIVE
+  { 0xA9F6, BIDI_L   },  // MYANMAR TAI LAING DIGIT SIX
+  { 0xA9F7, BIDI_L   },  // MYANMAR TAI LAING DIGIT SEVEN
+  { 0xA9F8, BIDI_L   },  // MYANMAR TAI LAING DIGIT EIGHT
+  { 0xA9F9, BIDI_L   },  // MYANMAR TAI LAING DIGIT NINE
+  { 0xA9FA, BIDI_L   },  // MYANMAR LETTER TAI LAING LLA
+  { 0xA9FB, BIDI_L   },  // MYANMAR LETTER TAI LAING DA
+  { 0xA9FC, BIDI_L   },  // MYANMAR LETTER TAI LAING DHA
+  { 0xA9FD, BIDI_L   },  // MYANMAR LETTER TAI LAING BA
+  { 0xA9FE, BIDI_L   },  // MYANMAR LETTER TAI LAING BHA
+  { 0xAA00, BIDI_L   },  // CHAM LETTER A
+  { 0xAA01, BIDI_L   },  // CHAM LETTER I
+  { 0xAA02, BIDI_L   },  // CHAM LETTER U
+  { 0xAA03, BIDI_L   },  // CHAM LETTER E
+  { 0xAA04, BIDI_L   },  // CHAM LETTER AI
+  { 0xAA05, BIDI_L   },  // CHAM LETTER O
+  { 0xAA06, BIDI_L   },  // CHAM LETTER KA
+  { 0xAA07, BIDI_L   },  // CHAM LETTER KHA
+  { 0xAA08, BIDI_L   },  // CHAM LETTER GA
+  { 0xAA09, BIDI_L   },  // CHAM LETTER GHA
+  { 0xAA0A, BIDI_L   },  // CHAM LETTER NGUE
+  { 0xAA0B, BIDI_L   },  // CHAM LETTER NGA
+  { 0xAA0C, BIDI_L   },  // CHAM LETTER CHA
+  { 0xAA0D, BIDI_L   },  // CHAM LETTER CHHA
+  { 0xAA0E, BIDI_L   },  // CHAM LETTER JA
+  { 0xAA0F, BIDI_L   },  // CHAM LETTER JHA
+  { 0xAA10, BIDI_L   },  // CHAM LETTER NHUE
+  { 0xAA11, BIDI_L   },  // CHAM LETTER NHA
+  { 0xAA12, BIDI_L   },  // CHAM LETTER NHJA
+  { 0xAA13, BIDI_L   },  // CHAM LETTER TA
+  { 0xAA14, BIDI_L   },  // CHAM LETTER THA
+  { 0xAA15, BIDI_L   },  // CHAM LETTER DA
+  { 0xAA16, BIDI_L   },  // CHAM LETTER DHA
+  { 0xAA17, BIDI_L   },  // CHAM LETTER NUE
+  { 0xAA18, BIDI_L   },  // CHAM LETTER NA
+  { 0xAA19, BIDI_L   },  // CHAM LETTER DDA
+  { 0xAA1A, BIDI_L   },  // CHAM LETTER PA
+  { 0xAA1B, BIDI_L   },  // CHAM LETTER PPA
+  { 0xAA1C, BIDI_L   },  // CHAM LETTER PHA
+  { 0xAA1D, BIDI_L   },  // CHAM LETTER BA
+  { 0xAA1E, BIDI_L   },  // CHAM LETTER BHA
+  { 0xAA1F, BIDI_L   },  // CHAM LETTER MUE
+  { 0xAA20, BIDI_L   },  // CHAM LETTER MA
+  { 0xAA21, BIDI_L   },  // CHAM LETTER BBA
+  { 0xAA22, BIDI_L   },  // CHAM LETTER YA
+  { 0xAA23, BIDI_L   },  // CHAM LETTER RA
+  { 0xAA24, BIDI_L   },  // CHAM LETTER LA
+  { 0xAA25, BIDI_L   },  // CHAM LETTER VA
+  { 0xAA26, BIDI_L   },  // CHAM LETTER SSA
+  { 0xAA27, BIDI_L   },  // CHAM LETTER SA
+  { 0xAA28, BIDI_L   },  // CHAM LETTER HA
+  { 0xAA29, BIDI_NSM },  // CHAM VOWEL SIGN AA
+  { 0xAA2A, BIDI_NSM },  // CHAM VOWEL SIGN I
+  { 0xAA2B, BIDI_NSM },  // CHAM VOWEL SIGN II
+  { 0xAA2C, BIDI_NSM },  // CHAM VOWEL SIGN EI
+  { 0xAA2D, BIDI_NSM },  // CHAM VOWEL SIGN U
+  { 0xAA2E, BIDI_NSM },  // CHAM VOWEL SIGN OE
+  { 0xAA2F, BIDI_L   },  // CHAM VOWEL SIGN O
+  { 0xAA30, BIDI_L   },  // CHAM VOWEL SIGN AI
+  { 0xAA31, BIDI_NSM },  // CHAM VOWEL SIGN AU
+  { 0xAA32, BIDI_NSM },  // CHAM VOWEL SIGN UE
+  { 0xAA33, BIDI_L   },  // CHAM CONSONANT SIGN YA
+  { 0xAA34, BIDI_L   },  // CHAM CONSONANT SIGN RA
+  { 0xAA35, BIDI_NSM },  // CHAM CONSONANT SIGN LA
+  { 0xAA36, BIDI_NSM },  // CHAM CONSONANT SIGN WA
+  { 0xAA40, BIDI_L   },  // CHAM LETTER FINAL K
+  { 0xAA41, BIDI_L   },  // CHAM LETTER FINAL G
+  { 0xAA42, BIDI_L   },  // CHAM LETTER FINAL NG
+  { 0xAA43, BIDI_NSM },  // CHAM CONSONANT SIGN FINAL NG
+  { 0xAA44, BIDI_L   },  // CHAM LETTER FINAL CH
+  { 0xAA45, BIDI_L   },  // CHAM LETTER FINAL T
+  { 0xAA46, BIDI_L   },  // CHAM LETTER FINAL N
+  { 0xAA47, BIDI_L   },  // CHAM LETTER FINAL P
+  { 0xAA48, BIDI_L   },  // CHAM LETTER FINAL Y
+  { 0xAA49, BIDI_L   },  // CHAM LETTER FINAL R
+  { 0xAA4A, BIDI_L   },  // CHAM LETTER FINAL L
+  { 0xAA4B, BIDI_L   },  // CHAM LETTER FINAL SS
+  { 0xAA4C, BIDI_NSM },  // CHAM CONSONANT SIGN FINAL M
+  { 0xAA4D, BIDI_L   },  // CHAM CONSONANT SIGN FINAL H
+  { 0xAA50, BIDI_L   },  // CHAM DIGIT ZERO
+  { 0xAA51, BIDI_L   },  // CHAM DIGIT ONE
+  { 0xAA52, BIDI_L   },  // CHAM DIGIT TWO
+  { 0xAA53, BIDI_L   },  // CHAM DIGIT THREE
+  { 0xAA54, BIDI_L   },  // CHAM DIGIT FOUR
+  { 0xAA55, BIDI_L   },  // CHAM DIGIT FIVE
+  { 0xAA56, BIDI_L   },  // CHAM DIGIT SIX
+  { 0xAA57, BIDI_L   },  // CHAM DIGIT SEVEN
+  { 0xAA58, BIDI_L   },  // CHAM DIGIT EIGHT
+  { 0xAA59, BIDI_L   },  // CHAM DIGIT NINE
+  { 0xAA5C, BIDI_L   },  // CHAM PUNCTUATION SPIRAL
+  { 0xAA5D, BIDI_L   },  // CHAM PUNCTUATION DANDA
+  { 0xAA5E, BIDI_L   },  // CHAM PUNCTUATION DOUBLE DANDA
+  { 0xAA5F, BIDI_L   },  // CHAM PUNCTUATION TRIPLE DANDA
+  { 0xAA60, BIDI_L   },  // MYANMAR LETTER KHAMTI GA
+  { 0xAA61, BIDI_L   },  // MYANMAR LETTER KHAMTI CA
+  { 0xAA62, BIDI_L   },  // MYANMAR LETTER KHAMTI CHA
+  { 0xAA63, BIDI_L   },  // MYANMAR LETTER KHAMTI JA
+  { 0xAA64, BIDI_L   },  // MYANMAR LETTER KHAMTI JHA
+  { 0xAA65, BIDI_L   },  // MYANMAR LETTER KHAMTI NYA
+  { 0xAA66, BIDI_L   },  // MYANMAR LETTER KHAMTI TTA
+  { 0xAA67, BIDI_L   },  // MYANMAR LETTER KHAMTI TTHA
+  { 0xAA68, BIDI_L   },  // MYANMAR LETTER KHAMTI DDA
+  { 0xAA69, BIDI_L   },  // MYANMAR LETTER KHAMTI DDHA
+  { 0xAA6A, BIDI_L   },  // MYANMAR LETTER KHAMTI DHA
+  { 0xAA6B, BIDI_L   },  // MYANMAR LETTER KHAMTI NA
+  { 0xAA6C, BIDI_L   },  // MYANMAR LETTER KHAMTI SA
+  { 0xAA6D, BIDI_L   },  // MYANMAR LETTER KHAMTI HA
+  { 0xAA6E, BIDI_L   },  // MYANMAR LETTER KHAMTI HHA
+  { 0xAA6F, BIDI_L   },  // MYANMAR LETTER KHAMTI FA
+  { 0xAA70, BIDI_L   },  // MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+  { 0xAA71, BIDI_L   },  // MYANMAR LETTER KHAMTI XA
+  { 0xAA72, BIDI_L   },  // MYANMAR LETTER KHAMTI ZA
+  { 0xAA73, BIDI_L   },  // MYANMAR LETTER KHAMTI RA
+  { 0xAA74, BIDI_L   },  // MYANMAR LOGOGRAM KHAMTI OAY
+  { 0xAA75, BIDI_L   },  // MYANMAR LOGOGRAM KHAMTI QN
+  { 0xAA76, BIDI_L   },  // MYANMAR LOGOGRAM KHAMTI HM
+  { 0xAA77, BIDI_L   },  // MYANMAR SYMBOL AITON EXCLAMATION
+  { 0xAA78, BIDI_L   },  // MYANMAR SYMBOL AITON ONE
+  { 0xAA79, BIDI_L   },  // MYANMAR SYMBOL AITON TWO
+  { 0xAA7A, BIDI_L   },  // MYANMAR LETTER AITON RA
+  { 0xAA7B, BIDI_L   },  // MYANMAR SIGN PAO KAREN TONE
+  { 0xAA7C, BIDI_NSM },  // MYANMAR SIGN TAI LAING TONE-2
+  { 0xAA7D, BIDI_L   },  // MYANMAR SIGN TAI LAING TONE-5
+  { 0xAA7E, BIDI_L   },  // MYANMAR LETTER SHWE PALAUNG CHA
+  { 0xAA7F, BIDI_L   },  // MYANMAR LETTER SHWE PALAUNG SHA
+  { 0xAA80, BIDI_L   },  // TAI VIET LETTER LOW KO
+  { 0xAA81, BIDI_L   },  // TAI VIET LETTER HIGH KO
+  { 0xAA82, BIDI_L   },  // TAI VIET LETTER LOW KHO
+  { 0xAA83, BIDI_L   },  // TAI VIET LETTER HIGH KHO
+  { 0xAA84, BIDI_L   },  // TAI VIET LETTER LOW KHHO
+  { 0xAA85, BIDI_L   },  // TAI VIET LETTER HIGH KHHO
+  { 0xAA86, BIDI_L   },  // TAI VIET LETTER LOW GO
+  { 0xAA87, BIDI_L   },  // TAI VIET LETTER HIGH GO
+  { 0xAA88, BIDI_L   },  // TAI VIET LETTER LOW NGO
+  { 0xAA89, BIDI_L   },  // TAI VIET LETTER HIGH NGO
+  { 0xAA8A, BIDI_L   },  // TAI VIET LETTER LOW CO
+  { 0xAA8B, BIDI_L   },  // TAI VIET LETTER HIGH CO
+  { 0xAA8C, BIDI_L   },  // TAI VIET LETTER LOW CHO
+  { 0xAA8D, BIDI_L   },  // TAI VIET LETTER HIGH CHO
+  { 0xAA8E, BIDI_L   },  // TAI VIET LETTER LOW SO
+  { 0xAA8F, BIDI_L   },  // TAI VIET LETTER HIGH SO
+  { 0xAA90, BIDI_L   },  // TAI VIET LETTER LOW NYO
+  { 0xAA91, BIDI_L   },  // TAI VIET LETTER HIGH NYO
+  { 0xAA92, BIDI_L   },  // TAI VIET LETTER LOW DO
+  { 0xAA93, BIDI_L   },  // TAI VIET LETTER HIGH DO
+  { 0xAA94, BIDI_L   },  // TAI VIET LETTER LOW TO
+  { 0xAA95, BIDI_L   },  // TAI VIET LETTER HIGH TO
+  { 0xAA96, BIDI_L   },  // TAI VIET LETTER LOW THO
+  { 0xAA97, BIDI_L   },  // TAI VIET LETTER HIGH THO
+  { 0xAA98, BIDI_L   },  // TAI VIET LETTER LOW NO
+  { 0xAA99, BIDI_L   },  // TAI VIET LETTER HIGH NO
+  { 0xAA9A, BIDI_L   },  // TAI VIET LETTER LOW BO
+  { 0xAA9B, BIDI_L   },  // TAI VIET LETTER HIGH BO
+  { 0xAA9C, BIDI_L   },  // TAI VIET LETTER LOW PO
+  { 0xAA9D, BIDI_L   },  // TAI VIET LETTER HIGH PO
+  { 0xAA9E, BIDI_L   },  // TAI VIET LETTER LOW PHO
+  { 0xAA9F, BIDI_L   },  // TAI VIET LETTER HIGH PHO
+  { 0xAAA0, BIDI_L   },  // TAI VIET LETTER LOW FO
+  { 0xAAA1, BIDI_L   },  // TAI VIET LETTER HIGH FO
+  { 0xAAA2, BIDI_L   },  // TAI VIET LETTER LOW MO
+  { 0xAAA3, BIDI_L   },  // TAI VIET LETTER HIGH MO
+  { 0xAAA4, BIDI_L   },  // TAI VIET LETTER LOW YO
+  { 0xAAA5, BIDI_L   },  // TAI VIET LETTER HIGH YO
+  { 0xAAA6, BIDI_L   },  // TAI VIET LETTER LOW RO
+  { 0xAAA7, BIDI_L   },  // TAI VIET LETTER HIGH RO
+  { 0xAAA8, BIDI_L   },  // TAI VIET LETTER LOW LO
+  { 0xAAA9, BIDI_L   },  // TAI VIET LETTER HIGH LO
+  { 0xAAAA, BIDI_L   },  // TAI VIET LETTER LOW VO
+  { 0xAAAB, BIDI_L   },  // TAI VIET LETTER HIGH VO
+  { 0xAAAC, BIDI_L   },  // TAI VIET LETTER LOW HO
+  { 0xAAAD, BIDI_L   },  // TAI VIET LETTER HIGH HO
+  { 0xAAAE, BIDI_L   },  // TAI VIET LETTER LOW O
+  { 0xAAAF, BIDI_L   },  // TAI VIET LETTER HIGH O
+  { 0xAAB0, BIDI_NSM },  // TAI VIET MAI KANG
+  { 0xAAB1, BIDI_L   },  // TAI VIET VOWEL AA
+  { 0xAAB2, BIDI_NSM },  // TAI VIET VOWEL I
+  { 0xAAB3, BIDI_NSM },  // TAI VIET VOWEL UE
+  { 0xAAB4, BIDI_NSM },  // TAI VIET VOWEL U
+  { 0xAAB5, BIDI_L   },  // TAI VIET VOWEL E
+  { 0xAAB6, BIDI_L   },  // TAI VIET VOWEL O
+  { 0xAAB7, BIDI_NSM },  // TAI VIET MAI KHIT
+  { 0xAAB8, BIDI_NSM },  // TAI VIET VOWEL IA
+  { 0xAAB9, BIDI_L   },  // TAI VIET VOWEL UEA
+  { 0xAABA, BIDI_L   },  // TAI VIET VOWEL UA
+  { 0xAABB, BIDI_L   },  // TAI VIET VOWEL AUE
+  { 0xAABC, BIDI_L   },  // TAI VIET VOWEL AY
+  { 0xAABD, BIDI_L   },  // TAI VIET VOWEL AN
+  { 0xAABE, BIDI_NSM },  // TAI VIET VOWEL AM
+  { 0xAABF, BIDI_NSM },  // TAI VIET TONE MAI EK
+  { 0xAAC0, BIDI_L   },  // TAI VIET TONE MAI NUENG
+  { 0xAAC1, BIDI_NSM },  // TAI VIET TONE MAI THO
+  { 0xAAC2, BIDI_L   },  // TAI VIET TONE MAI SONG
+  { 0xAADB, BIDI_L   },  // TAI VIET SYMBOL KON
+  { 0xAADC, BIDI_L   },  // TAI VIET SYMBOL NUENG
+  { 0xAADD, BIDI_L   },  // TAI VIET SYMBOL SAM
+  { 0xAADE, BIDI_L   },  // TAI VIET SYMBOL HO HOI
+  { 0xAADF, BIDI_L   },  // TAI VIET SYMBOL KOI KOI
+  { 0xAAE0, BIDI_L   },  // MEETEI MAYEK LETTER E
+  { 0xAAE1, BIDI_L   },  // MEETEI MAYEK LETTER O
+  { 0xAAE2, BIDI_L   },  // MEETEI MAYEK LETTER CHA
+  { 0xAAE3, BIDI_L   },  // MEETEI MAYEK LETTER NYA
+  { 0xAAE4, BIDI_L   },  // MEETEI MAYEK LETTER TTA
+  { 0xAAE5, BIDI_L   },  // MEETEI MAYEK LETTER TTHA
+  { 0xAAE6, BIDI_L   },  // MEETEI MAYEK LETTER DDA
+  { 0xAAE7, BIDI_L   },  // MEETEI MAYEK LETTER DDHA
+  { 0xAAE8, BIDI_L   },  // MEETEI MAYEK LETTER NNA
+  { 0xAAE9, BIDI_L   },  // MEETEI MAYEK LETTER SHA
+  { 0xAAEA, BIDI_L   },  // MEETEI MAYEK LETTER SSA
+  { 0xAAEB, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN II
+  { 0xAAEC, BIDI_NSM },  // MEETEI MAYEK VOWEL SIGN UU
+  { 0xAAED, BIDI_NSM },  // MEETEI MAYEK VOWEL SIGN AAI
+  { 0xAAEE, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN AU
+  { 0xAAEF, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN AAU
+  { 0xAAF0, BIDI_L   },  // MEETEI MAYEK CHEIKHAN
+  { 0xAAF1, BIDI_L   },  // MEETEI MAYEK AHANG KHUDAM
+  { 0xAAF2, BIDI_L   },  // MEETEI MAYEK ANJI
+  { 0xAAF3, BIDI_L   },  // MEETEI MAYEK SYLLABLE REPETITION MARK
+  { 0xAAF4, BIDI_L   },  // MEETEI MAYEK WORD REPETITION MARK
+  { 0xAAF5, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN VISARGA
+  { 0xAAF6, BIDI_NSM },  // MEETEI MAYEK VIRAMA
+  { 0xAB01, BIDI_L   },  // ETHIOPIC SYLLABLE TTHU
+  { 0xAB02, BIDI_L   },  // ETHIOPIC SYLLABLE TTHI
+  { 0xAB03, BIDI_L   },  // ETHIOPIC SYLLABLE TTHAA
+  { 0xAB04, BIDI_L   },  // ETHIOPIC SYLLABLE TTHEE
+  { 0xAB05, BIDI_L   },  // ETHIOPIC SYLLABLE TTHE
+  { 0xAB06, BIDI_L   },  // ETHIOPIC SYLLABLE TTHO
+  { 0xAB09, BIDI_L   },  // ETHIOPIC SYLLABLE DDHU
+  { 0xAB0A, BIDI_L   },  // ETHIOPIC SYLLABLE DDHI
+  { 0xAB0B, BIDI_L   },  // ETHIOPIC SYLLABLE DDHAA
+  { 0xAB0C, BIDI_L   },  // ETHIOPIC SYLLABLE DDHEE
+  { 0xAB0D, BIDI_L   },  // ETHIOPIC SYLLABLE DDHE
+  { 0xAB0E, BIDI_L   },  // ETHIOPIC SYLLABLE DDHO
+  { 0xAB11, BIDI_L   },  // ETHIOPIC SYLLABLE DZU
+  { 0xAB12, BIDI_L   },  // ETHIOPIC SYLLABLE DZI
+  { 0xAB13, BIDI_L   },  // ETHIOPIC SYLLABLE DZAA
+  { 0xAB14, BIDI_L   },  // ETHIOPIC SYLLABLE DZEE
+  { 0xAB15, BIDI_L   },  // ETHIOPIC SYLLABLE DZE
+  { 0xAB16, BIDI_L   },  // ETHIOPIC SYLLABLE DZO
+  { 0xAB20, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHA
+  { 0xAB21, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHU
+  { 0xAB22, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHI
+  { 0xAB23, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHAA
+  { 0xAB24, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHEE
+  { 0xAB25, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHE
+  { 0xAB26, BIDI_L   },  // ETHIOPIC SYLLABLE CCHHO
+  { 0xAB28, BIDI_L   },  // ETHIOPIC SYLLABLE BBA
+  { 0xAB29, BIDI_L   },  // ETHIOPIC SYLLABLE BBU
+  { 0xAB2A, BIDI_L   },  // ETHIOPIC SYLLABLE BBI
+  { 0xAB2B, BIDI_L   },  // ETHIOPIC SYLLABLE BBAA
+  { 0xAB2C, BIDI_L   },  // ETHIOPIC SYLLABLE BBEE
+  { 0xAB2D, BIDI_L   },  // ETHIOPIC SYLLABLE BBE
+  { 0xAB2E, BIDI_L   },  // ETHIOPIC SYLLABLE BBO
+  { 0xAB30, BIDI_L   },  // LATIN SMALL LETTER BARRED ALPHA
+  { 0xAB31, BIDI_L   },  // LATIN SMALL LETTER A REVERSED-SCHWA
+  { 0xAB32, BIDI_L   },  // LATIN SMALL LETTER BLACKLETTER E
+  { 0xAB33, BIDI_L   },  // LATIN SMALL LETTER BARRED E
+  { 0xAB34, BIDI_L   },  // LATIN SMALL LETTER E WITH FLOURISH
+  { 0xAB35, BIDI_L   },  // LATIN SMALL LETTER LENIS F
+  { 0xAB36, BIDI_L   },  // LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
+  { 0xAB37, BIDI_L   },  // LATIN SMALL LETTER L WITH INVERTED LAZY S
+  { 0xAB38, BIDI_L   },  // LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+  { 0xAB39, BIDI_L   },  // LATIN SMALL LETTER L WITH MIDDLE RING
+  { 0xAB3A, BIDI_L   },  // LATIN SMALL LETTER M WITH CROSSED-TAIL
+  { 0xAB3B, BIDI_L   },  // LATIN SMALL LETTER N WITH CROSSED-TAIL
+  { 0xAB3C, BIDI_L   },  // LATIN SMALL LETTER ENG WITH CROSSED-TAIL
+  { 0xAB3D, BIDI_L   },  // LATIN SMALL LETTER BLACKLETTER O
+  { 0xAB3E, BIDI_L   },  // LATIN SMALL LETTER BLACKLETTER O WITH STROKE
+  { 0xAB3F, BIDI_L   },  // LATIN SMALL LETTER OPEN O WITH STROKE
+  { 0xAB40, BIDI_L   },  // LATIN SMALL LETTER INVERTED OE
+  { 0xAB41, BIDI_L   },  // LATIN SMALL LETTER TURNED OE WITH STROKE
+  { 0xAB42, BIDI_L   },  // LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE
+  { 0xAB43, BIDI_L   },  // LATIN SMALL LETTER TURNED O OPEN-O
+  { 0xAB44, BIDI_L   },  // LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE
+  { 0xAB45, BIDI_L   },  // LATIN SMALL LETTER STIRRUP R
+  { 0xAB46, BIDI_L   },  // LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG
+  { 0xAB47, BIDI_L   },  // LATIN SMALL LETTER R WITHOUT HANDLE
+  { 0xAB48, BIDI_L   },  // LATIN SMALL LETTER DOUBLE R
+  { 0xAB49, BIDI_L   },  // LATIN SMALL LETTER R WITH CROSSED-TAIL
+  { 0xAB4A, BIDI_L   },  // LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL
+  { 0xAB4B, BIDI_L   },  // LATIN SMALL LETTER SCRIPT R
+  { 0xAB4C, BIDI_L   },  // LATIN SMALL LETTER SCRIPT R WITH RING
+  { 0xAB4D, BIDI_L   },  // LATIN SMALL LETTER BASELINE ESH
+  { 0xAB4E, BIDI_L   },  // LATIN SMALL LETTER U WITH SHORT RIGHT LEG
+  { 0xAB4F, BIDI_L   },  // LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG
+  { 0xAB50, BIDI_L   },  // LATIN SMALL LETTER UI
+  { 0xAB51, BIDI_L   },  // LATIN SMALL LETTER TURNED UI
+  { 0xAB52, BIDI_L   },  // LATIN SMALL LETTER U WITH LEFT HOOK
+  { 0xAB53, BIDI_L   },  // LATIN SMALL LETTER CHI
+  { 0xAB54, BIDI_L   },  // LATIN SMALL LETTER CHI WITH LOW RIGHT RING
+  { 0xAB55, BIDI_L   },  // LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
+  { 0xAB56, BIDI_L   },  // LATIN SMALL LETTER X WITH LOW RIGHT RING
+  { 0xAB57, BIDI_L   },  // LATIN SMALL LETTER X WITH LONG LEFT LEG
+  { 0xAB58, BIDI_L   },  // LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING
+  { 0xAB59, BIDI_L   },  // LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF
+  { 0xAB5A, BIDI_L   },  // LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+  { 0xAB5B, BIDI_L   },  // MODIFIER BREVE WITH INVERTED BREVE
+  { 0xAB5C, BIDI_L   },  // MODIFIER LETTER SMALL HENG
+  { 0xAB5D, BIDI_L   },  // MODIFIER LETTER SMALL L WITH INVERTED LAZY S
+  { 0xAB5E, BIDI_L   },  // MODIFIER LETTER SMALL L WITH MIDDLE TILDE
+  { 0xAB5F, BIDI_L   },  // MODIFIER LETTER SMALL U WITH LEFT HOOK
+  { 0xAB60, BIDI_L   },  // LATIN SMALL LETTER SAKHA YAT
+  { 0xAB61, BIDI_L   },  // LATIN SMALL LETTER IOTIFIED E
+  { 0xAB62, BIDI_L   },  // LATIN SMALL LETTER OPEN OE
+  { 0xAB63, BIDI_L   },  // LATIN SMALL LETTER UO
+  { 0xAB64, BIDI_L   },  // LATIN SMALL LETTER INVERTED ALPHA
+  { 0xAB65, BIDI_L   },  // GREEK LETTER SMALL CAPITAL OMEGA
+  { 0xAB70, BIDI_L   },  // CHEROKEE SMALL LETTER A
+  { 0xAB71, BIDI_L   },  // CHEROKEE SMALL LETTER E
+  { 0xAB72, BIDI_L   },  // CHEROKEE SMALL LETTER I
+  { 0xAB73, BIDI_L   },  // CHEROKEE SMALL LETTER O
+  { 0xAB74, BIDI_L   },  // CHEROKEE SMALL LETTER U
+  { 0xAB75, BIDI_L   },  // CHEROKEE SMALL LETTER V
+  { 0xAB76, BIDI_L   },  // CHEROKEE SMALL LETTER GA
+  { 0xAB77, BIDI_L   },  // CHEROKEE SMALL LETTER KA
+  { 0xAB78, BIDI_L   },  // CHEROKEE SMALL LETTER GE
+  { 0xAB79, BIDI_L   },  // CHEROKEE SMALL LETTER GI
+  { 0xAB7A, BIDI_L   },  // CHEROKEE SMALL LETTER GO
+  { 0xAB7B, BIDI_L   },  // CHEROKEE SMALL LETTER GU
+  { 0xAB7C, BIDI_L   },  // CHEROKEE SMALL LETTER GV
+  { 0xAB7D, BIDI_L   },  // CHEROKEE SMALL LETTER HA
+  { 0xAB7E, BIDI_L   },  // CHEROKEE SMALL LETTER HE
+  { 0xAB7F, BIDI_L   },  // CHEROKEE SMALL LETTER HI
+  { 0xAB80, BIDI_L   },  // CHEROKEE SMALL LETTER HO
+  { 0xAB81, BIDI_L   },  // CHEROKEE SMALL LETTER HU
+  { 0xAB82, BIDI_L   },  // CHEROKEE SMALL LETTER HV
+  { 0xAB83, BIDI_L   },  // CHEROKEE SMALL LETTER LA
+  { 0xAB84, BIDI_L   },  // CHEROKEE SMALL LETTER LE
+  { 0xAB85, BIDI_L   },  // CHEROKEE SMALL LETTER LI
+  { 0xAB86, BIDI_L   },  // CHEROKEE SMALL LETTER LO
+  { 0xAB87, BIDI_L   },  // CHEROKEE SMALL LETTER LU
+  { 0xAB88, BIDI_L   },  // CHEROKEE SMALL LETTER LV
+  { 0xAB89, BIDI_L   },  // CHEROKEE SMALL LETTER MA
+  { 0xAB8A, BIDI_L   },  // CHEROKEE SMALL LETTER ME
+  { 0xAB8B, BIDI_L   },  // CHEROKEE SMALL LETTER MI
+  { 0xAB8C, BIDI_L   },  // CHEROKEE SMALL LETTER MO
+  { 0xAB8D, BIDI_L   },  // CHEROKEE SMALL LETTER MU
+  { 0xAB8E, BIDI_L   },  // CHEROKEE SMALL LETTER NA
+  { 0xAB8F, BIDI_L   },  // CHEROKEE SMALL LETTER HNA
+  { 0xAB90, BIDI_L   },  // CHEROKEE SMALL LETTER NAH
+  { 0xAB91, BIDI_L   },  // CHEROKEE SMALL LETTER NE
+  { 0xAB92, BIDI_L   },  // CHEROKEE SMALL LETTER NI
+  { 0xAB93, BIDI_L   },  // CHEROKEE SMALL LETTER NO
+  { 0xAB94, BIDI_L   },  // CHEROKEE SMALL LETTER NU
+  { 0xAB95, BIDI_L   },  // CHEROKEE SMALL LETTER NV
+  { 0xAB96, BIDI_L   },  // CHEROKEE SMALL LETTER QUA
+  { 0xAB97, BIDI_L   },  // CHEROKEE SMALL LETTER QUE
+  { 0xAB98, BIDI_L   },  // CHEROKEE SMALL LETTER QUI
+  { 0xAB99, BIDI_L   },  // CHEROKEE SMALL LETTER QUO
+  { 0xAB9A, BIDI_L   },  // CHEROKEE SMALL LETTER QUU
+  { 0xAB9B, BIDI_L   },  // CHEROKEE SMALL LETTER QUV
+  { 0xAB9C, BIDI_L   },  // CHEROKEE SMALL LETTER SA
+  { 0xAB9D, BIDI_L   },  // CHEROKEE SMALL LETTER S
+  { 0xAB9E, BIDI_L   },  // CHEROKEE SMALL LETTER SE
+  { 0xAB9F, BIDI_L   },  // CHEROKEE SMALL LETTER SI
+  { 0xABA0, BIDI_L   },  // CHEROKEE SMALL LETTER SO
+  { 0xABA1, BIDI_L   },  // CHEROKEE SMALL LETTER SU
+  { 0xABA2, BIDI_L   },  // CHEROKEE SMALL LETTER SV
+  { 0xABA3, BIDI_L   },  // CHEROKEE SMALL LETTER DA
+  { 0xABA4, BIDI_L   },  // CHEROKEE SMALL LETTER TA
+  { 0xABA5, BIDI_L   },  // CHEROKEE SMALL LETTER DE
+  { 0xABA6, BIDI_L   },  // CHEROKEE SMALL LETTER TE
+  { 0xABA7, BIDI_L   },  // CHEROKEE SMALL LETTER DI
+  { 0xABA8, BIDI_L   },  // CHEROKEE SMALL LETTER TI
+  { 0xABA9, BIDI_L   },  // CHEROKEE SMALL LETTER DO
+  { 0xABAA, BIDI_L   },  // CHEROKEE SMALL LETTER DU
+  { 0xABAB, BIDI_L   },  // CHEROKEE SMALL LETTER DV
+  { 0xABAC, BIDI_L   },  // CHEROKEE SMALL LETTER DLA
+  { 0xABAD, BIDI_L   },  // CHEROKEE SMALL LETTER TLA
+  { 0xABAE, BIDI_L   },  // CHEROKEE SMALL LETTER TLE
+  { 0xABAF, BIDI_L   },  // CHEROKEE SMALL LETTER TLI
+  { 0xABB0, BIDI_L   },  // CHEROKEE SMALL LETTER TLO
+  { 0xABB1, BIDI_L   },  // CHEROKEE SMALL LETTER TLU
+  { 0xABB2, BIDI_L   },  // CHEROKEE SMALL LETTER TLV
+  { 0xABB3, BIDI_L   },  // CHEROKEE SMALL LETTER TSA
+  { 0xABB4, BIDI_L   },  // CHEROKEE SMALL LETTER TSE
+  { 0xABB5, BIDI_L   },  // CHEROKEE SMALL LETTER TSI
+  { 0xABB6, BIDI_L   },  // CHEROKEE SMALL LETTER TSO
+  { 0xABB7, BIDI_L   },  // CHEROKEE SMALL LETTER TSU
+  { 0xABB8, BIDI_L   },  // CHEROKEE SMALL LETTER TSV
+  { 0xABB9, BIDI_L   },  // CHEROKEE SMALL LETTER WA
+  { 0xABBA, BIDI_L   },  // CHEROKEE SMALL LETTER WE
+  { 0xABBB, BIDI_L   },  // CHEROKEE SMALL LETTER WI
+  { 0xABBC, BIDI_L   },  // CHEROKEE SMALL LETTER WO
+  { 0xABBD, BIDI_L   },  // CHEROKEE SMALL LETTER WU
+  { 0xABBE, BIDI_L   },  // CHEROKEE SMALL LETTER WV
+  { 0xABBF, BIDI_L   },  // CHEROKEE SMALL LETTER YA
+  { 0xABC0, BIDI_L   },  // MEETEI MAYEK LETTER KOK
+  { 0xABC1, BIDI_L   },  // MEETEI MAYEK LETTER SAM
+  { 0xABC2, BIDI_L   },  // MEETEI MAYEK LETTER LAI
+  { 0xABC3, BIDI_L   },  // MEETEI MAYEK LETTER MIT
+  { 0xABC4, BIDI_L   },  // MEETEI MAYEK LETTER PA
+  { 0xABC5, BIDI_L   },  // MEETEI MAYEK LETTER NA
+  { 0xABC6, BIDI_L   },  // MEETEI MAYEK LETTER CHIL
+  { 0xABC7, BIDI_L   },  // MEETEI MAYEK LETTER TIL
+  { 0xABC8, BIDI_L   },  // MEETEI MAYEK LETTER KHOU
+  { 0xABC9, BIDI_L   },  // MEETEI MAYEK LETTER NGOU
+  { 0xABCA, BIDI_L   },  // MEETEI MAYEK LETTER THOU
+  { 0xABCB, BIDI_L   },  // MEETEI MAYEK LETTER WAI
+  { 0xABCC, BIDI_L   },  // MEETEI MAYEK LETTER YANG
+  { 0xABCD, BIDI_L   },  // MEETEI MAYEK LETTER HUK
+  { 0xABCE, BIDI_L   },  // MEETEI MAYEK LETTER UN
+  { 0xABCF, BIDI_L   },  // MEETEI MAYEK LETTER I
+  { 0xABD0, BIDI_L   },  // MEETEI MAYEK LETTER PHAM
+  { 0xABD1, BIDI_L   },  // MEETEI MAYEK LETTER ATIYA
+  { 0xABD2, BIDI_L   },  // MEETEI MAYEK LETTER GOK
+  { 0xABD3, BIDI_L   },  // MEETEI MAYEK LETTER JHAM
+  { 0xABD4, BIDI_L   },  // MEETEI MAYEK LETTER RAI
+  { 0xABD5, BIDI_L   },  // MEETEI MAYEK LETTER BA
+  { 0xABD6, BIDI_L   },  // MEETEI MAYEK LETTER JIL
+  { 0xABD7, BIDI_L   },  // MEETEI MAYEK LETTER DIL
+  { 0xABD8, BIDI_L   },  // MEETEI MAYEK LETTER GHOU
+  { 0xABD9, BIDI_L   },  // MEETEI MAYEK LETTER DHOU
+  { 0xABDA, BIDI_L   },  // MEETEI MAYEK LETTER BHAM
+  { 0xABDB, BIDI_L   },  // MEETEI MAYEK LETTER KOK LONSUM
+  { 0xABDC, BIDI_L   },  // MEETEI MAYEK LETTER LAI LONSUM
+  { 0xABDD, BIDI_L   },  // MEETEI MAYEK LETTER MIT LONSUM
+  { 0xABDE, BIDI_L   },  // MEETEI MAYEK LETTER PA LONSUM
+  { 0xABDF, BIDI_L   },  // MEETEI MAYEK LETTER NA LONSUM
+  { 0xABE0, BIDI_L   },  // MEETEI MAYEK LETTER TIL LONSUM
+  { 0xABE1, BIDI_L   },  // MEETEI MAYEK LETTER NGOU LONSUM
+  { 0xABE2, BIDI_L   },  // MEETEI MAYEK LETTER I LONSUM
+  { 0xABE3, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN ONAP
+  { 0xABE4, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN INAP
+  { 0xABE5, BIDI_NSM },  // MEETEI MAYEK VOWEL SIGN ANAP
+  { 0xABE6, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN YENAP
+  { 0xABE7, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN SOUNAP
+  { 0xABE8, BIDI_NSM },  // MEETEI MAYEK VOWEL SIGN UNAP
+  { 0xABE9, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN CHEINAP
+  { 0xABEA, BIDI_L   },  // MEETEI MAYEK VOWEL SIGN NUNG
+  { 0xABEB, BIDI_L   },  // MEETEI MAYEK CHEIKHEI
+  { 0xABEC, BIDI_L   },  // MEETEI MAYEK LUM IYEK
+  { 0xABED, BIDI_NSM },  // MEETEI MAYEK APUN IYEK
+  { 0xABF0, BIDI_L   },  // MEETEI MAYEK DIGIT ZERO
+  { 0xABF1, BIDI_L   },  // MEETEI MAYEK DIGIT ONE
+  { 0xABF2, BIDI_L   },  // MEETEI MAYEK DIGIT TWO
+  { 0xABF3, BIDI_L   },  // MEETEI MAYEK DIGIT THREE
+  { 0xABF4, BIDI_L   },  // MEETEI MAYEK DIGIT FOUR
+  { 0xABF5, BIDI_L   },  // MEETEI MAYEK DIGIT FIVE
+  { 0xABF6, BIDI_L   },  // MEETEI MAYEK DIGIT SIX
+  { 0xABF7, BIDI_L   },  // MEETEI MAYEK DIGIT SEVEN
+  { 0xABF8, BIDI_L   },  // MEETEI MAYEK DIGIT EIGHT
+  { 0xABF9, BIDI_L   },  // MEETEI MAYEK DIGIT NINE
+  //{ 0xAC00, BIDI_L   },  // <Hangul Syllable, First>
+  //{ 0xD7A3, BIDI_L   },  // <Hangul Syllable, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_D == 1)
+
+  { 0xD7B0, BIDI_L   },  // HANGUL JUNGSEONG O-YEO
+  { 0xD7B1, BIDI_L   },  // HANGUL JUNGSEONG O-O-I
+  { 0xD7B2, BIDI_L   },  // HANGUL JUNGSEONG YO-A
+  { 0xD7B3, BIDI_L   },  // HANGUL JUNGSEONG YO-AE
+  { 0xD7B4, BIDI_L   },  // HANGUL JUNGSEONG YO-EO
+  { 0xD7B5, BIDI_L   },  // HANGUL JUNGSEONG U-YEO
+  { 0xD7B6, BIDI_L   },  // HANGUL JUNGSEONG U-I-I
+  { 0xD7B7, BIDI_L   },  // HANGUL JUNGSEONG YU-AE
+  { 0xD7B8, BIDI_L   },  // HANGUL JUNGSEONG YU-O
+  { 0xD7B9, BIDI_L   },  // HANGUL JUNGSEONG EU-A
+  { 0xD7BA, BIDI_L   },  // HANGUL JUNGSEONG EU-EO
+  { 0xD7BB, BIDI_L   },  // HANGUL JUNGSEONG EU-E
+  { 0xD7BC, BIDI_L   },  // HANGUL JUNGSEONG EU-O
+  { 0xD7BD, BIDI_L   },  // HANGUL JUNGSEONG I-YA-O
+  { 0xD7BE, BIDI_L   },  // HANGUL JUNGSEONG I-YAE
+  { 0xD7BF, BIDI_L   },  // HANGUL JUNGSEONG I-YEO
+  { 0xD7C0, BIDI_L   },  // HANGUL JUNGSEONG I-YE
+  { 0xD7C1, BIDI_L   },  // HANGUL JUNGSEONG I-O-I
+  { 0xD7C2, BIDI_L   },  // HANGUL JUNGSEONG I-YO
+  { 0xD7C3, BIDI_L   },  // HANGUL JUNGSEONG I-YU
+  { 0xD7C4, BIDI_L   },  // HANGUL JUNGSEONG I-I
+  { 0xD7C5, BIDI_L   },  // HANGUL JUNGSEONG ARAEA-A
+  { 0xD7C6, BIDI_L   },  // HANGUL JUNGSEONG ARAEA-E
+  { 0xD7CB, BIDI_L   },  // HANGUL JONGSEONG NIEUN-RIEUL
+  { 0xD7CC, BIDI_L   },  // HANGUL JONGSEONG NIEUN-CHIEUCH
+  { 0xD7CD, BIDI_L   },  // HANGUL JONGSEONG SSANGTIKEUT
+  { 0xD7CE, BIDI_L   },  // HANGUL JONGSEONG SSANGTIKEUT-PIEUP
+  { 0xD7CF, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-PIEUP
+  { 0xD7D0, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-SIOS
+  { 0xD7D1, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
+  { 0xD7D2, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-CIEUC
+  { 0xD7D3, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-CHIEUCH
+  { 0xD7D4, BIDI_L   },  // HANGUL JONGSEONG TIKEUT-THIEUTH
+  { 0xD7D5, BIDI_L   },  // HANGUL JONGSEONG RIEUL-SSANGKIYEOK
+  { 0xD7D6, BIDI_L   },  // HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
+  { 0xD7D7, BIDI_L   },  // HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
+  { 0xD7D8, BIDI_L   },  // HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
+  { 0xD7D9, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
+  { 0xD7DA, BIDI_L   },  // HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
+  { 0xD7DB, BIDI_L   },  // HANGUL JONGSEONG RIEUL-YESIEUNG
+  { 0xD7DC, BIDI_L   },  // HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
+  { 0xD7DD, BIDI_L   },  // HANGUL JONGSEONG KAPYEOUNRIEUL
+  { 0xD7DE, BIDI_L   },  // HANGUL JONGSEONG MIEUM-NIEUN
+  { 0xD7DF, BIDI_L   },  // HANGUL JONGSEONG MIEUM-SSANGNIEUN
+  { 0xD7E0, BIDI_L   },  // HANGUL JONGSEONG SSANGMIEUM
+  { 0xD7E1, BIDI_L   },  // HANGUL JONGSEONG MIEUM-PIEUP-SIOS
+  { 0xD7E2, BIDI_L   },  // HANGUL JONGSEONG MIEUM-CIEUC
+  { 0xD7E3, BIDI_L   },  // HANGUL JONGSEONG PIEUP-TIKEUT
+  { 0xD7E4, BIDI_L   },  // HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
+  { 0xD7E5, BIDI_L   },  // HANGUL JONGSEONG PIEUP-MIEUM
+  { 0xD7E6, BIDI_L   },  // HANGUL JONGSEONG SSANGPIEUP
+  { 0xD7E7, BIDI_L   },  // HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
+  { 0xD7E8, BIDI_L   },  // HANGUL JONGSEONG PIEUP-CIEUC
+  { 0xD7E9, BIDI_L   },  // HANGUL JONGSEONG PIEUP-CHIEUCH
+  { 0xD7EA, BIDI_L   },  // HANGUL JONGSEONG SIOS-MIEUM
+  { 0xD7EB, BIDI_L   },  // HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
+  { 0xD7EC, BIDI_L   },  // HANGUL JONGSEONG SSANGSIOS-KIYEOK
+  { 0xD7ED, BIDI_L   },  // HANGUL JONGSEONG SSANGSIOS-TIKEUT
+  { 0xD7EE, BIDI_L   },  // HANGUL JONGSEONG SIOS-PANSIOS
+  { 0xD7EF, BIDI_L   },  // HANGUL JONGSEONG SIOS-CIEUC
+  { 0xD7F0, BIDI_L   },  // HANGUL JONGSEONG SIOS-CHIEUCH
+  { 0xD7F1, BIDI_L   },  // HANGUL JONGSEONG SIOS-THIEUTH
+  { 0xD7F2, BIDI_L   },  // HANGUL JONGSEONG SIOS-HIEUH
+  { 0xD7F3, BIDI_L   },  // HANGUL JONGSEONG PANSIOS-PIEUP
+  { 0xD7F4, BIDI_L   },  // HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
+  { 0xD7F5, BIDI_L   },  // HANGUL JONGSEONG YESIEUNG-MIEUM
+  { 0xD7F6, BIDI_L   },  // HANGUL JONGSEONG YESIEUNG-HIEUH
+  { 0xD7F7, BIDI_L   },  // HANGUL JONGSEONG CIEUC-PIEUP
+  { 0xD7F8, BIDI_L   },  // HANGUL JONGSEONG CIEUC-SSANGPIEUP
+  { 0xD7F9, BIDI_L   },  // HANGUL JONGSEONG SSANGCIEUC
+  { 0xD7FA, BIDI_L   },  // HANGUL JONGSEONG PHIEUPH-SIOS
+  { 0xD7FB, BIDI_L   },  // HANGUL JONGSEONG PHIEUPH-THIEUTH
+  //{ 0xD800, BIDI_L   },  // <Non Private Use High Surrogate, First>
+  //{ 0xDB7F, BIDI_L   },  // <Non Private Use High Surrogate, Last>
+  //{ 0xDB80, BIDI_L   },  // <Private Use High Surrogate, First>
+  //{ 0xDBFF, BIDI_L   },  // <Private Use High Surrogate, Last>
+  //{ 0xDC00, BIDI_L   },  // <Low Surrogate, First>
+  //{ 0xDFFF, BIDI_L   },  // <Low Surrogate, Last>
+  //{ 0xE000, BIDI_L   },  // <Private Use, First>
+  //{ 0xF8FF, BIDI_L   },  // <Private Use, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_F == 1)
+
+  { 0xF900, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F900
+  { 0xF901, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F901
+  { 0xF902, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F902
+  { 0xF903, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F903
+  { 0xF904, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F904
+  { 0xF905, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F905
+  { 0xF906, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F906
+  { 0xF907, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F907
+  { 0xF908, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F908
+  { 0xF909, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F909
+  { 0xF90A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90A
+  { 0xF90B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90B
+  { 0xF90C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90C
+  { 0xF90D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90D
+  { 0xF90E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90E
+  { 0xF90F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F90F
+  { 0xF910, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F910
+  { 0xF911, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F911
+  { 0xF912, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F912
+  { 0xF913, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F913
+  { 0xF914, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F914
+  { 0xF915, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F915
+  { 0xF916, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F916
+  { 0xF917, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F917
+  { 0xF918, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F918
+  { 0xF919, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F919
+  { 0xF91A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91A
+  { 0xF91B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91B
+  { 0xF91C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91C
+  { 0xF91D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91D
+  { 0xF91E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91E
+  { 0xF91F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F91F
+  { 0xF920, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F920
+  { 0xF921, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F921
+  { 0xF922, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F922
+  { 0xF923, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F923
+  { 0xF924, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F924
+  { 0xF925, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F925
+  { 0xF926, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F926
+  { 0xF927, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F927
+  { 0xF928, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F928
+  { 0xF929, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F929
+  { 0xF92A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92A
+  { 0xF92B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92B
+  { 0xF92C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92C
+  { 0xF92D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92D
+  { 0xF92E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92E
+  { 0xF92F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F92F
+  { 0xF930, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F930
+  { 0xF931, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F931
+  { 0xF932, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F932
+  { 0xF933, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F933
+  { 0xF934, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F934
+  { 0xF935, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F935
+  { 0xF936, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F936
+  { 0xF937, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F937
+  { 0xF938, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F938
+  { 0xF939, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F939
+  { 0xF93A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93A
+  { 0xF93B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93B
+  { 0xF93C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93C
+  { 0xF93D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93D
+  { 0xF93E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93E
+  { 0xF93F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F93F
+  { 0xF940, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F940
+  { 0xF941, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F941
+  { 0xF942, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F942
+  { 0xF943, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F943
+  { 0xF944, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F944
+  { 0xF945, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F945
+  { 0xF946, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F946
+  { 0xF947, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F947
+  { 0xF948, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F948
+  { 0xF949, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F949
+  { 0xF94A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94A
+  { 0xF94B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94B
+  { 0xF94C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94C
+  { 0xF94D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94D
+  { 0xF94E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94E
+  { 0xF94F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F94F
+  { 0xF950, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F950
+  { 0xF951, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F951
+  { 0xF952, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F952
+  { 0xF953, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F953
+  { 0xF954, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F954
+  { 0xF955, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F955
+  { 0xF956, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F956
+  { 0xF957, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F957
+  { 0xF958, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F958
+  { 0xF959, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F959
+  { 0xF95A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95A
+  { 0xF95B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95B
+  { 0xF95C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95C
+  { 0xF95D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95D
+  { 0xF95E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95E
+  { 0xF95F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F95F
+  { 0xF960, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F960
+  { 0xF961, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F961
+  { 0xF962, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F962
+  { 0xF963, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F963
+  { 0xF964, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F964
+  { 0xF965, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F965
+  { 0xF966, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F966
+  { 0xF967, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F967
+  { 0xF968, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F968
+  { 0xF969, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F969
+  { 0xF96A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96A
+  { 0xF96B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96B
+  { 0xF96C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96C
+  { 0xF96D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96D
+  { 0xF96E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96E
+  { 0xF96F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F96F
+  { 0xF970, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F970
+  { 0xF971, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F971
+  { 0xF972, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F972
+  { 0xF973, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F973
+  { 0xF974, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F974
+  { 0xF975, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F975
+  { 0xF976, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F976
+  { 0xF977, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F977
+  { 0xF978, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F978
+  { 0xF979, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F979
+  { 0xF97A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97A
+  { 0xF97B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97B
+  { 0xF97C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97C
+  { 0xF97D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97D
+  { 0xF97E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97E
+  { 0xF97F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F97F
+  { 0xF980, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F980
+  { 0xF981, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F981
+  { 0xF982, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F982
+  { 0xF983, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F983
+  { 0xF984, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F984
+  { 0xF985, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F985
+  { 0xF986, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F986
+  { 0xF987, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F987
+  { 0xF988, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F988
+  { 0xF989, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F989
+  { 0xF98A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98A
+  { 0xF98B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98B
+  { 0xF98C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98C
+  { 0xF98D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98D
+  { 0xF98E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98E
+  { 0xF98F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F98F
+  { 0xF990, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F990
+  { 0xF991, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F991
+  { 0xF992, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F992
+  { 0xF993, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F993
+  { 0xF994, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F994
+  { 0xF995, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F995
+  { 0xF996, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F996
+  { 0xF997, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F997
+  { 0xF998, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F998
+  { 0xF999, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F999
+  { 0xF99A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99A
+  { 0xF99B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99B
+  { 0xF99C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99C
+  { 0xF99D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99D
+  { 0xF99E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99E
+  { 0xF99F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F99F
+  { 0xF9A0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A0
+  { 0xF9A1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A1
+  { 0xF9A2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A2
+  { 0xF9A3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A3
+  { 0xF9A4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A4
+  { 0xF9A5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A5
+  { 0xF9A6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A6
+  { 0xF9A7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A7
+  { 0xF9A8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A8
+  { 0xF9A9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9A9
+  { 0xF9AA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AA
+  { 0xF9AB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AB
+  { 0xF9AC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AC
+  { 0xF9AD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AD
+  { 0xF9AE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AE
+  { 0xF9AF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9AF
+  { 0xF9B0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B0
+  { 0xF9B1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B1
+  { 0xF9B2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B2
+  { 0xF9B3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B3
+  { 0xF9B4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B4
+  { 0xF9B5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B5
+  { 0xF9B6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B6
+  { 0xF9B7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B7
+  { 0xF9B8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B8
+  { 0xF9B9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9B9
+  { 0xF9BA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BA
+  { 0xF9BB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BB
+  { 0xF9BC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BC
+  { 0xF9BD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BD
+  { 0xF9BE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BE
+  { 0xF9BF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9BF
+  { 0xF9C0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C0
+  { 0xF9C1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C1
+  { 0xF9C2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C2
+  { 0xF9C3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C3
+  { 0xF9C4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C4
+  { 0xF9C5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C5
+  { 0xF9C6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C6
+  { 0xF9C7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C7
+  { 0xF9C8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C8
+  { 0xF9C9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9C9
+  { 0xF9CA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CA
+  { 0xF9CB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CB
+  { 0xF9CC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CC
+  { 0xF9CD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CD
+  { 0xF9CE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CE
+  { 0xF9CF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9CF
+  { 0xF9D0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D0
+  { 0xF9D1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D1
+  { 0xF9D2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D2
+  { 0xF9D3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D3
+  { 0xF9D4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D4
+  { 0xF9D5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D5
+  { 0xF9D6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D6
+  { 0xF9D7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D7
+  { 0xF9D8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D8
+  { 0xF9D9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9D9
+  { 0xF9DA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DA
+  { 0xF9DB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DB
+  { 0xF9DC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DC
+  { 0xF9DD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DD
+  { 0xF9DE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DE
+  { 0xF9DF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9DF
+  { 0xF9E0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E0
+  { 0xF9E1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E1
+  { 0xF9E2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E2
+  { 0xF9E3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E3
+  { 0xF9E4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E4
+  { 0xF9E5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E5
+  { 0xF9E6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E6
+  { 0xF9E7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E7
+  { 0xF9E8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E8
+  { 0xF9E9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9E9
+  { 0xF9EA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9EA
+  { 0xF9EB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9EB
+  { 0xF9EC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9EC
+  { 0xF9ED, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9ED
+  { 0xF9EE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9EE
+  { 0xF9EF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9EF
+  { 0xF9F0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F0
+  { 0xF9F1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F1
+  { 0xF9F2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F2
+  { 0xF9F3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F3
+  { 0xF9F4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F4
+  { 0xF9F5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F5
+  { 0xF9F6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F6
+  { 0xF9F7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F7
+  { 0xF9F8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F8
+  { 0xF9F9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9F9
+  { 0xF9FA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FA
+  { 0xF9FB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FB
+  { 0xF9FC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FC
+  { 0xF9FD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FD
+  { 0xF9FE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FE
+  { 0xF9FF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-F9FF
+  { 0xFA00, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA00
+  { 0xFA01, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA01
+  { 0xFA02, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA02
+  { 0xFA03, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA03
+  { 0xFA04, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA04
+  { 0xFA05, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA05
+  { 0xFA06, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA06
+  { 0xFA07, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA07
+  { 0xFA08, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA08
+  { 0xFA09, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA09
+  { 0xFA0A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0A
+  { 0xFA0B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0B
+  { 0xFA0C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0C
+  { 0xFA0D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0D
+  { 0xFA0E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0E
+  { 0xFA0F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA0F
+  { 0xFA10, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA10
+  { 0xFA11, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA11
+  { 0xFA12, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA12
+  { 0xFA13, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA13
+  { 0xFA14, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA14
+  { 0xFA15, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA15
+  { 0xFA16, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA16
+  { 0xFA17, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA17
+  { 0xFA18, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA18
+  { 0xFA19, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA19
+  { 0xFA1A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1A
+  { 0xFA1B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1B
+  { 0xFA1C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1C
+  { 0xFA1D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1D
+  { 0xFA1E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1E
+  { 0xFA1F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA1F
+  { 0xFA20, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA20
+  { 0xFA21, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA21
+  { 0xFA22, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA22
+  { 0xFA23, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA23
+  { 0xFA24, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA24
+  { 0xFA25, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA25
+  { 0xFA26, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA26
+  { 0xFA27, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA27
+  { 0xFA28, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA28
+  { 0xFA29, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA29
+  { 0xFA2A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2A
+  { 0xFA2B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2B
+  { 0xFA2C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2C
+  { 0xFA2D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2D
+  { 0xFA2E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2E
+  { 0xFA2F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA2F
+  { 0xFA30, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA30
+  { 0xFA31, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA31
+  { 0xFA32, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA32
+  { 0xFA33, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA33
+  { 0xFA34, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA34
+  { 0xFA35, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA35
+  { 0xFA36, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA36
+  { 0xFA37, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA37
+  { 0xFA38, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA38
+  { 0xFA39, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA39
+  { 0xFA3A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3A
+  { 0xFA3B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3B
+  { 0xFA3C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3C
+  { 0xFA3D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3D
+  { 0xFA3E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3E
+  { 0xFA3F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA3F
+  { 0xFA40, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA40
+  { 0xFA41, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA41
+  { 0xFA42, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA42
+  { 0xFA43, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA43
+  { 0xFA44, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA44
+  { 0xFA45, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA45
+  { 0xFA46, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA46
+  { 0xFA47, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA47
+  { 0xFA48, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA48
+  { 0xFA49, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA49
+  { 0xFA4A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4A
+  { 0xFA4B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4B
+  { 0xFA4C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4C
+  { 0xFA4D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4D
+  { 0xFA4E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4E
+  { 0xFA4F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA4F
+  { 0xFA50, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA50
+  { 0xFA51, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA51
+  { 0xFA52, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA52
+  { 0xFA53, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA53
+  { 0xFA54, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA54
+  { 0xFA55, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA55
+  { 0xFA56, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA56
+  { 0xFA57, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA57
+  { 0xFA58, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA58
+  { 0xFA59, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA59
+  { 0xFA5A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5A
+  { 0xFA5B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5B
+  { 0xFA5C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5C
+  { 0xFA5D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5D
+  { 0xFA5E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5E
+  { 0xFA5F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA5F
+  { 0xFA60, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA60
+  { 0xFA61, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA61
+  { 0xFA62, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA62
+  { 0xFA63, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA63
+  { 0xFA64, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA64
+  { 0xFA65, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA65
+  { 0xFA66, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA66
+  { 0xFA67, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA67
+  { 0xFA68, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA68
+  { 0xFA69, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA69
+  { 0xFA6A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA6A
+  { 0xFA6B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA6B
+  { 0xFA6C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA6C
+  { 0xFA6D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA6D
+  { 0xFA70, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA70
+  { 0xFA71, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA71
+  { 0xFA72, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA72
+  { 0xFA73, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA73
+  { 0xFA74, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA74
+  { 0xFA75, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA75
+  { 0xFA76, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA76
+  { 0xFA77, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA77
+  { 0xFA78, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA78
+  { 0xFA79, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA79
+  { 0xFA7A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7A
+  { 0xFA7B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7B
+  { 0xFA7C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7C
+  { 0xFA7D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7D
+  { 0xFA7E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7E
+  { 0xFA7F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA7F
+  { 0xFA80, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA80
+  { 0xFA81, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA81
+  { 0xFA82, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA82
+  { 0xFA83, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA83
+  { 0xFA84, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA84
+  { 0xFA85, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA85
+  { 0xFA86, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA86
+  { 0xFA87, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA87
+  { 0xFA88, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA88
+  { 0xFA89, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA89
+  { 0xFA8A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8A
+  { 0xFA8B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8B
+  { 0xFA8C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8C
+  { 0xFA8D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8D
+  { 0xFA8E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8E
+  { 0xFA8F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA8F
+  { 0xFA90, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA90
+  { 0xFA91, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA91
+  { 0xFA92, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA92
+  { 0xFA93, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA93
+  { 0xFA94, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA94
+  { 0xFA95, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA95
+  { 0xFA96, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA96
+  { 0xFA97, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA97
+  { 0xFA98, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA98
+  { 0xFA99, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA99
+  { 0xFA9A, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9A
+  { 0xFA9B, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9B
+  { 0xFA9C, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9C
+  { 0xFA9D, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9D
+  { 0xFA9E, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9E
+  { 0xFA9F, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FA9F
+  { 0xFAA0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA0
+  { 0xFAA1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA1
+  { 0xFAA2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA2
+  { 0xFAA3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA3
+  { 0xFAA4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA4
+  { 0xFAA5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA5
+  { 0xFAA6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA6
+  { 0xFAA7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA7
+  { 0xFAA8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA8
+  { 0xFAA9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAA9
+  { 0xFAAA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAA
+  { 0xFAAB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAB
+  { 0xFAAC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAC
+  { 0xFAAD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAD
+  { 0xFAAE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAE
+  { 0xFAAF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAAF
+  { 0xFAB0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB0
+  { 0xFAB1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB1
+  { 0xFAB2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB2
+  { 0xFAB3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB3
+  { 0xFAB4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB4
+  { 0xFAB5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB5
+  { 0xFAB6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB6
+  { 0xFAB7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB7
+  { 0xFAB8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB8
+  { 0xFAB9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAB9
+  { 0xFABA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABA
+  { 0xFABB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABB
+  { 0xFABC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABC
+  { 0xFABD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABD
+  { 0xFABE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABE
+  { 0xFABF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FABF
+  { 0xFAC0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC0
+  { 0xFAC1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC1
+  { 0xFAC2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC2
+  { 0xFAC3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC3
+  { 0xFAC4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC4
+  { 0xFAC5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC5
+  { 0xFAC6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC6
+  { 0xFAC7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC7
+  { 0xFAC8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC8
+  { 0xFAC9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAC9
+  { 0xFACA, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACA
+  { 0xFACB, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACB
+  { 0xFACC, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACC
+  { 0xFACD, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACD
+  { 0xFACE, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACE
+  { 0xFACF, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FACF
+  { 0xFAD0, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD0
+  { 0xFAD1, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD1
+  { 0xFAD2, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD2
+  { 0xFAD3, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD3
+  { 0xFAD4, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD4
+  { 0xFAD5, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD5
+  { 0xFAD6, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD6
+  { 0xFAD7, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD7
+  { 0xFAD8, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD8
+  { 0xFAD9, BIDI_L   },  // CJK COMPATIBILITY IDEOGRAPH-FAD9
+  { 0xFB00, BIDI_L   },  // LATIN SMALL LIGATURE FF
+  { 0xFB01, BIDI_L   },  // LATIN SMALL LIGATURE FI
+  { 0xFB02, BIDI_L   },  // LATIN SMALL LIGATURE FL
+  { 0xFB03, BIDI_L   },  // LATIN SMALL LIGATURE FFI
+  { 0xFB04, BIDI_L   },  // LATIN SMALL LIGATURE FFL
+  { 0xFB05, BIDI_L   },  // LATIN SMALL LIGATURE LONG S T
+  { 0xFB06, BIDI_L   },  // LATIN SMALL LIGATURE ST
+  { 0xFB13, BIDI_L   },  // ARMENIAN SMALL LIGATURE MEN NOW
+  { 0xFB14, BIDI_L   },  // ARMENIAN SMALL LIGATURE MEN ECH
+  { 0xFB15, BIDI_L   },  // ARMENIAN SMALL LIGATURE MEN INI
+  { 0xFB16, BIDI_L   },  // ARMENIAN SMALL LIGATURE VEW NOW
+  { 0xFB17, BIDI_L   },  // ARMENIAN SMALL LIGATURE MEN XEH
+  { 0xFB1D, BIDI_R   },  // HEBREW LETTER YOD WITH HIRIQ
+  { 0xFB1E, BIDI_NSM },  // HEBREW POINT JUDEO-SPANISH VARIKA
+  { 0xFB1F, BIDI_R   },  // HEBREW LIGATURE YIDDISH YOD YOD PATAH
+  { 0xFB20, BIDI_R   },  // HEBREW LETTER ALTERNATIVE AYIN
+  { 0xFB21, BIDI_R   },  // HEBREW LETTER WIDE ALEF
+  { 0xFB22, BIDI_R   },  // HEBREW LETTER WIDE DALET
+  { 0xFB23, BIDI_R   },  // HEBREW LETTER WIDE HE
+  { 0xFB24, BIDI_R   },  // HEBREW LETTER WIDE KAF
+  { 0xFB25, BIDI_R   },  // HEBREW LETTER WIDE LAMED
+  { 0xFB26, BIDI_R   },  // HEBREW LETTER WIDE FINAL MEM
+  { 0xFB27, BIDI_R   },  // HEBREW LETTER WIDE RESH
+  { 0xFB28, BIDI_R   },  // HEBREW LETTER WIDE TAV
+  { 0xFB29, BIDI_ES  },  // HEBREW LETTER ALTERNATIVE PLUS SIGN
+  { 0xFB2A, BIDI_R   },  // HEBREW LETTER SHIN WITH SHIN DOT
+  { 0xFB2B, BIDI_R   },  // HEBREW LETTER SHIN WITH SIN DOT
+  { 0xFB2C, BIDI_R   },  // HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+  { 0xFB2D, BIDI_R   },  // HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+  { 0xFB2E, BIDI_R   },  // HEBREW LETTER ALEF WITH PATAH
+  { 0xFB2F, BIDI_R   },  // HEBREW LETTER ALEF WITH QAMATS
+  { 0xFB30, BIDI_R   },  // HEBREW LETTER ALEF WITH MAPIQ
+  { 0xFB31, BIDI_R   },  // HEBREW LETTER BET WITH DAGESH
+  { 0xFB32, BIDI_R   },  // HEBREW LETTER GIMEL WITH DAGESH
+  { 0xFB33, BIDI_R   },  // HEBREW LETTER DALET WITH DAGESH
+  { 0xFB34, BIDI_R   },  // HEBREW LETTER HE WITH MAPIQ
+  { 0xFB35, BIDI_R   },  // HEBREW LETTER VAV WITH DAGESH
+  { 0xFB36, BIDI_R   },  // HEBREW LETTER ZAYIN WITH DAGESH
+  { 0xFB38, BIDI_R   },  // HEBREW LETTER TET WITH DAGESH
+  { 0xFB39, BIDI_R   },  // HEBREW LETTER YOD WITH DAGESH
+  { 0xFB3A, BIDI_R   },  // HEBREW LETTER FINAL KAF WITH DAGESH
+  { 0xFB3B, BIDI_R   },  // HEBREW LETTER KAF WITH DAGESH
+  { 0xFB3C, BIDI_R   },  // HEBREW LETTER LAMED WITH DAGESH
+  { 0xFB3E, BIDI_R   },  // HEBREW LETTER MEM WITH DAGESH
+  { 0xFB40, BIDI_R   },  // HEBREW LETTER NUN WITH DAGESH
+  { 0xFB41, BIDI_R   },  // HEBREW LETTER SAMEKH WITH DAGESH
+  { 0xFB43, BIDI_R   },  // HEBREW LETTER FINAL PE WITH DAGESH
+  { 0xFB44, BIDI_R   },  // HEBREW LETTER PE WITH DAGESH
+  { 0xFB46, BIDI_R   },  // HEBREW LETTER TSADI WITH DAGESH
+  { 0xFB47, BIDI_R   },  // HEBREW LETTER QOF WITH DAGESH
+  { 0xFB48, BIDI_R   },  // HEBREW LETTER RESH WITH DAGESH
+  { 0xFB49, BIDI_R   },  // HEBREW LETTER SHIN WITH DAGESH
+  { 0xFB4A, BIDI_R   },  // HEBREW LETTER TAV WITH DAGESH
+  { 0xFB4B, BIDI_R   },  // HEBREW LETTER VAV WITH HOLAM
+  { 0xFB4C, BIDI_R   },  // HEBREW LETTER BET WITH RAFE
+  { 0xFB4D, BIDI_R   },  // HEBREW LETTER KAF WITH RAFE
+  { 0xFB4E, BIDI_R   },  // HEBREW LETTER PE WITH RAFE
+  { 0xFB4F, BIDI_R   },  // HEBREW LIGATURE ALEF LAMED
+  { 0xFB50, BIDI_AL  },  // ARABIC LETTER ALEF WASLA ISOLATED FORM
+  { 0xFB51, BIDI_AL  },  // ARABIC LETTER ALEF WASLA FINAL FORM
+  { 0xFB52, BIDI_AL  },  // ARABIC LETTER BEEH ISOLATED FORM
+  { 0xFB53, BIDI_AL  },  // ARABIC LETTER BEEH FINAL FORM
+  { 0xFB54, BIDI_AL  },  // ARABIC LETTER BEEH INITIAL FORM
+  { 0xFB55, BIDI_AL  },  // ARABIC LETTER BEEH MEDIAL FORM
+  { 0xFB56, BIDI_AL  },  // ARABIC LETTER PEH ISOLATED FORM
+  { 0xFB57, BIDI_AL  },  // ARABIC LETTER PEH FINAL FORM
+  { 0xFB58, BIDI_AL  },  // ARABIC LETTER PEH INITIAL FORM
+  { 0xFB59, BIDI_AL  },  // ARABIC LETTER PEH MEDIAL FORM
+  { 0xFB5A, BIDI_AL  },  // ARABIC LETTER BEHEH ISOLATED FORM
+  { 0xFB5B, BIDI_AL  },  // ARABIC LETTER BEHEH FINAL FORM
+  { 0xFB5C, BIDI_AL  },  // ARABIC LETTER BEHEH INITIAL FORM
+  { 0xFB5D, BIDI_AL  },  // ARABIC LETTER BEHEH MEDIAL FORM
+  { 0xFB5E, BIDI_AL  },  // ARABIC LETTER TTEHEH ISOLATED FORM
+  { 0xFB5F, BIDI_AL  },  // ARABIC LETTER TTEHEH FINAL FORM
+  { 0xFB60, BIDI_AL  },  // ARABIC LETTER TTEHEH INITIAL FORM
+  { 0xFB61, BIDI_AL  },  // ARABIC LETTER TTEHEH MEDIAL FORM
+  { 0xFB62, BIDI_AL  },  // ARABIC LETTER TEHEH ISOLATED FORM
+  { 0xFB63, BIDI_AL  },  // ARABIC LETTER TEHEH FINAL FORM
+  { 0xFB64, BIDI_AL  },  // ARABIC LETTER TEHEH INITIAL FORM
+  { 0xFB65, BIDI_AL  },  // ARABIC LETTER TEHEH MEDIAL FORM
+  { 0xFB66, BIDI_AL  },  // ARABIC LETTER TTEH ISOLATED FORM
+  { 0xFB67, BIDI_AL  },  // ARABIC LETTER TTEH FINAL FORM
+  { 0xFB68, BIDI_AL  },  // ARABIC LETTER TTEH INITIAL FORM
+  { 0xFB69, BIDI_AL  },  // ARABIC LETTER TTEH MEDIAL FORM
+  { 0xFB6A, BIDI_AL  },  // ARABIC LETTER VEH ISOLATED FORM
+  { 0xFB6B, BIDI_AL  },  // ARABIC LETTER VEH FINAL FORM
+  { 0xFB6C, BIDI_AL  },  // ARABIC LETTER VEH INITIAL FORM
+  { 0xFB6D, BIDI_AL  },  // ARABIC LETTER VEH MEDIAL FORM
+  { 0xFB6E, BIDI_AL  },  // ARABIC LETTER PEHEH ISOLATED FORM
+  { 0xFB6F, BIDI_AL  },  // ARABIC LETTER PEHEH FINAL FORM
+  { 0xFB70, BIDI_AL  },  // ARABIC LETTER PEHEH INITIAL FORM
+  { 0xFB71, BIDI_AL  },  // ARABIC LETTER PEHEH MEDIAL FORM
+  { 0xFB72, BIDI_AL  },  // ARABIC LETTER DYEH ISOLATED FORM
+  { 0xFB73, BIDI_AL  },  // ARABIC LETTER DYEH FINAL FORM
+  { 0xFB74, BIDI_AL  },  // ARABIC LETTER DYEH INITIAL FORM
+  { 0xFB75, BIDI_AL  },  // ARABIC LETTER DYEH MEDIAL FORM
+  { 0xFB76, BIDI_AL  },  // ARABIC LETTER NYEH ISOLATED FORM
+  { 0xFB77, BIDI_AL  },  // ARABIC LETTER NYEH FINAL FORM
+  { 0xFB78, BIDI_AL  },  // ARABIC LETTER NYEH INITIAL FORM
+  { 0xFB79, BIDI_AL  },  // ARABIC LETTER NYEH MEDIAL FORM
+  { 0xFB7A, BIDI_AL  },  // ARABIC LETTER TCHEH ISOLATED FORM
+  { 0xFB7B, BIDI_AL  },  // ARABIC LETTER TCHEH FINAL FORM
+  { 0xFB7C, BIDI_AL  },  // ARABIC LETTER TCHEH INITIAL FORM
+  { 0xFB7D, BIDI_AL  },  // ARABIC LETTER TCHEH MEDIAL FORM
+  { 0xFB7E, BIDI_AL  },  // ARABIC LETTER TCHEHEH ISOLATED FORM
+  { 0xFB7F, BIDI_AL  },  // ARABIC LETTER TCHEHEH FINAL FORM
+  { 0xFB80, BIDI_AL  },  // ARABIC LETTER TCHEHEH INITIAL FORM
+  { 0xFB81, BIDI_AL  },  // ARABIC LETTER TCHEHEH MEDIAL FORM
+  { 0xFB82, BIDI_AL  },  // ARABIC LETTER DDAHAL ISOLATED FORM
+  { 0xFB83, BIDI_AL  },  // ARABIC LETTER DDAHAL FINAL FORM
+  { 0xFB84, BIDI_AL  },  // ARABIC LETTER DAHAL ISOLATED FORM
+  { 0xFB85, BIDI_AL  },  // ARABIC LETTER DAHAL FINAL FORM
+  { 0xFB86, BIDI_AL  },  // ARABIC LETTER DUL ISOLATED FORM
+  { 0xFB87, BIDI_AL  },  // ARABIC LETTER DUL FINAL FORM
+  { 0xFB88, BIDI_AL  },  // ARABIC LETTER DDAL ISOLATED FORM
+  { 0xFB89, BIDI_AL  },  // ARABIC LETTER DDAL FINAL FORM
+  { 0xFB8A, BIDI_AL  },  // ARABIC LETTER JEH ISOLATED FORM
+  { 0xFB8B, BIDI_AL  },  // ARABIC LETTER JEH FINAL FORM
+  { 0xFB8C, BIDI_AL  },  // ARABIC LETTER RREH ISOLATED FORM
+  { 0xFB8D, BIDI_AL  },  // ARABIC LETTER RREH FINAL FORM
+  { 0xFB8E, BIDI_AL  },  // ARABIC LETTER KEHEH ISOLATED FORM
+  { 0xFB8F, BIDI_AL  },  // ARABIC LETTER KEHEH FINAL FORM
+  { 0xFB90, BIDI_AL  },  // ARABIC LETTER KEHEH INITIAL FORM
+  { 0xFB91, BIDI_AL  },  // ARABIC LETTER KEHEH MEDIAL FORM
+  { 0xFB92, BIDI_AL  },  // ARABIC LETTER GAF ISOLATED FORM
+  { 0xFB93, BIDI_AL  },  // ARABIC LETTER GAF FINAL FORM
+  { 0xFB94, BIDI_AL  },  // ARABIC LETTER GAF INITIAL FORM
+  { 0xFB95, BIDI_AL  },  // ARABIC LETTER GAF MEDIAL FORM
+  { 0xFB96, BIDI_AL  },  // ARABIC LETTER GUEH ISOLATED FORM
+  { 0xFB97, BIDI_AL  },  // ARABIC LETTER GUEH FINAL FORM
+  { 0xFB98, BIDI_AL  },  // ARABIC LETTER GUEH INITIAL FORM
+  { 0xFB99, BIDI_AL  },  // ARABIC LETTER GUEH MEDIAL FORM
+  { 0xFB9A, BIDI_AL  },  // ARABIC LETTER NGOEH ISOLATED FORM
+  { 0xFB9B, BIDI_AL  },  // ARABIC LETTER NGOEH FINAL FORM
+  { 0xFB9C, BIDI_AL  },  // ARABIC LETTER NGOEH INITIAL FORM
+  { 0xFB9D, BIDI_AL  },  // ARABIC LETTER NGOEH MEDIAL FORM
+  { 0xFB9E, BIDI_AL  },  // ARABIC LETTER NOON GHUNNA ISOLATED FORM
+  { 0xFB9F, BIDI_AL  },  // ARABIC LETTER NOON GHUNNA FINAL FORM
+  { 0xFBA0, BIDI_AL  },  // ARABIC LETTER RNOON ISOLATED FORM
+  { 0xFBA1, BIDI_AL  },  // ARABIC LETTER RNOON FINAL FORM
+  { 0xFBA2, BIDI_AL  },  // ARABIC LETTER RNOON INITIAL FORM
+  { 0xFBA3, BIDI_AL  },  // ARABIC LETTER RNOON MEDIAL FORM
+  { 0xFBA4, BIDI_AL  },  // ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+  { 0xFBA5, BIDI_AL  },  // ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+  { 0xFBA6, BIDI_AL  },  // ARABIC LETTER HEH GOAL ISOLATED FORM
+  { 0xFBA7, BIDI_AL  },  // ARABIC LETTER HEH GOAL FINAL FORM
+  { 0xFBA8, BIDI_AL  },  // ARABIC LETTER HEH GOAL INITIAL FORM
+  { 0xFBA9, BIDI_AL  },  // ARABIC LETTER HEH GOAL MEDIAL FORM
+  { 0xFBAA, BIDI_AL  },  // ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+  { 0xFBAB, BIDI_AL  },  // ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+  { 0xFBAC, BIDI_AL  },  // ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+  { 0xFBAD, BIDI_AL  },  // ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+  { 0xFBAE, BIDI_AL  },  // ARABIC LETTER YEH BARREE ISOLATED FORM
+  { 0xFBAF, BIDI_AL  },  // ARABIC LETTER YEH BARREE FINAL FORM
+  { 0xFBB0, BIDI_AL  },  // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFBB1, BIDI_AL  },  // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+  { 0xFBB2, BIDI_AL  },  // ARABIC SYMBOL DOT ABOVE
+  { 0xFBB3, BIDI_AL  },  // ARABIC SYMBOL DOT BELOW
+  { 0xFBB4, BIDI_AL  },  // ARABIC SYMBOL TWO DOTS ABOVE
+  { 0xFBB5, BIDI_AL  },  // ARABIC SYMBOL TWO DOTS BELOW
+  { 0xFBB6, BIDI_AL  },  // ARABIC SYMBOL THREE DOTS ABOVE
+  { 0xFBB7, BIDI_AL  },  // ARABIC SYMBOL THREE DOTS BELOW
+  { 0xFBB8, BIDI_AL  },  // ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE
+  { 0xFBB9, BIDI_AL  },  // ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW
+  { 0xFBBA, BIDI_AL  },  // ARABIC SYMBOL FOUR DOTS ABOVE
+  { 0xFBBB, BIDI_AL  },  // ARABIC SYMBOL FOUR DOTS BELOW
+  { 0xFBBC, BIDI_AL  },  // ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW
+  { 0xFBBD, BIDI_AL  },  // ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE
+  { 0xFBBE, BIDI_AL  },  // ARABIC SYMBOL TWO DOTS VERTICALLY BELOW
+  { 0xFBBF, BIDI_AL  },  // ARABIC SYMBOL RING
+  { 0xFBC0, BIDI_AL  },  // ARABIC SYMBOL SMALL TAH ABOVE
+  { 0xFBC1, BIDI_AL  },  // ARABIC SYMBOL SMALL TAH BELOW
+  { 0xFBD3, BIDI_AL  },  // ARABIC LETTER NG ISOLATED FORM
+  { 0xFBD4, BIDI_AL  },  // ARABIC LETTER NG FINAL FORM
+  { 0xFBD5, BIDI_AL  },  // ARABIC LETTER NG INITIAL FORM
+  { 0xFBD6, BIDI_AL  },  // ARABIC LETTER NG MEDIAL FORM
+  { 0xFBD7, BIDI_AL  },  // ARABIC LETTER U ISOLATED FORM
+  { 0xFBD8, BIDI_AL  },  // ARABIC LETTER U FINAL FORM
+  { 0xFBD9, BIDI_AL  },  // ARABIC LETTER OE ISOLATED FORM
+  { 0xFBDA, BIDI_AL  },  // ARABIC LETTER OE FINAL FORM
+  { 0xFBDB, BIDI_AL  },  // ARABIC LETTER YU ISOLATED FORM
+  { 0xFBDC, BIDI_AL  },  // ARABIC LETTER YU FINAL FORM
+  { 0xFBDD, BIDI_AL  },  // ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFBDE, BIDI_AL  },  // ARABIC LETTER VE ISOLATED FORM
+  { 0xFBDF, BIDI_AL  },  // ARABIC LETTER VE FINAL FORM
+  { 0xFBE0, BIDI_AL  },  // ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+  { 0xFBE1, BIDI_AL  },  // ARABIC LETTER KIRGHIZ OE FINAL FORM
+  { 0xFBE2, BIDI_AL  },  // ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+  { 0xFBE3, BIDI_AL  },  // ARABIC LETTER KIRGHIZ YU FINAL FORM
+  { 0xFBE4, BIDI_AL  },  // ARABIC LETTER E ISOLATED FORM
+  { 0xFBE5, BIDI_AL  },  // ARABIC LETTER E FINAL FORM
+  { 0xFBE6, BIDI_AL  },  // ARABIC LETTER E INITIAL FORM
+  { 0xFBE7, BIDI_AL  },  // ARABIC LETTER E MEDIAL FORM
+  { 0xFBE8, BIDI_AL  },  // ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+  { 0xFBE9, BIDI_AL  },  // ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+  { 0xFBEA, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+  { 0xFBEB, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+  { 0xFBEC, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+  { 0xFBED, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+  { 0xFBEE, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+  { 0xFBEF, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+  { 0xFBF0, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+  { 0xFBF1, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+  { 0xFBF2, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+  { 0xFBF3, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+  { 0xFBF4, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+  { 0xFBF5, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+  { 0xFBF6, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+  { 0xFBF7, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+  { 0xFBF8, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+  { 0xFBF9, BIDI_AL  },  // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFBFA, BIDI_AL  },  // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+  { 0xFBFB, BIDI_AL  },  // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+  { 0xFBFC, BIDI_AL  },  // ARABIC LETTER FARSI YEH ISOLATED FORM
+  { 0xFBFD, BIDI_AL  },  // ARABIC LETTER FARSI YEH FINAL FORM
+  { 0xFBFE, BIDI_AL  },  // ARABIC LETTER FARSI YEH INITIAL FORM
+  { 0xFBFF, BIDI_AL  },  // ARABIC LETTER FARSI YEH MEDIAL FORM
+  { 0xFC00, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+  { 0xFC01, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+  { 0xFC02, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+  { 0xFC03, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC04, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+  { 0xFC05, BIDI_AL  },  // ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+  { 0xFC06, BIDI_AL  },  // ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+  { 0xFC07, BIDI_AL  },  // ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+  { 0xFC08, BIDI_AL  },  // ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+  { 0xFC09, BIDI_AL  },  // ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC0A, BIDI_AL  },  // ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+  { 0xFC0B, BIDI_AL  },  // ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+  { 0xFC0C, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+  { 0xFC0D, BIDI_AL  },  // ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+  { 0xFC0E, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+  { 0xFC0F, BIDI_AL  },  // ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC10, BIDI_AL  },  // ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+  { 0xFC11, BIDI_AL  },  // ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+  { 0xFC12, BIDI_AL  },  // ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+  { 0xFC13, BIDI_AL  },  // ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC14, BIDI_AL  },  // ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+  { 0xFC15, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+  { 0xFC16, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+  { 0xFC17, BIDI_AL  },  // ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+  { 0xFC18, BIDI_AL  },  // ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+  { 0xFC19, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+  { 0xFC1A, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+  { 0xFC1B, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+  { 0xFC1C, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+  { 0xFC1D, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+  { 0xFC1E, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+  { 0xFC1F, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+  { 0xFC20, BIDI_AL  },  // ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+  { 0xFC21, BIDI_AL  },  // ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+  { 0xFC22, BIDI_AL  },  // ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+  { 0xFC23, BIDI_AL  },  // ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+  { 0xFC24, BIDI_AL  },  // ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+  { 0xFC25, BIDI_AL  },  // ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+  { 0xFC26, BIDI_AL  },  // ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+  { 0xFC27, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+  { 0xFC28, BIDI_AL  },  // ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+  { 0xFC29, BIDI_AL  },  // ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+  { 0xFC2A, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+  { 0xFC2B, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+  { 0xFC2C, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+  { 0xFC2D, BIDI_AL  },  // ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+  { 0xFC2E, BIDI_AL  },  // ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+  { 0xFC2F, BIDI_AL  },  // ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+  { 0xFC30, BIDI_AL  },  // ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+  { 0xFC31, BIDI_AL  },  // ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC32, BIDI_AL  },  // ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+  { 0xFC33, BIDI_AL  },  // ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+  { 0xFC34, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+  { 0xFC35, BIDI_AL  },  // ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC36, BIDI_AL  },  // ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+  { 0xFC37, BIDI_AL  },  // ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+  { 0xFC38, BIDI_AL  },  // ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+  { 0xFC39, BIDI_AL  },  // ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+  { 0xFC3A, BIDI_AL  },  // ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+  { 0xFC3B, BIDI_AL  },  // ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+  { 0xFC3C, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+  { 0xFC3D, BIDI_AL  },  // ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC3E, BIDI_AL  },  // ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+  { 0xFC3F, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+  { 0xFC40, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+  { 0xFC41, BIDI_AL  },  // ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+  { 0xFC42, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+  { 0xFC43, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC44, BIDI_AL  },  // ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+  { 0xFC45, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+  { 0xFC46, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+  { 0xFC47, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+  { 0xFC48, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+  { 0xFC49, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC4A, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+  { 0xFC4B, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+  { 0xFC4C, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+  { 0xFC4D, BIDI_AL  },  // ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+  { 0xFC4E, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+  { 0xFC4F, BIDI_AL  },  // ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC50, BIDI_AL  },  // ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+  { 0xFC51, BIDI_AL  },  // ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+  { 0xFC52, BIDI_AL  },  // ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+  { 0xFC53, BIDI_AL  },  // ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC54, BIDI_AL  },  // ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+  { 0xFC55, BIDI_AL  },  // ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+  { 0xFC56, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+  { 0xFC57, BIDI_AL  },  // ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+  { 0xFC58, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+  { 0xFC59, BIDI_AL  },  // ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFC5A, BIDI_AL  },  // ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+  { 0xFC5B, BIDI_AL  },  // ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+  { 0xFC5C, BIDI_AL  },  // ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+  { 0xFC5D, BIDI_AL  },  // ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+  { 0xFC5E, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+  { 0xFC5F, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+  { 0xFC60, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+  { 0xFC61, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+  { 0xFC62, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+  { 0xFC63, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+  { 0xFC64, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+  { 0xFC65, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+  { 0xFC66, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+  { 0xFC67, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+  { 0xFC68, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+  { 0xFC69, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+  { 0xFC6A, BIDI_AL  },  // ARABIC LIGATURE BEH WITH REH FINAL FORM
+  { 0xFC6B, BIDI_AL  },  // ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+  { 0xFC6C, BIDI_AL  },  // ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+  { 0xFC6D, BIDI_AL  },  // ARABIC LIGATURE BEH WITH NOON FINAL FORM
+  { 0xFC6E, BIDI_AL  },  // ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+  { 0xFC6F, BIDI_AL  },  // ARABIC LIGATURE BEH WITH YEH FINAL FORM
+  { 0xFC70, BIDI_AL  },  // ARABIC LIGATURE TEH WITH REH FINAL FORM
+  { 0xFC71, BIDI_AL  },  // ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+  { 0xFC72, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+  { 0xFC73, BIDI_AL  },  // ARABIC LIGATURE TEH WITH NOON FINAL FORM
+  { 0xFC74, BIDI_AL  },  // ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+  { 0xFC75, BIDI_AL  },  // ARABIC LIGATURE TEH WITH YEH FINAL FORM
+  { 0xFC76, BIDI_AL  },  // ARABIC LIGATURE THEH WITH REH FINAL FORM
+  { 0xFC77, BIDI_AL  },  // ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+  { 0xFC78, BIDI_AL  },  // ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+  { 0xFC79, BIDI_AL  },  // ARABIC LIGATURE THEH WITH NOON FINAL FORM
+  { 0xFC7A, BIDI_AL  },  // ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+  { 0xFC7B, BIDI_AL  },  // ARABIC LIGATURE THEH WITH YEH FINAL FORM
+  { 0xFC7C, BIDI_AL  },  // ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+  { 0xFC7D, BIDI_AL  },  // ARABIC LIGATURE FEH WITH YEH FINAL FORM
+  { 0xFC7E, BIDI_AL  },  // ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+  { 0xFC7F, BIDI_AL  },  // ARABIC LIGATURE QAF WITH YEH FINAL FORM
+  { 0xFC80, BIDI_AL  },  // ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+  { 0xFC81, BIDI_AL  },  // ARABIC LIGATURE KAF WITH LAM FINAL FORM
+  { 0xFC82, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+  { 0xFC83, BIDI_AL  },  // ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+  { 0xFC84, BIDI_AL  },  // ARABIC LIGATURE KAF WITH YEH FINAL FORM
+  { 0xFC85, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+  { 0xFC86, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+  { 0xFC87, BIDI_AL  },  // ARABIC LIGATURE LAM WITH YEH FINAL FORM
+  { 0xFC88, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+  { 0xFC89, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+  { 0xFC8A, BIDI_AL  },  // ARABIC LIGATURE NOON WITH REH FINAL FORM
+  { 0xFC8B, BIDI_AL  },  // ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+  { 0xFC8C, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+  { 0xFC8D, BIDI_AL  },  // ARABIC LIGATURE NOON WITH NOON FINAL FORM
+  { 0xFC8E, BIDI_AL  },  // ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+  { 0xFC8F, BIDI_AL  },  // ARABIC LIGATURE NOON WITH YEH FINAL FORM
+  { 0xFC90, BIDI_AL  },  // ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+  { 0xFC91, BIDI_AL  },  // ARABIC LIGATURE YEH WITH REH FINAL FORM
+  { 0xFC92, BIDI_AL  },  // ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+  { 0xFC93, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+  { 0xFC94, BIDI_AL  },  // ARABIC LIGATURE YEH WITH NOON FINAL FORM
+  { 0xFC95, BIDI_AL  },  // ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+  { 0xFC96, BIDI_AL  },  // ARABIC LIGATURE YEH WITH YEH FINAL FORM
+  { 0xFC97, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+  { 0xFC98, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+  { 0xFC99, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+  { 0xFC9A, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+  { 0xFC9B, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+  { 0xFC9C, BIDI_AL  },  // ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+  { 0xFC9D, BIDI_AL  },  // ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+  { 0xFC9E, BIDI_AL  },  // ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+  { 0xFC9F, BIDI_AL  },  // ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+  { 0xFCA0, BIDI_AL  },  // ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+  { 0xFCA1, BIDI_AL  },  // ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+  { 0xFCA2, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+  { 0xFCA3, BIDI_AL  },  // ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+  { 0xFCA4, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+  { 0xFCA5, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+  { 0xFCA6, BIDI_AL  },  // ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+  { 0xFCA7, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+  { 0xFCA8, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+  { 0xFCA9, BIDI_AL  },  // ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+  { 0xFCAA, BIDI_AL  },  // ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+  { 0xFCAB, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+  { 0xFCAC, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+  { 0xFCAD, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+  { 0xFCAE, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+  { 0xFCAF, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+  { 0xFCB0, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+  { 0xFCB1, BIDI_AL  },  // ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+  { 0xFCB2, BIDI_AL  },  // ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+  { 0xFCB3, BIDI_AL  },  // ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+  { 0xFCB4, BIDI_AL  },  // ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+  { 0xFCB5, BIDI_AL  },  // ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+  { 0xFCB6, BIDI_AL  },  // ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+  { 0xFCB7, BIDI_AL  },  // ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+  { 0xFCB8, BIDI_AL  },  // ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+  { 0xFCB9, BIDI_AL  },  // ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+  { 0xFCBA, BIDI_AL  },  // ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+  { 0xFCBB, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+  { 0xFCBC, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+  { 0xFCBD, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+  { 0xFCBE, BIDI_AL  },  // ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+  { 0xFCBF, BIDI_AL  },  // ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+  { 0xFCC0, BIDI_AL  },  // ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+  { 0xFCC1, BIDI_AL  },  // ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+  { 0xFCC2, BIDI_AL  },  // ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+  { 0xFCC3, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+  { 0xFCC4, BIDI_AL  },  // ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+  { 0xFCC5, BIDI_AL  },  // ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+  { 0xFCC6, BIDI_AL  },  // ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+  { 0xFCC7, BIDI_AL  },  // ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+  { 0xFCC8, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+  { 0xFCC9, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+  { 0xFCCA, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+  { 0xFCCB, BIDI_AL  },  // ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+  { 0xFCCC, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+  { 0xFCCD, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+  { 0xFCCE, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+  { 0xFCCF, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+  { 0xFCD0, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+  { 0xFCD1, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+  { 0xFCD2, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+  { 0xFCD3, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+  { 0xFCD4, BIDI_AL  },  // ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+  { 0xFCD5, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+  { 0xFCD6, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+  { 0xFCD7, BIDI_AL  },  // ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+  { 0xFCD8, BIDI_AL  },  // ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+  { 0xFCD9, BIDI_AL  },  // ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+  { 0xFCDA, BIDI_AL  },  // ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+  { 0xFCDB, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+  { 0xFCDC, BIDI_AL  },  // ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+  { 0xFCDD, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+  { 0xFCDE, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+  { 0xFCDF, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+  { 0xFCE0, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+  { 0xFCE1, BIDI_AL  },  // ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+  { 0xFCE2, BIDI_AL  },  // ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+  { 0xFCE3, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+  { 0xFCE4, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+  { 0xFCE5, BIDI_AL  },  // ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+  { 0xFCE6, BIDI_AL  },  // ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+  { 0xFCE7, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+  { 0xFCE8, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+  { 0xFCE9, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+  { 0xFCEA, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+  { 0xFCEB, BIDI_AL  },  // ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+  { 0xFCEC, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+  { 0xFCED, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+  { 0xFCEE, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+  { 0xFCEF, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+  { 0xFCF0, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+  { 0xFCF1, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+  { 0xFCF2, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+  { 0xFCF3, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+  { 0xFCF4, BIDI_AL  },  // ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+  { 0xFCF5, BIDI_AL  },  // ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFCF6, BIDI_AL  },  // ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+  { 0xFCF7, BIDI_AL  },  // ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFCF8, BIDI_AL  },  // ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+  { 0xFCF9, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFCFA, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+  { 0xFCFB, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFCFC, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+  { 0xFCFD, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFCFE, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+  { 0xFCFF, BIDI_AL  },  // ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFD00, BIDI_AL  },  // ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+  { 0xFD01, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFD02, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+  { 0xFD03, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFD04, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+  { 0xFD05, BIDI_AL  },  // ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFD06, BIDI_AL  },  // ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+  { 0xFD07, BIDI_AL  },  // ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+  { 0xFD08, BIDI_AL  },  // ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+  { 0xFD09, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+  { 0xFD0A, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+  { 0xFD0B, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+  { 0xFD0C, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+  { 0xFD0D, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+  { 0xFD0E, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+  { 0xFD0F, BIDI_AL  },  // ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+  { 0xFD10, BIDI_AL  },  // ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+  { 0xFD11, BIDI_AL  },  // ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD12, BIDI_AL  },  // ARABIC LIGATURE TAH WITH YEH FINAL FORM
+  { 0xFD13, BIDI_AL  },  // ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+  { 0xFD14, BIDI_AL  },  // ARABIC LIGATURE AIN WITH YEH FINAL FORM
+  { 0xFD15, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+  { 0xFD16, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+  { 0xFD17, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+  { 0xFD18, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+  { 0xFD19, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+  { 0xFD1A, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+  { 0xFD1B, BIDI_AL  },  // ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD1C, BIDI_AL  },  // ARABIC LIGATURE HAH WITH YEH FINAL FORM
+  { 0xFD1D, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD1E, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+  { 0xFD1F, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD20, BIDI_AL  },  // ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+  { 0xFD21, BIDI_AL  },  // ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+  { 0xFD22, BIDI_AL  },  // ARABIC LIGATURE SAD WITH YEH FINAL FORM
+  { 0xFD23, BIDI_AL  },  // ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+  { 0xFD24, BIDI_AL  },  // ARABIC LIGATURE DAD WITH YEH FINAL FORM
+  { 0xFD25, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+  { 0xFD26, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+  { 0xFD27, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+  { 0xFD28, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+  { 0xFD29, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+  { 0xFD2A, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH REH FINAL FORM
+  { 0xFD2B, BIDI_AL  },  // ARABIC LIGATURE SAD WITH REH FINAL FORM
+  { 0xFD2C, BIDI_AL  },  // ARABIC LIGATURE DAD WITH REH FINAL FORM
+  { 0xFD2D, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+  { 0xFD2E, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+  { 0xFD2F, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+  { 0xFD30, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+  { 0xFD31, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+  { 0xFD32, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+  { 0xFD33, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+  { 0xFD34, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+  { 0xFD35, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+  { 0xFD36, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+  { 0xFD37, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+  { 0xFD38, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+  { 0xFD39, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+  { 0xFD3A, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+  { 0xFD3B, BIDI_AL  },  // ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+  { 0xFD3C, BIDI_AL  },  // ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+  { 0xFD3D, BIDI_AL  },  // ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+  { 0xFD3E, BIDI_ON  },  // ORNATE LEFT PARENTHESIS
+  { 0xFD3F, BIDI_ON  },  // ORNATE RIGHT PARENTHESIS
+  { 0xFD50, BIDI_AL  },  // ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+  { 0xFD51, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+  { 0xFD52, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+  { 0xFD53, BIDI_AL  },  // ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+  { 0xFD54, BIDI_AL  },  // ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+  { 0xFD55, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+  { 0xFD56, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+  { 0xFD57, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+  { 0xFD58, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+  { 0xFD59, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+  { 0xFD5A, BIDI_AL  },  // ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+  { 0xFD5B, BIDI_AL  },  // ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD5C, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+  { 0xFD5D, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+  { 0xFD5E, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD5F, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+  { 0xFD60, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+  { 0xFD61, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+  { 0xFD62, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD63, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD64, BIDI_AL  },  // ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+  { 0xFD65, BIDI_AL  },  // ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+  { 0xFD66, BIDI_AL  },  // ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD67, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+  { 0xFD68, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+  { 0xFD69, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+  { 0xFD6A, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+  { 0xFD6B, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+  { 0xFD6C, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD6D, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD6E, BIDI_AL  },  // ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD6F, BIDI_AL  },  // ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+  { 0xFD70, BIDI_AL  },  // ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+  { 0xFD71, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+  { 0xFD72, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+  { 0xFD73, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD74, BIDI_AL  },  // ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+  { 0xFD75, BIDI_AL  },  // ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+  { 0xFD76, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD77, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD78, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD79, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD7A, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+  { 0xFD7B, BIDI_AL  },  // ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD7C, BIDI_AL  },  // ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+  { 0xFD7D, BIDI_AL  },  // ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+  { 0xFD7E, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+  { 0xFD7F, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD80, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+  { 0xFD81, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+  { 0xFD82, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD83, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+  { 0xFD84, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+  { 0xFD85, BIDI_AL  },  // ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+  { 0xFD86, BIDI_AL  },  // ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+  { 0xFD87, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+  { 0xFD88, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+  { 0xFD89, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+  { 0xFD8A, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+  { 0xFD8B, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+  { 0xFD8C, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+  { 0xFD8D, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+  { 0xFD8E, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+  { 0xFD8F, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+  { 0xFD92, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+  { 0xFD93, BIDI_AL  },  // ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+  { 0xFD94, BIDI_AL  },  // ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD95, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+  { 0xFD96, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFD97, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+  { 0xFD98, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+  { 0xFD99, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD9A, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+  { 0xFD9B, BIDI_AL  },  // ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFD9C, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+  { 0xFD9D, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFD9E, BIDI_AL  },  // ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+  { 0xFD9F, BIDI_AL  },  // ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+  { 0xFDA0, BIDI_AL  },  // ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA1, BIDI_AL  },  // ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+  { 0xFDA2, BIDI_AL  },  // ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA3, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+  { 0xFDA4, BIDI_AL  },  // ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA5, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+  { 0xFDA6, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA7, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA8, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+  { 0xFDA9, BIDI_AL  },  // ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+  { 0xFDAA, BIDI_AL  },  // ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+  { 0xFDAB, BIDI_AL  },  // ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+  { 0xFDAC, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+  { 0xFDAD, BIDI_AL  },  // ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+  { 0xFDAE, BIDI_AL  },  // ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+  { 0xFDAF, BIDI_AL  },  // ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+  { 0xFDB0, BIDI_AL  },  // ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+  { 0xFDB1, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+  { 0xFDB2, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+  { 0xFDB3, BIDI_AL  },  // ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+  { 0xFDB4, BIDI_AL  },  // ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+  { 0xFDB5, BIDI_AL  },  // ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+  { 0xFDB6, BIDI_AL  },  // ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+  { 0xFDB7, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+  { 0xFDB8, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+  { 0xFDB9, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+  { 0xFDBA, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+  { 0xFDBB, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+  { 0xFDBC, BIDI_AL  },  // ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+  { 0xFDBD, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+  { 0xFDBE, BIDI_AL  },  // ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+  { 0xFDBF, BIDI_AL  },  // ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+  { 0xFDC0, BIDI_AL  },  // ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+  { 0xFDC1, BIDI_AL  },  // ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+  { 0xFDC2, BIDI_AL  },  // ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+  { 0xFDC3, BIDI_AL  },  // ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFDC4, BIDI_AL  },  // ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+  { 0xFDC5, BIDI_AL  },  // ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+  { 0xFDC6, BIDI_AL  },  // ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+  { 0xFDC7, BIDI_AL  },  // ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+  { 0xFDF0, BIDI_AL  },  // ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+  { 0xFDF1, BIDI_AL  },  // ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+  { 0xFDF2, BIDI_AL  },  // ARABIC LIGATURE ALLAH ISOLATED FORM
+  { 0xFDF3, BIDI_AL  },  // ARABIC LIGATURE AKBAR ISOLATED FORM
+  { 0xFDF4, BIDI_AL  },  // ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+  { 0xFDF5, BIDI_AL  },  // ARABIC LIGATURE SALAM ISOLATED FORM
+  { 0xFDF6, BIDI_AL  },  // ARABIC LIGATURE RASOUL ISOLATED FORM
+  { 0xFDF7, BIDI_AL  },  // ARABIC LIGATURE ALAYHE ISOLATED FORM
+  { 0xFDF8, BIDI_AL  },  // ARABIC LIGATURE WASALLAM ISOLATED FORM
+  { 0xFDF9, BIDI_AL  },  // ARABIC LIGATURE SALLA ISOLATED FORM
+  { 0xFDFA, BIDI_AL  },  // ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+  { 0xFDFB, BIDI_AL  },  // ARABIC LIGATURE JALLAJALALOUHOU
+  { 0xFDFC, BIDI_AL  },  // RIAL SIGN
+  { 0xFDFD, BIDI_ON  },  // ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+  { 0xFE00, BIDI_NSM },  // VARIATION SELECTOR-1
+  { 0xFE01, BIDI_NSM },  // VARIATION SELECTOR-2
+  { 0xFE02, BIDI_NSM },  // VARIATION SELECTOR-3
+  { 0xFE03, BIDI_NSM },  // VARIATION SELECTOR-4
+  { 0xFE04, BIDI_NSM },  // VARIATION SELECTOR-5
+  { 0xFE05, BIDI_NSM },  // VARIATION SELECTOR-6
+  { 0xFE06, BIDI_NSM },  // VARIATION SELECTOR-7
+  { 0xFE07, BIDI_NSM },  // VARIATION SELECTOR-8
+  { 0xFE08, BIDI_NSM },  // VARIATION SELECTOR-9
+  { 0xFE09, BIDI_NSM },  // VARIATION SELECTOR-10
+  { 0xFE0A, BIDI_NSM },  // VARIATION SELECTOR-11
+  { 0xFE0B, BIDI_NSM },  // VARIATION SELECTOR-12
+  { 0xFE0C, BIDI_NSM },  // VARIATION SELECTOR-13
+  { 0xFE0D, BIDI_NSM },  // VARIATION SELECTOR-14
+  { 0xFE0E, BIDI_NSM },  // VARIATION SELECTOR-15
+  { 0xFE0F, BIDI_NSM },  // VARIATION SELECTOR-16
+  { 0xFE10, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL COMMA
+  { 0xFE11, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+  { 0xFE12, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+  { 0xFE13, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL COLON
+  { 0xFE14, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL SEMICOLON
+  { 0xFE15, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+  { 0xFE16, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL QUESTION MARK
+  { 0xFE17, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+  { 0xFE18, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+  { 0xFE19, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+  { 0xFE20, BIDI_NSM },  // COMBINING LIGATURE LEFT HALF
+  { 0xFE21, BIDI_NSM },  // COMBINING LIGATURE RIGHT HALF
+  { 0xFE22, BIDI_NSM },  // COMBINING DOUBLE TILDE LEFT HALF
+  { 0xFE23, BIDI_NSM },  // COMBINING DOUBLE TILDE RIGHT HALF
+  { 0xFE24, BIDI_NSM },  // COMBINING MACRON LEFT HALF
+  { 0xFE25, BIDI_NSM },  // COMBINING MACRON RIGHT HALF
+  { 0xFE26, BIDI_NSM },  // COMBINING CONJOINING MACRON
+  { 0xFE27, BIDI_NSM },  // COMBINING LIGATURE LEFT HALF BELOW
+  { 0xFE28, BIDI_NSM },  // COMBINING LIGATURE RIGHT HALF BELOW
+  { 0xFE29, BIDI_NSM },  // COMBINING TILDE LEFT HALF BELOW
+  { 0xFE2A, BIDI_NSM },  // COMBINING TILDE RIGHT HALF BELOW
+  { 0xFE2B, BIDI_NSM },  // COMBINING MACRON LEFT HALF BELOW
+  { 0xFE2C, BIDI_NSM },  // COMBINING MACRON RIGHT HALF BELOW
+  { 0xFE2D, BIDI_NSM },  // COMBINING CONJOINING MACRON BELOW
+  { 0xFE2E, BIDI_NSM },  // COMBINING CYRILLIC TITLO LEFT HALF
+  { 0xFE2F, BIDI_NSM },  // COMBINING CYRILLIC TITLO RIGHT HALF
+  { 0xFE30, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+  { 0xFE31, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL EM DASH
+  { 0xFE32, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL EN DASH
+  { 0xFE33, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LOW LINE
+  { 0xFE34, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+  { 0xFE35, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+  { 0xFE36, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+  { 0xFE37, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+  { 0xFE38, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+  { 0xFE39, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+  { 0xFE3A, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+  { 0xFE3B, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+  { 0xFE3C, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+  { 0xFE3D, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+  { 0xFE3E, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+  { 0xFE3F, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+  { 0xFE40, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+  { 0xFE41, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+  { 0xFE42, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+  { 0xFE43, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+  { 0xFE44, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+  { 0xFE45, BIDI_ON  },  // SESAME DOT
+  { 0xFE46, BIDI_ON  },  // WHITE SESAME DOT
+  { 0xFE47, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+  { 0xFE48, BIDI_ON  },  // PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+  { 0xFE49, BIDI_ON  },  // DASHED OVERLINE
+  { 0xFE4A, BIDI_ON  },  // CENTRELINE OVERLINE
+  { 0xFE4B, BIDI_ON  },  // WAVY OVERLINE
+  { 0xFE4C, BIDI_ON  },  // DOUBLE WAVY OVERLINE
+  { 0xFE4D, BIDI_ON  },  // DASHED LOW LINE
+  { 0xFE4E, BIDI_ON  },  // CENTRELINE LOW LINE
+  { 0xFE4F, BIDI_ON  },  // WAVY LOW LINE
+  { 0xFE50, BIDI_CS  },  // SMALL COMMA
+  { 0xFE51, BIDI_ON  },  // SMALL IDEOGRAPHIC COMMA
+  { 0xFE52, BIDI_CS  },  // SMALL FULL STOP
+  { 0xFE54, BIDI_ON  },  // SMALL SEMICOLON
+  { 0xFE55, BIDI_CS  },  // SMALL COLON
+  { 0xFE56, BIDI_ON  },  // SMALL QUESTION MARK
+  { 0xFE57, BIDI_ON  },  // SMALL EXCLAMATION MARK
+  { 0xFE58, BIDI_ON  },  // SMALL EM DASH
+  { 0xFE59, BIDI_ON  },  // SMALL LEFT PARENTHESIS
+  { 0xFE5A, BIDI_ON  },  // SMALL RIGHT PARENTHESIS
+  { 0xFE5B, BIDI_ON  },  // SMALL LEFT CURLY BRACKET
+  { 0xFE5C, BIDI_ON  },  // SMALL RIGHT CURLY BRACKET
+  { 0xFE5D, BIDI_ON  },  // SMALL LEFT TORTOISE SHELL BRACKET
+  { 0xFE5E, BIDI_ON  },  // SMALL RIGHT TORTOISE SHELL BRACKET
+  { 0xFE5F, BIDI_ET  },  // SMALL NUMBER SIGN
+  { 0xFE60, BIDI_ON  },  // SMALL AMPERSAND
+  { 0xFE61, BIDI_ON  },  // SMALL ASTERISK
+  { 0xFE62, BIDI_ES  },  // SMALL PLUS SIGN
+  { 0xFE63, BIDI_ES  },  // SMALL HYPHEN-MINUS
+  { 0xFE64, BIDI_ON  },  // SMALL LESS-THAN SIGN
+  { 0xFE65, BIDI_ON  },  // SMALL GREATER-THAN SIGN
+  { 0xFE66, BIDI_ON  },  // SMALL EQUALS SIGN
+  { 0xFE68, BIDI_ON  },  // SMALL REVERSE SOLIDUS
+  { 0xFE69, BIDI_ET  },  // SMALL DOLLAR SIGN
+  { 0xFE6A, BIDI_ET  },  // SMALL PERCENT SIGN
+  { 0xFE6B, BIDI_ON  },  // SMALL COMMERCIAL AT
+  { 0xFE70, BIDI_AL  },  // ARABIC FATHATAN ISOLATED FORM
+  { 0xFE71, BIDI_AL  },  // ARABIC TATWEEL WITH FATHATAN ABOVE
+  { 0xFE72, BIDI_AL  },  // ARABIC DAMMATAN ISOLATED FORM
+  { 0xFE73, BIDI_AL  },  // ARABIC TAIL FRAGMENT
+  { 0xFE74, BIDI_AL  },  // ARABIC KASRATAN ISOLATED FORM
+  { 0xFE76, BIDI_AL  },  // ARABIC FATHA ISOLATED FORM
+  { 0xFE77, BIDI_AL  },  // ARABIC FATHA MEDIAL FORM
+  { 0xFE78, BIDI_AL  },  // ARABIC DAMMA ISOLATED FORM
+  { 0xFE79, BIDI_AL  },  // ARABIC DAMMA MEDIAL FORM
+  { 0xFE7A, BIDI_AL  },  // ARABIC KASRA ISOLATED FORM
+  { 0xFE7B, BIDI_AL  },  // ARABIC KASRA MEDIAL FORM
+  { 0xFE7C, BIDI_AL  },  // ARABIC SHADDA ISOLATED FORM
+  { 0xFE7D, BIDI_AL  },  // ARABIC SHADDA MEDIAL FORM
+  { 0xFE7E, BIDI_AL  },  // ARABIC SUKUN ISOLATED FORM
+  { 0xFE7F, BIDI_AL  },  // ARABIC SUKUN MEDIAL FORM
+  { 0xFE80, BIDI_AL  },  // ARABIC LETTER HAMZA ISOLATED FORM
+  { 0xFE81, BIDI_AL  },  // ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+  { 0xFE82, BIDI_AL  },  // ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+  { 0xFE83, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFE84, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+  { 0xFE85, BIDI_AL  },  // ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFE86, BIDI_AL  },  // ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+  { 0xFE87, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+  { 0xFE88, BIDI_AL  },  // ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+  { 0xFE89, BIDI_AL  },  // ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFE8A, BIDI_AL  },  // ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+  { 0xFE8B, BIDI_AL  },  // ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+  { 0xFE8C, BIDI_AL  },  // ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+  { 0xFE8D, BIDI_AL  },  // ARABIC LETTER ALEF ISOLATED FORM
+  { 0xFE8E, BIDI_AL  },  // ARABIC LETTER ALEF FINAL FORM
+  { 0xFE8F, BIDI_AL  },  // ARABIC LETTER BEH ISOLATED FORM
+  { 0xFE90, BIDI_AL  },  // ARABIC LETTER BEH FINAL FORM
+  { 0xFE91, BIDI_AL  },  // ARABIC LETTER BEH INITIAL FORM
+  { 0xFE92, BIDI_AL  },  // ARABIC LETTER BEH MEDIAL FORM
+  { 0xFE93, BIDI_AL  },  // ARABIC LETTER TEH MARBUTA ISOLATED FORM
+  { 0xFE94, BIDI_AL  },  // ARABIC LETTER TEH MARBUTA FINAL FORM
+  { 0xFE95, BIDI_AL  },  // ARABIC LETTER TEH ISOLATED FORM
+  { 0xFE96, BIDI_AL  },  // ARABIC LETTER TEH FINAL FORM
+  { 0xFE97, BIDI_AL  },  // ARABIC LETTER TEH INITIAL FORM
+  { 0xFE98, BIDI_AL  },  // ARABIC LETTER TEH MEDIAL FORM
+  { 0xFE99, BIDI_AL  },  // ARABIC LETTER THEH ISOLATED FORM
+  { 0xFE9A, BIDI_AL  },  // ARABIC LETTER THEH FINAL FORM
+  { 0xFE9B, BIDI_AL  },  // ARABIC LETTER THEH INITIAL FORM
+  { 0xFE9C, BIDI_AL  },  // ARABIC LETTER THEH MEDIAL FORM
+  { 0xFE9D, BIDI_AL  },  // ARABIC LETTER JEEM ISOLATED FORM
+  { 0xFE9E, BIDI_AL  },  // ARABIC LETTER JEEM FINAL FORM
+  { 0xFE9F, BIDI_AL  },  // ARABIC LETTER JEEM INITIAL FORM
+  { 0xFEA0, BIDI_AL  },  // ARABIC LETTER JEEM MEDIAL FORM
+  { 0xFEA1, BIDI_AL  },  // ARABIC LETTER HAH ISOLATED FORM
+  { 0xFEA2, BIDI_AL  },  // ARABIC LETTER HAH FINAL FORM
+  { 0xFEA3, BIDI_AL  },  // ARABIC LETTER HAH INITIAL FORM
+  { 0xFEA4, BIDI_AL  },  // ARABIC LETTER HAH MEDIAL FORM
+  { 0xFEA5, BIDI_AL  },  // ARABIC LETTER KHAH ISOLATED FORM
+  { 0xFEA6, BIDI_AL  },  // ARABIC LETTER KHAH FINAL FORM
+  { 0xFEA7, BIDI_AL  },  // ARABIC LETTER KHAH INITIAL FORM
+  { 0xFEA8, BIDI_AL  },  // ARABIC LETTER KHAH MEDIAL FORM
+  { 0xFEA9, BIDI_AL  },  // ARABIC LETTER DAL ISOLATED FORM
+  { 0xFEAA, BIDI_AL  },  // ARABIC LETTER DAL FINAL FORM
+  { 0xFEAB, BIDI_AL  },  // ARABIC LETTER THAL ISOLATED FORM
+  { 0xFEAC, BIDI_AL  },  // ARABIC LETTER THAL FINAL FORM
+  { 0xFEAD, BIDI_AL  },  // ARABIC LETTER REH ISOLATED FORM
+  { 0xFEAE, BIDI_AL  },  // ARABIC LETTER REH FINAL FORM
+  { 0xFEAF, BIDI_AL  },  // ARABIC LETTER ZAIN ISOLATED FORM
+  { 0xFEB0, BIDI_AL  },  // ARABIC LETTER ZAIN FINAL FORM
+  { 0xFEB1, BIDI_AL  },  // ARABIC LETTER SEEN ISOLATED FORM
+  { 0xFEB2, BIDI_AL  },  // ARABIC LETTER SEEN FINAL FORM
+  { 0xFEB3, BIDI_AL  },  // ARABIC LETTER SEEN INITIAL FORM
+  { 0xFEB4, BIDI_AL  },  // ARABIC LETTER SEEN MEDIAL FORM
+  { 0xFEB5, BIDI_AL  },  // ARABIC LETTER SHEEN ISOLATED FORM
+  { 0xFEB6, BIDI_AL  },  // ARABIC LETTER SHEEN FINAL FORM
+  { 0xFEB7, BIDI_AL  },  // ARABIC LETTER SHEEN INITIAL FORM
+  { 0xFEB8, BIDI_AL  },  // ARABIC LETTER SHEEN MEDIAL FORM
+  { 0xFEB9, BIDI_AL  },  // ARABIC LETTER SAD ISOLATED FORM
+  { 0xFEBA, BIDI_AL  },  // ARABIC LETTER SAD FINAL FORM
+  { 0xFEBB, BIDI_AL  },  // ARABIC LETTER SAD INITIAL FORM
+  { 0xFEBC, BIDI_AL  },  // ARABIC LETTER SAD MEDIAL FORM
+  { 0xFEBD, BIDI_AL  },  // ARABIC LETTER DAD ISOLATED FORM
+  { 0xFEBE, BIDI_AL  },  // ARABIC LETTER DAD FINAL FORM
+  { 0xFEBF, BIDI_AL  },  // ARABIC LETTER DAD INITIAL FORM
+  { 0xFEC0, BIDI_AL  },  // ARABIC LETTER DAD MEDIAL FORM
+  { 0xFEC1, BIDI_AL  },  // ARABIC LETTER TAH ISOLATED FORM
+  { 0xFEC2, BIDI_AL  },  // ARABIC LETTER TAH FINAL FORM
+  { 0xFEC3, BIDI_AL  },  // ARABIC LETTER TAH INITIAL FORM
+  { 0xFEC4, BIDI_AL  },  // ARABIC LETTER TAH MEDIAL FORM
+  { 0xFEC5, BIDI_AL  },  // ARABIC LETTER ZAH ISOLATED FORM
+  { 0xFEC6, BIDI_AL  },  // ARABIC LETTER ZAH FINAL FORM
+  { 0xFEC7, BIDI_AL  },  // ARABIC LETTER ZAH INITIAL FORM
+  { 0xFEC8, BIDI_AL  },  // ARABIC LETTER ZAH MEDIAL FORM
+  { 0xFEC9, BIDI_AL  },  // ARABIC LETTER AIN ISOLATED FORM
+  { 0xFECA, BIDI_AL  },  // ARABIC LETTER AIN FINAL FORM
+  { 0xFECB, BIDI_AL  },  // ARABIC LETTER AIN INITIAL FORM
+  { 0xFECC, BIDI_AL  },  // ARABIC LETTER AIN MEDIAL FORM
+  { 0xFECD, BIDI_AL  },  // ARABIC LETTER GHAIN ISOLATED FORM
+  { 0xFECE, BIDI_AL  },  // ARABIC LETTER GHAIN FINAL FORM
+  { 0xFECF, BIDI_AL  },  // ARABIC LETTER GHAIN INITIAL FORM
+  { 0xFED0, BIDI_AL  },  // ARABIC LETTER GHAIN MEDIAL FORM
+  { 0xFED1, BIDI_AL  },  // ARABIC LETTER FEH ISOLATED FORM
+  { 0xFED2, BIDI_AL  },  // ARABIC LETTER FEH FINAL FORM
+  { 0xFED3, BIDI_AL  },  // ARABIC LETTER FEH INITIAL FORM
+  { 0xFED4, BIDI_AL  },  // ARABIC LETTER FEH MEDIAL FORM
+  { 0xFED5, BIDI_AL  },  // ARABIC LETTER QAF ISOLATED FORM
+  { 0xFED6, BIDI_AL  },  // ARABIC LETTER QAF FINAL FORM
+  { 0xFED7, BIDI_AL  },  // ARABIC LETTER QAF INITIAL FORM
+  { 0xFED8, BIDI_AL  },  // ARABIC LETTER QAF MEDIAL FORM
+  { 0xFED9, BIDI_AL  },  // ARABIC LETTER KAF ISOLATED FORM
+  { 0xFEDA, BIDI_AL  },  // ARABIC LETTER KAF FINAL FORM
+  { 0xFEDB, BIDI_AL  },  // ARABIC LETTER KAF INITIAL FORM
+  { 0xFEDC, BIDI_AL  },  // ARABIC LETTER KAF MEDIAL FORM
+  { 0xFEDD, BIDI_AL  },  // ARABIC LETTER LAM ISOLATED FORM
+  { 0xFEDE, BIDI_AL  },  // ARABIC LETTER LAM FINAL FORM
+  { 0xFEDF, BIDI_AL  },  // ARABIC LETTER LAM INITIAL FORM
+  { 0xFEE0, BIDI_AL  },  // ARABIC LETTER LAM MEDIAL FORM
+  { 0xFEE1, BIDI_AL  },  // ARABIC LETTER MEEM ISOLATED FORM
+  { 0xFEE2, BIDI_AL  },  // ARABIC LETTER MEEM FINAL FORM
+  { 0xFEE3, BIDI_AL  },  // ARABIC LETTER MEEM INITIAL FORM
+  { 0xFEE4, BIDI_AL  },  // ARABIC LETTER MEEM MEDIAL FORM
+  { 0xFEE5, BIDI_AL  },  // ARABIC LETTER NOON ISOLATED FORM
+  { 0xFEE6, BIDI_AL  },  // ARABIC LETTER NOON FINAL FORM
+  { 0xFEE7, BIDI_AL  },  // ARABIC LETTER NOON INITIAL FORM
+  { 0xFEE8, BIDI_AL  },  // ARABIC LETTER NOON MEDIAL FORM
+  { 0xFEE9, BIDI_AL  },  // ARABIC LETTER HEH ISOLATED FORM
+  { 0xFEEA, BIDI_AL  },  // ARABIC LETTER HEH FINAL FORM
+  { 0xFEEB, BIDI_AL  },  // ARABIC LETTER HEH INITIAL FORM
+  { 0xFEEC, BIDI_AL  },  // ARABIC LETTER HEH MEDIAL FORM
+  { 0xFEED, BIDI_AL  },  // ARABIC LETTER WAW ISOLATED FORM
+  { 0xFEEE, BIDI_AL  },  // ARABIC LETTER WAW FINAL FORM
+  { 0xFEEF, BIDI_AL  },  // ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+  { 0xFEF0, BIDI_AL  },  // ARABIC LETTER ALEF MAKSURA FINAL FORM
+  { 0xFEF1, BIDI_AL  },  // ARABIC LETTER YEH ISOLATED FORM
+  { 0xFEF2, BIDI_AL  },  // ARABIC LETTER YEH FINAL FORM
+  { 0xFEF3, BIDI_AL  },  // ARABIC LETTER YEH INITIAL FORM
+  { 0xFEF4, BIDI_AL  },  // ARABIC LETTER YEH MEDIAL FORM
+  { 0xFEF5, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+  { 0xFEF6, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+  { 0xFEF7, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+  { 0xFEF8, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+  { 0xFEF9, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+  { 0xFEFA, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+  { 0xFEFB, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+  { 0xFEFC, BIDI_AL  },  // ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+  { 0xFEFF, BIDI_BN  },  // ZERO WIDTH NO-BREAK SPACE
+  { 0xFF01, BIDI_ON  },  // FULLWIDTH EXCLAMATION MARK
+  { 0xFF02, BIDI_ON  },  // FULLWIDTH QUOTATION MARK
+  { 0xFF03, BIDI_ET  },  // FULLWIDTH NUMBER SIGN
+  { 0xFF04, BIDI_ET  },  // FULLWIDTH DOLLAR SIGN
+  { 0xFF05, BIDI_ET  },  // FULLWIDTH PERCENT SIGN
+  { 0xFF06, BIDI_ON  },  // FULLWIDTH AMPERSAND
+  { 0xFF07, BIDI_ON  },  // FULLWIDTH APOSTROPHE
+  { 0xFF08, BIDI_ON  },  // FULLWIDTH LEFT PARENTHESIS
+  { 0xFF09, BIDI_ON  },  // FULLWIDTH RIGHT PARENTHESIS
+  { 0xFF0A, BIDI_ON  },  // FULLWIDTH ASTERISK
+  { 0xFF0B, BIDI_ES  },  // FULLWIDTH PLUS SIGN
+  { 0xFF0C, BIDI_CS  },  // FULLWIDTH COMMA
+  { 0xFF0D, BIDI_ES  },  // FULLWIDTH HYPHEN-MINUS
+  { 0xFF0E, BIDI_CS  },  // FULLWIDTH FULL STOP
+  { 0xFF0F, BIDI_CS  },  // FULLWIDTH SOLIDUS
+  { 0xFF10, BIDI_EN  },  // FULLWIDTH DIGIT ZERO
+  { 0xFF11, BIDI_EN  },  // FULLWIDTH DIGIT ONE
+  { 0xFF12, BIDI_EN  },  // FULLWIDTH DIGIT TWO
+  { 0xFF13, BIDI_EN  },  // FULLWIDTH DIGIT THREE
+  { 0xFF14, BIDI_EN  },  // FULLWIDTH DIGIT FOUR
+  { 0xFF15, BIDI_EN  },  // FULLWIDTH DIGIT FIVE
+  { 0xFF16, BIDI_EN  },  // FULLWIDTH DIGIT SIX
+  { 0xFF17, BIDI_EN  },  // FULLWIDTH DIGIT SEVEN
+  { 0xFF18, BIDI_EN  },  // FULLWIDTH DIGIT EIGHT
+  { 0xFF19, BIDI_EN  },  // FULLWIDTH DIGIT NINE
+  { 0xFF1A, BIDI_CS  },  // FULLWIDTH COLON
+  { 0xFF1B, BIDI_ON  },  // FULLWIDTH SEMICOLON
+  { 0xFF1C, BIDI_ON  },  // FULLWIDTH LESS-THAN SIGN
+  { 0xFF1D, BIDI_ON  },  // FULLWIDTH EQUALS SIGN
+  { 0xFF1E, BIDI_ON  },  // FULLWIDTH GREATER-THAN SIGN
+  { 0xFF1F, BIDI_ON  },  // FULLWIDTH QUESTION MARK
+  { 0xFF20, BIDI_ON  },  // FULLWIDTH COMMERCIAL AT
+  { 0xFF21, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER A
+  { 0xFF22, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER B
+  { 0xFF23, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER C
+  { 0xFF24, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER D
+  { 0xFF25, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER E
+  { 0xFF26, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER F
+  { 0xFF27, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER G
+  { 0xFF28, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER H
+  { 0xFF29, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER I
+  { 0xFF2A, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER J
+  { 0xFF2B, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER K
+  { 0xFF2C, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER L
+  { 0xFF2D, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER M
+  { 0xFF2E, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER N
+  { 0xFF2F, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER O
+  { 0xFF30, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER P
+  { 0xFF31, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER Q
+  { 0xFF32, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER R
+  { 0xFF33, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER S
+  { 0xFF34, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER T
+  { 0xFF35, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER U
+  { 0xFF36, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER V
+  { 0xFF37, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER W
+  { 0xFF38, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER X
+  { 0xFF39, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER Y
+  { 0xFF3A, BIDI_L   },  // FULLWIDTH LATIN CAPITAL LETTER Z
+  { 0xFF3B, BIDI_ON  },  // FULLWIDTH LEFT SQUARE BRACKET
+  { 0xFF3C, BIDI_ON  },  // FULLWIDTH REVERSE SOLIDUS
+  { 0xFF3D, BIDI_ON  },  // FULLWIDTH RIGHT SQUARE BRACKET
+  { 0xFF3E, BIDI_ON  },  // FULLWIDTH CIRCUMFLEX ACCENT
+  { 0xFF3F, BIDI_ON  },  // FULLWIDTH LOW LINE
+  { 0xFF40, BIDI_ON  },  // FULLWIDTH GRAVE ACCENT
+  { 0xFF41, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER A
+  { 0xFF42, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER B
+  { 0xFF43, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER C
+  { 0xFF44, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER D
+  { 0xFF45, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER E
+  { 0xFF46, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER F
+  { 0xFF47, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER G
+  { 0xFF48, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER H
+  { 0xFF49, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER I
+  { 0xFF4A, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER J
+  { 0xFF4B, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER K
+  { 0xFF4C, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER L
+  { 0xFF4D, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER M
+  { 0xFF4E, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER N
+  { 0xFF4F, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER O
+  { 0xFF50, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER P
+  { 0xFF51, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER Q
+  { 0xFF52, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER R
+  { 0xFF53, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER S
+  { 0xFF54, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER T
+  { 0xFF55, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER U
+  { 0xFF56, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER V
+  { 0xFF57, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER W
+  { 0xFF58, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER X
+  { 0xFF59, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER Y
+  { 0xFF5A, BIDI_L   },  // FULLWIDTH LATIN SMALL LETTER Z
+  { 0xFF5B, BIDI_ON  },  // FULLWIDTH LEFT CURLY BRACKET
+  { 0xFF5C, BIDI_ON  },  // FULLWIDTH VERTICAL LINE
+  { 0xFF5D, BIDI_ON  },  // FULLWIDTH RIGHT CURLY BRACKET
+  { 0xFF5E, BIDI_ON  },  // FULLWIDTH TILDE
+  { 0xFF5F, BIDI_ON  },  // FULLWIDTH LEFT WHITE PARENTHESIS
+  { 0xFF60, BIDI_ON  },  // FULLWIDTH RIGHT WHITE PARENTHESIS
+  { 0xFF61, BIDI_ON  },  // HALFWIDTH IDEOGRAPHIC FULL STOP
+  { 0xFF62, BIDI_ON  },  // HALFWIDTH LEFT CORNER BRACKET
+  { 0xFF63, BIDI_ON  },  // HALFWIDTH RIGHT CORNER BRACKET
+  { 0xFF64, BIDI_ON  },  // HALFWIDTH IDEOGRAPHIC COMMA
+  { 0xFF65, BIDI_ON  },  // HALFWIDTH KATAKANA MIDDLE DOT
+  { 0xFF66, BIDI_L   },  // HALFWIDTH KATAKANA LETTER WO
+  { 0xFF67, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL A
+  { 0xFF68, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL I
+  { 0xFF69, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL U
+  { 0xFF6A, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL E
+  { 0xFF6B, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL O
+  { 0xFF6C, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL YA
+  { 0xFF6D, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL YU
+  { 0xFF6E, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL YO
+  { 0xFF6F, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SMALL TU
+  { 0xFF70, BIDI_L   },  // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+  { 0xFF71, BIDI_L   },  // HALFWIDTH KATAKANA LETTER A
+  { 0xFF72, BIDI_L   },  // HALFWIDTH KATAKANA LETTER I
+  { 0xFF73, BIDI_L   },  // HALFWIDTH KATAKANA LETTER U
+  { 0xFF74, BIDI_L   },  // HALFWIDTH KATAKANA LETTER E
+  { 0xFF75, BIDI_L   },  // HALFWIDTH KATAKANA LETTER O
+  { 0xFF76, BIDI_L   },  // HALFWIDTH KATAKANA LETTER KA
+  { 0xFF77, BIDI_L   },  // HALFWIDTH KATAKANA LETTER KI
+  { 0xFF78, BIDI_L   },  // HALFWIDTH KATAKANA LETTER KU
+  { 0xFF79, BIDI_L   },  // HALFWIDTH KATAKANA LETTER KE
+  { 0xFF7A, BIDI_L   },  // HALFWIDTH KATAKANA LETTER KO
+  { 0xFF7B, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SA
+  { 0xFF7C, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SI
+  { 0xFF7D, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SU
+  { 0xFF7E, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SE
+  { 0xFF7F, BIDI_L   },  // HALFWIDTH KATAKANA LETTER SO
+  { 0xFF80, BIDI_L   },  // HALFWIDTH KATAKANA LETTER TA
+  { 0xFF81, BIDI_L   },  // HALFWIDTH KATAKANA LETTER TI
+  { 0xFF82, BIDI_L   },  // HALFWIDTH KATAKANA LETTER TU
+  { 0xFF83, BIDI_L   },  // HALFWIDTH KATAKANA LETTER TE
+  { 0xFF84, BIDI_L   },  // HALFWIDTH KATAKANA LETTER TO
+  { 0xFF85, BIDI_L   },  // HALFWIDTH KATAKANA LETTER NA
+  { 0xFF86, BIDI_L   },  // HALFWIDTH KATAKANA LETTER NI
+  { 0xFF87, BIDI_L   },  // HALFWIDTH KATAKANA LETTER NU
+  { 0xFF88, BIDI_L   },  // HALFWIDTH KATAKANA LETTER NE
+  { 0xFF89, BIDI_L   },  // HALFWIDTH KATAKANA LETTER NO
+  { 0xFF8A, BIDI_L   },  // HALFWIDTH KATAKANA LETTER HA
+  { 0xFF8B, BIDI_L   },  // HALFWIDTH KATAKANA LETTER HI
+  { 0xFF8C, BIDI_L   },  // HALFWIDTH KATAKANA LETTER HU
+  { 0xFF8D, BIDI_L   },  // HALFWIDTH KATAKANA LETTER HE
+  { 0xFF8E, BIDI_L   },  // HALFWIDTH KATAKANA LETTER HO
+  { 0xFF8F, BIDI_L   },  // HALFWIDTH KATAKANA LETTER MA
+  { 0xFF90, BIDI_L   },  // HALFWIDTH KATAKANA LETTER MI
+  { 0xFF91, BIDI_L   },  // HALFWIDTH KATAKANA LETTER MU
+  { 0xFF92, BIDI_L   },  // HALFWIDTH KATAKANA LETTER ME
+  { 0xFF93, BIDI_L   },  // HALFWIDTH KATAKANA LETTER MO
+  { 0xFF94, BIDI_L   },  // HALFWIDTH KATAKANA LETTER YA
+  { 0xFF95, BIDI_L   },  // HALFWIDTH KATAKANA LETTER YU
+  { 0xFF96, BIDI_L   },  // HALFWIDTH KATAKANA LETTER YO
+  { 0xFF97, BIDI_L   },  // HALFWIDTH KATAKANA LETTER RA
+  { 0xFF98, BIDI_L   },  // HALFWIDTH KATAKANA LETTER RI
+  { 0xFF99, BIDI_L   },  // HALFWIDTH KATAKANA LETTER RU
+  { 0xFF9A, BIDI_L   },  // HALFWIDTH KATAKANA LETTER RE
+  { 0xFF9B, BIDI_L   },  // HALFWIDTH KATAKANA LETTER RO
+  { 0xFF9C, BIDI_L   },  // HALFWIDTH KATAKANA LETTER WA
+  { 0xFF9D, BIDI_L   },  // HALFWIDTH KATAKANA LETTER N
+  { 0xFF9E, BIDI_L   },  // HALFWIDTH KATAKANA VOICED SOUND MARK
+  { 0xFF9F, BIDI_L   },  // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+  { 0xFFA0, BIDI_L   },  // HALFWIDTH HANGUL FILLER
+  { 0xFFA1, BIDI_L   },  // HALFWIDTH HANGUL LETTER KIYEOK
+  { 0xFFA2, BIDI_L   },  // HALFWIDTH HANGUL LETTER SSANGKIYEOK
+  { 0xFFA3, BIDI_L   },  // HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+  { 0xFFA4, BIDI_L   },  // HALFWIDTH HANGUL LETTER NIEUN
+  { 0xFFA5, BIDI_L   },  // HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+  { 0xFFA6, BIDI_L   },  // HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+  { 0xFFA7, BIDI_L   },  // HALFWIDTH HANGUL LETTER TIKEUT
+  { 0xFFA8, BIDI_L   },  // HALFWIDTH HANGUL LETTER SSANGTIKEUT
+  { 0xFFA9, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL
+  { 0xFFAA, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+  { 0xFFAB, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+  { 0xFFAC, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+  { 0xFFAD, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-SIOS
+  { 0xFFAE, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+  { 0xFFAF, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+  { 0xFFB0, BIDI_L   },  // HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+  { 0xFFB1, BIDI_L   },  // HALFWIDTH HANGUL LETTER MIEUM
+  { 0xFFB2, BIDI_L   },  // HALFWIDTH HANGUL LETTER PIEUP
+  { 0xFFB3, BIDI_L   },  // HALFWIDTH HANGUL LETTER SSANGPIEUP
+  { 0xFFB4, BIDI_L   },  // HALFWIDTH HANGUL LETTER PIEUP-SIOS
+  { 0xFFB5, BIDI_L   },  // HALFWIDTH HANGUL LETTER SIOS
+  { 0xFFB6, BIDI_L   },  // HALFWIDTH HANGUL LETTER SSANGSIOS
+  { 0xFFB7, BIDI_L   },  // HALFWIDTH HANGUL LETTER IEUNG
+  { 0xFFB8, BIDI_L   },  // HALFWIDTH HANGUL LETTER CIEUC
+  { 0xFFB9, BIDI_L   },  // HALFWIDTH HANGUL LETTER SSANGCIEUC
+  { 0xFFBA, BIDI_L   },  // HALFWIDTH HANGUL LETTER CHIEUCH
+  { 0xFFBB, BIDI_L   },  // HALFWIDTH HANGUL LETTER KHIEUKH
+  { 0xFFBC, BIDI_L   },  // HALFWIDTH HANGUL LETTER THIEUTH
+  { 0xFFBD, BIDI_L   },  // HALFWIDTH HANGUL LETTER PHIEUPH
+  { 0xFFBE, BIDI_L   },  // HALFWIDTH HANGUL LETTER HIEUH
+  { 0xFFC2, BIDI_L   },  // HALFWIDTH HANGUL LETTER A
+  { 0xFFC3, BIDI_L   },  // HALFWIDTH HANGUL LETTER AE
+  { 0xFFC4, BIDI_L   },  // HALFWIDTH HANGUL LETTER YA
+  { 0xFFC5, BIDI_L   },  // HALFWIDTH HANGUL LETTER YAE
+  { 0xFFC6, BIDI_L   },  // HALFWIDTH HANGUL LETTER EO
+  { 0xFFC7, BIDI_L   },  // HALFWIDTH HANGUL LETTER E
+  { 0xFFCA, BIDI_L   },  // HALFWIDTH HANGUL LETTER YEO
+  { 0xFFCB, BIDI_L   },  // HALFWIDTH HANGUL LETTER YE
+  { 0xFFCC, BIDI_L   },  // HALFWIDTH HANGUL LETTER O
+  { 0xFFCD, BIDI_L   },  // HALFWIDTH HANGUL LETTER WA
+  { 0xFFCE, BIDI_L   },  // HALFWIDTH HANGUL LETTER WAE
+  { 0xFFCF, BIDI_L   },  // HALFWIDTH HANGUL LETTER OE
+  { 0xFFD2, BIDI_L   },  // HALFWIDTH HANGUL LETTER YO
+  { 0xFFD3, BIDI_L   },  // HALFWIDTH HANGUL LETTER U
+  { 0xFFD4, BIDI_L   },  // HALFWIDTH HANGUL LETTER WEO
+  { 0xFFD5, BIDI_L   },  // HALFWIDTH HANGUL LETTER WE
+  { 0xFFD6, BIDI_L   },  // HALFWIDTH HANGUL LETTER WI
+  { 0xFFD7, BIDI_L   },  // HALFWIDTH HANGUL LETTER YU
+  { 0xFFDA, BIDI_L   },  // HALFWIDTH HANGUL LETTER EU
+  { 0xFFDB, BIDI_L   },  // HALFWIDTH HANGUL LETTER YI
+  { 0xFFDC, BIDI_L   },  // HALFWIDTH HANGUL LETTER I
+  { 0xFFE0, BIDI_ET  },  // FULLWIDTH CENT SIGN
+  { 0xFFE1, BIDI_ET  },  // FULLWIDTH POUND SIGN
+  { 0xFFE2, BIDI_ON  },  // FULLWIDTH NOT SIGN
+  { 0xFFE3, BIDI_ON  },  // FULLWIDTH MACRON
+  { 0xFFE4, BIDI_ON  },  // FULLWIDTH BROKEN BAR
+  { 0xFFE5, BIDI_ET  },  // FULLWIDTH YEN SIGN
+  { 0xFFE6, BIDI_ET  },  // FULLWIDTH WON SIGN
+  { 0xFFE8, BIDI_ON  },  // HALFWIDTH FORMS LIGHT VERTICAL
+  { 0xFFE9, BIDI_ON  },  // HALFWIDTH LEFTWARDS ARROW
+  { 0xFFEA, BIDI_ON  },  // HALFWIDTH UPWARDS ARROW
+  { 0xFFEB, BIDI_ON  },  // HALFWIDTH RIGHTWARDS ARROW
+  { 0xFFEC, BIDI_ON  },  // HALFWIDTH DOWNWARDS ARROW
+  { 0xFFED, BIDI_ON  },  // HALFWIDTH BLACK SQUARE
+  { 0xFFEE, BIDI_ON  },  // HALFWIDTH WHITE CIRCLE
+  { 0xFFF9, BIDI_ON  },  // INTERLINEAR ANNOTATION ANCHOR
+  { 0xFFFA, BIDI_ON  },  // INTERLINEAR ANNOTATION SEPARATOR
+  { 0xFFFB, BIDI_ON  },  // INTERLINEAR ANNOTATION TERMINATOR
+  { 0xFFFC, BIDI_ON  },  // OBJECT REPLACEMENT CHARACTER
+  { 0xFFFD, BIDI_ON  },  // REPLACEMENT CHARACTER
+
+#endif // GUI_BIDI_SUPPORT_RANGE_F
+
+#endif // GUI__BIDI2
+
+/*************************** End of file ****************************/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/Global.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,96 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File    : Global.h
+Purpose : Global types
+          In case your application already has a Global.h, you should
+          merge the files. In order to use Segger code, the types
+          U8, U16, U32, I8, I16, I32 need to be defined in Global.h;
+          additional definitions do not hurt.
+Revision: $Rev: 9374 $
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GLOBAL_H            // Guard against multiple inclusion
+#define GLOBAL_H
+
+#define U8    unsigned char
+#define I8    signed char
+#define U16   unsigned short
+#define I16   signed short
+#ifdef __x86_64__
+#define U32   unsigned
+#define I32   int
+#else
+#define U32   unsigned long
+#define I32   signed long
+#endif
+
+#if defined(_WIN32) && !defined(__clang__) && !defined(__MINGW32__)
+  //
+  // Microsoft VC6 compiler related
+  //
+  #define U64   unsigned __int64
+  #define U128  unsigned __int128
+  #define I64   __int64
+  #define I128  __int128
+  #if _MSC_VER <= 1200
+    #define U64_C(x) x##UI64
+  #else
+    #define U64_C(x) x##ULL
+  #endif
+#else
+  //
+  // C99 compliant compiler
+  //
+  #define U64   unsigned long long
+  #define I64   signed long long
+  #define U64_C(x) x##ULL
+#endif
+
+#ifndef PTR_ADDR
+  #if (defined(_WIN64) || defined(__LP64__))  // 64-bit symbols used by Visual Studio and GCC, maybe others as well.
+    #define PTR_ADDR  U64
+  #else
+    #define PTR_ADDR  U32
+  #endif
+#endif
+
+#endif                      // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/HEADER.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,198 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : HEADER.h
+Purpose     : HEADER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef HEADER_H
+#define HEADER_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM HEADER_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[2];
+  GUI_COLOR aColorUpper[2];
+  GUI_COLOR aColorLower[2];
+  GUI_COLOR ColorArrow;
+} HEADER_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+
+HEADER_Handle HEADER_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+HEADER_Handle HEADER_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
+HEADER_Handle HEADER_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+HEADER_Handle HEADER_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+HEADER_Handle HEADER_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void HEADER_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+/* Set defaults */
+GUI_COLOR          HEADER_SetDefaultArrowColor(GUI_COLOR Color);
+GUI_COLOR          HEADER_SetDefaultBkColor   (GUI_COLOR Color);
+const GUI_CURSOR * HEADER_SetDefaultCursor    (const GUI_CURSOR * pCursor);
+const GUI_FONT *   HEADER_SetDefaultFont      (const GUI_FONT * pFont);
+int                HEADER_SetDefaultBorderH   (int Spacing);
+int                HEADER_SetDefaultBorderV   (int Spacing);
+GUI_COLOR          HEADER_SetDefaultTextColor (GUI_COLOR Color);
+
+/* Get defaults */
+GUI_COLOR          HEADER_GetDefaultArrowColor(void);
+GUI_COLOR          HEADER_GetDefaultBkColor   (void);
+const GUI_CURSOR * HEADER_GetDefaultCursor    (void);
+const GUI_FONT *   HEADER_GetDefaultFont      (void);
+int                HEADER_GetDefaultBorderH   (void);
+int                HEADER_GetDefaultBorderV   (void);
+GUI_COLOR          HEADER_GetDefaultTextColor (void);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void             HEADER_AddItem            (HEADER_Handle hObj, int Width, const char * s, int Align);
+void             HEADER_DeleteItem         (HEADER_Handle hObj, unsigned Index);
+GUI_COLOR        HEADER_GetArrowColor      (HEADER_Handle hObj);
+GUI_COLOR        HEADER_GetBkColor         (HEADER_Handle hObj);
+const GUI_FONT * HEADER_GetFont            (HEADER_Handle hObj);
+int              HEADER_GetHeight          (HEADER_Handle hObj);
+int              HEADER_GetItemText        (HEADER_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int              HEADER_GetItemWidth       (HEADER_Handle hObj, unsigned Index);
+int              HEADER_GetNumItems        (HEADER_Handle hObj);
+int              HEADER_GetSel             (HEADER_Handle hObj);
+GUI_COLOR        HEADER_GetTextColor       (HEADER_Handle hObj);
+int              HEADER_GetUserData        (HEADER_Handle hObj, void * pDest, int NumBytes);
+void             HEADER_SetArrowColor      (HEADER_Handle hObj, GUI_COLOR Color);
+void             HEADER_SetBitmap          (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP * pBitmap);
+void             HEADER_SetBitmapEx        (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP * pBitmap, int x, int y);
+void             HEADER_SetBkColor         (HEADER_Handle hObj, GUI_COLOR Color);
+void             HEADER_SetBMP             (HEADER_Handle hObj, unsigned Index, const void * pBitmap);
+void             HEADER_SetBMPEx           (HEADER_Handle hObj, unsigned Index, const void * pBitmap, int x, int y);
+void             HEADER_SetDirIndicator    (HEADER_Handle hObj, int Column, int Reverse); /* !!!Not to be documented!!! */
+void             HEADER_SetDragLimit       (HEADER_Handle hObj, unsigned DragLimit);
+unsigned         HEADER_SetFixed           (HEADER_Handle hObj, unsigned Fixed);
+void             HEADER_SetFont            (HEADER_Handle hObj, const GUI_FONT * pFont);
+void             HEADER_SetHeight          (HEADER_Handle hObj, int Height);
+void             HEADER_SetTextAlign       (HEADER_Handle hObj, unsigned Index, int Align);
+void             HEADER_SetItemText        (HEADER_Handle hObj, unsigned Index, const char * s);
+void             HEADER_SetItemWidth       (HEADER_Handle hObj, unsigned Index, int Width);
+void             HEADER_SetScrollPos       (HEADER_Handle hObj, int ScrollPos);
+void             HEADER_SetStreamedBitmap  (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP_STREAM * pBitmap);
+void             HEADER_SetStreamedBitmapEx(HEADER_Handle hObj, unsigned Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+void             HEADER_SetTextColor       (HEADER_Handle hObj, GUI_COLOR Color);
+int              HEADER_SetUserData        (HEADER_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void HEADER_GetSkinFlexProps     (HEADER_SKINFLEX_PROPS * pProps, int Index);
+void HEADER_SetSkinClassic       (HEADER_Handle hObj);
+void HEADER_SetSkin              (HEADER_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  HEADER_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void HEADER_SetSkinFlexProps     (const HEADER_SKINFLEX_PROPS * pProps, int Index);
+void HEADER_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * HEADER_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define HEADER_SKIN_FLEX          HEADER_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Macros for compatibility with older versions
+*
+**********************************************************************
+*/
+
+#ifdef HEADER_SPACING_H
+  #define HEADER_BORDER_H_DEFAULT HEADER_SPACING_H
+#endif
+#ifdef HEADER_SPACING_V
+  #define HEADER_BORDER_V_DEFAULT HEADER_SPACING_V
+#endif
+#define HEADER_SetDefaultSpacingH(Value) HEADER_SetDefaultBorderH(Value)
+#define HEADER_SetDefaultSpacingV(Value) HEADER_SetDefaultBorderV(Value)
+#define HEADER_GetDefaultSpacingH()      HEADER_GetDefaultBorderH()
+#define HEADER_GetDefaultSpacingV()      HEADER_GetDefaultBorderV()
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // HEADER_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/HEADER_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,137 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : HEADER_Private.h
+Purpose     : Private HEADER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef HEADER_PRIVATE_H
+#define HEADER_PRIVATE_H
+
+
+#include "HEADER.h"
+#include "WIDGET.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  int     Width;
+  I16     Align;
+  WM_HMEM hDrawObj;
+  char    acText[1];
+} HEADER_COLUMN;
+
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} HEADER_SKIN_PRIVATE;
+
+typedef struct {
+  const GUI_FONT    * pFont;
+  GUI_COLOR           BkColor;
+  GUI_COLOR           TextColor;
+  GUI_COLOR           ArrowColor;
+  HEADER_SKIN_PRIVATE SkinPrivate;
+} HEADER_PROPS;
+
+typedef struct {
+  WIDGET              Widget;
+  HEADER_PROPS        Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  GUI_ARRAY           Columns;
+  int                 CapturePosX;
+  int                 CaptureItem;
+  int                 ScrollPos;
+  int                 Sel;
+  int                 DirIndicatorColumn;
+  int                 DirIndicatorReverse;
+  unsigned            Fixed;
+  U8                  DragLimit;
+} HEADER_Obj;
+
+/*********************************************************************
+*
+*       Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern HEADER_PROPS        HEADER__DefaultProps;
+extern const GUI_CURSOR  * HEADER__pDefaultCursor;
+extern int                 HEADER__DefaultBorderH;
+extern int                 HEADER__DefaultBorderV;
+
+extern const WIDGET_SKIN   HEADER__SkinClassic;
+extern       WIDGET_SKIN   HEADER__Skin;
+
+extern WIDGET_SKIN const * HEADER__pSkinDefault;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define HEADER_INIT_ID(p)  (p->Widget.DebugId = HEADER_ID)
+#else
+  #define HEADER_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  HEADER_Obj * HEADER_LockH(HEADER_Handle h);
+  #define HEADER_LOCK_H(h)   HEADER_LockH(h)
+#else
+  #define HEADER_LOCK_H(h)   (HEADER_Obj *)GUI_LOCK_H(h)
+#endif
+
+void HEADER__SetDrawObj(HEADER_Handle hObj, unsigned Index, GUI_DRAW_HANDLE hDrawObj);
+
+
+#endif // GUI_WINSUPPORT
+#endif // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/ICONVIEW.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,162 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : ICONVIEW.h
+Purpose     : ICONVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef ICONVIEW_H
+#define ICONVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Status- and create flags
+//
+#define ICONVIEW_CF_AUTOSCROLLBAR_V (1 << 1)
+#define ICONVIEW_SF_AUTOSCROLLBAR_V ICONVIEW_CF_AUTOSCROLLBAR_V
+
+//
+// Color indices
+//
+#define ICONVIEW_CI_BK              0
+#define ICONVIEW_CI_UNSEL           0
+#define ICONVIEW_CI_SEL             1
+#define ICONVIEW_CI_DISABLED        2
+
+//
+// Icon alignment flags, horizontal
+//
+#define ICONVIEW_IA_HCENTER         (0 << 0)
+#define ICONVIEW_IA_LEFT            (1 << 0)
+#define ICONVIEW_IA_RIGHT           (2 << 0)
+
+//
+// Icon alignment flags, vertical
+//
+#define ICONVIEW_IA_VCENTER         (0 << 2)
+#define ICONVIEW_IA_BOTTOM          (1 << 2)
+#define ICONVIEW_IA_TOP             (2 << 2)
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM ICONVIEW_Handle;
+
+/*********************************************************************
+*
+*       Public functions
+*
+**********************************************************************
+*/
+ICONVIEW_Handle ICONVIEW_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int xSizeItems, int ySizeItems);
+ICONVIEW_Handle ICONVIEW_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int xSizeItems, int ySizeItems, int NumExtraBytes);
+ICONVIEW_Handle ICONVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+int              ICONVIEW_AddBitmapItem           (ICONVIEW_Handle hObj, const GUI_BITMAP * pBitmap, const char * pText);
+int              ICONVIEW_AddBMPItem              (ICONVIEW_Handle hObj, const U8 * pBMP, const char * pText);
+int              ICONVIEW_AddBMPItemEx            (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, const char * pText);
+int              ICONVIEW_AddStreamedBitmapItem   (ICONVIEW_Handle hObj, const void * pStreamedBitmap, const char * pText);
+void             ICONVIEW_DeleteItem              (ICONVIEW_Handle hObj, unsigned Index);
+//void             ICONVIEW_EnableStreamAuto        (void);
+GUI_COLOR        ICONVIEW_GetBkColor              (ICONVIEW_Handle hObj, int Index);
+const GUI_FONT * ICONVIEW_GetFont                 (ICONVIEW_Handle hObj);
+U32              ICONVIEW_GetItemUserData         (ICONVIEW_Handle hObj, int Index);
+int              ICONVIEW_GetNumItems             (ICONVIEW_Handle hObj);
+int              ICONVIEW_GetItemText             (ICONVIEW_Handle hObj, int Index, char * pBuffer, int MaxSize);
+int              ICONVIEW_GetSel                  (ICONVIEW_Handle hObj);
+GUI_COLOR        ICONVIEW_GetTextColor            (ICONVIEW_Handle hObj, int Index);
+int              ICONVIEW_GetUserData             (ICONVIEW_Handle hObj, void * pDest, int NumBytes);
+GUI_BITMAP *     ICONVIEW_GetItemBitmap           (ICONVIEW_Handle hObj, int ItemIndex);
+int              ICONVIEW_GetReleasedItem         (ICONVIEW_Handle hObj);
+int              ICONVIEW_InsertBitmapItem        (ICONVIEW_Handle hObj, const GUI_BITMAP * pBitmap, const char * pText, int Index);
+int              ICONVIEW_InsertBMPItem           (ICONVIEW_Handle hObj, const U8 * pBMP, const char * pText, int Index);
+int              ICONVIEW_InsertBMPItemEx         (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, const char * pText, int Index);
+int              ICONVIEW_InsertStreamedBitmapItem(ICONVIEW_Handle hObj, const void * pStreamedBitmap, const char * pText, int Index);
+int              ICONVIEW_OwnerDraw               (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+int              ICONVIEW_SetBitmapItem           (ICONVIEW_Handle hObj, int Index, const GUI_BITMAP * pBitmap);
+void             ICONVIEW_SetBkColor              (ICONVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int              ICONVIEW_SetBMPItem              (ICONVIEW_Handle hObj, const U8 * pBMP, int Index);
+int              ICONVIEW_SetBMPItemEx            (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, int Index);
+void             ICONVIEW_SetFont                 (ICONVIEW_Handle hObj, const GUI_FONT * pFont);
+void             ICONVIEW_SetFrame                (ICONVIEW_Handle hObj, int Coord, int Value);
+void             ICONVIEW_SetItemText             (ICONVIEW_Handle hObj, int Index, const char * pText);
+void             ICONVIEW_SetItemUserData         (ICONVIEW_Handle hObj, int Index, U32 UserData);
+void             ICONVIEW_SetOwnerDraw            (ICONVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void             ICONVIEW_SetSel                  (ICONVIEW_Handle hObj, int Sel);
+void             ICONVIEW_SetSpace                (ICONVIEW_Handle hObj, int Coord, int Value);
+int              ICONVIEW_SetStreamedBitmapItem   (ICONVIEW_Handle hObj, int Index, const void * pStreamedBitmap);
+void             ICONVIEW_SetIconAlign            (ICONVIEW_Handle hObj, int IconAlign);
+void             ICONVIEW_SetTextAlign            (ICONVIEW_Handle hObj, int TextAlign);
+void             ICONVIEW_SetTextColor            (ICONVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int              ICONVIEW_SetUserData             (ICONVIEW_Handle hObj, const void * pSrc, int NumBytes);
+void             ICONVIEW_SetWrapMode             (ICONVIEW_Handle hObj, GUI_WRAPMODE WrapMode);
+
+void             ICONVIEW_Callback                (WM_MESSAGE * pMsg);
+
+//
+// Compatibility macro
+//
+#define ICONVIEW_EnableStreamAuto() GUI_DrawStreamedEnableAuto()
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // ICONVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/ICONVIEW_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,138 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : ICONVIEW_Private.h
+Purpose     : ICONVIEW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef ICONVIEW_PRIVATE_H
+#define ICONVIEW_PRIVATE_H
+
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "ICONVIEW.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {             // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR        aBkColor[3];
+  GUI_COLOR        aTextColor[3];
+  int              FrameX, FrameY;
+  int              SpaceX, SpaceY;
+  int              TextAlign;
+  int              IconAlign;
+  GUI_WRAPMODE     WrapMode;
+} ICONVIEW_PROPS;
+
+typedef struct {
+  WIDGET                  Widget;
+  WM_SCROLL_STATE         ScrollStateV;
+  WM_SCROLL_STATE         ScrollStateH;
+  ICONVIEW_PROPS          Props;
+  GUI_ARRAY               ItemArray;
+  int                     xSizeItems;
+  int                     ySizeItems;
+  int                     Sel;
+  U16                     Flags;
+  WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+  int                     ReleasedItem;
+} ICONVIEW_OBJ;
+
+typedef void tDrawImage    (const void * pData, GUI_GET_DATA_FUNC * pfGetData, int xPos, int yPos);
+typedef void tDrawText     (ICONVIEW_OBJ * pObj, GUI_RECT * pRect, const char * s);
+typedef void tGetImageSizes(const void * pData, GUI_GET_DATA_FUNC * pfGetData, int * xSize, int * ySize);
+
+typedef struct {
+  tDrawImage        * pfDrawImage;
+  tDrawText         * pfDrawText;
+  tGetImageSizes    * pfGetImageSizes;
+  GUI_GET_DATA_FUNC * pfGetData;
+  const void        * pData;
+  U32                 UserData;
+  int                 SizeOfData;
+  char                acText[1];
+} ICONVIEW_ITEM;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define ICONVIEW_INIT_ID(p) (p->Widget.DebugId = ICONVIEW_ID)
+#else
+  #define ICONVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  ICONVIEW_OBJ * ICONVIEW_LockH(ICONVIEW_Handle h);
+  #define ICONVIEW_LOCK_H(h)   ICONVIEW_LockH(h)
+#else
+  #define ICONVIEW_LOCK_H(h)   (ICONVIEW_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void ICONVIEW__DrawText        (ICONVIEW_OBJ    * pObj, GUI_RECT * pRect, const char * pText);
+void ICONVIEW__ManageAutoScroll(ICONVIEW_Handle   hObj);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // ICONVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IMAGE.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,117 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : IMAGE.h
+Purpose     : Image include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef IMAGE_H
+#define IMAGE_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define IMAGE_CF_MEMDEV   (1 << 0) // Widget uses an internal memory device which speeds up use of compressed images (GIF, JPEG, PNG)
+#define IMAGE_CF_TILE     (1 << 1) // Uses tiling to fill up the whole area of the widget
+#define IMAGE_CF_ALPHA    (1 << 2) // Needs to be set if alpha blending is required (PNG)
+#define IMAGE_CF_ATTACHED (1 << 3) // Widget size is fixed to the parent border
+#define IMAGE_CF_AUTOSIZE (1 << 4) // Widget size is taken from the attached image
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM IMAGE_Handle;
+
+/*********************************************************************
+*
+*       Public functions
+*
+**********************************************************************
+*/
+IMAGE_Handle IMAGE_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+IMAGE_Handle IMAGE_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+IMAGE_Handle IMAGE_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+void IMAGE_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+int  IMAGE_GetUserData(IMAGE_Handle hObj, void * pDest, int NumBytes);
+void IMAGE_SetBitmap  (IMAGE_Handle hWin, const GUI_BITMAP * pBitmap);
+void IMAGE_SetBMP     (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetBMPEx   (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetDTA     (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetDTAEx   (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetGIF     (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetGIFEx   (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetJPEG    (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetJPEGEx  (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetPNG     (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetPNGEx   (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+int  IMAGE_SetUserData(IMAGE_Handle hObj, const void * pSrc, int NumBytes);
+
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // IMAGE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IMAGE_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,144 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : IMAGE_Private.h
+Purpose     : Private IMAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef IMAGE_PRIVATE_H
+#define IMAGE_PRIVATE_H
+
+#include "IMAGE.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Private config defaults
+*
+**********************************************************************
+*/
+#ifndef IMAGE_SUPPORT_TRANSPARENCY
+  #define IMAGE_SUPPORT_TRANSPARENCY WM_SUPPORT_TRANSPARENCY
+#endif
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  U32 Flags;
+} IMAGE_PROPS;
+
+typedef struct {
+  WIDGET              Widget;
+  IMAGE_PROPS         Props;
+  const void        * pData;                                                          // Data pointer of the object to be drawn (Bitmap, BMP, GIF, JPEG, PNG)
+  void             (* pfDrawImageAt) (IMAGE_Handle hObj, int xPos, int yPos);         // Object specific (Bitmap, BMP, GIF, JPEG, PNG) code
+  void             (* pfPaint)       (IMAGE_Handle hObj);                             // Drawing method specific (Default, Tiled, Magnified) code
+  void             (* pfGetImageSize)(IMAGE_Handle hObj, int * pxSize, int * pySize); // Returns the image size of the attached item
+  void             (* pfOnTimer)     (IMAGE_Handle hObj);                             // Timer function for animated images (currently only animated GIFs are supported)
+  U32                 FileSize;
+  //
+  // Data items used by IAMGE_GIF.c
+  //
+  int                 NumImages;    // Number of (sub)images
+  int                 CurrentImage; // Image index used for animated images
+  GUI_TIMER_HANDLE    hTimer;       // Timer used for animated images
+  //
+  // Data items used by IAMGE_DTA.c
+  //
+  GUI_BITMAP          Bitmap;       // Bitmap structure
+  GUI_LOGPALETTE      Palette;      // Palette structure
+  //
+  // Data items used by Image_...Ex() - functions
+  //
+  void              * pVoid;        // Void pointer passed to GetData() function
+  GUI_GET_DATA_FUNC * pfGetData;    // Pointer to GetData() function
+  //
+  // Data items used if memory devices are available and IMAGE_CF_MEMDEV has been set
+  //
+  #if GUI_SUPPORT_MEMDEV
+    GUI_MEMDEV_Handle hMem;
+  #endif
+} IMAGE_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define IMAGE_INIT_ID(p) (p->Widget.DebugId = IMAGE_ID)
+#else
+  #define IMAGE_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  IMAGE_OBJ * IMAGE__LockH(IMAGE_Handle h);
+  #define IMAGE_LOCK_H(h)   IMAGE__LockH(h)
+#else
+  #define IMAGE_LOCK_H(h)   (IMAGE_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern IMAGE_PROPS IMAGE__DefaultProps;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void IMAGE__SetWindowSize(IMAGE_Handle hObj);
+void IMAGE__FreeAttached (IMAGE_Handle hObj, int LeaveTimer);
+
+#endif // GUI_WINSUPPORT
+#endif // IMAGE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IP_FS.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,143 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+-------------------------- END-OF-HEADER -----------------------------
+
+File    : IP_FS.h
+Purpose : Header file for file system abstraction layer.
+*/
+
+#ifndef IP_FS_H               // Avoid multiple inclusion.
+#define IP_FS_H
+
+#include "SEGGER.h"
+
+#if defined(__cplusplus)
+  extern "C" {                // Make sure we have C-declarations in C++ programs.
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef struct {
+  //
+  // Read only file operations. These have to be present on ANY file system, even the simplest one.
+  //
+  void* (*pfOpenFile)             (const char* sFilename);
+  int   (*pfCloseFile)            (void* hFile);
+  int   (*pfReadAt)               (void* hFile, void* pBuffer, U32 Pos, U32 NumBytes);
+  long  (*pfGetLen)               (void* hFile);
+  //
+  // Directory query operations.
+  //
+  void  (*pfForEachDirEntry)      (void* pContext, const char* sDir, void (*pf)(void*, void*));
+  void  (*pfGetDirEntryFileName)  (void* pFileEntry, char* sFileName, U32 SizeOfBuffer);
+  U32   (*pfGetDirEntryFileSize)  (void* pFileEntry, U32* pFileSizeHigh);
+  U32   (*pfGetDirEntryFileTime)  (void* pFileEntry);
+  int   (*pfGetDirEntryAttributes)(void* pFileEntry);
+  //
+  // Write file operations.
+  //
+  void* (*pfCreate)               (const char* sFileName);
+  void* (*pfDeleteFile)           (const char* sFilename);
+  int   (*pfRenameFile)           (const char* sOldFilename, const char* sNewFilename);
+  int   (*pfWriteAt)              (void* hFile, void* pBuffer, U32 Pos, U32 NumBytes);
+  //
+  // Additional directory operations
+  //
+  int   (*pfMKDir)                (const char* sDirName);
+  int   (*pfRMDir)                (const char* sDirName);
+  //
+  // Additional operations
+  //
+  int   (*pfIsFolder)             (const char* sPath);
+  int   (*pfMove)                 (const char* sOldFilename, const char* sNewFilename);
+} IP_FS_API;
+
+typedef struct {
+  const          char* sPath;
+  const unsigned char* pData;
+        unsigned int   FileSize;
+} IP_FS_READ_ONLY_FILE_ENTRY;
+
+typedef struct IP_FS_READ_ONLY_FILE_HOOK_STRUCT IP_FS_READ_ONLY_FILE_HOOK;
+struct IP_FS_READ_ONLY_FILE_HOOK_STRUCT {
+  IP_FS_READ_ONLY_FILE_HOOK* pNext;
+  IP_FS_READ_ONLY_FILE_ENTRY FileEntry;
+};
+
+/*********************************************************************
+*
+*       API functions
+*
+**********************************************************************
+*/
+
+#define IP_FS_FS                    IP_FS_emFile
+#define IP_FS_FS_AllowHiddenAccess  IP_FS_emFile_AllowHiddenAccess
+#define IP_FS_FS_DenyHiddenAccess   IP_FS_emFile_DenyHiddenAccess
+
+extern const IP_FS_API IP_FS_ReadOnly;                  // Read-only file system, typically located in flash memory.
+extern const IP_FS_API IP_FS_Win32;                     // File system interface for Win32.
+extern const IP_FS_API IP_FS_Linux;                     // File system interface for Linux
+extern const IP_FS_API IP_FS_emFile;                    // Target file system (emFile), shows and allows access to hidden files.
+extern const IP_FS_API IP_FS_emFile_AllowHiddenAccess;  // Target file system (emFile), does not show hidden files but allows access to them.
+extern const IP_FS_API IP_FS_emFile_DenyHiddenAccess;   // Target file system (emFile), does not show hidden files and does not allow access to them.
+
+//
+// Helper functions for Read Only file system layer.
+//
+void IP_FS_READ_ONLY_ClrFileHooks(void);
+void IP_FS_READ_ONLY_AddFileHook (IP_FS_READ_ONLY_FILE_HOOK* pHook, const char* sPath, const unsigned char* pData, unsigned int FileSize);
+
+//
+// Helper functions for Win32 file system layer.
+//
+void IP_FS_WIN32_ConfigBaseDir(const char* sDir);
+
+
+#if defined(__cplusplus)
+}                             // Make sure we have C-declarations in C++ programs.
+#endif
+
+#endif                        // Avoid multiple inclusion.
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/KNOB.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,120 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : KNOB.h
+Purpose     : KNOB include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef KNOB_H
+#define KNOB_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      // Req. for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+
+#if defined(__cplusplus)
+  extern "C" {                  // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM KNOB_Handle;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+KNOB_Handle KNOB_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id);
+KNOB_Handle KNOB_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int NumExtraBytes);
+KNOB_Handle KNOB_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void KNOB_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void KNOB_AddValue   (KNOB_Handle hObj, I32 Value);
+int  KNOB_GetUserData(KNOB_Handle hObj, void * pDest, int NumBytes);               // Gets user defined data
+I32  KNOB_GetValue   (KNOB_Handle hObj);                                           // Returns the position of the knob in tenth of degree
+void KNOB_SetBkColor (KNOB_Handle hObj, GUI_COLOR Color);                          // Sets the BK color of the widget
+void KNOB_SetBkDevice(KNOB_Handle hObj, GUI_MEMDEV_Handle hMemBk);                 // Sets the background device
+void KNOB_SetDevice  (KNOB_Handle hObj, GUI_MEMDEV_Handle hMemSrc);                // Sets the memory device with the drawn knob
+void KNOB_SetKeyValue(KNOB_Handle hObj, I32 KeyValue);                             // Sets the value the knob will rotate on one key press
+void KNOB_SetOffset  (KNOB_Handle hObj, I32 Offset);                               // Sets the offset angle of the knob
+void KNOB_SetPeriod  (KNOB_Handle hObj, I32 Period);                               // Sets the period in which the knob stops
+void KNOB_SetPos     (KNOB_Handle hObj, I32 Pos);                                  // Sets position of the knob in tenth of degree
+void KNOB_SetRange   (KNOB_Handle hObj, I32 MinRange, I32 MaxRange);               // Sets the usable range of the knob widget
+void KNOB_SetSnap    (KNOB_Handle hObj, I32 Snap);                                 // Sets Snap positions where the knob stops
+void KNOB_SetTickSize(KNOB_Handle hObj, I32 TickSize);                             // Sets the ticksize, in 1/10 of degree
+int  KNOB_SetUserData(KNOB_Handle hObj, const void * pSrc, int NumBytes);          // Sets user defined data
+
+/*********************************************************************
+*
+*       Global functions
+*
+**********************************************************************
+*/
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+#endif  // KNOB_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/KNOB_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,110 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : KNOB.h
+Purpose     : KNOB include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef KNOB_PRIVATE_H
+#define KNOB_PRIVATE_H
+
+#include "KNOB.h"
+#include "GUI_Private.h"
+
+#if (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  I32 Snap;          // Position where the knob snaps
+  I32 Period;        // Time it takes to stop the knob in ms
+  GUI_COLOR BkColor; // The Bk color
+  I32 Offset;        // the offset
+  I32 MinRange;
+  I32 MaxRange;
+  I32 TickSize;      // Minimum movement range in 1/10 of degree
+  I32 KeyValue;      // Range of movement for one key push
+} KNOB_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  KNOB_PROPS Props;
+  WM_HMEM hContext;
+  I32 Angle;
+  I32 Value;
+  int xSize;
+  int ySize;
+  GUI_MEMDEV_Handle hMemSrc;
+  GUI_MEMDEV_Handle hMemDst;
+  GUI_MEMDEV_Handle hMemBk;
+} KNOB_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define KNOB_INIT_ID(p) p->Widget.DebugId = KNOB_ID
+#else
+  #define KNOB_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  KNOB_OBJ * KNOB_LockH(KNOB_Handle h);
+  #define KNOB_LOCK_H(h)   KNOB_LockH(h)
+#else
+  #define KNOB_LOCK_H(h)   (KNOB_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern KNOB_PROPS KNOB__DefaultProps;
+
+#endif   // (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+#endif   // KNOB_PRIVATE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,769 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCD.h
+Purpose     : Declares LCD interface functions
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_H
+#define LCD_H
+
+#include "GUI_ConfDefaults.h" /* Used for GUI_CONST_STORAGE */
+#include "Global.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Basic type defines
+*
+* The follwing are defines for types used in the LCD-driver and the
+* GUI layers on top of that. Since "C" does not provide data types of
+* fixed length which are identical on all platforms, this is done here.
+* For most 16/32 controllers, the settings will work fine. However, if
+* you have similar defines in other sections of your program, you might
+* want to change or relocate these defines, e.g. in a TYPE.h file.
+*/
+#define I16P I16              /*   signed 16 bits OR MORE ! */
+#define U16P U16              /* unsigned 16 bits OR MORE ! */
+
+/*********************************************************************
+*
+*       Settings for windows simulation
+*
+* Some settings in the configuration may conflict with the values required
+* in the Simulation. This is why we ignore the target settings for data
+* types and use the correct settings for the simulation.
+* (U32 could be defined as long, which would yield a 64 bit type on
+* the PC)
+*/
+#ifdef WIN32
+  #pragma warning( disable : 4244 )  // Disable warning messages in simulation
+  #pragma warning( disable : 4761 )  // Disable warning "integral size mismatch in argument; conversion supplied"
+#endif
+
+/*********************************************************************
+*
+*       Constants
+*/
+#define LCD_ERR0 (0x10)
+#define LCD_ERR_CONTROLLER_NOT_FOUND (LCD_ERR0+1)
+#define LCD_ERR_MEMORY               (LCD_ERR0+2)
+
+/*********************************************************************
+*
+*       Drawing modes
+*/
+#define LCD_DRAWMODE_NORMAL (0)
+#define LCD_DRAWMODE_XOR    (1<<0)
+#define LCD_DRAWMODE_TRANS  (1<<1)
+#define LCD_DRAWMODE_REV    (1<<2)
+
+/*********************************************************************
+*
+*       Typedefs
+*/
+typedef int LCD_DRAWMODE;
+typedef U32 LCD_COLOR;
+
+/*********************************************************************
+*
+*       Data structures
+*/
+typedef struct { I16P x,y; } GUI_POINT;
+typedef struct { I16 x0,y0,x1,y1; } LCD_RECT;
+
+typedef struct {
+  int              NumEntries;
+  char             HasTrans;
+  const LCD_COLOR * pPalEntries;
+} LCD_LOGPALETTE;
+
+/* This is used for the simulation only ! */
+typedef struct {
+  int x,y;
+  unsigned char KeyStat;
+} LCD_tMouseState;
+
+typedef struct {
+  int               NumEntries;
+  const LCD_COLOR * pPalEntries;
+} LCD_PHYSPALETTE;
+
+/*********************************************************************
+*
+*       LCD_L0_... color conversion
+*/
+typedef LCD_COLOR      tLCDDEV_Index2Color  (LCD_PIXELINDEX Index);
+typedef LCD_PIXELINDEX tLCDDEV_Color2Index  (LCD_COLOR Color);
+typedef LCD_PIXELINDEX tLCDDEV_GetIndexMask (void);
+
+typedef void tLCDDEV_Index2ColorBulk(void * pIndex, LCD_COLOR * pColor, U32 NumItems, U8 SizeOfIndex);
+typedef void tLCDDEV_Color2IndexBulk(LCD_COLOR * pColor, void * pIndex, U32 NumItems, U8 SizeOfIndex);
+
+/*********************************************************************
+*
+*       Color conversion API tables
+*/
+typedef struct {
+  tLCDDEV_Color2Index  * pfColor2Index;
+  tLCDDEV_Index2Color  * pfIndex2Color;
+  tLCDDEV_GetIndexMask * pfGetIndexMask;
+  int NoAlpha;
+  tLCDDEV_Color2IndexBulk * pfColor2IndexBulk;
+  tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk;
+} LCD_API_COLOR_CONV;
+
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_0;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_2;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_4;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_5;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_8;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_24;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_2;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_4;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_5;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_6;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1616I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_111;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_222;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_233;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_323;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_332;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_12;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_12_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_555;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_556;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_655;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_666_9;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_822216;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_84444;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8666_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_88666I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M111;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M1555I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M222;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M233;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M323;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M332;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M4444I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_12;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_12_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M555;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M556;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M655;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M666_9;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8888I;
+
+#define GUICC_0         &LCD_API_ColorConv_0
+#define GUICC_1         &LCD_API_ColorConv_1
+#define GUICC_1_2       &LCD_API_ColorConv_1_2
+#define GUICC_1_4       &LCD_API_ColorConv_1_4
+#define GUICC_1_5       &LCD_API_ColorConv_1_5
+#define GUICC_1_8       &LCD_API_ColorConv_1_8
+#define GUICC_1_16      &LCD_API_ColorConv_1_16
+#define GUICC_1_24      &LCD_API_ColorConv_1_24
+#define GUICC_2         &LCD_API_ColorConv_2
+#define GUICC_4         &LCD_API_ColorConv_4
+#define GUICC_5         &LCD_API_ColorConv_5
+#define GUICC_6         &LCD_API_ColorConv_6
+#define GUICC_8         &LCD_API_ColorConv_8
+#define GUICC_16        &LCD_API_ColorConv_16
+#define GUICC_1616I     &LCD_API_ColorConv_1616I
+#define GUICC_111       &LCD_API_ColorConv_111
+#define GUICC_222       &LCD_API_ColorConv_222
+#define GUICC_233       &LCD_API_ColorConv_233
+#define GUICC_323       &LCD_API_ColorConv_323
+#define GUICC_332       &LCD_API_ColorConv_332
+#define GUICC_M4444I    &LCD_API_ColorConv_M4444I
+#define GUICC_444_12    &LCD_API_ColorConv_444_12
+#define GUICC_444_12_1  &LCD_API_ColorConv_444_12_1
+#define GUICC_444_16    &LCD_API_ColorConv_444_16
+#define GUICC_555       &LCD_API_ColorConv_555
+#define GUICC_565       &LCD_API_ColorConv_565
+#define GUICC_556       &LCD_API_ColorConv_556
+#define GUICC_655       &LCD_API_ColorConv_655
+#define GUICC_666       &LCD_API_ColorConv_666
+#define GUICC_666_9     &LCD_API_ColorConv_666_9
+#define GUICC_822216    &LCD_API_ColorConv_822216
+#define GUICC_84444     &LCD_API_ColorConv_84444
+#define GUICC_8666      &LCD_API_ColorConv_8666
+#define GUICC_8666_1    &LCD_API_ColorConv_8666_1
+#define GUICC_88666I    &LCD_API_ColorConv_88666I
+#define GUICC_888       &LCD_API_ColorConv_888
+#define GUICC_8888      &LCD_API_ColorConv_8888
+#define GUICC_M111      &LCD_API_ColorConv_M111
+#define GUICC_M1555I    &LCD_API_ColorConv_M1555I
+#define GUICC_M222      &LCD_API_ColorConv_M222
+#define GUICC_M233      &LCD_API_ColorConv_M233
+#define GUICC_M323      &LCD_API_ColorConv_M323
+#define GUICC_M332      &LCD_API_ColorConv_M332
+#define GUICC_M444_12   &LCD_API_ColorConv_M444_12
+#define GUICC_M444_12_1 &LCD_API_ColorConv_M444_12_1
+#define GUICC_M444_16   &LCD_API_ColorConv_M444_16
+#define GUICC_M555      &LCD_API_ColorConv_M555
+#define GUICC_M565      &LCD_API_ColorConv_M565
+#define GUICC_M556      &LCD_API_ColorConv_M556
+#define GUICC_M655      &LCD_API_ColorConv_M655
+#define GUICC_M666      &LCD_API_ColorConv_M666
+#define GUICC_M666_9    &LCD_API_ColorConv_M666_9
+#define GUICC_M8565     &LCD_API_ColorConv_M8565
+#define GUICC_M888      &LCD_API_ColorConv_M888
+#define GUICC_M8888     &LCD_API_ColorConv_M8888
+#define GUICC_M8888I    &LCD_API_ColorConv_M8888I
+
+void GUICC_M1555I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M565_SetCustColorConv  (tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M4444I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M888_SetCustColorConv  (tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M8888I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+
+/*********************************************************************
+*
+*       Compatibility defines for older versions
+*/
+#define GUI_COLOR_CONV_1    GUICC_1
+#define GUI_COLOR_CONV_2    GUICC_2
+#define GUI_COLOR_CONV_4    GUICC_4
+#define GUI_COLOR_CONV_8666 GUICC_8666
+#define GUI_COLOR_CONV_888  GUICC_888
+#define GUI_COLOR_CONV_8888 GUICC_8888
+#define GUI_COLOR_CONV_565  GUICC_565
+#define GUI_COLOR_CONV_M565 GUICC_M565
+
+/*********************************************************************
+*
+*       LCDDEV function table
+*
+*  Below the routines which need to in an LCDDEV routine table are
+*  defined. All of these routines have to be in the low-level driver
+*  (LCD_L0) or in the memory device which can be used to replace the
+*  driver.
+*  The one exception to this is the SetClipRect routine, which would
+*  be identical for all drivers and is therefor contained in the
+*  level above (LCD).
+*/
+typedef void         tLCDDEV_DrawPixel    (int x, int y);
+typedef void         tLCDDEV_DrawHLine    (int x0, int y0,  int x1);
+typedef void         tLCDDEV_DrawVLine    (int x , int y0,  int y1);
+typedef void         tLCDDEV_FillRect     (int x0, int y0, int x1, int y1);
+typedef unsigned int tLCDDEV_GetPixelIndex(int x, int y);
+typedef void         tLCDDEV_SetPixelIndex(int x, int y, int ColorIndex);
+typedef void         tLCDDEV_XorPixel     (int x, int y);
+typedef void         tLCDDEV_FillPolygon  (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+typedef void         tLCDDEV_FillPolygonAA(const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+typedef void         tLCDDEV_GetRect      (LCD_RECT * pRect);
+typedef int          tLCDDEV_Init         (void);
+typedef void         tLCDDEV_On           (void);
+typedef void         tLCDDEV_Off          (void);
+typedef void         tLCDDEV_SetLUTEntry  (U8 Pos, LCD_COLOR color);
+typedef void *       tLCDDEV_GetDevFunc   (int Index);
+typedef I32          tLCDDEV_GetDevProp   (int Index);
+typedef void         tLCDDEV_SetOrg       (int x, int y);
+
+/*********************************************************************
+*
+*       Memory device API tables
+*/
+typedef struct GUI_DEVICE     GUI_DEVICE;
+typedef struct GUI_DEVICE_API GUI_DEVICE_API;
+
+typedef void tLCDDEV_DrawBitmap   (int x0, int y0, int xsize, int ysize,
+                       int BitsPerPixel, int BytesPerLine,
+                       const U8 * pData, int Diff,
+                       const void * pTrans);   /* Really LCD_PIXELINDEX, but is void to avoid compiler warnings */
+#define GUI_MEMDEV_APILIST_1  &GUI_MEMDEV_DEVICE_1
+#define GUI_MEMDEV_APILIST_8  &GUI_MEMDEV_DEVICE_8
+#define GUI_MEMDEV_APILIST_16 &GUI_MEMDEV_DEVICE_16
+#define GUI_MEMDEV_APILIST_32 &GUI_MEMDEV_DEVICE_32
+
+/*********************************************************************
+*
+*       Defines for device capabilities
+*
+* The following is the list of device capabilities which can, but do
+* not have to be implemented in the driver. This way the driver can be
+* enhanced in the future without affecting the driver interface,
+* keeping older drivers compatible.
+* More DevCaps can always be added in the future, as older drivers
+* are guaranteed to return 0 for all unimplemented features or queries.
+*
+* The values below define the legal parameters to the LCD_GetDeviceCaps
+* and the LCD_GetpCapFunc routines.
+*/
+
+#define LCD_DEVCAP_XSIZE             0x01    /* Quest horiz. res. of display */
+#define LCD_DEVCAP_YSIZE             0x02    /* Quest vert. res. of display */
+#define LCD_DEVCAP_VXSIZE            0x03    /* Quest vert. res. of virtual disp.*/
+#define LCD_DEVCAP_VYSIZE            0x04    /* Quest vert. res. of virtual disp.*/
+#define LCD_DEVCAP_XORG              0x05    /* X-origin ... usually 0 */
+#define LCD_DEVCAP_YORG              0x06    /* Y-origin ... usually 0 */
+#define LCD_DEVCAP_CONTROLLER        0x07    /* LCD Controller (Numerical) */
+#define LCD_DEVCAP_BITSPERPIXEL      0x08    /* Bits per pixel ... 1/2/4/8 */
+#define LCD_DEVCAP_NUMCOLORS         0x09    /* Quest number of colors */
+#define LCD_DEVCAP_XMAG              0x0A
+#define LCD_DEVCAP_YMAG              0x0B
+#define LCD_DEVCAP_MIRROR_X          0x0C
+#define LCD_DEVCAP_MIRROR_Y          0x0D
+#define LCD_DEVCAP_SWAP_XY           0x0E
+#define LCD_DEVCAP_SWAP_RB           0x0F
+
+int LCD_GetXSizeMax(void);
+int LCD_GetYSizeMax(void);
+int LCD_GetVXSizeMax(void);
+int LCD_GetVYSizeMax(void);
+int LCD_GetBitsPerPixelMax(void);
+void LCD_SetDisplaySize(int xSizeDisplay, int ySizeDisplay);
+int LCD_GetXSizeDisplay(void);
+int LCD_GetYSizeDisplay(void);
+
+int LCD_GetXSizeEx          (int LayerIndex);
+int LCD_GetYSizeEx          (int LayerIndex);
+int LCD_GetVXSizeEx         (int LayerIndex);
+int LCD_GetVYSizeEx         (int LayerIndex);
+int LCD_GetBitsPerPixelEx   (int LayerIndex);
+U32 LCD_GetNumColorsEx      (int LayerIndex);
+int LCD_GetXMagEx           (int LayerIndex);
+int LCD_GetYMagEx           (int LayerIndex);
+int LCD_GetMirrorXEx        (int LayerIndex);
+int LCD_GetMirrorYEx        (int LayerIndex);
+int LCD_GetSwapXYEx         (int LayerIndex);
+int LCD_GetReversLUTEx      (int LayerIndex);
+int LCD_GetPhysColorsInRAMEx(int LayerIndex);
+
+int LCD_GetXSize            (void);
+int LCD_GetYSize            (void);
+int LCD_GetVXSize           (void);
+int LCD_GetVYSize           (void);
+int LCD_GetBitsPerPixel     (void);
+U32 LCD_GetNumColors        (void);
+int LCD_GetXMag             (void);
+int LCD_GetYMag             (void);
+int LCD_GetMirrorX          (void);
+int LCD_GetMirrorY          (void);
+int LCD_GetSwapXY           (void);
+int LCD_GetReversLUT        (void);
+int LCD_GetPhysColorsInRAM  (void);
+
+I32 LCD__GetBPP      (U32 IndexMask);
+I32 LCD__GetBPPDevice(U32 IndexMask);
+
+tLCDDEV_Index2Color * LCD_GetpfIndex2ColorEx(int LayerIndex);
+tLCDDEV_Color2Index * LCD_GetpfColor2IndexEx(int LayerIndex);
+
+tLCDDEV_Color2Index * LCD_GetpfColor2Index(void);
+
+int LCD_GetNumLayers(void);
+
+LCD_COLOR * LCD_GetPalette   (void);
+LCD_COLOR * LCD_GetPaletteEx (int LayerIndex);
+void      * LCD_GetVRAMAddr  (void);
+void      * LCD_GetVRAMAddrEx(int LayerIndex);
+
+void (* LCD_GetDevFunc(int LayerIndex, int Item))(void);
+
+/*********************************************************************
+*
+*       Runtime rotation of drivers
+*/
+int LCD_ROTATE_AddDriver  (const GUI_DEVICE_API * pDriver);
+int LCD_ROTATE_AddDriverEx(const GUI_DEVICE_API * pDeviceAPI, int LayerIndex);
+int LCD_ROTATE_DecSel     (void);
+int LCD_ROTATE_DecSelEx   (int LayerIndex);
+int LCD_ROTATE_IncSel     (void);
+int LCD_ROTATE_IncSelEx   (int LayerIndex);
+int LCD_ROTATE_SetCallback(void (* pCbOnConfig)(GUI_DEVICE *, int, int), int LayerIndex);
+int LCD_ROTATE_SetSel     (int Index);
+int LCD_ROTATE_SetSelEx   (int Index, int LayerIndex);
+
+/*********************************************************************
+*
+*       Values for requesting and setting function pointers (display driver)
+*/
+                                       /* Request of a function pointer for... */
+#define LCD_DEVFUNC_READRECT      0x01 /* ...reading a rectangular display area */
+#define LCD_DEVFUNC_SETALPHA      0x02 /* ...setting the alpha blending factor */
+#define LCD_DEVFUNC_SETPOS        0x03 /* ...setting the layer position */
+#define LCD_DEVFUNC_GETPOS        0x04 /* ...getting the layer position */
+#define LCD_DEVFUNC_SETSIZE       0x05 /* ...setting the layer size */
+#define LCD_DEVFUNC_SETVIS        0x06 /* ...setting the visibility of a layer */
+#define LCD_DEVFUNC_24BPP         0x07 /* ...drawing 24bpp bitmaps */
+#define LCD_DEVFUNC_NEXT_PIXEL    0x08 /* ...drawing a bitmap pixel by pixel */
+#define LCD_DEVFUNC_SET_VRAM_ADDR 0x09 /* ...setting the VRAM address */
+#define LCD_DEVFUNC_SET_VSIZE     0x0A /* ...setting the VRAM size */
+#define LCD_DEVFUNC_SET_SIZE      0x0B /* ...setting the display size */
+#define LCD_DEVFUNC_INIT          0x0C /* ...initializing the display controller */
+#define LCD_DEVFUNC_CONTROLCACHE  0x0D /* ...controlling the cache */
+#define LCD_DEVFUNC_ON            0x0E /* ...switching the display on */
+#define LCD_DEVFUNC_OFF           0x0F /* ...switching the display off */
+#define LCD_DEVFUNC_SETLUTENTRY   0x10 /* ...setting a LUT entry */
+#define LCD_DEVFUNC_FILLPOLY      0x11 /* ...filling a polygon */
+#define LCD_DEVFUNC_FILLPOLYAA    0x12 /* ...filling an antialiased polygon */
+#define LCD_DEVFUNC_ALPHAMODE     0x13 /* ...setting the alpha blending mode */
+#define LCD_DEVFUNC_CHROMAMODE    0x14 /* ...setting the chroma blending mode */
+#define LCD_DEVFUNC_CHROMA        0x15 /* ...setting the chroma values */
+#define LCD_DEVFUNC_SETFUNC       0x16 /* ...setting a function pointer */
+#define LCD_DEVFUNC_REFRESH       0x17 /* ...refreshing the display */
+#define LCD_DEVFUNC_SETRECT       0x18 /* ...setting the drawing rectangle */
+                                       /* Setting a function pointer for... */
+#define LCD_DEVFUNC_FILLRECT      0x19 /* ...filling a rectangular area */
+#define LCD_DEVFUNC_DRAWBMP_1BPP  0x20 /* ...drawing a 1bpp bitmap */
+#define LCD_DEVFUNC_COPYBUFFER    0x21 /* ...copying complete frame buffers */
+#define LCD_DEVFUNC_SHOWBUFFER    0x22 /* ...shows the given buffer */
+#define LCD_DEVFUNC_COPYRECT      0x23 /* ...filling a rectangular area */
+#define LCD_DEVFUNC_DRAWBMP_16BPP 0x24 /* ...drawing a 16bpp bitmap */
+#define LCD_DEVFUNC_DRAWBMP_8BPP  0x25 /* ...drawing a 8bpp bitmap */
+#define LCD_DEVFUNC_READPIXEL     0x26 /* ...reading a pixel index */
+#define LCD_DEVFUNC_READMPIXELS   0x27 /* ...reading multiple pixel indices */
+#define LCD_DEVFUNC_DRAWBMP_32BPP 0x28 /* ...drawing a 32bpp bitmap */
+#define LCD_DEVFUNC_SET_BUFFERPTR 0x29 /* ...setting an array of buffer pointers */
+#define LCD_DEVFUNC_EXIT          0x30 /* ...free memory and shut down controller */
+
+/*********************************************************************
+*
+*       Values for requesting function pointers (memory devices)
+*/
+                                          /* Request of a function pointer for... */
+#define MEMDEV_DEVFUNC_WRITETOACTIVE 0x16 /* ...writing the memory device */
+
+/*********************************************************************
+*
+*       Values for requesting data
+*/
+                                       /* Request pointer to... */
+#define LCD_DEVDATA_MEMDEV        0x01 /* ...default memory device API */
+#define LCD_DEVDATA_PHYSPAL       0x02 /* ...physical palette */
+#define LCD_DEVDATA_VRAMADDR      0x03 /* ...VRAM address */
+
+/*********************************************************************
+*
+*       Structures for passing data to LCD_X_DisplayDriver()
+*/
+typedef struct {
+  void * pVRAM;
+} LCD_X_SETVRAMADDR_INFO;
+
+typedef struct {
+  int xPos, yPos;
+} LCD_X_SETORG_INFO;
+
+typedef struct {
+  LCD_COLOR Color;
+  U8 Pos;
+} LCD_X_SETLUTENTRY_INFO;
+
+typedef struct {
+  int xSize, ySize;
+} LCD_X_SETSIZE_INFO;
+
+typedef struct {
+  int xPos, yPos;
+  int xLen, yLen;
+  int BytesPerPixel;
+  U32 Off;
+} LCD_X_SETPOS_INFO;
+
+typedef struct {
+  int Alpha;
+} LCD_X_SETALPHA_INFO;
+
+typedef struct {
+  int OnOff;
+} LCD_X_SETVIS_INFO;
+
+typedef struct {
+  int AlphaMode;
+} LCD_X_SETALPHAMODE_INFO;
+
+typedef struct {
+  int ChromaMode;
+} LCD_X_SETCHROMAMODE_INFO;
+
+typedef struct {
+  LCD_COLOR ChromaMin;
+  LCD_COLOR ChromaMax;
+} LCD_X_SETCHROMA_INFO;
+
+typedef struct {
+  int Index;
+} LCD_X_SHOWBUFFER_INFO;
+
+/*********************************************************************
+*
+*       Commands for LCD_X_DisplayDriver()
+*/
+#define LCD_X_INITCONTROLLER 0x01 /* Initializing the display controller */
+#define LCD_X_SETVRAMADDR    0x02 /* Setting the video RAM address */
+#define LCD_X_SETORG         0x03 /* Setting the origin within a layer */
+#define LCD_X_SETLUTENTRY    0x04 /* Setting an entry of the LUT */
+#define LCD_X_ON             0x05 /* Switching the display on */
+#define LCD_X_OFF            0x06 /* Switching the display off */
+#define LCD_X_SETSIZE        0x07 /* Setting the layer size */
+#define LCD_X_SETPOS         0x08 /* Setting the layer position */
+#define LCD_X_SETVIS         0x09 /* Setting the visibility of a layer */
+#define LCD_X_SETALPHA       0x0A /* Setting the alpha value of the layer */
+#define LCD_X_SETALPHAMODE   0x0B /* Setting the alpha blending mode */
+#define LCD_X_SETCHROMAMODE  0x0C /* Setting the chroma blending mode */
+#define LCD_X_SETCHROMA      0x0D /* Setting the chroma values */
+#define LCD_X_SHOWBUFFER     0x0E /* Switching to the given buffer */
+
+int  LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData);
+void LCD_X_Config(void);
+
+/*********************************************************************
+*
+*       Get/Set layer properties
+*/
+int  LCD_GetPosEx       (int LayerIndex, int * pxPos, int * pyPos);
+int  LCD_OffEx          (int LayerIndex);
+int  LCD_OnEx           (int LayerIndex);
+int  LCD_RefreshEx      (int LayerIndex);
+int  LCD_SetAlphaEx     (int LayerIndex, int Alpha);
+int  LCD_SetAlphaModeEx (int LayerIndex, int AlphaMode);
+int  LCD_SetBufferPtrEx (int LayerIndex, void ** pBufferPTR);
+int  LCD_SetChromaEx    (int LayerIndex, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+int  LCD_SetChromaModeEx(int LayerIndex, int ChromaMode);
+int  LCD_SetDevFunc     (int LayerIndex, int IdFunc, void (* pDriverFunc)(void));
+int  LCD_SetLUTEntryEx  (int LayerIndex, U8 Pos, LCD_COLOR Color);
+int  LCD_SetPosEx       (int LayerIndex, int xPos, int yPos);
+int  LCD_SetSizeEx      (int LayerIndex, int xSize, int ySize);
+int  LCD_SetVisEx       (int LayerIndex, int OnOff);
+int  LCD_SetVRAMAddrEx  (int LayerIndex, void * pVRAM);
+int  LCD_SetVSizeEx     (int LayerIndex, int xSize, int ySize);
+
+int  LCD_GetPos         (int * pxPos, int * pyPos);
+int  LCD_Off            (void);
+int  LCD_On             (void);
+int  LCD_Refresh        (void);
+int  LCD_SetAlpha       (int Alpha);
+int  LCD_SetAlphaMode   (int AlphaMode);
+int  LCD_SetBufferPtr   (void ** pBufferPTR);
+int  LCD_SetChroma      (LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+int  LCD_SetChromaMode  (int ChromaMode);
+int  LCD_SetLUTEntry    (U8 Pos, LCD_COLOR Color);
+void LCD_SetOrg         (int xOrg, int yOrg);
+int  LCD_SetPos         (int xPos, int yPos);
+int  LCD_SetSize        (int xSize, int ySize);
+int  LCD_SetVis         (int OnOff);
+int  LCD_SetVRAMAddr    (void * pVRAM);
+int  LCD_SetVSize       (int xSize, int ySize);
+
+/*********************************************************************
+*
+*       NEXT_PIXEL API support
+*/
+typedef struct {
+  int  (* pfStart)   (int x0, int y0, int x1, int y1);
+  void (* pfSetPixel)(LCD_PIXELINDEX PixelIndex);
+  void (* pfNextLine)(void);
+  void (* pfEnd)     (void);
+} LCD_API_NEXT_PIXEL;
+
+LCD_API_NEXT_PIXEL * LCD_GetNextPixelAPI(void);
+
+/*********************************************************************
+*
+*      LCD_CLIP function table
+*/
+typedef void tLCD_HL_DrawHLine    (int x0, int y0,  int x1);
+typedef void tLCD_HL_DrawPixel    (int x0, int y0);
+
+typedef struct {
+  tLCD_HL_DrawHLine * pfDrawHLine;
+  tLCD_HL_DrawPixel * pfDrawPixel;
+} tLCD_HL_APIList;
+
+void LCD_DrawHLine(int x0, int y0,  int x1);
+void LCD_DrawPixel(int x0, int y0);
+void LCD_DrawVLine(int x,  int y0,  int y1);
+
+
+/*********************************************************************
+*
+*       Declarations for LCD_
+*/
+void LCD_SetClipRectEx(const LCD_RECT * pRect);
+void LCD_SetClipRectMax(void);
+
+/* Get device capabilities (0 if not supported) */
+I32  LCD_GetDevCap  (int Index);
+I32  LCD_GetDevCapEx(int LayerIndex, int Index);
+
+/* Initialize LCD using config-parameters */
+int LCD_Init(void);
+int LCD_InitColors(void);
+int LCD_InitEx(GUI_DEVICE * pDevice, int ClearScreen);
+int LCD_ExitEx(int LayerIndex);
+
+void LCD_SetBkColor   (LCD_COLOR Color); /* Set background color */
+void LCD_SetColor     (LCD_COLOR Color); /* Set foreground color */
+void LCD_SetPixelIndex(int x, int y, int ColorIndex);
+
+/* Palette routines (Not available on all drivers) */
+void LCD_InitLUT(void);
+void LCD_SetLUTEx(int LayerIndex, const LCD_PHYSPALETTE * pPalette);
+void LCD_SetLUT  (const LCD_PHYSPALETTE * pPalette);
+
+LCD_DRAWMODE LCD_SetDrawMode  (LCD_DRAWMODE dm);
+void LCD_SetColorIndex(unsigned PixelIndex);
+void LCD_SetBkColorIndex(unsigned PixelIndex);
+void LCD_FillRect(int x0, int y0, int x1, int y1);
+typedef void tLCD_SetPixelAA(int x, int y, U8 Intens);
+
+void LCD_SetPixelAA4_Trans  (int x, int y, U8 Intens);
+void LCD_SetPixelAA4_NoTrans(int x, int y, U8 Intens);
+
+void LCD_SetPixelAA8_Trans  (int x, int y, U8 Intens);
+void LCD_SetPixelAA8_NoTrans(int x, int y, U8 Intens);
+
+void LCD_AA_EnableGamma(int OnOff);
+void LCD_AA_SetGamma   (U8 * pGamma);
+void LCD_AA_GetGamma   (U8 * pGamma);
+
+LCD_COLOR    LCD_AA_MixColors16 (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+LCD_COLOR    LCD_AA_MixColors256(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+LCD_COLOR    LCD_MixColors256   (LCD_COLOR Color, LCD_COLOR BkColor, unsigned Intens);
+LCD_COLOR    LCD_GetPixelColor(int x, int y);     /* Get RGB color of pixel */
+unsigned int LCD_GetPixelIndex(int x, int y);
+int          LCD_GetBkColorIndex (void);
+int          LCD_GetColorIndex (void);
+#if (GUI_USE_ARGB)
+U32          LCD_AA_SetOrMask(U32 OrMask);
+#else
+U32          LCD_AA_SetAndMask(U32 AndMask);
+#endif
+
+/* Configuration */
+int  LCD_SetMaxNumColors(unsigned MaxNumColors);
+int  LCD_GetMaxNumColors(void);
+void LCD__SetPaletteConversionHook(void (* pfPaletteConversionHook)(const LCD_LOGPALETTE * pLogPal));
+
+/*********************************************************************
+*
+*       Optional support for rotation
+*/
+#if GUI_SUPPORT_ROTATION
+
+typedef void tLCD_DrawBitmap(int x0, int y0, int xsize, int ysize,
+                             int xMul, int yMul, int BitsPerPixel, int BytesPerLine,
+                             const U8 * pPixel, const void * pTrans);
+typedef void tRect2TextRect (LCD_RECT * pRect);
+
+struct tLCD_APIList_struct {
+  tLCD_DrawBitmap   * pfDrawBitmap;
+  tRect2TextRect    * pfRect2TextRect;
+  tRect2TextRect    * pfTransformRect;
+};
+
+typedef struct tLCD_APIList_struct tLCD_APIList;
+
+extern tLCD_APIList LCD_APIListCCW;
+extern tLCD_APIList LCD_APIListCW;
+extern tLCD_APIList LCD_APIList180;
+
+#define GUI_ROTATION   tLCD_APIList
+#define GUI_ROTATE_CCW &LCD_APIListCCW
+#define GUI_ROTATE_CW  &LCD_APIListCW
+#define GUI_ROTATE_180 &LCD_APIList180
+#define GUI_ROTATE_0   0
+
+tLCD_SetPixelAA * LCD__GetPfSetPixel(int BitsPerPixel);
+
+#endif
+
+/*********************************************************************
+*
+*       Physical color access, internally used only
+*/
+void LCD__SetPhysColor(U8 Pos, LCD_COLOR Color);
+
+/*********************************************************************
+*
+*       Cache control
+*/
+#define LCD_CC_UNLOCK (0)    /* Default mode: Cache is transparent */
+#define LCD_CC_LOCK   (1)    /* Cache is locked, no write operations */
+#define LCD_CC_FLUSH  (2)    /* Flush cache, do not change mode */
+
+int LCD_ControlCache  (int Cmd);
+int LCD_ControlCacheEx(int LayerIndex, int Cmd);
+
+/*********************************************************************
+*
+*       Color conversion
+*/
+LCD_PIXELINDEX   LCD_Color2Index     (LCD_COLOR Color);
+LCD_COLOR        LCD_Index2Color     (int Index);
+LCD_COLOR        LCD_Index2ColorEx   (int i, unsigned LayerIndex);
+
+/*********************************************************************
+*
+*       LCD_X_...
+*/
+unsigned char LCD_X_Read00(void);
+unsigned char LCD_X_Read01(void);
+void LCD_X_Write00 (unsigned char c);
+void LCD_X_Write01 (unsigned char c);
+void LCD_X_WriteM01(unsigned char * pData, int NumBytes);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif /* LCD_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD_ConfDefaults.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,83 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCD_ConfDefaults.h
+Purpose     : Valid LCD configuration and defaults
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_CONFIG_DEFAULTS_H
+#define LCD_CONFIG_DEFAULTS_H
+
+#include "LCDConf.h"            /* Configuration header file */
+
+/**********************************************************
+*
+*       Configuration defaults
+*/
+#ifndef   LCD_MIRROR_X
+  #define LCD_MIRROR_X 0
+#endif
+#ifndef   LCD_MIRROR_Y
+  #define LCD_MIRROR_Y 0
+#endif
+#ifndef   LCD_SWAP_XY
+  #define LCD_SWAP_XY 0
+#endif
+#ifndef   LCD_FIRSTCOM0
+  #define LCD_FIRSTCOM0 0
+#endif
+#ifndef   LCD_FIRSTSEG0
+  #define LCD_FIRSTSEG0 0
+#endif
+#ifndef   LCD_SWAP_RB
+  #define LCD_SWAP_RB 0
+#endif
+#ifndef   LCD_DISPLAY_INDEX
+  #define LCD_DISPLAY_INDEX 0
+#endif
+#ifndef   LCD_ENDIAN_BIG
+  #define LCD_ENDIAN_BIG 0
+#endif
+#ifndef   LCD_ALLOW_NON_OPTIMIZED_MODE
+  #define LCD_ALLOW_NON_OPTIMIZED_MODE 1
+#endif
+
+#endif /* LCD_CONFIG_DEFAULTS_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,99 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCD_Private.h
+Purpose     : To be used only by the display drivers
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_Private_H
+#define LCD_Private_H
+
+#include "LCDConf.h"
+#include "LCD_Protected.h"
+#include "GUI.h"
+
+/*********************************************************************
+*
+*       API functions
+*/
+extern const struct tLCDDEV_APIList_struct * /* const */ LCD_aAPI[GUI_NUM_LAYERS];
+
+/*********************************************************************
+*
+*       Support for Segment/COMLUTs
+*/
+#define LCD_TYPE_SEGTRANS U16
+#define LCD_TYPE_COMTRANS U16
+
+#ifdef LCD_LUT_COM
+  extern LCD_TYPE_COMTRANS LCD__aLine2Com0[LCD_YSIZE];
+#endif
+
+#ifdef LCD_LUT_SEG
+  extern LCD_TYPE_COMTRANS LCD__aCol2Seg0[LCD_XSIZE];
+#endif
+
+/*********************************************************************
+*
+*       Support for multiple display controllers
+*/
+#define DECLARE_PROTOTYPES(DISTX) \
+  void     LCD_##DISTX##_SetPixelIndex(int x, int y, int PixelIndex); \
+  unsigned LCD_##DISTX##_GetPixelIndex(int x, int y); \
+  void     LCD_##DISTX##_XorPixel     (int x, int y); \
+  void     LCD_##DISTX##_DrawHLine    (int x0, int y,  int x1); \
+  void     LCD_##DISTX##_DrawVLine    (int x, int y0,  int y1); \
+  void     LCD_##DISTX##_FillRect     (int x0, int y0, int x1, int y1); \
+  void     LCD_##DISTX##_DrawBitmap   (int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine,  const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans); \
+  void     LCD_##DISTX##_SetOrg       (int x, int y); \
+  void     LCD_##DISTX##_On           (void); \
+  void     LCD_##DISTX##_Off          (void); \
+  int      LCD_##DISTX##_Init         (void); \
+  void     LCD_##DISTX##_SetLUTEntry  (U8 Pos, LCD_COLOR Color); \
+  void   * LCD_##DISTX##_GetDevFunc   (int Index); \
+  void     LCD_##DISTX##_ReInit       (void)
+    
+DECLARE_PROTOTYPES(DIST0);
+DECLARE_PROTOTYPES(DIST1);
+DECLARE_PROTOTYPES(DIST2);
+DECLARE_PROTOTYPES(DIST3);
+
+#endif /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD_Protected.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,132 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCD_Protected.h
+Purpose     : LCD level - To be used only internally by the GUI
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_PROTECTED_H
+#define LCD_PROTECTED_H
+
+#include "LCD.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Data types
+*/
+typedef struct {
+  LCD_COLOR * paColor;
+  I16         NumEntries;
+} LCD_LUT_INFO;
+
+typedef struct {
+  tLCDDEV_DrawPixel  * pfDrawPixel;
+  tLCDDEV_DrawHLine  * pfDrawHLine;
+  tLCDDEV_DrawVLine  * pfDrawVLine;
+  tLCDDEV_FillRect   * pfFillRect;
+  tLCDDEV_DrawBitmap * pfDrawBitmap;
+} LCD_API_LIST;
+
+/*********************************************************************
+*
+*       External data
+*/
+extern GUI_CONST_STORAGE U8 LCD_aMirror[256];
+extern LCD_PIXELINDEX * LCD__aConvTable;
+
+/*********************************************************************
+*
+*       Misc functions
+*/
+void LCD_UpdateColorIndices   (void);
+int  LCD_PassingBitmapsAllowed(void);
+void LCD_EnableCursor         (int OnOff);
+void LCD_SelectLCD            (void);
+
+void LCD_DrawBitmap(int x0,    int y0,
+                    int xsize, int ysize,
+                    int xMul,  int yMul,
+                    int BitsPerPixel,
+                    int BytesPerLine,
+                    const U8 * pPixel,
+                    const LCD_PIXELINDEX * pTrans);
+
+void LCD__DrawBitmap_1bpp(int x0,    int y0,
+                          int xsize, int ysize,
+                          int xMul,  int yMul,
+                          int BitsPerPixel,
+                          int BytesPerLine,
+                          const U8 * pPixel,
+                          const LCD_PIXELINDEX * pTrans,
+                          int OffData);
+
+/*********************************************************************
+*
+*       Internal used color conversion routines
+*/
+tLCDDEV_Index2Color LCD_Index2Color_444_12;
+tLCDDEV_Index2Color LCD_Index2Color_M444_12;
+tLCDDEV_Index2Color LCD_Index2Color_444_12_1;
+tLCDDEV_Index2Color LCD_Index2Color_M444_12_1;
+tLCDDEV_Index2Color LCD_Index2Color_444_16;
+tLCDDEV_Index2Color LCD_Index2Color_M444_16;
+tLCDDEV_Index2Color LCD_Index2Color_555;
+tLCDDEV_Index2Color LCD_Index2Color_565;
+tLCDDEV_Index2Color LCD_Index2Color_8666;
+tLCDDEV_Index2Color LCD_Index2Color_888;
+tLCDDEV_Index2Color LCD_Index2Color_8888;
+tLCDDEV_Index2Color LCD_Index2Color_M8888I;
+tLCDDEV_Index2Color LCD_Index2Color_M555;
+tLCDDEV_Index2Color LCD_Index2Color_M565;
+tLCDDEV_Index2Color LCD_Index2Color_M888;
+
+tLCDDEV_Color2Index LCD_Color2Index_8666;
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* LCD_PROTECTED_H */
+
+/*************************** End of file ****************************/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD_SIM.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,209 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCD_SIM.h
+Purpose     : Declares LCD interface functions
+----------------------------------------------------------------------
+*/
+
+#ifndef LCDSIM_H
+#define LCDSIM_H
+
+#include "LCD.h"
+
+/************************************************************
+*
+*       Defines
+*
+*************************************************************
+*/
+#define LCDSIM_MAX_DISPLAYS GUI_NUM_LAYERS
+
+#define GUI_TRANSMODE_PIXELALPHA 0
+#define GUI_TRANSMODE_CHROMA     1
+#define GUI_TRANSMODE_ZERO       2
+
+/************************************************************
+*
+*       LCDSIM_      General declarations
+*
+*************************************************************
+*/
+void  LCDSIM_PreInit(void);
+char* LCDSIM_Init(void);
+void  LCDSIM_Exit(void);
+int   LCDSIM_GetMouseState(LCD_tMouseState *pState);
+void  LCDSIM_SetMouseState(int x, int y, int KeyStat, int LayerIndex);
+void  LCDSIM_CheckMouseState(int LayerIndex);
+int   LCDSIM_SaveSBMP  (const char * sFileName);
+int   LCDSIM_SaveSBMPEx(const char * sFileName, int x0, int y0, int xSize, int ySize);
+void  LCDSIM_SetRGBOrder(unsigned RGBOrder);
+
+/************************************************************
+*
+*       LCDSIM_     Functions for each display
+*
+*************************************************************
+*/
+void LCDSIM_FillRect(int x0, int y0, int x1, int y1, int Index, int LayerIndex);
+int  LCDSIM_GetModifyCnt(int LayerIndex);
+int  LCDSIM_GetModifyCntInfo(int LayerIndex);
+int  LCDSIM_GetPixelColor(int x, int y, int LayerIndex);
+int  LCDSIM_GetPixelIndex(int x, int y, int LayerIndex);
+int  LCDSIM_Index2Color(int Index, int LayerIndex);
+int  LCDSIM_RLUT_GetPixelIndex(int x, int y, int LayerIndex);
+void LCDSIM_RLUT_SetPixelIndex(int x, int y, int Index, int LayerIndex);
+void LCDSIM_SetLUTEntry(U8 Pos, LCD_COLOR color, int LayerIndex);
+void LCDSIM_SetPixelIndex(int x, int y, int Index, int LayerIndex);
+void LCDSIM_SetPixelColor(int x, int y, LCD_COLOR PixelColor, int LayerIndex);
+void LCDSIM_SetSubPixel(int x, int y, U8 Value, int LayerIndex);
+void LCDSIM_SetPixelPhys(int x, int y, int Index, int LayerIndex);
+int  LCDSIM_GetPixelPhys(int xPhys, int yPhys, int LayerIndex);
+void LCDSIM_FillRectPhys(int x0Phys, int y0Phys, int x1Phys, int y1Phys, int Index, int LayerIndex);
+void LCDSIM_SetOrg(int x, int y, int LayerIndex);
+void LCDSIM_SetAlpha(int Alpha, int LayerIndex);
+int  LCDSIM_GetAlpha(int LayerIndex);
+void LCDSIM_SetLayerPos(int xPos, int yPos, int LayerIndex);
+void LCDSIM_SetLayerVis(int OnOff, int LayerIndex);
+void LCDSIM_SetSize(int LayerIndex, int xSize, int ySize);
+void LCDSIM_SetTransMode(int LayerIndex, int TransMode);
+void LCDSIM_SetChroma(int LayerIndex, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+void LCDSIM_SetCompositeColor(U32 Color);
+void LCDSIM_SetCompositeSize(int xSize, int ySize);
+void LCDSIM_CopyBuffer(int LayerIndex, int IndexSrc, int IndexDst);
+void LCDSIM_Invalidate(int LayerIndex);
+
+/********************************************************************
+*
+*       Publics for LCD
+*
+*********************************************************************
+*/
+void SIM_GUI_SetCompositeSize(int xSize, int ySize);
+void SIM_GUI_SetCompositeColor(U32 Color);
+U32  SIM_GUI_GetCompositeColor(void);
+void SIM_GUI_SetLCDPos(int xPos, int yPos);
+int  SIM_GUI_SaveBMP(const char * sFileName);
+int  SIM_GUI_SaveBMPEx(const char * sFileName, int x0, int y0, int xSize, int ySize);
+int  SIM_GUI_SaveCompositeBMP(const char * sFileName);
+int  SIM_GUI_SetTransColor(int Color);
+int  SIM_GUI_SetLCDColorBlack (unsigned int Index, int Color);
+int  SIM_GUI_SetLCDColorWhite (unsigned int Index, int Color);
+void SIM_GUI_SetMag(int MagX, int MagY);
+int  SIM_GUI_GetMagX(void);
+int  SIM_GUI_GetMagY(void);
+int  SIM_GUI_GetForwardRButton(void);
+void SIM_GUI_SetForwardRButton(int OnOff);
+void SIM_GUI_SetTransMode(int LayerIndex, int TransMode);
+void SIM_GUI_SetChroma(int LayerIndex, unsigned long ChromaMin, unsigned long ChromaMax);
+void SIM_GUI_UseCustomBitmaps(void);
+void SIM_GUI_SetAccellerator(int Accellerator);
+void SIM_GUI_SetMainScreenOffset(int x, int y);
+void SIM_GUI_SetCompositeTouch(int LayerIndex);
+int  SIM_GUI_GetCompositeTouch(void);
+
+/********************************************************************
+*
+*       Routine(s) in user application
+*
+*********************************************************************
+*/
+void SIM_X_Config(void);   /* Allow init before application starts ... Use it to set LCD offset etc */
+
+/********************************************************************
+*
+*       Publics used by GUI_X module
+*
+*********************************************************************
+*/
+void SIM_GUI_Delay (int ms);
+void SIM_GUI_ExecIdle(void);
+int  SIM_GUI_GetTime(void);
+int  SIM_GUI_GetKey(void);
+int  SIM_GUI_WaitKey(void);
+void SIM_GUI_StoreKey(int);
+
+/********************************************************************
+*
+*       Publics for logging, warning, errorout
+*
+*********************************************************************
+*/
+void SIM_GUI_Log(const char *s);
+void SIM_GUI_Log1(const char *s, int p0);
+void SIM_GUI_Log2(const char *s, int p0, int p1);
+void SIM_GUI_Log3(const char *s, int p0, int p1, int p2);
+void SIM_GUI_Log4(const char *s, int p0, int p1, int p2,int p3);
+void SIM_GUI_Warn(const char *s);
+void SIM_GUI_Warn1(const char *s, int p0);
+void SIM_GUI_Warn2(const char *s, int p0, int p1);
+void SIM_GUI_Warn3(const char *s, int p0, int p1, int p2);
+void SIM_GUI_Warn4(const char *s, int p0, int p1, int p2, int p3);
+void SIM_GUI_ErrorOut(const char *s);
+void SIM_GUI_ErrorOut1(const char *s, int p0);
+void SIM_GUI_ErrorOut2(const char *s, int p0, int p1);
+void SIM_GUI_ErrorOut3(const char *s, int p0, int p1, int p2);
+void SIM_GUI_ErrorOut4(const char *s, int p0, int p1, int p2, int p3);
+void SIM_GUI_EnableMessageBoxOnError(int Status);
+
+/********************************************************************
+*
+*       Commandline support
+*
+*********************************************************************
+*/
+const char *SIM_GUI_GetCmdLine(void);
+
+/********************************************************************
+*
+*       Multitasking support
+*
+*********************************************************************
+*/
+void SIM_GUI_CreateTask(char * pName, void * pFunc);
+void SIM_GUI_Start(void);
+unsigned long SIM_GUI_GetTaskID(void);
+void SIM_GUI_Lock(void);
+void SIM_GUI_Unlock(void);
+void SIM_GUI_InitOS(void);
+
+#endif /* LCD_H */
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTBOX.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,223 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTBOX.h
+Purpose     : LISTBOX widget include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTBOX_H
+#define LISTBOX_H
+
+#include "WM.h"
+#include "WIDGET.h"             /* Req. for WIDGET_DRAW_ITEM_FUNC */
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       defines
+*
+**********************************************************************
+*/
+
+#define LISTBOX_ALL_ITEMS  -1
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define LISTBOX_CI_UNSEL    0
+#define LISTBOX_CI_SEL      1
+#define LISTBOX_CI_SELFOCUS 2
+#define LISTBOX_CI_DISABLED 3
+
+/************************************************************
+*
+*       States
+*/
+typedef WM_HMEM LISTBOX_Handle;
+
+/*********************************************************************
+*
+*               Notification codes
+*
+* The following is the list of notification codes specific to this widget,
+* Send with the WM_NOTIFY_PARENT message
+*/
+#define LISTBOX_NOTIFICATION_LOST_FOCUS    (WM_NOTIFICATION_WIDGET + 0)
+
+/************************************************************
+*
+*       Create / Status flags
+*/
+#define LISTBOX_CF_AUTOSCROLLBAR_H   (1 << 0)
+#define LISTBOX_CF_AUTOSCROLLBAR_V   (1 << 1)
+#define LISTBOX_CF_MULTISEL          (1 << 2)
+#define LISTBOX_CF_WRAP              (1 << 3)
+#define LISTBOX_CF_FIXEDSCROLLMODE   (1 << 4)
+#define LISTBOX_SF_AUTOSCROLLBAR_H   LISTBOX_CF_AUTOSCROLLBAR_H
+#define LISTBOX_SF_AUTOSCROLLBAR_V   LISTBOX_CF_AUTOSCROLLBAR_V
+#define LISTBOX_SF_MULTISEL          LISTBOX_CF_MULTISEL
+#define LISTBOX_SF_WRAP              LISTBOX_CF_WRAP
+#define LISTBOX_SF_FIXEDSCROLLMODE   LISTBOX_CF_FIXEDSCROLLMODE
+
+/************************************************************
+*
+*       Fixed scroll mode flags
+*/
+#define LISTBOX_FM_OFF               0  // Turn fixed mode off
+#define LISTBOX_FM_ON                1  // Turn fixed mode on
+#define LISTBOX_FM_CENTER            2  // Set fixed mode to center
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+
+LISTBOX_Handle LISTBOX_Create        (const GUI_ConstString * ppText, int x0, int y0, int xSize, int ySize, int Flags);
+LISTBOX_Handle LISTBOX_CreateAsChild (const GUI_ConstString * ppText, WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+LISTBOX_Handle LISTBOX_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText);
+LISTBOX_Handle LISTBOX_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText, int NumExtraBytes);
+LISTBOX_Handle LISTBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+
+int              LISTBOX_AddKey           (LISTBOX_Handle hObj, int Key);
+void             LISTBOX_AddString        (LISTBOX_Handle hObj, const char * s);
+void             LISTBOX_AddStringH       (LISTBOX_Handle hObj, WM_HMEM hString); /* Not to be documented!!! */
+void             LISTBOX_DecSel           (LISTBOX_Handle hObj);
+void             LISTBOX_DeleteItem       (LISTBOX_Handle hObj, unsigned Index);
+void             LISTBOX_EnableWrapMode   (LISTBOX_Handle hObj, int OnOff);
+GUI_COLOR        LISTBOX_GetBkColor       (LISTBOX_Handle hObj, unsigned Index);
+const GUI_FONT * LISTBOX_GetFont          (LISTBOX_Handle hObj);
+unsigned         LISTBOX_GetItemSpacing   (LISTBOX_Handle hObj);
+unsigned         LISTBOX_GetNumItems      (LISTBOX_Handle hObj);
+int              LISTBOX_GetSel           (LISTBOX_Handle hObj);
+GUI_COLOR        LISTBOX_GetTextColor     (LISTBOX_Handle hObj, unsigned Index);
+int              LISTBOX_GetItemDisabled  (LISTBOX_Handle hObj, unsigned Index);
+int              LISTBOX_GetItemSel       (LISTBOX_Handle hObj, unsigned Index);
+void             LISTBOX_GetItemText      (LISTBOX_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int              LISTBOX_GetMulti         (LISTBOX_Handle hObj);
+WM_HWIN          LISTBOX_GetOwner         (LISTBOX_Handle hObj);
+int              LISTBOX_GetScrollStepH   (LISTBOX_Handle hObj);
+int              LISTBOX_GetTextAlign     (LISTBOX_Handle hObj);
+int              LISTBOX_GetUserData      (LISTBOX_Handle hObj, void * pDest, int NumBytes);
+void             LISTBOX_IncSel           (LISTBOX_Handle hObj);
+void             LISTBOX_InsertString     (LISTBOX_Handle hObj, const char * s, unsigned Index);
+void             LISTBOX_InvalidateItem   (LISTBOX_Handle hObj, int Index);
+int              LISTBOX_OwnerDraw        (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void             LISTBOX_SetAutoScrollH   (LISTBOX_Handle hObj, int OnOff);
+void             LISTBOX_SetAutoScrollV   (LISTBOX_Handle hObj, int OnOff);
+void             LISTBOX_SetBkColor       (LISTBOX_Handle hObj, unsigned Index, GUI_COLOR color);
+void             LISTBOX_SetFixedScrollPos(LISTBOX_Handle hObj, U16 FixedScrollPos, U8 Mode);
+void             LISTBOX_SetFont          (LISTBOX_Handle hObj, const GUI_FONT * pFont);
+void             LISTBOX_SetItemDisabled  (LISTBOX_Handle hObj, unsigned Index, int OnOff);
+void             LISTBOX_SetItemSel       (LISTBOX_Handle hObj, unsigned Index, int OnOff);
+void             LISTBOX_SetItemSpacing   (LISTBOX_Handle hObj, unsigned Value);
+void             LISTBOX_SetMulti         (LISTBOX_Handle hObj, int Mode);
+void             LISTBOX_SetOwner         (LISTBOX_Handle hObj, WM_HWIN hOwner);
+void             LISTBOX_SetOwnerDraw     (LISTBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void             LISTBOX_SetScrollStepH   (LISTBOX_Handle hObj, int Value);
+void             LISTBOX_SetSel           (LISTBOX_Handle hObj, int Sel);
+void             LISTBOX_SetScrollbarColor(LISTBOX_Handle hObj, unsigned Index, GUI_COLOR Color);
+void             LISTBOX_SetScrollbarWidth(LISTBOX_Handle hObj, unsigned Width);
+void             LISTBOX_SetString        (LISTBOX_Handle hObj, const char * s, unsigned Index);
+void             LISTBOX_SetText          (LISTBOX_Handle hObj, const GUI_ConstString * ppText);
+void             LISTBOX_SetTextAlign     (LISTBOX_Handle hObj, int Align);
+GUI_COLOR        LISTBOX_SetTextColor     (LISTBOX_Handle hObj, unsigned Index, GUI_COLOR Color);
+int              LISTBOX_SetUserData      (LISTBOX_Handle hObj, const void * pSrc, int NumBytes);
+int              LISTBOX_UpdateScrollers  (LISTBOX_Handle hObj);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+
+const GUI_FONT * LISTBOX_GetDefaultFont(void);
+int              LISTBOX_GetDefaultScrollStepH (void);
+GUI_COLOR        LISTBOX_GetDefaultBkColor     (unsigned Index);
+int              LISTBOX_GetDefaultTextAlign   (void);
+GUI_COLOR        LISTBOX_GetDefaultTextColor   (unsigned Index);
+void             LISTBOX_SetDefaultFont        (const GUI_FONT * pFont);
+void             LISTBOX_SetDefaultScrollStepH (int Value);
+void             LISTBOX_SetDefaultBkColor     (unsigned Index, GUI_COLOR Color);
+void             LISTBOX_SetDefaultTextAlign   (int Align);
+void             LISTBOX_SetDefaultTextColor   (unsigned Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+*       Compatibility to older versions
+*
+**********************************************************************
+*/
+
+#define LISTBOX_SetBackColor(hObj, Index, Color) LISTBOX_SetBkColor(hObj, Index, Color)
+#define LISTBOX_DeleteString  LISTBOX_DeleteItem
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // LISTBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTBOX_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,152 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTBOX_Private.h
+Purpose     : Private LISTBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTBOX_PRIVATE_H
+#define LISTBOX_PRIVATE_H
+
+#include "LISTBOX.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define LISTBOX_ITEM_SELECTED (1 << 0)
+#define LISTBOX_ITEM_DISABLED (1 << 1)
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+  U16  xSize, ySize;
+  I32  ItemPosY;
+  U8   Status;
+  char acText[1];
+} LISTBOX_ITEM;
+
+typedef struct {
+  const GUI_FONT * pFont;
+  U16              ScrollStepH;
+  GUI_COLOR aBackColor[4];
+  GUI_COLOR aTextColor[4];
+  GUI_COLOR aScrollbarColor[3];
+  I16 Align;
+} LISTBOX_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  GUI_ARRAY ItemArray;
+  WIDGET_DRAW_ITEM_FUNC* pfDrawItem;
+  WM_SCROLL_STATE ScrollStateV;
+  WM_SCROLL_STATE ScrollStateH;
+  LISTBOX_PROPS Props;
+  WM_HWIN hOwner;
+  I16 Sel;                        /* current selection */
+  U8 Flags;
+  U8  ScrollbarWidth;
+  U16 ItemSpacing;
+  U16 ContentSizeX;
+  U16 FixedScrollPos;
+} LISTBOX_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define LISTBOX_INIT_ID(p) p->Widget.DebugId = LISTBOX_ID
+#else
+  #define LISTBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  LISTBOX_Obj * LISTBOX_LockH(LISTBOX_Handle h);
+  #define LISTBOX_LOCK_H(h)   LISTBOX_LockH(h)
+#else
+  #define LISTBOX_LOCK_H(h)   (LISTBOX_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern LISTBOX_PROPS LISTBOX_DefaultProps;
+
+/*********************************************************************
+*
+*       Private (module internal) functions
+*
+**********************************************************************
+*/
+unsigned     LISTBOX__GetNumItems           (const LISTBOX_Obj * pObj);
+const char * LISTBOX__GetpStringLocked      (LISTBOX_Handle hObj, int Index, LISTBOX_ITEM ** ppItem);
+void         LISTBOX__InvalidateInsideArea  (LISTBOX_Handle hObj);
+void         LISTBOX__InvalidateItem        (LISTBOX_Handle hObj, int Sel);
+void         LISTBOX__InvalidateItemAndBelow(LISTBOX_Handle hObj, int Sel);
+void         LISTBOX__InvalidateItemSize    (const LISTBOX_Obj * pObj, unsigned Index);
+void         LISTBOX__SetScrollbarColor     (LISTBOX_Handle hObj, const LISTBOX_Obj * pObj);
+void         LISTBOX__SetScrollbarWidth     (LISTBOX_Handle hObj, const LISTBOX_Obj * pObj);
+void         LISTBOX__AddSize               (LISTBOX_Obj * pObj, int Index);
+
+#endif /* GUI_WINSUPPORT */
+
+#else                            /* Avoid problems with empty object modules */
+  void LISTBOX_C(void) {}
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTVIEW.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,202 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTVIEW.h
+Purpose     : LISTVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTVIEW_H
+#define LISTVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      // Req. for Create indirect data structure
+#include "ICONVIEW.h"
+#include "HEADER.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*/
+#define LISTVIEW_ALL_ITEMS  -1
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define LISTVIEW_CI_UNSEL       0
+#define LISTVIEW_CI_SEL         1
+#define LISTVIEW_CI_SELFOCUS    2
+#define LISTVIEW_CI_DISABLED    3
+
+/************************************************************
+*
+*       Create / Status flags
+*/
+#define LISTVIEW_CF_AUTOSCROLLBAR_H   (1 << 0)
+#define LISTVIEW_CF_AUTOSCROLLBAR_V   (1 << 1)
+#define LISTVIEW_CF_CELL_SELECT       (1 << 2)                     // Create Flag used to enable cell selection
+#define LISTVIEW_SF_AUTOSCROLLBAR_H   LISTVIEW_CF_AUTOSCROLLBAR_H
+#define LISTVIEW_SF_AUTOSCROLLBAR_V   LISTVIEW_CF_AUTOSCROLLBAR_V
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM LISTVIEW_Handle;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+LISTVIEW_Handle LISTVIEW_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+LISTVIEW_Handle LISTVIEW_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+LISTVIEW_Handle LISTVIEW_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+LISTVIEW_Handle LISTVIEW_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
+LISTVIEW_Handle LISTVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTVIEW_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+int              LISTVIEW_AddColumn           (LISTVIEW_Handle hObj, int Width, const char * s, int Align);
+int              LISTVIEW_AddRow              (LISTVIEW_Handle hObj, const GUI_ConstString * ppText);
+int              LISTVIEW_CompareText         (const void * p0, const void * p1);
+int              LISTVIEW_CompareDec          (const void * p0, const void * p1);
+void             LISTVIEW_DecSel              (LISTVIEW_Handle hObj);
+void             LISTVIEW_DeleteAllRows       (LISTVIEW_Handle hObj);
+void             LISTVIEW_DeleteColumn        (LISTVIEW_Handle hObj, unsigned Index);
+void             LISTVIEW_DeleteRow           (LISTVIEW_Handle hObj, unsigned Index);
+void             LISTVIEW_DeleteRowSorted     (LISTVIEW_Handle hObj, int Row);
+void             LISTVIEW_DisableRow          (LISTVIEW_Handle hObj, unsigned Row);
+void             LISTVIEW_DisableSort         (LISTVIEW_Handle hObj);
+void             LISTVIEW_EnableCellSelect    (LISTVIEW_Handle hObj, unsigned OnOff);  // Enables/disables cell selection
+void             LISTVIEW_EnableRow           (LISTVIEW_Handle hObj, unsigned Row);
+void             LISTVIEW_EnableSort          (LISTVIEW_Handle hObj);
+GUI_COLOR        LISTVIEW_GetBkColor          (LISTVIEW_Handle hObj, unsigned Index);
+const GUI_FONT * LISTVIEW_GetFont             (LISTVIEW_Handle hObj);
+HEADER_Handle    LISTVIEW_GetHeader           (LISTVIEW_Handle hObj);
+void             LISTVIEW_GetItemRect         (LISTVIEW_Handle hObj, U32 Col, U32 Row, GUI_RECT * pRect);
+void             LISTVIEW_GetItemText         (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, char * pBuffer, unsigned MaxSize);
+unsigned         LISTVIEW_GetItemTextLen      (LISTVIEW_Handle hObj, unsigned Column, unsigned Row);
+void             LISTVIEW_GetItemTextSorted   (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, char * pBuffer, unsigned MaxSize);
+unsigned         LISTVIEW_GetLBorder          (LISTVIEW_Handle hObj);
+unsigned         LISTVIEW_GetNumColumns       (LISTVIEW_Handle hObj);
+unsigned         LISTVIEW_GetNumRows          (LISTVIEW_Handle hObj);
+unsigned         LISTVIEW_GetRBorder          (LISTVIEW_Handle hObj);
+int              LISTVIEW_GetSel              (LISTVIEW_Handle hObj);
+int              LISTVIEW_GetSelCol           (LISTVIEW_Handle hObj);
+int              LISTVIEW_GetSelUnsorted      (LISTVIEW_Handle hObj);
+int              LISTVIEW_GetTextAlign        (LISTVIEW_Handle hObj, unsigned ColIndex);
+GUI_COLOR        LISTVIEW_GetTextColor        (LISTVIEW_Handle hObj, unsigned Index);
+int              LISTVIEW_GetUserData         (LISTVIEW_Handle hObj, void * pDest, int NumBytes);
+U32              LISTVIEW_GetUserDataRow      (LISTVIEW_Handle hObj, unsigned Row);
+GUI_WRAPMODE     LISTVIEW_GetWrapMode         (LISTVIEW_Handle hObj);
+void             LISTVIEW_IncSel              (LISTVIEW_Handle hObj);
+int              LISTVIEW_InsertRow           (LISTVIEW_Handle hObj, unsigned Index, const GUI_ConstString * ppText);
+int              LISTVIEW_OwnerDraw           (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+unsigned         LISTVIEW_RowIsDisabled       (LISTVIEW_Handle hObj, unsigned Row);
+void             LISTVIEW_SetAutoScrollH      (LISTVIEW_Handle hObj, int OnOff);
+void             LISTVIEW_SetAutoScrollV      (LISTVIEW_Handle hObj, int OnOff);
+void             LISTVIEW_SetItemBitmap       (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, int xOff, int yOff, const GUI_BITMAP * pBitmap);
+void             LISTVIEW_SetBkColor          (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void             LISTVIEW_SetColumnWidth      (LISTVIEW_Handle hObj, unsigned int Index, int Width);
+void             LISTVIEW_SetCompareFunc      (LISTVIEW_Handle hObj, unsigned Column, int (* fpCompare)(const void * p0, const void * p1));
+unsigned         LISTVIEW_SetFixed            (LISTVIEW_Handle hObj, unsigned Fixed);
+void             LISTVIEW_SetFont             (LISTVIEW_Handle hObj, const GUI_FONT * pFont);
+int              LISTVIEW_SetGridVis          (LISTVIEW_Handle hObj, int Show);
+void             LISTVIEW_SetHeaderHeight     (LISTVIEW_Handle hObj, unsigned HeaderHeight);
+void             LISTVIEW_SetItemBkColor      (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
+void             LISTVIEW_SetItemText         (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * s);
+void             LISTVIEW_SetItemTextColor    (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
+void             LISTVIEW_SetItemTextSorted   (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * pText);
+void             LISTVIEW_SetLBorder          (LISTVIEW_Handle hObj, unsigned BorderSize);
+void             LISTVIEW_SetOwnerDraw        (LISTVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void             LISTVIEW_SetRBorder          (LISTVIEW_Handle hObj, unsigned BorderSize);
+unsigned         LISTVIEW_SetRowHeight        (LISTVIEW_Handle hObj, unsigned RowHeight);
+void             LISTVIEW_SetSel              (LISTVIEW_Handle hObj, int Sel);
+void             LISTVIEW_SetSelCol           (LISTVIEW_Handle hObj, int NewCol);
+void             LISTVIEW_SetSelUnsorted      (LISTVIEW_Handle hObj, int Sel);
+unsigned         LISTVIEW_SetSort             (LISTVIEW_Handle hObj, unsigned Column, unsigned Reverse);
+void             LISTVIEW_SetTextAlign        (LISTVIEW_Handle hObj, unsigned int Index, int Align);
+void             LISTVIEW_SetTextColor        (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
+int              LISTVIEW_SetUserData         (LISTVIEW_Handle hObj, const void * pSrc, int NumBytes);
+void             LISTVIEW_SetUserDataRow      (LISTVIEW_Handle hObj, unsigned Row, U32 UserData);
+void             LISTVIEW_SetWrapMode         (LISTVIEW_Handle hObj, GUI_WRAPMODE WrapMode);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+
+GUI_COLOR        LISTVIEW_SetDefaultBkColor  (unsigned  Index, GUI_COLOR Color);
+const GUI_FONT * LISTVIEW_SetDefaultFont     (const GUI_FONT * pFont);
+GUI_COLOR        LISTVIEW_SetDefaultGridColor(GUI_COLOR Color);
+GUI_COLOR        LISTVIEW_SetDefaultTextColor(unsigned  Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // LISTVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTVIEW_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,193 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTVIEW_Private.h
+Purpose     : Private LISTVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTVIEW_PRIVATE_H
+#define LISTVIEW_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#include <stddef.h>
+
+#include "LISTVIEW.h"
+#include "GUI_ARRAY.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define SORT_TYPE                 U16
+
+#define LISTVIEW_CELL_INFO_COLORS (1 << 0)
+#define LISTVIEW_CELL_INFO_BITMAP (1 << 1)
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+  GUI_COLOR                    aBkColor[4];
+  GUI_COLOR                    aTextColor[4];
+  GUI_COLOR                    GridColor;
+  const GUI_FONT             * pFont;
+  U16                          ScrollStepH;
+  GUI_WRAPMODE                 WrapMode;
+  int                          DefaultAlign;
+} LISTVIEW_PROPS;
+
+typedef struct {
+  void                      (* pfDraw)(LISTVIEW_Handle hObj, unsigned Column, unsigned Row, GUI_RECT * pRect);
+  void                       * pData;
+  GUI_COLOR                    aBkColor[4];
+  GUI_COLOR                    aTextColor[4];
+  I16                          xOff, yOff;
+  U8                           Flags;
+} LISTVIEW_CELL_INFO;
+
+typedef struct {
+  WM_HMEM                      hCellInfo;                                         // Optional cell info. If 0, there is no cell info. (Defaults used)
+  char                         acText[1];
+} LISTVIEW_CELL;
+
+typedef struct {
+  GUI_ARRAY                    hCellArray;
+  char                         Disabled;
+  U32                          UserData;
+} LISTVIEW_ROW;
+
+typedef struct {
+  U8                           Align;
+  int                       (* fpCompare)    (const void * p0, const void * p1);  // User function to be called to compare the contents of 2 cells
+} LISTVIEW_COLUMN;
+
+typedef struct LISTVIEW_Obj LISTVIEW_Obj;
+
+typedef struct {
+  WM_HMEM                      hSortArray;
+  SORT_TYPE                    SortArrayNumItems;
+  int                       (* fpSort)(LISTVIEW_Handle hObj);                     // Function to be called to get a sorted array
+  void                      (* fpFree)(WM_HMEM hObj);                             // Function to be called to free the sort object
+  U8                           Reverse;
+} LISTVIEW_SORT;
+
+struct LISTVIEW_Obj {
+  WIDGET                       Widget;
+  HEADER_Handle                hHeader;
+  WIDGET_DRAW_ITEM_FUNC *      pfDrawItem;
+  GUI_ARRAY                    hRowArray;                                         // Each entry is a handle of LISTVIEW_ROW structure.
+  GUI_ARRAY                    hColumnArray;                                      // Each entry is a handle of LISTVIEW_COLUMN structure.
+  LISTVIEW_PROPS               Props;
+  int                          Sel;
+  int                          SelCol;
+  int                          ShowGrid;
+  int                          SortIndex;                                         // Column for sorting
+  unsigned                     RowDistY;
+  unsigned                     LBorder;
+  unsigned                     RBorder;
+  unsigned                     Fixed;
+  WM_SCROLL_STATE              ScrollStateV;
+  WM_SCROLL_STATE              ScrollStateH;
+  WM_HMEM                      hSort;
+  U8                           IsSorted;
+  U8                           IsPresorted;
+  U8                           ReverseSort;                                       // Set to 1 if reverse sorting is required
+  U8                           Flags;
+};
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define LISTVIEW_INIT_ID(p) (p->Widget.DebugId = LISTVIEW_ID)
+#else
+  #define LISTVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  LISTVIEW_Obj * LISTVIEW_LockH(LISTVIEW_Handle h);
+  #define LISTVIEW_LOCK_H(h)   LISTVIEW_LockH(h)
+#else
+  #define LISTVIEW_LOCK_H(h)   (LISTVIEW_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private (module internal) data
+*
+**********************************************************************
+*/
+extern LISTVIEW_PROPS LISTVIEW_DefaultProps;
+
+/*********************************************************************
+*
+*       Private (module internal) functions
+*
+**********************************************************************
+*/
+LISTVIEW_CELL_INFO * LISTVIEW__CreateCellInfoLocked (LISTVIEW_Handle   hObj, unsigned Column, unsigned Row);
+unsigned             LISTVIEW__GetNumColumns        (LISTVIEW_Obj    * pObj);
+unsigned             LISTVIEW__GetNumRows           (LISTVIEW_Obj    * pObj);
+LISTVIEW_CELL_INFO * LISTVIEW__GetpCellInfo         (LISTVIEW_Handle   hObj, unsigned Column, unsigned Row);
+LISTVIEW_ROW       * LISTVIEW__GetpRow              (LISTVIEW_Handle   hObj, int Row);
+unsigned             LISTVIEW__GetRowDistY          (LISTVIEW_Obj    * pObj);
+unsigned             LISTVIEW__GetRowSorted         (LISTVIEW_Handle   hObj, int Row);
+void                 LISTVIEW__InvalidateInsideArea (LISTVIEW_Handle   hObj);
+void                 LISTVIEW__InvalidateRow        (LISTVIEW_Handle   hObj, int Sel);
+void                 LISTVIEW__InvalidateRowAndBelow(LISTVIEW_Handle   hObj, int Sel);
+void                 LISTVIEW__SetSel               (LISTVIEW_Handle   hObj, int NewSel);
+void                 LISTVIEW__SetSelCol            (LISTVIEW_Handle   hObj, int NewSelCol);
+int                  LISTVIEW__UpdateScrollParas    (LISTVIEW_Handle   hObj);
+
+#endif // GUI_WINSUPPORT
+#endif // LISTVIEW_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTWHEEL.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,154 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTWHEEL.h
+Purpose     : LISTWHEEL widget include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTWHEEL_H
+#define LISTWHEEL_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {        // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define LISTWHEEL_CI_UNSEL 0
+#define LISTWHEEL_CI_SEL   1
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM LISTWHEEL_Handle;
+
+/*********************************************************************
+*
+*       Standard member functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+LISTWHEEL_Handle LISTWHEEL_Create        (const GUI_ConstString * ppText, int x0, int y0, int xSize, int ySize, int Flags);
+LISTWHEEL_Handle LISTWHEEL_CreateAsChild (const GUI_ConstString * ppText, WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+LISTWHEEL_Handle LISTWHEEL_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+LISTWHEEL_Handle LISTWHEEL_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent,
+                                          int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText);
+LISTWHEEL_Handle LISTWHEEL_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent,
+                                          int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText, int NumExtraBytes);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTWHEEL_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void      LISTWHEEL_AddString      (LISTWHEEL_Handle hObj, const char * s);
+GUI_COLOR LISTWHEEL_GetBkColor     (LISTWHEEL_Handle hObj, unsigned int Index);
+void *    LISTWHEEL_GetItemData    (LISTWHEEL_Handle hObj, unsigned Index); /* not to be documented */
+void      LISTWHEEL_GetItemText    (LISTWHEEL_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int       LISTWHEEL_GetItemFromPos (LISTWHEEL_Handle hObj, int yPos);
+int       LISTWHEEL_GetLBorder     (LISTWHEEL_Handle hObj);
+unsigned  LISTWHEEL_GetLineHeight  (LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetNumItems    (LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetPos         (LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetRBorder     (LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetSel         (LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetSnapPosition(LISTWHEEL_Handle hObj);
+int       LISTWHEEL_GetTextAlign   (LISTWHEEL_Handle hObj);
+GUI_COLOR LISTWHEEL_GetTextColor   (LISTWHEEL_Handle hObj, unsigned int Index);
+int       LISTWHEEL_GetUserData    (LISTWHEEL_Handle hObj, void * pDest, int NumBytes);
+int       LISTWHEEL_IsMoving       (LISTWHEEL_Handle hObj);
+void      LISTWHEEL_MoveToPos      (LISTWHEEL_Handle hObj, unsigned int Index);
+int       LISTWHEEL_OwnerDraw      (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void      LISTWHEEL_SetBkColor     (LISTWHEEL_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void      LISTWHEEL_SetDeceleration(LISTWHEEL_Handle hObj, unsigned Deceleration);
+void      LISTWHEEL_SetFont        (LISTWHEEL_Handle hObj, const GUI_FONT * pFont);
+void      LISTWHEEL_SetItemData    (LISTWHEEL_Handle hObj, unsigned Index, void * pData); /* not to be documented */
+void      LISTWHEEL_SetLBorder     (LISTWHEEL_Handle hObj, unsigned BorderSize);
+void      LISTWHEEL_SetLineHeight  (LISTWHEEL_Handle hObj, unsigned LineHeight);
+void      LISTWHEEL_SetOwnerDraw   (LISTWHEEL_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfOwnerDraw);
+void      LISTWHEEL_SetPos         (LISTWHEEL_Handle hObj, unsigned int Index);
+void      LISTWHEEL_SetRBorder     (LISTWHEEL_Handle hObj, unsigned BorderSize);
+void      LISTWHEEL_SetSel         (LISTWHEEL_Handle hObj, int Sel);
+void      LISTWHEEL_SetSnapPosition(LISTWHEEL_Handle hObj, int SnapPosition);
+void      LISTWHEEL_SetText        (LISTWHEEL_Handle hObj, const GUI_ConstString * ppText);
+void      LISTWHEEL_SetTextAlign   (LISTWHEEL_Handle hObj, int Align);
+void      LISTWHEEL_SetTextColor   (LISTWHEEL_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void      LISTWHEEL_SetTimerPeriod (LISTWHEEL_Handle hObj, GUI_TIMER_TIME TimerPeriod);
+int       LISTWHEEL_SetUserData    (LISTWHEEL_Handle hObj, const void * pSrc, int NumBytes);
+void      LISTWHEEL_SetVelocity    (LISTWHEEL_Handle hObj, int Velocity);
+
+const GUI_FONT * LISTWHEEL_GetFont(LISTWHEEL_Handle hObj);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // LISTWHEEL_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTWHEEL_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,142 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LISTWHEEL_Private.h
+Purpose     : Private LISTWHEEL include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTWHEEL_PRIVATE_H
+#define LISTWHEEL_PRIVATE_H
+
+#include "LISTWHEEL.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define LISTWHEEL_STATE_PRESSED WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+  void * pData;
+  char   acText[1];
+} LISTWHEEL_ITEM;
+
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR        aBackColor[2];
+  GUI_COLOR        aTextColor[2];
+  I16              Align;
+  unsigned         Deceleration;
+} LISTWHEEL_PROPS;
+
+typedef struct {
+  WIDGET                  Widget;
+  GUI_ARRAY               ItemArray;
+  WIDGET_DRAW_ITEM_FUNC * pfOwnerDraw;
+  LISTWHEEL_PROPS         Props;
+  WM_HMEM                 hTimer;
+  unsigned                LBorder;
+  unsigned                RBorder;
+  unsigned                LineHeight;
+  int                     Sel;
+  GUI_TIMER_TIME          TimeTouched;      // Time stamp of last touch event
+  GUI_TIMER_TIME          TimeTouchedLast;  // Time of the last touch
+  int                     PosTouchedLast;   // Last touched position in pixels
+  int                     Pos;              // Current position in pixels
+  int                     Velocity;         // Motion in pixels
+  int                     SnapPosition;     // Snap position in pixels
+  int                     TouchPos;         // Y-position of last touch event
+  int                     ySizeData;        // Data size in pixels
+  int                     Destination;      // Destination position in pixels
+  GUI_TIMER_TIME          TimerPeriod;      // Period of timer events
+} LISTWHEEL_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define LISTWHEEL_INIT_ID(p)  (p->Widget.DebugId = LISTWHEEL_ID)
+#else
+  #define LISTWHEEL_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  LISTWHEEL_OBJ * LISTWHEEL_LockH(LISTWHEEL_Handle h);
+  #define LISTWHEEL_LOCK_H(h)   LISTWHEEL_LockH(h)
+#else
+  #define LISTWHEEL_LOCK_H(h)   (LISTWHEEL_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private (module internal) data
+*
+**********************************************************************
+*/
+extern LISTWHEEL_PROPS LISTWHEEL_DefaultProps;
+
+/*********************************************************************
+*
+*       Private (module internal) functions
+*
+**********************************************************************
+*/
+const char * LISTWHEEL__GetpStringLocked(LISTWHEEL_Handle hObj, int Index, LISTWHEEL_ITEM ** ppItem);
+
+#endif // GUI_WINSUPPORT
+#endif // LISTWHEEL_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MENU.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,272 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MENU.h
+Purpose     : MENU include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MENU_H
+#define MENU_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "DIALOG_Intern.h"      // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define MENU_SKIN_FLEX    MENU_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Create flags
+*/
+#define MENU_CF_HORIZONTAL              (0<<0)
+#define MENU_CF_VERTICAL                (1<<0)
+#define MENU_CF_OPEN_ON_POINTEROVER     (1<<1)  // Normally a menu opens first when clicked on it
+#define MENU_CF_CLOSE_ON_SECOND_CLICK   (1<<2)  // Normally a menu closes only when clicked outside it
+#define MENU_CF_HIDE_DISABLED_SEL       (1<<3)  // Hides the selection when a disabled item is selected
+
+/*********************************************************************
+*
+*       Menu item flags
+*/
+#define MENU_IF_DISABLED                (1<<0)  // Indicates that item is disabled
+#define MENU_IF_SEPARATOR               (1<<1)  // Indicates that item is a separator
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define MENU_CI_ENABLED                 0
+#define MENU_CI_SELECTED                1
+#define MENU_CI_DISABLED                2
+#define MENU_CI_DISABLED_SEL            3
+#define MENU_CI_ACTIVE_SUBMENU          4
+
+/*********************************************************************
+*
+*       Border indices
+*/
+#define MENU_BI_LEFT                    0
+#define MENU_BI_RIGHT                   1
+#define MENU_BI_TOP                     2
+#define MENU_BI_BOTTOM                  3
+
+/*********************************************************************
+*
+*       Message types
+*/
+#define MENU_ON_ITEMSELECT              0   // Send to owner when selecting a menu item
+#define MENU_ON_INITMENU                1   // Send to owner when for the first time selecting a submenu
+#define MENU_ON_INITSUBMENU             2   // Send to owner when selecting a submenu
+#define MENU_ON_OPEN                    3   // Internal message of menu widget (only send to submenus)
+#define MENU_ON_CLOSE                   4   // Internal message of menu widget (only send to submenus)
+#define MENU_IS_MENU                    5   // Internal message of menu widget. Owner must call
+                                            // WM_DefaultProc() when not handle the message
+#define MENU_ON_ITEMACTIVATE            6   // Send to owner when highlighting a menu item
+#define MENU_ON_ITEMPRESSED             7   // Send to owner when a menu item has been pressed
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define MENU_SKINFLEX_PI_ENABLED        0
+#define MENU_SKINFLEX_PI_SELECTED       1
+#define MENU_SKINFLEX_PI_DISABLED       2
+#define MENU_SKINFLEX_PI_DISABLED_SEL   3
+#define MENU_SKINFLEX_PI_ACTIVE_SUBMENU 4
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM MENU_Handle;
+
+typedef struct {
+  //
+  // Background
+  //  
+  GUI_COLOR aBkColorH[2];
+  GUI_COLOR BkColorV;
+  GUI_COLOR FrameColorH;
+  GUI_COLOR FrameColorV;
+  //
+  // Selection
+  //
+  GUI_COLOR aSelColorH[2];
+  GUI_COLOR aSelColorV[2];
+  GUI_COLOR FrameColorSelH;
+  GUI_COLOR FrameColorSelV;
+  //
+  // Separator
+  //
+  GUI_COLOR aSepColorH[2];
+  GUI_COLOR aSepColorV[2];
+  //
+  // Arrow
+  //
+  GUI_COLOR ArrowColor;
+  //
+  // Text
+  //
+  GUI_COLOR TextColor;
+} MENU_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Menu message data
+*/
+typedef struct {
+  U16 MsgType;
+  U16 ItemId;
+} MENU_MSG_DATA;
+
+/*********************************************************************
+*
+*       Menu item data
+*/
+typedef struct {
+  const char  * pText;
+  U16           Id;
+  U16           Flags;
+  MENU_Handle   hSubmenu;
+} MENU_ITEM_DATA;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+MENU_Handle MENU_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+MENU_Handle MENU_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+MENU_Handle MENU_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MENU_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Individual member functions
+*
+**********************************************************************
+*/
+void             MENU_AddItem       (MENU_Handle hObj, const MENU_ITEM_DATA * pItemData);
+void             MENU_Attach        (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
+void             MENU_DeleteItem    (MENU_Handle hObj, U16 ItemId);
+void             MENU_DisableItem   (MENU_Handle hObj, U16 ItemId);
+void             MENU_EnableItem    (MENU_Handle hObj, U16 ItemId);
+GUI_COLOR        MENU_GetBkColor    (MENU_Handle hObj, unsigned ColorIndex);
+const GUI_FONT * MENU_GetFont       (MENU_Handle hObj);
+void             MENU_GetItem       (MENU_Handle hObj, U16 ItemId, MENU_ITEM_DATA * pItemData);
+void             MENU_GetItemText   (MENU_Handle hObj, U16 ItemId, char * pBuffer, unsigned BufferSize);
+unsigned         MENU_GetNumItems   (MENU_Handle hObj);
+WM_HWIN          MENU_GetOwner      (MENU_Handle hObj);
+GUI_COLOR        MENU_GetTextColor  (MENU_Handle hObj, unsigned ColorIndex);
+int              MENU_GetUserData   (MENU_Handle hObj, void * pDest, int NumBytes);
+void             MENU_InsertItem    (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA * pItemData);
+void             MENU_Popup         (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
+void             MENU_SetBkColor    (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
+void             MENU_SetBorderSize (MENU_Handle hObj, unsigned BorderIndex, U8 BorderSize);
+void             MENU_SetFont       (MENU_Handle hObj, const GUI_FONT * pFont);
+void             MENU_SetItem       (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA * pItemData);
+void             MENU_SetOwner      (MENU_Handle hObj, WM_HWIN hOwner);
+int              MENU_SetSel        (MENU_Handle hObj, int Sel);
+void             MENU_SetTextColor  (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
+int              MENU_SetUserData   (MENU_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR             MENU_GetDefaultTextColor  (unsigned ColorIndex);
+GUI_COLOR             MENU_GetDefaultBkColor    (unsigned ColorIndex);
+U8                    MENU_GetDefaultBorderSize (unsigned BorderIndex);
+const WIDGET_EFFECT * MENU_GetDefaultEffect     (void);
+const GUI_FONT      * MENU_GetDefaultFont       (void);
+void                  MENU_SetDefaultTextColor  (unsigned ColorIndex, GUI_COLOR Color);
+void                  MENU_SetDefaultBkColor    (unsigned ColorIndex, GUI_COLOR Color);
+void                  MENU_SetDefaultBorderSize (unsigned BorderIndex, U8 BorderSize);
+void                  MENU_SetDefaultEffect     (const WIDGET_EFFECT * pEffect);
+void                  MENU_SetDefaultFont       (const GUI_FONT * pFont);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+int                     MENU_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void                    MENU_GetSkinFlexProps     (MENU_SKINFLEX_PROPS * pProps, int Index);
+WIDGET_DRAW_ITEM_FUNC * MENU_SetDefaultSkin       (WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void                    MENU_SetDefaultSkinClassic(void);
+void                    MENU_SetSkinClassic       (MENU_Handle hObj);
+void                    MENU_SetSkin              (MENU_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void                    MENU_SetSkinFlexProps     (const MENU_SKINFLEX_PROPS * pProps, int Index);
+void                    MENU_SkinEnableArrow      (MENU_Handle hObj, int OnOff);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // MENU_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MENU_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,183 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MENU_Private.h
+Purpose     : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef MENU_PRIVATE_H
+#define MENU_PRIVATE_H
+
+#include "WIDGET.h"
+#include "MENU.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Status flags
+*/
+#define MENU_SF_HORIZONTAL              MENU_CF_HORIZONTAL
+#define MENU_SF_VERTICAL                MENU_CF_VERTICAL
+#define MENU_SF_OPEN_ON_POINTEROVER     MENU_CF_OPEN_ON_POINTEROVER
+#define MENU_SF_CLOSE_ON_SECOND_CLICK   MENU_CF_CLOSE_ON_SECOND_CLICK
+#define MENU_SF_HIDE_DISABLED_SEL       MENU_CF_HIDE_DISABLED_SEL
+
+#define MENU_SF_ACTIVE                  (1 << 6)  // Internal flag only
+#define MENU_SF_POPUP                   (1 << 7)  // Internal flag only
+#define MENU_SF_ARROW                   (1 << 8)  // Internal flag only
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+//
+// MENU_SKIN_PRIVATE
+//
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} MENU_SKIN_PRIVATE;
+
+//
+// MENU_ITEM
+//
+typedef struct {
+  MENU_Handle hSubmenu;
+  U16         Id;
+  U16         Flags;
+  int         TextWidth;
+  char        acText[1];
+} MENU_ITEM;
+
+//
+// MENU_PROPS
+//
+typedef struct {
+  GUI_COLOR           aTextColor[5];
+  GUI_COLOR           aBkColor[5];
+  U8                  aBorder[4];
+  const GUI_FONT    * pFont;
+  MENU_SKIN_PRIVATE   SkinPrivate;
+} MENU_PROPS;
+
+//
+// MENU_Obj
+//
+typedef struct {
+  WIDGET              Widget;
+  MENU_PROPS          Props;
+  GUI_ARRAY           ItemArray;
+  WM_HWIN             hOwner;
+  U16                 Flags;
+  char                IsSubmenuActive;
+  int                 Width;
+  int                 Height;
+  int                 Sel;
+  unsigned            ArrowAreaWidth;
+  WIDGET_SKIN const * pWidgetSkin;
+} MENU_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define MENU_INIT_ID(pObj)  (pObj->Widget.DebugId = MENU_ID)
+#else
+  #define MENU_INIT_ID(pObj)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  MENU_Obj * MENU_LockH(MENU_Handle hObj);
+  #define MENU_LOCK_H(hObj)   MENU_LockH(hObj)
+#else
+  #define MENU_LOCK_H(hObj)   (MENU_Obj *)GUI_LOCK_H(hObj)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+
+extern MENU_PROPS            MENU__DefaultProps;
+extern const WIDGET_EFFECT * MENU__pDefaultEffect;
+
+extern const WIDGET_SKIN     MENU__SkinClassic;
+extern       WIDGET_SKIN     MENU__Skin;
+
+extern WIDGET_SKIN const   * MENU__pSkinDefault;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+int       MENU__CalcMenuSizeX         (MENU_Handle hObj);
+int       MENU__CalcMenuSizeY         (MENU_Handle hObj);
+int       MENU__FindItem              (MENU_Handle hObj, U16 ItemId, MENU_Handle* phMenu);
+int       MENU__GetEffectSize         (MENU_Handle hObj);
+int       MENU__GetItemHeight         (MENU_Handle hObj, unsigned Index);
+int       MENU__GetItemWidth          (MENU_Handle hObj, unsigned Index);
+unsigned  MENU__GetNumItems           (MENU_Obj * pObj);
+int       MENU__HasEffect             (MENU_Handle hObj, MENU_Obj * pObj);
+void      MENU__InvalidateItem        (MENU_Handle hObj, unsigned Index);
+void      MENU__RecalcTextWidthOfItems(MENU_Obj * pObj);
+void      MENU__ResizeMenu            (MENU_Handle hObj);
+int       MENU__SendMenuMessage       (MENU_Handle hObj, WM_HWIN hDestWin, U16 MsgType, U16 ItemId);
+char      MENU__SetItem               (MENU_Handle hObj, unsigned Index, const MENU_ITEM_DATA* pItemData);
+void      MENU__SetItemFlags          (MENU_Obj * pObj, unsigned Index, U16 Mask, U16 Flags);
+
+#endif  // GUI_WINSUPPORT
+#endif  // MENU_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MESSAGEBOX.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,74 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MESSAGEBOX.h
+Purpose     : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MESSAGEBOX_H
+#define MESSAGEBOX_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+WM_HWIN MESSAGEBOX_Create(const char * sMessage, const char * sCaption, int Flags);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MESSAGEBOX_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* MESSAGEBOX */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIEDIT.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,167 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MULTIEDIT.h
+Purpose     : MULTIEDIT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIEDIT_H
+#define MULTIEDIT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#define MULTIEDIT_CF_READONLY        (1 << 0)
+#define MULTIEDIT_CF_INSERT          (1 << 2)
+#define MULTIEDIT_CF_AUTOSCROLLBAR_V (1 << 3)
+#define MULTIEDIT_CF_AUTOSCROLLBAR_H (1 << 4)
+#define MULTIEDIT_CF_PASSWORD        (1 << 5)
+#define MULTIEDIT_CF_SHOWCURSOR      (1 << 6)
+
+#define MULTIEDIT_SF_READONLY        MULTIEDIT_CF_READONLY
+#define MULTIEDIT_SF_INSERT          MULTIEDIT_CF_INSERT
+#define MULTIEDIT_SF_AUTOSCROLLBAR_V MULTIEDIT_CF_AUTOSCROLLBAR_V
+#define MULTIEDIT_SF_AUTOSCROLLBAR_H MULTIEDIT_CF_AUTOSCROLLBAR_H
+#define MULTIEDIT_SF_PASSWORD        MULTIEDIT_CF_PASSWORD
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define MULTIEDIT_CI_EDIT     0
+#define MULTIEDIT_CI_READONLY 1
+
+/*********************************************************************
+*
+*                         Public Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM MULTIEDIT_HANDLE;
+
+/*********************************************************************
+*
+*                 Create functions
+*
+**********************************************************************
+*/
+MULTIEDIT_HANDLE MULTIEDIT_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int ExFlags, const char * pText, int MaxLen);
+MULTIEDIT_HANDLE MULTIEDIT_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int BufferSize, const char * pText);
+MULTIEDIT_HANDLE MULTIEDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+MULTIEDIT_HANDLE MULTIEDIT_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int BufferSize, const char * pText, int NumExtraBytes);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MULTIEDIT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*                 Member functions
+*
+**********************************************************************
+*/
+
+int              MULTIEDIT_AddKey           (MULTIEDIT_HANDLE hObj, U16 Key);
+int              MULTIEDIT_AddText          (MULTIEDIT_HANDLE hObj, const char * s);
+void             MULTIEDIT_EnableBlink      (MULTIEDIT_HANDLE hObj, int Period, int OnOff);
+GUI_COLOR        MULTIEDIT_GetBkColor       (MULTIEDIT_HANDLE hObj, unsigned Index);
+int              MULTIEDIT_GetCursorCharPos (MULTIEDIT_HANDLE hObj);
+void             MULTIEDIT_GetCursorPixelPos(MULTIEDIT_HANDLE hObj, int * pxPos, int * pyPos);
+const GUI_FONT * MULTIEDIT_GetFont          (MULTIEDIT_HANDLE hObj);
+void             MULTIEDIT_GetPrompt        (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+void             MULTIEDIT_GetText          (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+GUI_COLOR        MULTIEDIT_GetTextColor     (MULTIEDIT_HANDLE hObj, unsigned Index);
+int              MULTIEDIT_GetTextSize      (MULTIEDIT_HANDLE hObj);
+int              MULTIEDIT_GetUserData      (MULTIEDIT_HANDLE hObj, void * pDest, int NumBytes);
+void             MULTIEDIT_SetTextAlign     (MULTIEDIT_HANDLE hObj, int Align);
+void             MULTIEDIT_SetAutoScrollH   (MULTIEDIT_HANDLE hObj, int OnOff);
+void             MULTIEDIT_SetAutoScrollV   (MULTIEDIT_HANDLE hObj, int OnOff);
+void             MULTIEDIT_SetBkColor       (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
+void             MULTIEDIT_SetCursorCharPos (MULTIEDIT_HANDLE hObj, int x, int y);       /* Not yet implemented */
+void             MULTIEDIT_SetCursorPixelPos(MULTIEDIT_HANDLE hObj, int x, int y);       /* Not yet implemented */
+void             MULTIEDIT_SetCursorOffset  (MULTIEDIT_HANDLE hObj, int Offset);
+void             MULTIEDIT_SetHBorder       (MULTIEDIT_HANDLE hObj, unsigned HBorder);
+void             MULTIEDIT_SetFocusable     (MULTIEDIT_HANDLE hObj, int State);
+void             MULTIEDIT_SetFont          (MULTIEDIT_HANDLE hObj, const GUI_FONT * pFont);
+void             MULTIEDIT_SetInsertMode    (MULTIEDIT_HANDLE hObj, int OnOff);
+void             MULTIEDIT_SetBufferSize    (MULTIEDIT_HANDLE hObj, int BufferSize);
+void             MULTIEDIT_SetMaxNumChars   (MULTIEDIT_HANDLE hObj, unsigned MaxNumChars);
+void             MULTIEDIT_SetPrompt        (MULTIEDIT_HANDLE hObj, const char* sPrompt);
+void             MULTIEDIT_SetReadOnly      (MULTIEDIT_HANDLE hObj, int OnOff);
+void             MULTIEDIT_SetPasswordMode  (MULTIEDIT_HANDLE hObj, int OnOff);
+void             MULTIEDIT_SetText          (MULTIEDIT_HANDLE hObj, const char* s);
+void             MULTIEDIT_SetTextColor     (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
+int              MULTIEDIT_SetUserData      (MULTIEDIT_HANDLE hObj, const void * pSrc, int NumBytes);
+void             MULTIEDIT_SetWrapNone      (MULTIEDIT_HANDLE hObj);
+void             MULTIEDIT_SetWrapChar      (MULTIEDIT_HANDLE hObj);
+void             MULTIEDIT_SetWrapWord      (MULTIEDIT_HANDLE hObj);
+int              MULTIEDIT_ShowCursor       (MULTIEDIT_HANDLE hObj, unsigned OnOff);
+
+#define MULTIEDIT_SetFocussable MULTIEDIT_SetFocusable
+
+/*********************************************************************
+*
+*       Macros for compatibility with older versions
+*
+**********************************************************************
+*/
+
+#define MULTIEDIT_SetMaxLen(hObj, MaxLen) MULTIEDIT_SetBufferSize(hObj, MaxLen)
+#define MULTIEDIT_GetStringSize           MULTIEDIT_GetTextSize
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // MULTIEDIT_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIPAGE.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,226 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MULTIPAGE.h
+Purpose     : MULTIPAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIPAGE_H
+#define MULTIPAGE_H
+
+#include "WM.h"
+#include "DIALOG.h"   // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {        // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Create / Status flags
+*/
+#define MULTIPAGE_ALIGN_LEFT           (0 << 0)
+#define MULTIPAGE_ALIGN_RIGHT          (1 << 0)
+#define MULTIPAGE_ALIGN_TOP            (0 << 2)
+#define MULTIPAGE_ALIGN_BOTTOM         (1 << 2)
+
+#define MULTIPAGE_CF_ROTATE_CW          WIDGET_CF_VERTICAL
+
+#define MULTIPAGE_CI_DISABLED           0
+#define MULTIPAGE_CI_ENABLED            1
+
+#define MULTIPAGE_SKIN_FRAME_LEFT      (1 << 0)
+#define MULTIPAGE_SKIN_FRAME_RIGHT     (1 << 1)
+#define MULTIPAGE_SKIN_FRAME_TOP       (1 << 2)
+#define MULTIPAGE_SKIN_FRAME_BOTTOM    (1 << 3)
+#define MULTIPAGE_SKIN_FRAME_ALL       (MULTIPAGE_SKIN_FRAME_LEFT | MULTIPAGE_SKIN_FRAME_RIGHT | MULTIPAGE_SKIN_FRAME_TOP | MULTIPAGE_SKIN_FRAME_BOTTOM)
+
+#define MULTIPAGE_SKINFLEX_PI_ENABLED   0
+#define MULTIPAGE_SKINFLEX_PI_SELECTED  1
+#define MULTIPAGE_SKINFLEX_PI_DISABLED  2
+
+#define SCROLLBAR_SIZE                 32 // Defines the space for the scrollbar arrows
+
+#define MULTIPAGE_BI_SELECTED           0
+#define MULTIPAGE_BI_UNSELECTED         1
+#define MULTIPAGE_BI_DISABLED           2
+#define MULTIPAGE_BI_MAX                3  // The defines above are used as array indices.
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM MULTIPAGE_Handle;
+
+typedef struct {
+  GUI_COLOR BkColor;
+  GUI_COLOR aBkUpper[2];
+  GUI_COLOR aBkLower[2];
+  GUI_COLOR FrameColor;
+  GUI_COLOR TextColor;
+} MULTIPAGE_SKINFLEX_PROPS;
+
+typedef struct {
+  U8  SelSideBorderInc;         // Number of pixels to add on both sides when drawing the selected item.
+  U8  SelTopBorderInc;          // Number of pixels to add on top of selected items.
+} MULTIPAGE_SKIN_PROPS;
+
+typedef struct {
+  #if GUI_SUPPORT_ROTATION
+    GUI_ROTATION  * pRotation;
+  #endif
+  unsigned          Align;
+  int               Sel;
+  U16               State;
+  U8                FrameFlags;    // Flags to let the drawing function know which parts of the frame to display.
+  U8                PageStatus;
+  GUI_DRAW_HANDLE * pDrawObj;
+} MULTIPAGE_SKIN_INFO;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+MULTIPAGE_Handle MULTIPAGE_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+MULTIPAGE_Handle MULTIPAGE_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+MULTIPAGE_Handle MULTIPAGE_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+MULTIPAGE_Handle MULTIPAGE_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MULTIPAGE_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void             MULTIPAGE_AddEmptyPage   (MULTIPAGE_Handle hObj, WM_HWIN hWin ,const char * pText);
+void             MULTIPAGE_AddPage        (MULTIPAGE_Handle hObj, WM_HWIN hWin ,const char * pText);
+WM_HWIN          MULTIPAGE_AttachWindow   (MULTIPAGE_Handle hObj, unsigned Index, WM_HWIN hWin);
+void             MULTIPAGE_DeletePage     (MULTIPAGE_Handle hObj, unsigned Index, int Delete);
+void             MULTIPAGE_DisablePage    (MULTIPAGE_Handle hObj, unsigned Index);
+void             MULTIPAGE_EnablePage     (MULTIPAGE_Handle hObj, unsigned Index);
+void             MULTIPAGE_EnableScrollbar(MULTIPAGE_Handle hObj, unsigned OnOff);
+GUI_COLOR        MULTIPAGE_GetBkColor     (MULTIPAGE_Handle hObj, unsigned Index);
+const GUI_FONT * MULTIPAGE_GetFont        (MULTIPAGE_Handle hObj);
+int              MULTIPAGE_GetSelection   (MULTIPAGE_Handle hObj);
+int              MULTIPAGE_GetPageText    (MULTIPAGE_Handle hObj, unsigned Index, char * pBuffer, int MaxLen);
+GUI_COLOR        MULTIPAGE_GetTextColor   (MULTIPAGE_Handle hObj, unsigned Index);
+int              MULTIPAGE_GetUserData    (MULTIPAGE_Handle hObj, void * pDest, int NumBytes);
+WM_HWIN          MULTIPAGE_GetWindow      (MULTIPAGE_Handle hObj, unsigned Index);
+int              MULTIPAGE_IsPageEnabled  (MULTIPAGE_Handle hObj, unsigned Index);
+void             MULTIPAGE_SelectPage     (MULTIPAGE_Handle hObj, unsigned Index);
+void             MULTIPAGE_SetAlign       (MULTIPAGE_Handle hObj, unsigned Align);
+int              MULTIPAGE_SetBitmapEx    (MULTIPAGE_Handle hObj, const GUI_BITMAP * pBitmap, int x, int y, int Index, int State);
+int              MULTIPAGE_SetBitmap      (MULTIPAGE_Handle hObj, const GUI_BITMAP * pBitmap, int Index, int State);
+void             MULTIPAGE_SetBkColor     (MULTIPAGE_Handle hObj, GUI_COLOR Color, unsigned Index);
+void             MULTIPAGE_SetFont        (MULTIPAGE_Handle hObj, const GUI_FONT * pFont);
+void             MULTIPAGE_SetRotation    (MULTIPAGE_Handle hObj, unsigned Rotation);
+void             MULTIPAGE_SetTabWidth    (MULTIPAGE_Handle hObj, int Width, int Index);
+void             MULTIPAGE_SetTabHeight   (MULTIPAGE_Handle hObj, int Height);
+void             MULTIPAGE_SetTextAlign   (MULTIPAGE_Handle hObj, unsigned Align);
+void             MULTIPAGE_SetText        (MULTIPAGE_Handle hObj, const char * pText, unsigned Index);
+void             MULTIPAGE_SetTextColor   (MULTIPAGE_Handle hObj, GUI_COLOR Color, unsigned Index);
+int              MULTIPAGE_SetUserData    (MULTIPAGE_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+unsigned         MULTIPAGE_GetDefaultAlign      (void);
+GUI_COLOR        MULTIPAGE_GetDefaultBkColor    (unsigned Index);
+const GUI_FONT * MULTIPAGE_GetDefaultFont       (void);
+GUI_COLOR        MULTIPAGE_GetDefaultTextColor  (unsigned Index);
+
+void             MULTIPAGE_SetDefaultAlign      (unsigned Align);
+void             MULTIPAGE_SetDefaultBkColor    (GUI_COLOR Color, unsigned Index);
+void             MULTIPAGE_SetDefaultBorderSizeX(unsigned Size);
+void             MULTIPAGE_SetDefaultBorderSizeY(unsigned Size);
+void             MULTIPAGE_SetDefaultFont       (const GUI_FONT * pFont);
+void             MULTIPAGE_SetDefaultTextColor  (GUI_COLOR Color, unsigned Index);
+
+void             MULTIPAGE_SetEffectColor       (unsigned Index, GUI_COLOR Color);
+GUI_COLOR        MULTIPAGE_GetEffectColor       (unsigned Index);
+int              MULTIPAGE_GetNumEffectColors   (void);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+int                     MULTIPAGE_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void                    MULTIPAGE_GetSkinFlexProps     (MULTIPAGE_SKINFLEX_PROPS * pProps, int Index);
+WIDGET_DRAW_ITEM_FUNC * MULTIPAGE_SetDefaultSkin       (WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void                    MULTIPAGE_SetDefaultSkinClassic(void);
+void                    MULTIPAGE_SetSkinClassic       (MULTIPAGE_Handle hObj);
+void                    MULTIPAGE_SetSkin              (MULTIPAGE_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void                    MULTIPAGE_SetSkinFlexProps     (const MULTIPAGE_SKINFLEX_PROPS * pProps, int Index);
+
+#define MULTIPAGE_SKIN_FLEX MULTIPAGE_DrawSkinFlex
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // MULTIPAGE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIPAGE_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,185 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : MULTIPAGE_Private.h
+Purpose     : Private MULTIPAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIPAGE_PRIVATE_H
+#define MULTIPAGE_PRIVATE_H
+
+#include "GUI_Debug.h"
+#include "GUI_ARRAY.h"
+#include "MULTIPAGE.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define MULTIPAGE_STATE_ENABLED     (1 << 0)
+#define MULTIPAGE_STATE_SCROLLMODE  WIDGET_STATE_USER0
+
+#define MULTIPAGE_NUMCOLORS         2
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+//
+// MULTIPAGE_PAGE
+//
+typedef struct {
+  WM_HWIN hWin;
+  U8      Status;
+  int     ItemWidth;
+  WM_HMEM hDrawObj[3];
+  char    acText;
+} MULTIPAGE_PAGE;
+
+//
+// MULTIPAGE_SKIN_PRIVATE
+//
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} MULTIPAGE_SKIN_PRIVATE;
+
+//
+// MULTIPAGE_PROPS
+//
+typedef struct {
+  const GUI_FONT          * pFont;
+  unsigned                  Align;
+  GUI_COLOR                 aBkColor[MULTIPAGE_NUMCOLORS];
+  GUI_COLOR                 aTextColor[MULTIPAGE_NUMCOLORS];
+  MULTIPAGE_SKIN_PRIVATE    SkinPrivate;
+  int                       BorderSize0;
+  int                       BorderSize1;
+  unsigned                  TextAlign;
+  unsigned                  Scrollbar;
+  int                    (* pfGetTouchedPage)(MULTIPAGE_Handle hObj, int x, int y);
+  int                    (* pfGetTabBarWidth)(MULTIPAGE_Handle hObj);
+} MULTIPAGE_PROPS;
+
+//
+// MULTIPAGE_Obj
+//
+typedef struct MULTIPAGE_Obj MULTIPAGE_Obj;
+
+struct MULTIPAGE_Obj {
+  WIDGET                 Widget;
+  void                (* pfDrawTextItem)(MULTIPAGE_Obj * pObj, const char * pText, unsigned Index, const GUI_RECT * pRect, int x0, int xSize, int ColorIndex);
+  WM_HWIN                hClient;
+  GUI_ARRAY              hPageArray;
+  unsigned               Selection;
+  int                    ScrollState;
+  MULTIPAGE_PROPS        Props;
+  WIDGET_SKIN const    * pWidgetSkin;
+  MULTIPAGE_SKIN_PROPS   SkinProps;
+  int                    ItemHeight;
+  int                    MaxHeight;
+};
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define MULTIPAGE_INIT_ID(p) (p->Widget.DebugId = MULTIPAGE_ID)
+#else
+  #define MULTIPAGE_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  MULTIPAGE_Obj * MULTIPAGE_LockH(MULTIPAGE_Handle h);
+  #define MULTIPAGE_LOCK_H(h)   MULTIPAGE_LockH(h)
+#else
+  #define MULTIPAGE_LOCK_H(h)   (MULTIPAGE_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Externals
+*
+**********************************************************************
+*/
+extern GUI_COLOR           MULTIPAGE__aEffectColor[2];
+extern MULTIPAGE_PROPS     MULTIPAGE__DefaultProps;
+
+extern const WIDGET_SKIN   MULTIPAGE__SkinClassic;
+extern       WIDGET_SKIN   MULTIPAGE__Skin;
+
+extern WIDGET_SKIN const * MULTIPAGE__pSkinDefault;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void MULTIPAGE__CalcBorderRect (MULTIPAGE_Obj * pObj, GUI_RECT * pRect);
+void MULTIPAGE__CalcClientRect (MULTIPAGE_Handle hObj, GUI_RECT * pRect);
+void MULTIPAGE__DeleteScrollbar(MULTIPAGE_Handle hObj);
+void MULTIPAGE__DrawTextItemH  (MULTIPAGE_Obj * pObj, const char * pText, unsigned Index, const GUI_RECT * pRect, int x0, int w, int ColorIndex);
+int  MULTIPAGE__GetPagePos     (MULTIPAGE_Handle hObj, unsigned Index);
+int  MULTIPAGE__GetPageWidth   (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE__GetTabBarRect  (MULTIPAGE_Handle hObj, GUI_RECT * pRect);
+void MULTIPAGE__UpdatePositions(MULTIPAGE_Handle hObj);
+
+/*********************************************************************
+*
+*       Private Skinning functions
+*
+**********************************************************************
+*/
+int  MULTIPAGE_SKIN__GetPagePos    (MULTIPAGE_Handle hObj, unsigned Index);
+int  MULTIPAGE_SKIN__GetTabBarWidth(MULTIPAGE_Handle hObj);
+int  MULTIPAGE_SKIN__GetTouchedPage(MULTIPAGE_Handle hObj, int TouchX, int TouchY);
+
+#endif  // GUI_WINSUPPORT
+#endif  // MULTIPAGE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/PROGBAR.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,168 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : PROGBAR.h
+Purpose     : Progressbar include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef PROGBAR_H        /* Avoid multiple inclusion  */
+#define PROGBAR_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Create flags
+*/
+#define PROGBAR_CF_HORIZONTAL (0 << 0)
+#define PROGBAR_CF_VERTICAL   (1 << 0)
+#define PROGBAR_CF_USER       (1 << 1)
+
+/*********************************************************************
+*
+*       Skinning constants
+*/
+#define PROGBAR_SKINFLEX_L 0
+#define PROGBAR_SKINFLEX_R 1
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM PROGBAR_Handle;
+
+typedef struct {
+  GUI_COLOR aColorUpperL[2];
+  GUI_COLOR aColorLowerL[2];
+  GUI_COLOR aColorUpperR[2];
+  GUI_COLOR aColorLowerR[2];
+  GUI_COLOR ColorFrame;
+  GUI_COLOR ColorText;
+} PROGBAR_SKINFLEX_PROPS;
+
+typedef struct {
+  int IsVertical;
+  int Index;
+  const char * pText;
+} PROGBAR_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+
+PROGBAR_Handle PROGBAR_Create        (int x0, int y0, int xSize, int ySize, int Flags);
+PROGBAR_Handle PROGBAR_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+PROGBAR_Handle PROGBAR_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+PROGBAR_Handle PROGBAR_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+PROGBAR_Handle PROGBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void PROGBAR_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Individual member functions
+*
+**********************************************************************
+*/
+GUI_COLOR        PROGBAR_GetBarColor(PROGBAR_Handle hObj, unsigned int Index);
+const GUI_FONT * PROGBAR_GetFont     (PROGBAR_Handle hObj);
+void             PROGBAR_GetMinMax   (PROGBAR_Handle hObj, int * pMin, int * pMax);
+int              PROGBAR_GetUserData (PROGBAR_Handle hObj, void * pDest, int NumBytes);
+GUI_COLOR        PROGBAR_GetTextColor(PROGBAR_Handle hObj, unsigned int Index);
+int              PROGBAR_GetValue    (PROGBAR_Handle hObj);
+void             PROGBAR_SetBarColor (PROGBAR_Handle hObj, unsigned int index, GUI_COLOR color);
+void             PROGBAR_SetFont     (PROGBAR_Handle hObj, const GUI_FONT * pfont);
+void             PROGBAR_SetMinMax   (PROGBAR_Handle hObj, int Min, int Max);
+void             PROGBAR_SetText     (PROGBAR_Handle hObj, const char* s);
+void             PROGBAR_SetTextAlign(PROGBAR_Handle hObj, int Align);
+void             PROGBAR_SetTextColor(PROGBAR_Handle hObj, unsigned int index, GUI_COLOR color);
+void             PROGBAR_SetTextPos  (PROGBAR_Handle hObj, int XOff, int YOff);
+void             PROGBAR_SetValue    (PROGBAR_Handle hObj, int v);
+int              PROGBAR_SetUserData (PROGBAR_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void PROGBAR_GetSkinFlexProps     (PROGBAR_SKINFLEX_PROPS * pProps, int Index);
+void PROGBAR_SetSkinClassic       (PROGBAR_Handle hObj);
+void PROGBAR_SetSkin              (PROGBAR_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  PROGBAR_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void PROGBAR_SetSkinFlexProps     (const PROGBAR_SKINFLEX_PROPS * pProps, int Index);
+void PROGBAR_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * PROGBAR_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define PROGBAR_SKIN_FLEX    PROGBAR_DrawSkinFlex
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // PROGBAR_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/PROGBAR_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,136 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : PROGBAR_Private.h
+Purpose     : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef PROGBAR_PRIVATE_H
+#define PROGBAR_PRIVATE_H
+
+#include "PROGBAR.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define PROGBAR_SF_HORIZONTAL PROGBAR_CF_HORIZONTAL
+#define PROGBAR_SF_VERTICAL   PROGBAR_CF_VERTICAL
+#define PROGBAR_SF_USER       PROGBAR_CF_USER
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} PROGBAR_SKIN_PRIVATE;
+
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR aBarColor[2];
+  GUI_COLOR aTextColor[2];
+  PROGBAR_SKIN_PRIVATE SkinPrivate;
+} PROGBAR_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  int v;
+  WM_HMEM hpText;
+  I16 XOff, YOff;
+  I16 TextAlign;
+  int Min, Max;
+  PROGBAR_PROPS Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  U8 Flags;
+} PROGBAR_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define PROGBAR_INIT_ID(p) p->Widget.DebugId = PROGBAR_ID
+#else
+  #define PROGBAR_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  PROGBAR_Obj * PROGBAR_LockH(PROGBAR_Handle h);
+  #define PROGBAR_LOCK_H(h)   PROGBAR_LockH(h)
+#else
+  #define PROGBAR_LOCK_H(h)   (PROGBAR_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern PROGBAR_PROPS PROGBAR__DefaultProps;
+
+extern const WIDGET_SKIN PROGBAR__SkinClassic;
+extern       WIDGET_SKIN PROGBAR__Skin;
+
+extern WIDGET_SKIN const * PROGBAR__pSkinDefault;
+
+/*********************************************************************
+*
+*       Public functions (internal)
+*
+**********************************************************************
+*/
+char * PROGBAR__GetTextLocked(const PROGBAR_Obj * pObj);
+void   PROGBAR__GetTextRect  (const PROGBAR_Obj * pObj, GUI_RECT * pRect, const char * pText);
+int    PROGBAR__Value2Pos    (const PROGBAR_Obj * pObj, int v);
+
+#endif /* GUI_WINSUPPORT */
+#endif /* PROGBAR_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/RADIO.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,198 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : RADIO.h
+Purpose     : RADIO include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef RADIO_H
+#define RADIO_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Bitmap indices
+*/
+#define RADIO_BI_INACTIV 0
+#define RADIO_BI_ACTIV   1
+#define RADIO_BI_CHECK   2
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define RADIO_SKINFLEX_PI_PRESSED     0
+#define RADIO_SKINFLEX_PI_UNPRESSED   1
+
+/*********************************************************************
+*
+*       Defaults for public configuration switches
+*
+**********************************************************************
+
+The following are defaults for config switches which affect the
+interface specified in this module
+*/
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define RADIO_TEXTPOS_RIGHT       0
+#define RADIO_TEXTPOS_LEFT        WIDGET_STATE_USER0  /* Not implemented, TBD */
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM RADIO_Handle;
+
+typedef struct {
+  GUI_COLOR aColorButton[4];
+  int       ButtonSize;
+} RADIO_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+
+RADIO_Handle RADIO_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, unsigned Para);
+RADIO_Handle RADIO_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumItems, int Spacing);
+RADIO_Handle RADIO_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumItems, int Spacing, int NumExtraBytes);
+RADIO_Handle RADIO_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void RADIO_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+
+void             RADIO_SetDefaultFont      (const GUI_FONT * pFont);
+GUI_COLOR        RADIO_SetDefaultFocusColor(GUI_COLOR Color);
+void             RADIO_SetDefaultImage     (const GUI_BITMAP * pBitmap, unsigned int Index);
+void             RADIO_SetDefaultTextColor (GUI_COLOR TextColor);
+const GUI_FONT * RADIO_GetDefaultFont      (void);
+GUI_COLOR        RADIO_GetDefaultTextColor (void);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+
+void               RADIO_AddValue     (RADIO_Handle hObj, int Add);
+void               RADIO_Dec          (RADIO_Handle hObj);
+GUI_COLOR          RADIO_GetBkColor   (RADIO_Handle hObj);
+GUI_COLOR          RADIO_GetFocusColor(RADIO_Handle hObj);
+const GUI_FONT *   RADIO_GetFont      (RADIO_Handle hObj);
+const GUI_BITMAP * RADIO_GetImage     (RADIO_Handle hObj, unsigned int Index);
+int                RADIO_GetNumItems  (RADIO_Handle hObj);
+int                RADIO_GetText      (RADIO_Handle hObj, unsigned Index, char * pBuffer, int MaxLen);
+GUI_COLOR          RADIO_GetTextColor (RADIO_Handle hObj);
+int                RADIO_GetUserData  (RADIO_Handle hObj, void * pDest, int NumBytes);
+void               RADIO_Inc          (RADIO_Handle hObj);
+void               RADIO_SetBkColor   (RADIO_Handle hObj, GUI_COLOR Color);
+GUI_COLOR          RADIO_SetFocusColor(RADIO_Handle hObj, GUI_COLOR Color);
+void               RADIO_SetFont      (RADIO_Handle hObj, const GUI_FONT * pFont);
+void               RADIO_SetGroupId   (RADIO_Handle hObj, U8 GroupId);
+void               RADIO_SetImage     (RADIO_Handle hObj, const GUI_BITMAP * pBitmap, unsigned int Index);
+void               RADIO_SetText      (RADIO_Handle hObj, const char* pText, unsigned Index);
+void               RADIO_SetTextColor (RADIO_Handle hObj, GUI_COLOR Color);
+void               RADIO_SetValue     (RADIO_Handle hObj, int v);
+int                RADIO_SetUserData  (RADIO_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void RADIO_GetSkinFlexProps     (RADIO_SKINFLEX_PROPS * pProps, int Index);
+void RADIO_SetSkinClassic       (RADIO_Handle hObj);
+void RADIO_SetSkin              (RADIO_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  RADIO_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void RADIO_SetSkinFlexProps     (const RADIO_SKINFLEX_PROPS * pProps, int Index);
+void RADIO_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * RADIO_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define RADIO_SKIN_FLEX    RADIO_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Query state
+*
+**********************************************************************
+*/
+int RADIO_GetValue(RADIO_Handle hObj);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // RADIO_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/RADIO_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,201 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : RADIO_Private.h
+Purpose     : RADIO private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef RADIO_PRIVATE_H
+#define RADIO_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#include "RADIO.h"
+#include "WIDGET.h"
+#include "GUI_ARRAY.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/* Define default image inactiv */
+#ifndef   RADIO_IMAGE0_DEFAULT
+  #define RADIO_IMAGE0_DEFAULT        &RADIO__abmRadio[0]
+#endif
+
+/* Define default image activ */
+#ifndef   RADIO_IMAGE1_DEFAULT
+  #define RADIO_IMAGE1_DEFAULT        &RADIO__abmRadio[1]
+#endif
+
+/* Define default image check */
+#ifndef   RADIO_IMAGE_CHECK_DEFAULT
+  #define RADIO_IMAGE_CHECK_DEFAULT   &RADIO__bmCheck
+#endif
+
+/* Define default font */
+#ifndef   RADIO_FONT_DEFAULT
+  #if   WIDGET_USE_SCHEME_SMALL
+    #define RADIO_SPACING_DEFAULT 20
+    #define RADIO_FONT_DEFAULT &GUI_Font13_1
+  #elif WIDGET_USE_SCHEME_MEDIUM
+    #define RADIO_SPACING_DEFAULT 24
+    #define RADIO_FONT_DEFAULT &GUI_Font16_1
+  #elif WIDGET_USE_SCHEME_LARGE
+    #define RADIO_SPACING_DEFAULT 30
+    #define RADIO_FONT_DEFAULT &GUI_Font24_1
+  #endif
+#endif
+
+/* Define vertical default spacing */
+#ifndef   RADIO_SPACING_DEFAULT
+  #define RADIO_SPACING_DEFAULT 20
+#endif
+
+/* Define default text color */
+#ifndef   RADIO_DEFAULT_TEXT_COLOR
+  #define RADIO_DEFAULT_TEXT_COLOR    GUI_BLACK
+#endif
+
+/* Define default background color */
+#ifndef   RADIO_DEFAULT_BKCOLOR
+  #define RADIO_DEFAULT_BKCOLOR       GUI_GRAY_C0
+#endif
+
+#ifndef   RADIO_FOCUSCOLOR_DEFAULT
+  #define RADIO_FOCUSCOLOR_DEFAULT    GUI_BLACK
+#endif
+
+#define RADIO_BORDER                  2
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  unsigned (* pfGetButtonSize)(RADIO_Handle hObj);
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} RADIO_SKIN_PRIVATE;
+
+typedef struct {
+  GUI_COLOR BkColor;
+  GUI_COLOR TextColor;
+  GUI_COLOR FocusColor;
+  const GUI_FONT * pFont;
+  const GUI_BITMAP * apBmRadio[2];
+  const GUI_BITMAP * pBmCheck;
+  RADIO_SKIN_PRIVATE SkinPrivate;
+} RADIO_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  RADIO_PROPS Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  GUI_ARRAY TextArray;
+  I16 Sel;                   /* current selection */
+  U16 Spacing;
+  U16 NumItems;
+  U8  GroupId;
+} RADIO_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define RADIO_INIT_ID(p) p->Widget.DebugId = RADIO_ID
+#else
+  #define RADIO_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  RADIO_Obj * RADIO_LockH(RADIO_Handle h);
+  #define RADIO_LOCK_H(h)   RADIO_LockH(h)
+#else
+  #define RADIO_LOCK_H(h)   (RADIO_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef void tRADIO_SetValue(RADIO_Handle hObj, int v);
+
+/*********************************************************************
+*
+*       Extern data
+*
+**********************************************************************
+*/
+
+extern RADIO_PROPS RADIO__DefaultProps;
+
+extern const WIDGET_SKIN RADIO__SkinClassic;
+extern       WIDGET_SKIN RADIO__Skin;
+
+extern WIDGET_SKIN const * RADIO__pSkinDefault;
+
+extern const GUI_BITMAP             RADIO__abmRadio[2];
+extern const GUI_BITMAP             RADIO__bmCheck;
+extern       tRADIO_SetValue*       RADIO__pfHandleSetValue;
+
+/*********************************************************************
+*
+*       public functions (internal)
+*
+**********************************************************************
+*/
+void     RADIO__SetValue     (RADIO_Handle hObj, int v);
+unsigned RADIO__GetButtonSize(RADIO_Handle hObj);
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* RADIO_PRIVATE_H */
+
+/************************* end of file ******************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SCROLLBAR.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,216 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SCROLLBAR.h
+Purpose     : SCROLLBAR include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SCROLLBAR_H
+#define SCROLLBAR_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define SCROLLBAR_CI_THUMB 0
+#define SCROLLBAR_CI_SHAFT 1
+#define SCROLLBAR_CI_ARROW 2
+
+/*********************************************************************
+*
+*       States
+*/
+#define SCROLLBAR_STATE_PRESSED   WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+*       Create / Status flags
+*/
+#define SCROLLBAR_CF_VERTICAL     WIDGET_CF_VERTICAL
+#define SCROLLBAR_CF_FOCUSABLE    WIDGET_STATE_FOCUSABLE
+
+#define SCROLLBAR_CF_FOCUSSABLE   SCROLLBAR_CF_FOCUSABLE
+
+/************************************************************
+*
+*       Skinning property indices
+*/
+#define SCROLLBAR_SKINFLEX_PI_PRESSED   0
+#define SCROLLBAR_SKINFLEX_PI_UNPRESSED 1
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SCROLLBAR_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[3];
+  GUI_COLOR aColorUpper[2];
+  GUI_COLOR aColorLower[2];
+  GUI_COLOR aColorShaft[2];
+  GUI_COLOR ColorArrow;
+  GUI_COLOR ColorGrasp;
+} SCROLLBAR_SKINFLEX_PROPS;
+
+typedef struct {
+  int IsVertical;
+  int State;
+} SCROLLBAR_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+SCROLLBAR_Handle SCROLLBAR_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int WinFlags, int SpecialFlags);
+SCROLLBAR_Handle SCROLLBAR_CreateAttached(WM_HWIN hParent, int SpecialFlags);
+SCROLLBAR_Handle SCROLLBAR_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SCROLLBAR_Handle SCROLLBAR_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+SCROLLBAR_Handle SCROLLBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SCROLLBAR_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+
+/* Methods changing properties */
+
+void      SCROLLBAR_AddValue   (SCROLLBAR_Handle hObj, int Add);
+void      SCROLLBAR_Dec        (SCROLLBAR_Handle hObj);
+void      SCROLLBAR_Inc        (SCROLLBAR_Handle hObj);
+int       SCROLLBAR_GetUserData(SCROLLBAR_Handle hObj, void * pDest, int NumBytes);
+GUI_COLOR SCROLLBAR_SetColor   (SCROLLBAR_Handle hObj, int Index, GUI_COLOR Color);
+void      SCROLLBAR_SetNumItems(SCROLLBAR_Handle hObj, int NumItems);
+void      SCROLLBAR_SetPageSize(SCROLLBAR_Handle hObj, int PageSize);
+void      SCROLLBAR_SetValue   (SCROLLBAR_Handle hObj, int v);
+int       SCROLLBAR_SetWidth   (SCROLLBAR_Handle hObj, int Width);
+void      SCROLLBAR_SetState   (SCROLLBAR_Handle hObj, const WM_SCROLL_STATE* pState);
+int       SCROLLBAR_SetUserData(SCROLLBAR_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void SCROLLBAR_GetSkinFlexProps     (SCROLLBAR_SKINFLEX_PROPS * pProps, int Index);
+void SCROLLBAR_SetSkinClassic       (SCROLLBAR_Handle hObj);
+void SCROLLBAR_SetSkin              (SCROLLBAR_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  SCROLLBAR_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void SCROLLBAR_SetSkinFlexProps     (const SCROLLBAR_SKINFLEX_PROPS * pProps, int Index);
+void SCROLLBAR_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SCROLLBAR_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define SCROLLBAR_SKIN_FLEX    SCROLLBAR_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+int       SCROLLBAR_GetDefaultWidth(void);
+GUI_COLOR SCROLLBAR_SetDefaultColor(GUI_COLOR Color, unsigned int Index); /* Not yet documented */
+int       SCROLLBAR_SetDefaultWidth(int DefaultWidth);
+
+/*********************************************************************
+*
+*       Global functions
+*
+**********************************************************************
+*/
+int       SCROLLBAR_GetThumbSizeMin(void);
+int       SCROLLBAR_SetThumbSizeMin(int ThumbSizeMin);
+
+/*********************************************************************
+*
+*       Query state
+*
+**********************************************************************
+*/
+GUI_COLOR SCROLLBAR_GetColor   (SCROLLBAR_Handle hObj, int Index);
+int       SCROLLBAR_GetNumItems(SCROLLBAR_Handle hObj);
+int       SCROLLBAR_GetPageSize(SCROLLBAR_Handle hObj);
+int       SCROLLBAR_GetValue   (SCROLLBAR_Handle hObj);
+
+/*********************************************************************
+*
+*       Macros for compatibility
+*
+**********************************************************************
+*/
+#define SCROLLBAR_BKCOLOR0_DEFAULT SCROLLBAR_COLOR_ARROW_DEFAULT
+#define SCROLLBAR_BKCOLOR1_DEFAULT SCROLLBAR_COLOR_SHAFT_DEFAULT
+#define SCROLLBAR_COLOR0_DEFAULT   SCROLLBAR_COLOR_THUMB_DEFAULT
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // SCROLLBAR_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SCROLLBAR_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,196 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SCROLLBAR_Private.h
+Purpose     : SCROLLBAR internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef SCROLLBAR_PRIVATE_H
+#define SCROLLBAR_PRIVATE_H
+
+#include "SCROLLBAR.h"
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define PRESSED_STATE_NONE  0
+#define PRESSED_STATE_RIGHT 1
+#define PRESSED_STATE_LEFT  2
+#define PRESSED_STATE_THUMB 3
+
+/*********************************************************************
+*
+*       Private config defaults
+*
+**********************************************************************
+*/
+
+/* Define colors */
+#ifndef   SCROLLBAR_COLOR_SHAFT_DEFAULT
+  #define SCROLLBAR_COLOR_SHAFT_DEFAULT GUI_GRAY
+#endif
+
+#ifndef   SCROLLBAR_COLOR_ARROW_DEFAULT
+  #define SCROLLBAR_COLOR_ARROW_DEFAULT GUI_BLACK
+#endif
+
+#ifndef   SCROLLBAR_COLOR_THUMB_DEFAULT
+  #define SCROLLBAR_COLOR_THUMB_DEFAULT GUI_GRAY_C0
+#endif
+
+#ifndef   SCROLLBAR_THUMB_SIZE_MIN_DEFAULT
+  #define SCROLLBAR_THUMB_SIZE_MIN_DEFAULT 4
+#endif
+
+#ifndef SCROLLBAR_DEFAULT_WIDTH
+  #if   WIDGET_USE_SCHEME_SMALL
+    #define SCROLLBAR_DEFAULT_WIDTH 11
+  #elif WIDGET_USE_SCHEME_MEDIUM
+    #define SCROLLBAR_DEFAULT_WIDTH 16
+  #elif WIDGET_USE_SCHEME_LARGE
+    #define SCROLLBAR_DEFAULT_WIDTH 22
+  #endif
+#endif
+
+#define SCROLLBAR_TIMER_ID 1234
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern GUI_COLOR  SCROLLBAR__aDefaultBkColor[2];
+extern GUI_COLOR  SCROLLBAR__aDefaultColor[2];
+extern I16        SCROLLBAR__DefaultWidth;
+extern I16        SCROLLBAR__ThumbSizeMin;
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SCROLLBAR_SKIN_PRIVATE;
+
+typedef struct {
+  GUI_COLOR aColor[3];
+  SCROLLBAR_SKIN_PRIVATE SkinPrivate;
+} SCROLLBAR_PROPS;
+
+typedef struct {
+  int x0_LeftArrow;
+  int x1_LeftArrow;
+  int x0_Thumb;
+  int x1_Thumb;
+  int x0_RightArrow;
+  int x1_RightArrow;
+  int x1;
+  int xSizeMoveable;
+  int ThumbSize;
+} SCROLLBAR_POSITIONS;
+
+typedef struct SCROLLBAR_OBJ SCROLLBAR_OBJ;
+
+struct SCROLLBAR_OBJ {
+  WIDGET Widget;
+  SCROLLBAR_PROPS Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  void (* pfCalcPositions)(SCROLLBAR_Handle hObj, SCROLLBAR_POSITIONS * pPos);
+  int NumItems, v, PageSize;
+  int State;
+  int TimerStep;
+  int TouchPos;
+  WM_HMEM hTimer;
+};
+
+/*********************************************************************
+*
+*       Private macros
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define SCROLLBAR_INIT_ID(p) (p->Widget.DebugId = SCROLLBAR_ID)
+#else
+  #define SCROLLBAR_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  SCROLLBAR_OBJ * SCROLLBAR_LockH(SCROLLBAR_Handle h);
+  #define SCROLLBAR_LOCK_H(h)   SCROLLBAR_LockH(h)
+#else
+  #define SCROLLBAR_LOCK_H(h)   (SCROLLBAR_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void SCROLLBAR__InvalidatePartner(SCROLLBAR_Handle hObj);
+void SCROLLBAR__Rect2VRect       (const WIDGET * pWidget, GUI_RECT * pRect);
+
+/*********************************************************************
+*
+*       Private data
+*
+**********************************************************************
+*/
+extern SCROLLBAR_PROPS SCROLLBAR__DefaultProps;
+
+extern const WIDGET_SKIN SCROLLBAR__SkinClassic;
+extern       WIDGET_SKIN SCROLLBAR__Skin;
+
+extern WIDGET_SKIN const * SCROLLBAR__pSkinDefault;
+
+#endif        /* GUI_WINSUPPORT */
+#endif        /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SEGGER.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,189 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File    : SEGGER.h
+Purpose : Global types etc & general purpose utility functions
+Revision: $Rev: 6176 $
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef SEGGER_H            // Guard against multiple inclusion
+#define SEGGER_H
+
+#include <stdarg.h>
+#include "Global.h"         // Type definitions: U8, U16, U32, I8, I16, I32
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Keywords/specifiers
+*
+**********************************************************************
+*/
+
+#ifndef INLINE
+  #ifdef _WIN32
+    //
+    // Microsoft VC6 and newer.
+    // Force inlining without cost checking.
+    //
+    #define INLINE  __forceinline
+  #else
+    #if (defined(__GNUC__))
+      //
+      // Force inlining with GCC
+      //
+      #define INLINE inline __attribute__((always_inline))
+    #elif (defined(__ICCARM__) || defined(__CC_ARM) || defined(__RX) || defined(__ICCRX__))
+      //
+      // Other known compilers.
+      //
+      #define INLINE  inline
+    #else
+      //
+      // Unknown compilers.
+      //
+      #define INLINE
+    #endif
+  #endif
+#endif
+
+/*********************************************************************
+*
+*       Function-like macros
+*
+**********************************************************************
+*/
+
+#define SEGGER_COUNTOF(a)          (sizeof((a))/sizeof((a)[0]))
+#define SEGGER_MIN(a,b)            (((a) < (b)) ? (a) : (b))
+#define SEGGER_MAX(a,b)            (((a) > (b)) ? (a) : (b))
+
+#ifndef   SEGGER_USE_PARA                   // Some compiler complain about unused parameters.
+  #define SEGGER_USE_PARA(Para) (void)Para  // This works for most compilers.
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+
+#define SEGGER_PRINTF_FLAG_ADJLEFT    (1 << 0)
+#define SEGGER_PRINTF_FLAG_SIGNFORCE  (1 << 1)
+#define SEGGER_PRINTF_FLAG_SIGNSPACE  (1 << 2)
+#define SEGGER_PRINTF_FLAG_PRECEED    (1 << 3)
+#define SEGGER_PRINTF_FLAG_ZEROPAD    (1 << 4)
+#define SEGGER_PRINTF_FLAG_NEGATIVE   (1 << 5)
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef struct {
+  char* pBuffer;
+  int   BufferSize;
+  int   Cnt;
+} SEGGER_BUFFER_DESC;
+
+typedef struct {
+  int  CacheLineSize;                                 // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size.
+  void (*pfDMB)       (void);                         // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed.
+  void (*pfClean)     (void *p, unsigned NumBytes);   // Optional clean function for cached memory.
+  void (*pfInvalidate)(void *p, unsigned NumBytes);   // Optional invalidate function for cached memory.
+} SEGGER_CACHE_CONFIG;
+
+typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
+
+struct SEGGER_SNPRINTF_CONTEXT_struct {
+  void*               pContext;                       // Application specific context.
+  SEGGER_BUFFER_DESC* pBufferDesc;                    // Buffer descriptor to use for output.
+  void (*pfFlush)(SEGGER_SNPRINTF_CONTEXT *);         // Callback executed once the buffer is full. Callback decides if the buffer gets cleared to store more or not.
+};
+
+typedef struct {
+  void (*pfStoreChar)       (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, char c);
+  int  (*pfPrintUnsigned)   (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, U32 v, unsigned Base, char Flags, int Width, int Precision);
+  int  (*pfPrintInt)        (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, I32 v, unsigned Base, char Flags, int Width, int Precision);
+} SEGGER_PRINTF_API;
+
+typedef void (*SEGGER_pFormatter)(SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, const SEGGER_PRINTF_API* pApi, va_list* pParamList, char Lead, int Width, int Precision);
+
+typedef struct SEGGER_PRINTF_FORMATTER {
+  struct SEGGER_PRINTF_FORMATTER* pNext;              // Pointer to next formatter.
+  SEGGER_pFormatter               pfFormatter;        // Formatter function.
+  char                            Specifier;          // Format specifier.
+} SEGGER_PRINTF_FORMATTER;
+
+/*********************************************************************
+*
+*       Utility functions
+*
+**********************************************************************
+*/
+
+void SEGGER_ARM_memcpy(void* pDest, const void* pSrc, int NumBytes);
+void SEGGER_memcpy    (void* pDest, const void* pSrc, int NumBytes);
+void SEGGER_memxor    (void* pDest, const void* pSrc, unsigned NumBytes);
+
+void SEGGER_StoreChar    (SEGGER_BUFFER_DESC* pBufferDesc, char c);
+void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC* pBufferDesc, U32 v, unsigned Base, int Precision);
+void SEGGER_PrintInt     (SEGGER_BUFFER_DESC* pBufferDesc, I32 v, unsigned Base, int Precision);
+//int  SEGGER_snprintf     (char* pBuffer, int BufferSize, const char* sFormat, ...);
+int  SEGGER_vsnprintf    (char* pBuffer, int BufferSize, const char* sFormat, va_list ParamList);
+int  SEGGER_vsnprintfEx  (SEGGER_SNPRINTF_CONTEXT* pContext, const char* sFormat, va_list ParamList);
+
+int  SEGGER_PRINTF_AddFormatter      (SEGGER_PRINTF_FORMATTER* pFormatter, SEGGER_pFormatter pfFormatter, char c);
+void SEGGER_PRINTF_AddDoubleFormatter(void);
+void SEGGER_PRINTF_AddIPFormatter    (void);
+void SEGGER_PRINTF_AddHTMLFormatter  (void);
+
+#if defined(__cplusplus)
+}                /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#endif                      // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SLIDER.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,194 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SLIDER.h
+Purpose     : SLIDER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SLIDER_H
+#define SLIDER_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+*       Defines
+*
+*************************************************************
+*/
+/************************************************************
+*
+*       States
+*/
+#define SLIDER_STATE_PRESSED    WIDGET_STATE_USER0
+
+/************************************************************
+*
+*       Create / Status flags
+*/
+#define SLIDER_CF_HORIZONTAL 0
+#define SLIDER_CF_VERTICAL   WIDGET_CF_VERTICAL
+
+/************************************************************
+*
+*       Skinning property indices
+*/
+#define SLIDER_SKINFLEX_PI_PRESSED   0
+#define SLIDER_SKINFLEX_PI_UNPRESSED 1
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SLIDER_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[2];
+  GUI_COLOR aColorInner[2];
+  GUI_COLOR aColorShaft[3];
+  GUI_COLOR ColorTick;
+  GUI_COLOR ColorFocus;
+  int TickSize;
+  int ShaftSize;
+} SLIDER_SKINFLEX_PROPS;
+
+typedef struct {
+  int Width;
+  int NumTicks;
+  int Size;
+  int IsPressed;
+  int IsVertical;
+} SLIDER_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+SLIDER_Handle SLIDER_Create        (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int WinFlags, int SpecialFlags);
+SLIDER_Handle SLIDER_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SLIDER_Handle SLIDER_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+SLIDER_Handle SLIDER_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SLIDER_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+void      SLIDER_Dec            (SLIDER_Handle hObj);
+void      SLIDER_EnableFocusRect(SLIDER_Handle hObj, int OnOff);
+GUI_COLOR SLIDER_GetBarColor    (SLIDER_Handle hObj);
+GUI_COLOR SLIDER_GetBkColor     (SLIDER_Handle hObj);
+U8        SLIDER_GetFlag        (SLIDER_Handle hObj, U8 Flag);
+GUI_COLOR SLIDER_GetFocusColor  (SLIDER_Handle hObj);
+void      SLIDER_GetRange       (SLIDER_Handle hObj, int * pMin, int * pMax);
+GUI_COLOR SLIDER_GetTickColor   (SLIDER_Handle hObj);
+int       SLIDER_GetUserData    (SLIDER_Handle hObj, void * pDest, int NumBytes);
+int       SLIDER_GetValue       (SLIDER_Handle hObj);
+void      SLIDER_Inc            (SLIDER_Handle hObj);
+void      SLIDER_SetBarColor    (SLIDER_Handle hObj, GUI_COLOR Color);
+void      SLIDER_SetBkColor     (SLIDER_Handle hObj, GUI_COLOR Color);
+GUI_COLOR SLIDER_SetFocusColor  (SLIDER_Handle hObj, GUI_COLOR Color);
+void      SLIDER_SetNumTicks    (SLIDER_Handle hObj, int NumTicks);
+void      SLIDER_SetRange       (SLIDER_Handle hObj, int Min, int Max);
+void      SLIDER_SetTickColor   (SLIDER_Handle hObj, GUI_COLOR Color);
+int       SLIDER_SetUserData    (SLIDER_Handle hObj, const void * pSrc, int NumBytes);
+void      SLIDER_SetValue       (SLIDER_Handle hObj, int v);
+void      SLIDER_SetWidth       (SLIDER_Handle hObj, int Width);
+
+/*********************************************************************
+*
+*       Member functions: Skinning
+*
+**********************************************************************
+*/
+void SLIDER_GetSkinFlexProps     (SLIDER_SKINFLEX_PROPS * pProps, int Index);
+void SLIDER_SetSkinClassic       (SLIDER_Handle hObj);
+void SLIDER_SetSkin              (SLIDER_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int  SLIDER_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void SLIDER_SetSkinFlexProps     (const SLIDER_SKINFLEX_PROPS * pProps, int Index);
+void SLIDER_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SLIDER_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define SLIDER_SKIN_FLEX    SLIDER_DrawSkinFlex
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR SLIDER_GetDefaultBkColor   (void);
+GUI_COLOR SLIDER_GetDefaultBarColor  (void);
+GUI_COLOR SLIDER_GetDefaultFocusColor(void);
+GUI_COLOR SLIDER_GetDefaultTickColor (void);
+void      SLIDER_SetDefaultBkColor   (GUI_COLOR Color);
+void      SLIDER_SetDefaultBarColor  (GUI_COLOR Color);
+GUI_COLOR SLIDER_SetDefaultFocusColor(GUI_COLOR Color);
+void      SLIDER_SetDefaultTickColor (GUI_COLOR Color);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // SLIDER_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SLIDER_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,131 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SLIDER_Private.h
+Purpose     : SLIDER private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SLIDER_PRIVATE_H
+#define SLIDER_PRIVATE_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "SLIDER.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Flags
+//
+#define SLIDER_FLAG_DRAW_FOCUS_RECT (1 << 0)
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SLIDER_SKIN_PRIVATE;
+
+typedef struct {
+  U8                  Flags;
+  GUI_COLOR           BkColor;
+  GUI_COLOR           BarColor;
+  GUI_COLOR           FocusColor;
+  GUI_COLOR           TickColor;
+  SLIDER_SKIN_PRIVATE SkinPrivate;
+} SLIDER_PROPS;
+
+typedef struct {
+  WIDGET              Widget;
+  SLIDER_PROPS        Props;
+  WIDGET_SKIN const * pWidgetSkin;
+  int                 NumTicks;
+  int                 Max;
+  int                 Min;
+  int                 v;
+  I16                 Width;
+} SLIDER_Obj;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define SLIDER_INIT_ID(p) (p->Widget.DebugId = SLIDER_ID)
+#else
+  #define SLIDER_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  SLIDER_Obj * SLIDER_LockH(SLIDER_Handle h);
+  #define SLIDER_LOCK_H(h)  SLIDER_LockH(h)
+#else
+  #define SLIDER_LOCK_H(h)  (SLIDER_Obj *)GUI_LOCK_H(h)
+#endif
+
+#ifndef   SLIDER_SUPPORT_TRANSPARENCY
+  #define SLIDER_SUPPORT_TRANSPARENCY WM_SUPPORT_TRANSPARENCY
+#endif
+
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern       SLIDER_PROPS   SLIDER__DefaultProps;
+extern const WIDGET_SKIN    SLIDER__SkinClassic;
+extern       WIDGET_SKIN    SLIDER__Skin;
+extern const WIDGET_SKIN  * SLIDER__pSkinDefault;
+
+#endif  // GUI_WINSUPPORT
+#endif  // SLIDER_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SPINBOX.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,191 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SPINBOX.h
+Purpose     : SPINBOX header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SPINBOX_H
+#define SPINBOX_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Required for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+#include "EDIT.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {             // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       States
+*/
+#define SPINBOX_STATE_PRESSED(x)     (U8)(1 << (U8)x)    // These flags are stored in (SPINBOX_OBJ->State)        | x must be 0 or 1
+#define SPINBOX_STATE_FOCUS          WIDGET_STATE_FOCUS  // This is read from         (SPINBOX_OBJ->Widget.State)
+
+#define SPINBOX_EDGE_RIGHT           0
+#define SPINBOX_EDGE_LEFT            1
+#define SPINBOX_EDGE_CENTER          2
+
+#define SPINBOX_EM_STEP              0
+#define SPINBOX_EM_EDIT              1
+
+#ifndef SPINBOX_EM_DEFAULT
+  #define SPINBOX_EM_DEFAULT         SPINBOX_EM_STEP
+#endif
+
+/*********************************************************************
+*
+*       Color indices
+*/
+#define SPINBOX_CI_DISABLED          EDIT_CI_DISABLED
+#define SPINBOX_CI_ENABLED           EDIT_CI_ENABLED
+#define SPINBOX_CI_PRESSED           2
+
+/*********************************************************************
+*
+*       Skinning property indices
+*/
+#define SPINBOX_SKIN_FLEX            SPINBOX_DrawSkinFlex
+
+#define SPINBOX_SKINFLEX_PI_PRESSED  0
+#define SPINBOX_SKINFLEX_PI_FOCUSED  1
+#define SPINBOX_SKINFLEX_PI_ENABLED  2
+#define SPINBOX_SKINFLEX_PI_DISABLED 3
+#define SPINBOX_SKIN_FLEX_RADIUS     2
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SPINBOX_Handle;
+
+typedef struct {
+  GUI_COLOR aColorFrame[2];   // [0] Outer color of surrounding frame.         [1] Inner color of surrounding frame.
+  GUI_COLOR aColorUpper[2];   // [0] Upper color of gradient for upper button. [1] Lower color of gradient for upper button.
+  GUI_COLOR aColorLower[2];   // [0] Upper color of gradient for lower button. [1] Lower color of gradient for lower button.
+  GUI_COLOR ColorArrow;       // Color of the button arrow.
+  GUI_COLOR ColorBk;          // Color of the background.                      // See WIDGET_ITEM_CREATE in SPINBOX_DrawSkinFlex()
+  GUI_COLOR ColorText;        // Color of the text.                            // See WIDGET_ITEM_CREATE in SPINBOX_DrawSkinFlex()
+  GUI_COLOR ColorButtonFrame; // Color of the button frame.
+} SPINBOX_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+*       Prototypes
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Creation
+*/
+SPINBOX_Handle SPINBOX_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int Min, int Max);
+SPINBOX_Handle SPINBOX_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int Min, int Max, int NumExtraBytes);
+SPINBOX_Handle SPINBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       Callback, should be called only from within a custom callback.
+*/
+void           SPINBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Get / Set properties
+*/
+void             SPINBOX_EnableBlink     (SPINBOX_Handle hObj, int Period, int OnOff);
+GUI_COLOR        SPINBOX_GetBkColor      (SPINBOX_Handle hObj, unsigned int Index);
+GUI_COLOR        SPINBOX_GetButtonBkColor(SPINBOX_Handle hObj, unsigned int Index);
+EDIT_Handle      SPINBOX_GetEditHandle   (SPINBOX_Handle hObj);
+const GUI_FONT * SPINBOX_GetFont         (SPINBOX_Handle hObj);
+GUI_COLOR        SPINBOX_GetTextColor    (SPINBOX_Handle hObj, unsigned int Index);
+int              SPINBOX_GetUserData     (SPINBOX_Handle hObj, void * pDest, int NumBytes);
+I32              SPINBOX_GetValue        (SPINBOX_Handle hObj);
+void             SPINBOX_SetBkColor      (SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void             SPINBOX_SetButtonBkColor(SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void             SPINBOX_SetButtonSize   (SPINBOX_Handle hObj, unsigned ButtonSize);
+void             SPINBOX_SetEdge         (SPINBOX_Handle hObj, U8 Edge);
+void             SPINBOX_SetEditMode     (SPINBOX_Handle hObj, U8 EditMode);
+void             SPINBOX_SetFont         (SPINBOX_Handle hObj, const GUI_FONT * pFont);
+void             SPINBOX_SetRange        (SPINBOX_Handle hObj, I32 Min, I32 Max);
+U16              SPINBOX_SetStep         (SPINBOX_Handle hObj, U16 Step);
+void             SPINBOX_SetTextColor    (SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+int              SPINBOX_SetUserData     (SPINBOX_Handle hObj, const void * pSrc, int NumBytes);
+void             SPINBOX_SetValue        (SPINBOX_Handle hObj, I32 Value);
+
+/*********************************************************************
+*
+*       Managing default values
+*/
+U16  SPINBOX_GetDefaultButtonSize(void);
+void SPINBOX_SetDefaultButtonSize(U16 ButtonSize);
+
+/*********************************************************************
+*
+*       Skinning
+*/
+void                    SPINBOX_GetSkinFlexProps     (SPINBOX_SKINFLEX_PROPS * pProps, int Index);
+void                    SPINBOX_SetSkinClassic       (SPINBOX_Handle hObj);
+void                    SPINBOX_SetSkin              (SPINBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int                     SPINBOX_DrawSkinFlex         (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void                    SPINBOX_SetSkinFlexProps     (const SPINBOX_SKINFLEX_PROPS * pProps, int Index);
+void                    SPINBOX_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SPINBOX_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // SPINBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SPINBOX_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,156 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SPINBOX_Private.h
+Purpose     : Private SPINBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SPINBOX_PRIVATE_H
+#define SPINBOX_PRIVATE_H
+
+#include "SPINBOX.h"
+#include "EDIT.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Private config defaults
+*
+**********************************************************************
+*/
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SPINBOX_SKIN_PRIVATE;
+
+typedef struct {
+  GUI_COLOR            aButtonBkColor[3];    // Button background color for the states (disabled, pressed, unpressed).
+  GUI_COLOR            aButtonUpperColor[3]; // Upper color for the button states (disabled, pressed, unpressed).
+  GUI_COLOR            aButtonLowerColor[3]; // Lower color for the button states (disabled, pressed, unpressed).
+  GUI_COLOR            aButtonOuterColor[3]; // Outer color for the button states (disabled, pressed, unpressed).
+  GUI_COLOR            aTriangleColor[3];    // Color of the triangle for the button states (disabled, pressed, unpressed).
+  GUI_COLOR            aBkColor[2];          // Background color for the states (enabled, disabled).
+  GUI_COLOR            aTextColor[2];        // Text       color for the states (enabled, disabled).
+  I32                  Min;                  // Minimum allowed value.
+  I32                  Max;                  // Maximum allowed value.
+  U16                  Step;                 // Value will be increased/decreased by this amount when a button is clicked.
+  U16                  ButtonSize;           // Size of the button depending on the orientation.
+  U8                   Edge;                 // Buttons reside on the left or right edge of the widget.
+  SPINBOX_SKIN_PRIVATE SkinPrivate;          // Structure containing a pointer to the used DrawSkin-function.
+} SPINBOX_PROPS;
+
+typedef struct {
+  WIDGET              Widget;
+  SPINBOX_PROPS       Props;
+  const WIDGET_SKIN * pWidgetSkin;
+  EDIT_Handle         hEdit;
+  GUI_TIMER_HANDLE    hTimer;
+  I8                  TimerButton;
+  I8                  LastButton;
+  I8                  NoAction;
+  U8                  State;       // Pressed state
+} SPINBOX_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define SPINBOX_INIT_ID(p) (p->Widget.DebugId = SPINBOX_ID)
+#else
+  #define SPINBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  SPINBOX_OBJ * SPINBOX_LockH(SPINBOX_Handle h);
+  #define SPINBOX_LOCK_H(h)   SPINBOX_LockH(h)
+#else
+  #define SPINBOX_LOCK_H(h)   (SPINBOX_OBJ *)GUI_LOCK_H(h)
+#endif
+
+#define SPINBOX_BUTTON_NONE     -1
+#define SPINBOX_BUTTON_0         0
+#define SPINBOX_BUTTON_1         1
+
+#define SPINBOX_TIMER_ID         1234
+
+/*********************************************************************
+*
+*       Private function prototypes
+*
+**********************************************************************
+*/
+void SPINBOX__ApplyProps     (SPINBOX_Handle hObj, SPINBOX_SKINFLEX_PROPS * const * ppProps);
+void SPINBOX__DrawBk         (SPINBOX_Handle hObj, GUI_COLOR   Color);
+void SPINBOX__GetButtonRect  (SPINBOX_Handle hObj, GUI_RECT  * pButtonRect, U8  ButtonIndex);
+void SPINBOX__GetButtonRectEx(SPINBOX_Handle hObj, WIDGET_ITEM_DRAW_INFO * ItemInfo);
+int  SPINBOX__GetDefaultMax  (void);
+int  SPINBOX__GetDefaultMin  (void);
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern       SPINBOX_PROPS   SPINBOX__DefaultProps;
+extern const WIDGET_SKIN     SPINBOX__SkinClassic;
+extern       WIDGET_SKIN     SPINBOX__Skin;
+extern const WIDGET_SKIN   * SPINBOX__pSkinDefault;
+
+#endif  // GUI_WINSUPPORT
+#endif  // SPINBOX_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SWIPELIST.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,229 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SWIPELIST.h
+Purpose     : SWIPELIST include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SWIPELIST_H
+#define SWIPELIST_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      // Req. for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {                  // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+*       Create flags
+*
+**********************************************************************
+*/
+#define SWIPELIST_CF_HORIZONTAL (0 << 0)
+#define SWIPELIST_CF_VERTICAL   (1 << 0)
+
+/*********************************************************************
+*
+*       Getting border size
+*/
+#define SWIPELIST_BI_LEFT   0
+#define SWIPELIST_BI_RIGHT  1
+#define SWIPELIST_BI_TOP    2
+#define SWIPELIST_BI_BOTTOM 3
+
+/*********************************************************************
+*
+*       Getting font
+*/
+#define SWIPELIST_FI_SEP_ITEM    0
+#define SWIPELIST_FI_ITEM_HEADER 1
+#define SWIPELIST_FI_ITEM_TEXT   2
+
+/*********************************************************************
+*
+*       Getting color
+*/
+#define SWIPELIST_CI_ITEM_HEADER_UNSEL 0
+#define SWIPELIST_CI_ITEM_HEADER_SEL   1
+#define SWIPELIST_CI_ITEM_TEXT_UNSEL   2
+#define SWIPELIST_CI_ITEM_TEXT_SEL     3
+#define SWIPELIST_CI_SEP_ITEM_TEXT     4
+
+#define SWIPELIST_CI_BK_ITEM_UNSEL     0
+#define SWIPELIST_CI_BK_ITEM_SEL       1
+#define SWIPELIST_CI_BK_SEP_ITEM       2
+
+/*********************************************************************
+*
+*       Bitmap align
+*/
+#define SWIPELIST_BA_LEFT      (0<<0)
+#define SWIPELIST_BA_RIGHT	   (1<<0)
+#define SWIPELIST_BA_HCENTER	 (2<<0)
+
+#define SWIPELIST_BA_VCENTER   (3<<2)
+#define SWIPELIST_BA_TOP	     (0<<2)
+#define SWIPELIST_BA_BOTTOM	   (1<<2)
+
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SWIPELIST_Handle;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+SWIPELIST_Handle SWIPELIST_CreateAsChild  (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+SWIPELIST_Handle SWIPELIST_CreateEx       (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SWIPELIST_Handle SWIPELIST_CreateIndirect (const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+SWIPELIST_Handle SWIPELIST_CreateUser     (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SWIPELIST_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+
+
+int                SWIPELIST_AddItem                 (SWIPELIST_Handle hObj, const char * sText, int ItemSize);
+int                SWIPELIST_AddItemText             (SWIPELIST_Handle hObj, unsigned ItemIndex, const char * sText);
+int                SWIPELIST_AddSepItem              (SWIPELIST_Handle hObj, const char * sText, int ItemSize);
+void               SWIPELIST_DeleteItem              (SWIPELIST_Handle hObj, unsigned ItemIndex);
+
+const GUI_BITMAP * SWIPELIST_GetBitmap               (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int                SWIPELIST_GetBitmapSpace          (SWIPELIST_Handle hObj);
+GUI_COLOR          SWIPELIST_GetBkColor              (SWIPELIST_Handle hObj, unsigned Index);
+int                SWIPELIST_GetBorderSize           (SWIPELIST_Handle hObj, unsigned Index);
+const GUI_FONT *   SWIPELIST_GetFont                 (SWIPELIST_Handle hObj, unsigned Index);
+int                SWIPELIST_GetItemSize             (SWIPELIST_Handle hObj, unsigned ItemIndex);
+U32                SWIPELIST_GetItemUserData         (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int                SWIPELIST_GetNumItems             (SWIPELIST_Handle hObj);
+int                SWIPELIST_GetNumText              (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int                SWIPELIST_GetReleasedItem         (SWIPELIST_Handle hObj);
+int                SWIPELIST_GetScrollPos            (SWIPELIST_Handle hObj);
+int                SWIPELIST_GetSelItem              (SWIPELIST_Handle hObj);
+GUI_COLOR          SWIPELIST_GetSepColor             (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int                SWIPELIST_GetSepSize              (SWIPELIST_Handle hObj, unsigned ItemIndex);
+void               SWIPELIST_GetText                 (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned TextIndex, char * pBuffer, int MaxSize);
+int                SWIPELIST_GetTextAlign            (SWIPELIST_Handle hObj, unsigned ItemIndex);
+GUI_COLOR          SWIPELIST_GetTextColor            (SWIPELIST_Handle hObj, unsigned Index);
+int                SWIPELIST_GetThreshold            (SWIPELIST_Handle hObj);
+int                SWIPELIST_GetUserData             (SWIPELIST_Handle hObj, void * pDest, int NumBytes);
+
+int                SWIPELIST_ItemAttachWindow        (SWIPELIST_Handle hObj, unsigned ItemIndex, WM_HWIN hWin, int x0, int y0);
+void               SWIPELIST_ItemDetachWindow        (SWIPELIST_Handle hObj, WM_HWIN hWin);
+int                SWIPELIST_OwnerDraw               (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+
+void               SWIPELIST_SetAttachedWindowPos    (SWIPELIST_Handle hObj, WM_HWIN hWin, int x0, int y0);
+void               SWIPELIST_SetBitmap               (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align, const GUI_BITMAP * pBitmap);
+void               SWIPELIST_SetBitmapEx             (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align, const GUI_BITMAP * pBitmap, int x, int y);
+void               SWIPELIST_SetBitmapSpace          (SWIPELIST_Handle hObj, unsigned Size);
+void               SWIPELIST_SetBkColor              (SWIPELIST_Handle hObj, unsigned Index, GUI_COLOR Color);
+void               SWIPELIST_SetBorderSize           (SWIPELIST_Handle hObj, unsigned Index, unsigned Size);
+void               SWIPELIST_SetFont                 (SWIPELIST_Handle hObj, unsigned Index, const GUI_FONT * pFont);
+void               SWIPELIST_SetItemSize             (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned Size);
+void               SWIPELIST_SetItemUserData         (SWIPELIST_Handle hObj, unsigned ItemIndex, U32 UserData);
+void               SWIPELIST_SetOwnerDraw            (SWIPELIST_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void               SWIPELIST_SetScrollPos            (SWIPELIST_Handle hObj, int Pos);
+void               SWIPELIST_SetScrollPosItem        (SWIPELIST_Handle hObj, unsigned ItemIndex);
+void               SWIPELIST_SetSepColor             (SWIPELIST_Handle hObj, unsigned ItemIndex, GUI_COLOR Color);
+void               SWIPELIST_SetSepSize              (SWIPELIST_Handle hObj, unsigned ItemIndex, int Size);
+void               SWIPELIST_SetText                 (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned TextIndex, char * sText);
+void               SWIPELIST_SetTextAlign            (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align);
+void               SWIPELIST_SetTextColor            (SWIPELIST_Handle hObj, unsigned Index, GUI_COLOR Color);
+int                SWIPELIST_SetThreshold            (SWIPELIST_Handle hObj, int Threshold);
+int                SWIPELIST_SetUserData             (SWIPELIST_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+*       Global functions
+*
+**********************************************************************
+*/
+int              SWIPELIST_GetDefaultBitmapSpace     (void);
+GUI_COLOR        SWIPELIST_GetDefaultBkColor         (unsigned Index);
+int              SWIPELIST_GetDefaultBorderSize      (unsigned Index);
+const GUI_FONT * SWIPELIST_GetDefaultFont            (unsigned Index);
+GUI_COLOR        SWIPELIST_GetDefaultSepColor        (void);
+unsigned         SWIPELIST_GetDefaultSepSize         (void);
+GUI_COLOR        SWIPELIST_GetDefaultTextColor       (unsigned Index);
+int              SWIPELIST_GetDefaultTextAlign       (void);
+int              SWIPELIST_GetDefaultThreshold       (void);
+
+void             SWIPELIST_SetDefaultBitmapSpace     (unsigned Size);
+void             SWIPELIST_SetDefaultBkColor         (unsigned Index, GUI_COLOR Color);
+void             SWIPELIST_SetDefaultBorderSize      (unsigned Index, unsigned Size);
+void             SWIPELIST_SetDefaultFont            (unsigned Index, const GUI_FONT * pFont);
+void             SWIPELIST_SetDefaultSepColor        (GUI_COLOR Color);
+void             SWIPELIST_SetDefaultSepSize         (unsigned Size);
+void             SWIPELIST_SetDefaultTextColor       (unsigned Index, GUI_COLOR Color);
+void             SWIPELIST_SetDefaultTextAlign       (int Align);
+void             SWIPELIST_SetDefaultThreshold       (int Threshold);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // SWIPELIST_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SWIPELIST_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,146 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : SWIPELIST.h
+Purpose     : SWIPELIST include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SWIPELIST_PRIVATE_H
+#define SWIPELIST_PRIVATE_H
+
+#include "SWIPELIST.h"
+#include "GUI_Private.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  WM_HWIN hWin;
+  int     xPos;
+  int     yPos;
+} SWIPELIST_WIN;
+
+typedef struct {
+  GUI_ARRAY      WinArray;
+  GUI_ARRAY      TextArray;
+  int            TextSize;
+  WM_HMEM        hDrawObj;
+  GUI_COLOR      SepColor;
+  int            SepSize;
+  int            Pos;
+  int            Size;
+  int            BitmapAlign;
+  int            TextAlign;
+  U8             Flags;
+  U32            UserData;
+} SWIPELIST_ITEM;
+
+typedef struct {
+  const GUI_FONT * pSepFont;
+  const GUI_FONT * pHeaderFont;
+  const GUI_FONT * pTextFont;
+  GUI_COLOR        aTextColor[5];
+  GUI_COLOR        aBkColor[3];
+  int              BitmapSpace;
+  int              aBorderSize[4];
+  U8               Flags;
+  int              Threshold;
+} SWIPELIST_PROPS;
+
+typedef struct {
+  WIDGET                  Widget;
+  SWIPELIST_PROPS         Props;
+  WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+  GUI_ARRAY               ItemArray;
+  int                     Pos;
+  int                     Size;
+  int                     FirstVisible;
+  int                     LastVisible;
+  int                     Sel;
+  int                     ReleasedItem;
+} SWIPELIST_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define SWIPELIST_INIT_ID(p) p->Widget.DebugId = SWIPELIST_ID
+#else
+  #define SWIPELIST_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  SWIPELIST_OBJ * SWIPELIST_LockH(SWIPELIST_Handle h);
+  #define SWIPELIST_LOCK_H(h)   SWIPELIST_LockH(h)
+#else
+  #define SWIPELIST_LOCK_H(h)   (SWIPELIST_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern SWIPELIST_PROPS SWIPELIST__DefaultProps;
+extern GUI_COLOR       SWIPELIST__DefaultSepColor;
+extern int             SWIPELIST__DefaultSepSize;
+extern int             SWIPELIST__DefaultTextAlign;
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void SWIPELIST__SetDrawObj   (SWIPELIST_Handle hObj, int Index, int Align, GUI_DRAW_HANDLE hDrawObj);
+void SWIPELIST__CalcItemPos  (GUI_ARRAY ItemArray, int StartIndex, int EndIndex, int AddSize);
+int  SWIPELIST__CalcItemSize (SWIPELIST_Handle hObj, int ItemIndex);
+
+#endif   /* if GUI_WINSUPPORT */
+#endif   /* SWIPELIST_PRIVATE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TEXT.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,155 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : TEXT.h
+Purpose     : TEXT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TEXT_H
+#define TEXT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+*       #defines
+*
+*************************************************************
+*/
+
+/************************************************************
+*
+*       Create / Status flags
+*/
+#define TEXT_CF_LEFT    GUI_TA_LEFT
+#define TEXT_CF_RIGHT   GUI_TA_RIGHT
+#define TEXT_CF_HCENTER GUI_TA_HCENTER
+
+#define TEXT_CF_VCENTER GUI_TA_VCENTER
+#define TEXT_CF_TOP     GUI_TA_TOP
+#define TEXT_CF_BOTTOM  GUI_TA_BOTTOM
+
+
+/*********************************************************************
+*
+*       Public Types
+*
+**********************************************************************
+
+*/
+typedef WM_HMEM TEXT_Handle;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+TEXT_Handle TEXT_Create        (int x0, int y0, int xSize, int ySize, int Id, int Flags, const char * s, int Align);
+TEXT_Handle TEXT_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, const char * s, int Align);
+TEXT_Handle TEXT_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pText);
+TEXT_Handle TEXT_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pText, int NumExtraBytes);
+TEXT_Handle TEXT_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void TEXT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Member functions
+*
+**********************************************************************
+*/
+
+/* Methods changing properties */
+
+GUI_COLOR        TEXT_GetBkColor  (TEXT_Handle hObj); 
+const GUI_FONT * TEXT_GetFont     (TEXT_Handle hObj);
+int              TEXT_GetNumLines (TEXT_Handle hObj);
+int              TEXT_GetText     (TEXT_Handle hObj, char * pDest, U32 BufferSize);
+int              TEXT_GetTextAlign(TEXT_Handle hObj);
+GUI_COLOR        TEXT_GetTextColor(TEXT_Handle hObj);
+int              TEXT_GetUserData (TEXT_Handle hObj, void * pDest, int NumBytes);
+GUI_WRAPMODE     TEXT_GetWrapMode (TEXT_Handle hObj);
+void             TEXT_SetBkColor  (TEXT_Handle hObj, GUI_COLOR Color);
+void             TEXT_SetFont     (TEXT_Handle hObj, const GUI_FONT * pFont);
+int              TEXT_SetDec      (TEXT_Handle hObj, I32 v, U8 Len, U8 Shift, U8 Signed, U8 Space);
+int              TEXT_SetText     (TEXT_Handle hObj, const char * s);
+void             TEXT_SetTextAlign(TEXT_Handle hObj, int Align);
+void             TEXT_SetTextColor(TEXT_Handle hObj, GUI_COLOR Color);
+int              TEXT_SetUserData (TEXT_Handle hObj, const void * pSrc, int NumBytes);
+void             TEXT_SetWrapMode (TEXT_Handle hObj, GUI_WRAPMODE WrapMode);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+
+const GUI_FONT * TEXT_GetDefaultFont     (void);
+GUI_COLOR        TEXT_GetDefaultTextColor(void);
+GUI_WRAPMODE     TEXT_GetDefaultWrapMode (void);
+void             TEXT_SetDefaultFont     (const GUI_FONT * pFont);
+void             TEXT_SetDefaultTextColor(GUI_COLOR Color);
+GUI_WRAPMODE     TEXT_SetDefaultWrapMode (GUI_WRAPMODE WrapMode);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // TEXT_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TEXT_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,102 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : TEXT.h
+Purpose     : TEXT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TEXT_PRIVATE_H
+#define TEXT_PRIVATE_H
+
+#include "TEXT.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR TextColor;
+  GUI_COLOR BkColor;
+  GUI_WRAPMODE WrapMode;
+} TEXT_PROPS;
+
+typedef struct {
+  WIDGET Widget;
+  TEXT_PROPS Props;
+  WM_HMEM hpText;
+  I16 Align;
+} TEXT_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define TEXT_INIT_ID(p) p->Widget.DebugId = TEXT_ID
+#else
+  #define TEXT_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  TEXT_OBJ * TEXT_LockH(TEXT_Handle h);
+  #define TEXT_LOCK_H(h)   TEXT_LockH(h)
+#else
+  #define TEXT_LOCK_H(h)   (TEXT_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern TEXT_PROPS TEXT__DefaultProps;
+
+#endif   /* if GUI_WINSUPPORT */
+#endif   /* TEXT_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TREEVIEW.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,240 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : TREEVIEW.h
+Purpose     : TREEVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TREEVIEW_H
+#define TREEVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+  extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/* Status- and create flags */
+#define TREEVIEW_CF_HIDELINES       (1 << 0)
+#define TREEVIEW_CF_ROWSELECT       (1 << 1)
+#define TREEVIEW_CF_AUTOSCROLLBAR_H (1 << 2)
+#define TREEVIEW_CF_AUTOSCROLLBAR_V (1 << 3)
+#define TREEVIEW_SF_HIDELINES       TREEVIEW_CF_HIDELINES
+#define TREEVIEW_SF_ROWSELECT       TREEVIEW_CF_ROWSELECT
+#define TREEVIEW_SF_AUTOSCROLLBAR_H TREEVIEW_CF_AUTOSCROLLBAR_H
+#define TREEVIEW_SF_AUTOSCROLLBAR_V TREEVIEW_CF_AUTOSCROLLBAR_V
+
+/* Bitmap indices */
+#define TREEVIEW_BI_CLOSED 0
+#define TREEVIEW_BI_OPEN   1
+#define TREEVIEW_BI_LEAF   2
+#define TREEVIEW_BI_PLUS   3
+#define TREEVIEW_BI_MINUS  4
+#define TREEVIEW_BI_PM     5
+
+/* Color indices */
+#define TREEVIEW_CI_UNSEL    0
+#define TREEVIEW_CI_SEL      1
+#define TREEVIEW_CI_DISABLED 2
+
+/* Relative positions (create) */
+#define TREEVIEW_INSERT_ABOVE       0
+#define TREEVIEW_INSERT_BELOW       1
+#define TREEVIEW_INSERT_FIRST_CHILD 2
+
+/* Relative positions (retrieve) */
+#define TREEVIEW_GET_FIRST        0
+#define TREEVIEW_GET_LAST         1
+#define TREEVIEW_GET_NEXT_SIBLING 2
+#define TREEVIEW_GET_PREV_SIBLING 3
+#define TREEVIEW_GET_FIRST_CHILD  4
+#define TREEVIEW_GET_PARENT       5
+
+/* Item flags */
+#define TREEVIEW_ITEM_TYPE_LEAF (0 << 0)
+#define TREEVIEW_ITEM_TYPE_NODE (1 << 0)
+
+/* Selection mode */
+#define TREEVIEW_SELMODE_ROW  1
+#define TREEVIEW_SELMODE_TEXT 0
+
+/************************************************************
+*
+*       Types
+*
+*************************************************************
+*/
+typedef WM_HMEM TREEVIEW_Handle;
+typedef WM_HMEM TREEVIEW_ITEM_Handle;
+
+typedef struct {
+  int IsNode;
+  int IsExpanded;
+  int HasLines;
+  int HasRowSelect;
+  int Level;
+} TREEVIEW_ITEM_INFO;
+
+typedef struct {
+  GUI_COLOR ColorBk;
+  GUI_COLOR ColorText;
+  GUI_COLOR ColorTextBk;
+  GUI_COLOR ColorLines;
+  GUI_RECT rText;
+  TREEVIEW_ITEM_Handle hItem;
+  const GUI_FONT * pFont;
+  char * pText;
+  U8 NumLines;
+  I16 ax0[3];
+  I16 ay0[3];
+  I16 ax1[3];
+  I16 ay1[3];
+  U8 NumConnectors;
+  I16 axc[16];
+  const GUI_BITMAP * pBmPM;
+  const GUI_BITMAP * pBmOCL;
+  I16 xPosPM, xPosOCL;
+  U8 IndexPM;
+  U8 IndexOCL;
+} TREEVIEW_ITEM_DRAW_INFO;
+
+/*********************************************************************
+*
+*       Create functions
+*
+**********************************************************************
+*/
+TREEVIEW_Handle      TREEVIEW_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+TREEVIEW_Handle      TREEVIEW_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+TREEVIEW_Handle      TREEVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+*       The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void TREEVIEW_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+*       Common functions
+*
+**********************************************************************
+*/
+int                  TREEVIEW_AttachItem     (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_Handle hItemAt, int Position);
+void                 TREEVIEW_DecSel         (TREEVIEW_Handle hObj);
+TREEVIEW_ITEM_Handle TREEVIEW_GetItem        (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, int Flags);
+TREEVIEW_ITEM_Handle TREEVIEW_GetSel         (TREEVIEW_Handle hObj);
+int                  TREEVIEW_GetUserData    (TREEVIEW_Handle hObj, void * pDest, int NumBytes);
+void                 TREEVIEW_IncSel         (TREEVIEW_Handle hObj);
+TREEVIEW_ITEM_Handle TREEVIEW_InsertItem     (TREEVIEW_Handle hObj, int IsNode, TREEVIEW_ITEM_Handle hItemPrev, int Position, const char * s);
+int                  TREEVIEW_OwnerDraw      (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void                 TREEVIEW_ScrollToSel    (TREEVIEW_Handle hObj);
+void                 TREEVIEW_SetAutoScrollH (TREEVIEW_Handle hObj, int State);
+void                 TREEVIEW_SetAutoScrollV (TREEVIEW_Handle hObj, int State);
+void                 TREEVIEW_SetBitmapOffset(TREEVIEW_Handle hObj, int Index, int xOff, int yOff);
+void                 TREEVIEW_SetBkColor     (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+void                 TREEVIEW_SetFont        (TREEVIEW_Handle hObj, const GUI_FONT * pFont);
+void                 TREEVIEW_SetHasLines    (TREEVIEW_Handle hObj, int State);
+void                 TREEVIEW_SetImage       (TREEVIEW_Handle hObj, int Index, const GUI_BITMAP * pBitmap);
+int                  TREEVIEW_SetIndent      (TREEVIEW_Handle hObj, int Indent);
+void                 TREEVIEW_SetLineColor   (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+void                 TREEVIEW_SetOwnerDraw   (TREEVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void                 TREEVIEW_SetSel         (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_SetSelMode     (TREEVIEW_Handle hObj, int Mode);
+void                 TREEVIEW_SetTextColor   (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int                  TREEVIEW_SetTextIndent  (TREEVIEW_Handle hObj, int TextIndent);
+int                  TREEVIEW_SetUserData    (TREEVIEW_Handle hObj, const void * pSrc, int NumBytes);
+
+
+/*********************************************************************
+*
+*       Treeview item related functions
+*
+**********************************************************************
+*/
+void                 TREEVIEW_ITEM_Collapse   (TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_CollapseAll(TREEVIEW_ITEM_Handle hItem);
+TREEVIEW_ITEM_Handle TREEVIEW_ITEM_Create     (int IsNode, const char * s, U32 UserData);
+void                 TREEVIEW_ITEM_Delete     (TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_Detach     (TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_Expand     (TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_ExpandAll  (TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_GetInfo    (TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_INFO * pInfo);
+void                 TREEVIEW_ITEM_GetText    (TREEVIEW_ITEM_Handle hItem, U8 * pBuffer, int MaxNumBytes);
+U32                  TREEVIEW_ITEM_GetUserData(TREEVIEW_ITEM_Handle hItem);
+void                 TREEVIEW_ITEM_SetImage   (TREEVIEW_ITEM_Handle hItem, int Index, const GUI_BITMAP * pBitmap);
+TREEVIEW_ITEM_Handle TREEVIEW_ITEM_SetText    (TREEVIEW_ITEM_Handle hItem, const char * s);
+void                 TREEVIEW_ITEM_SetUserData(TREEVIEW_ITEM_Handle hItem, U32 UserData);
+
+/*********************************************************************
+*
+*       Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR        TREEVIEW_GetDefaultBkColor  (int Index);
+const GUI_FONT * TREEVIEW_GetDefaultFont     (void);
+GUI_COLOR        TREEVIEW_GetDefaultLineColor(int Index);
+GUI_COLOR        TREEVIEW_GetDefaultTextColor(int Index);
+void             TREEVIEW_SetDefaultBkColor  (int Index, GUI_COLOR Color);
+void             TREEVIEW_SetDefaultFont     (const GUI_FONT * pFont);
+void             TREEVIEW_SetDefaultLineColor(int Index, GUI_COLOR Color);
+void             TREEVIEW_SetDefaultTextColor(int Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif  // GUI_WINSUPPORT
+#endif  // TREEVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TREEVIEW_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,158 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : TREEVIEW_Private.h
+Purpose     : TREEVIEW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TREEVIEW_PRIVATE_H
+#define TREEVIEW_PRIVATE_H
+
+#include "WM.h"
+#include "TREEVIEW.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define TREEVIEW_ITEM_STATE_EXPANDED (1 << 1)
+#define TREEVIEW_ITEM_STATE_ISLAST   (1 << 2)
+
+#define TREEVIEW_STATE_HASLINES      (1 << 0)
+
+#define TREEVIEW_COLORS_BK   0
+#define TREEVIEW_COLORS_TEXT 1
+#define TREEVIEW_COLORS_LINE 2
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct {
+  const GUI_BITMAP * apBm[3]; /* Closed, Open, Leaf */
+} TREEVIEW_ITEM_DATA;
+
+typedef struct {
+  WM_HMEM              hParent; /* Handle to treeview object */
+  TREEVIEW_ITEM_Handle hNext;
+  TREEVIEW_ITEM_Handle hPrev;
+  U32                  UserData;
+  WM_HMEM              hData;  /* Handle of TREEVIEW_ITEM_DATA structure */
+  U16                  xSize;
+  U16                  ySize;
+  U16                  Flags;
+  U16                  Connectors;
+  U8                   Level;  /* 0...15 */
+  char                 acText[1];
+} TREEVIEW_ITEM_OBJ;
+
+typedef struct {
+  const GUI_FONT * pFont;
+  GUI_COLOR aBkColor[3];
+  GUI_COLOR aTextColor[3];
+  GUI_COLOR aLineColor[3];
+  GUI_COLOR FocusColor;
+  const GUI_BITMAP * apBm[5]; /* Closed, Open, Leaf, Plus, Minus */
+  int Indent;
+  int TextIndent;
+  int MinItemHeight;
+} TREEVIEW_PROPS;
+
+typedef struct {
+  WIDGET                  Widget;
+  WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+  WM_SCROLL_STATE         ScrollStateV;
+  WM_SCROLL_STATE         ScrollStateH;
+  TREEVIEW_PROPS          Props;
+  U16                     Flags;
+  TREEVIEW_ITEM_Handle    hFirst;
+  TREEVIEW_ITEM_Handle    hLast;
+  TREEVIEW_ITEM_Handle    hSel;
+  GUI_TIMER_HANDLE        hTimer;
+  /* Cache variables */
+  int NumItems;
+  int NumVisItems;
+  int xSizeItems;     /* xSize in pixel used for all visible items */
+  int ySizeItems;     /* ySize in pixel used for all visible items */
+  I16 xOffPM, yOffPM; /* x/y offset of PM bitmap */
+  U16 xOverlapHLine;
+} TREEVIEW_OBJ;
+
+/*********************************************************************
+*
+*       Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  #define TREEVIEW_INIT_ID(p) p->Widget.DebugId = TREEVIEW_ID
+#else
+  #define TREEVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+  TREEVIEW_OBJ * TREEVIEW_LockH(TREEVIEW_Handle h);
+  #define TREEVIEW_LOCK_H(h)   TREEVIEW_LockH(h)
+#else
+  #define TREEVIEW_LOCK_H(h)   (TREEVIEW_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+*       Module internal data
+*
+**********************************************************************
+*/
+extern TREEVIEW_PROPS TREEVIEW__DefaultProps;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmOpen;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmClosed;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmLeaf;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmPlus;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmMinus;
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* TREEVIEW_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WIDGET.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,404 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : WIDGET.h
+Purpose     : Widget interface
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef WIDGET_H        /* Avoid multiple inclusion  */
+#define WIDGET_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#include "WM_Intern.h"  /* Window manager, including some internals, which speed things up */
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Typedefs
+*
+**********************************************************************
+*/
+typedef struct {
+  WM_HWIN    hWin;
+  int        Cmd;         /* WIDGET_ITEM_GET_XSIZE, WIDGET_ITEM_GET_YSIZE, WIDGET_ITEM_DRAW, */
+  int        ItemIndex;
+  int        Col;
+  int        x0, y0, x1, y1;
+  void     * p;
+} WIDGET_ITEM_DRAW_INFO;
+
+typedef int  WIDGET_DRAW_ITEM_FUNC(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+typedef void WIDGET_PAINT         (WM_HWIN hObj);
+typedef void WIDGET_CREATE        (WM_HWIN hObj);
+
+typedef struct {
+  WIDGET_PAINT  * pfPaint;
+  WIDGET_CREATE * pfCreate;
+  void          * pSkinPrivate;
+} WIDGET_SKIN;
+
+/*********************************************************************
+*
+*       Important: WIDGET_DRAW_ITEM_FUNC needs to be defined
+*                  in SCROLLBAR.h!
+*
+**********************************************************************
+*/
+#include "SCROLLBAR.h"
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       Unique widget id's
+*/
+#define BUTTON_ID    0x42555454UL /* BUTT */
+#define CHECKBOX_ID  0x43484543UL /* CHEC */
+#define DROPDOWN_ID  0x44524f50UL /* DROP */
+#define EDIT_ID      0x45444954UL /* EDIT */
+#define FRAMEWIN_ID  0x4652414dUL /* FRAM */
+#define FRAMECLNT_ID 0x46524143UL /* FRAC */
+#define GRAPH_ID     0x47524150UL /* GRAP */
+#define HEADER_ID    0x48454144UL /* HEAD */
+#define LISTBOX_ID   0x4C495342UL /* LISB */
+#define LISTVIEW_ID  0x4C495356UL /* LISV */
+#define LISTWHEEL_ID 0x4C495357UL /* LISW */
+#define MENU_ID      0x4d454e55UL /* MENU */
+#define MULTIEDIT_ID 0x4d554c45UL /* MULE */
+#define MULTIPAGE_ID 0x4d554c50UL /* MULP */
+#define MPAGECLNT_ID 0x4d50434CUL /* MPCL */
+#define PROGBAR_ID   0x50524f47UL /* PROG */
+#define RADIO_ID     0x52414449UL /* RADI */
+#define SCROLLBAR_ID 0x5343524fUL /* SCRO */
+#define SLIDER_ID    0x534c4944UL /* SLID */
+#define SWIPELIST_ID 0x53574950UL /* SWIP */
+#define TEXT_ID      0x54455854UL /* TEXT */
+#define TREEVIEW_ID  0x54524545UL /* TREE */
+#define ICONVIEW_ID  0x49434f4eUL /* ICON */
+#define IMAGE_ID     0x494d4147UL /* IMAG */
+#define SPINBOX_ID   0x5350494eUL /* SPIN */
+#define KNOB_ID      0x4b4e4f42UL /* KNOB */
+#define WINDOW_ID    0x57494e44UL /* WIND */
+
+#define WIDGET_LOCK(hWin)       ((WIDGET*)GUI_LOCK_H(hWin))
+
+/*********************************************************************
+*
+*       Config switches
+*/
+
+#ifndef   WIDGET_USE_PARENT_EFFECT
+  #define WIDGET_USE_PARENT_EFFECT 0
+#endif
+#ifndef   WIDGET_USE_FLEX_SKIN
+  #if WM_SUPPORT_TRANSPARENCY
+    #define WIDGET_USE_FLEX_SKIN     1
+  #else
+    #define WIDGET_USE_FLEX_SKIN     0
+  #endif
+#endif
+#if !defined(WIDGET_USE_SCHEME_SMALL) && !defined(WIDGET_USE_SCHEME_MEDIUM) && !defined(WIDGET_USE_SCHEME_LARGE)
+  #define WIDGET_USE_SCHEME_SMALL  1
+  #define WIDGET_USE_SCHEME_MEDIUM 0
+  #define WIDGET_USE_SCHEME_LARGE  0
+#endif
+#ifndef   WIDGET_USE_SCHEME_SMALL
+  #define WIDGET_USE_SCHEME_SMALL  0
+#endif
+#ifndef   WIDGET_USE_SCHEME_MEDIUM
+  #define WIDGET_USE_SCHEME_MEDIUM 0
+#endif
+#ifndef   WIDGET_USE_SCHEME_LARGE
+  #define WIDGET_USE_SCHEME_LARGE  0
+#endif
+#if (WIDGET_USE_SCHEME_SMALL + WIDGET_USE_SCHEME_MEDIUM + WIDGET_USE_SCHEME_LARGE) > 1
+  #error Only one scheme can be selected!
+#endif
+
+/*********************************************************************
+*
+*       States
+*/
+
+#define WIDGET_STATE_FOCUS              (1 << 0)
+#define WIDGET_STATE_VERTICAL           (1 << 3)
+#define WIDGET_STATE_FOCUSABLE          (1 << 4)
+
+#define WIDGET_STATE_USER0              (1 << 8)    /* Freely available for derived widget */
+#define WIDGET_STATE_USER1              (1 << 9)    /* Freely available for derived widget */
+#define WIDGET_STATE_USER2              (1 << 10)   /* Freely available for derived widget */
+
+#define WIDGET_STATE_FOCUSSABLE         WIDGET_STATE_FOCUSABLE
+
+/*********************************************************************
+*
+*       Skinning message identifiers
+*/
+#define WIDGET_ITEM_CREATE              0
+#define WIDGET_ITEM_DRAW                1
+#define WIDGET_ITEM_DRAW_ARROW          2
+#define WIDGET_ITEM_DRAW_ARROW_L        3
+#define WIDGET_ITEM_DRAW_ARROW_R        4
+#define WIDGET_ITEM_DRAW_BACKGROUND     5
+#define WIDGET_ITEM_DRAW_BITMAP         6
+#define WIDGET_ITEM_DRAW_BUTTON         7
+#define WIDGET_ITEM_DRAW_BUTTON_L       8
+#define WIDGET_ITEM_DRAW_BUTTON_R       9
+#define WIDGET_ITEM_DRAW_FOCUS         10
+#define WIDGET_ITEM_DRAW_FRAME         11
+#define WIDGET_ITEM_DRAW_OVERLAP       12
+#define WIDGET_ITEM_DRAW_OVERLAY       13
+#define WIDGET_ITEM_DRAW_SEP           14
+#define WIDGET_ITEM_DRAW_SHAFT         15
+#define WIDGET_ITEM_DRAW_SHAFT_L       16
+#define WIDGET_ITEM_DRAW_SHAFT_R       17
+#define WIDGET_ITEM_DRAW_TEXT          18
+#define WIDGET_ITEM_DRAW_THUMB         19
+#define WIDGET_ITEM_DRAW_TICKS         20
+#define WIDGET_ITEM_GET_BORDERSIZE_B   21
+#define WIDGET_ITEM_GET_BORDERSIZE_L   22
+#define WIDGET_ITEM_GET_BORDERSIZE_R   23
+#define WIDGET_ITEM_GET_BORDERSIZE_T   24
+#define WIDGET_ITEM_GET_BUTTONSIZE     25
+#define WIDGET_ITEM_GET_XSIZE          26
+#define WIDGET_ITEM_GET_YSIZE          27
+#define WIDGET_ITEM_GET_RADIUS         28
+#define WIDGET_ITEM_APPLY_PROPS        29  // Not to be documented. Use this message identifier to update the
+                                           // properties of attached widgets from <WIDGET>_DrawSkinFlex().
+#define WIDGET_DRAW_BACKGROUND         30
+
+#define WIDGET_DRAW_OVERLAY    WIDGET_ITEM_DRAW_OVERLAY
+
+/*********************************************************************
+*
+*       Messages
+*/
+
+#define WM_WIDGET_SET_EFFECT    (WM_WIDGET + 0)
+
+/*********************************************************************
+*
+*       Create flags
+*/
+
+#define WIDGET_CF_VERTICAL      WIDGET_STATE_VERTICAL
+
+/*********************************************************************
+*
+*        Widget object
+*
+* The widget object is the base class for most widgets
+*/
+typedef struct {
+  int EffectSize;
+  void (* pfDrawUp)      (void);
+  void (* pfDrawUpRect)  (const GUI_RECT * pRect);
+  void (* pfDrawDown)    (void);
+  void (* pfDrawDownRect)(const GUI_RECT * pRect);
+  void (* pfDrawFlat)    (void);
+  void (* pfDrawFlatRect)(const GUI_RECT * pRect);
+} WIDGET_EFFECT;
+
+typedef struct {
+  WM_Obj      Win;
+  const WIDGET_EFFECT* pEffect;
+  I16 Id;
+  U16 State;
+  #if GUI_DEBUG_LEVEL > 1
+    U32 DebugId;
+  #endif  
+} WIDGET;
+
+
+/*********************************************************************
+*
+*         GUI_DRAW
+*
+* The GUI_DRAW object is used as base class for selfdrawing,
+* non-windows objects. They are used as content of different widgets,
+* such as the bitmap or header widgets.
+*/
+/* Declare Object struct */
+typedef struct GUI_DRAW GUI_DRAW;
+typedef void   GUI_DRAW_SELF_CB (WM_HWIN hWin);
+typedef WM_HMEM GUI_DRAW_HANDLE;
+
+/* Declare Object constants (member functions etc)  */
+typedef struct {
+  void (* pfDraw)    (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, int x, int y);
+  int  (* pfGetXSize)(GUI_DRAW_HANDLE hDrawObj);
+  int  (* pfGetYSize)(GUI_DRAW_HANDLE hDrawObj);
+} GUI_DRAW_CONSTS;
+
+/* Declare Object */
+struct GUI_DRAW {
+  const GUI_DRAW_CONSTS* pConsts;
+  union {
+    const void * pData;
+    GUI_DRAW_SELF_CB* pfDraw;
+  } Data;
+  I16 xOff, yOff;
+};
+
+/* GUI_DRAW_ API */
+void GUI_DRAW__Draw    (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, int x, int y);
+int  GUI_DRAW__GetXSize(GUI_DRAW_HANDLE hDrawObj);
+int  GUI_DRAW__GetYSize(GUI_DRAW_HANDLE hDrawObj);
+
+void GUI_DrawStreamedEnableAuto(void);
+
+/* GUI_DRAW_ Constructurs for different objects */
+WM_HMEM GUI_DRAW_BITMAP_Create  (const GUI_BITMAP* pBitmap, int x, int y);
+WM_HMEM GUI_DRAW_BMP_Create     (const void* pBMP, int x, int y);
+WM_HMEM GUI_DRAW_STREAMED_Create(const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+WM_HMEM GUI_DRAW_SELF_Create(GUI_DRAW_SELF_CB* pfDraw, int x, int y);
+
+/*********************************************************************
+*
+*       Global data
+*
+**********************************************************************
+*/
+
+extern const WIDGET_EFFECT WIDGET_Effect_3D;
+extern const WIDGET_EFFECT WIDGET_Effect_3D1L;
+extern const WIDGET_EFFECT WIDGET_Effect_3D2L;
+extern const WIDGET_EFFECT WIDGET_Effect_None;
+extern const WIDGET_EFFECT WIDGET_Effect_Simple;
+
+/*********************************************************************
+*
+*       Internal API routines
+*
+**********************************************************************
+*/
+
+void      WIDGET__DrawFocusRect      (WIDGET * pWidget, const GUI_RECT * pRect, int Dist);
+void      WIDGET__DrawHLine          (WIDGET * pWidget, int y, int x0, int x1);
+void      WIDGET__DrawTriangle       (WIDGET * pWidget, int x, int y, int Size, int Inc);
+void      WIDGET__DrawVLine          (WIDGET * pWidget, int x, int y0, int y1);
+void      WIDGET__EFFECT_DrawDownRect(WIDGET * pWidget, GUI_RECT * pRect);
+void      WIDGET__EFFECT_DrawDown    (WIDGET * pWidget);
+void      WIDGET__EFFECT_DrawUpRect  (WIDGET * pWidget, GUI_RECT * pRect);
+void      WIDGET__FillRectEx         (WIDGET * pWidget, const GUI_RECT * pRect);
+int       WIDGET__GetWindowSizeX     (WM_HWIN hWin);
+GUI_COLOR WIDGET__GetBkColor         (WM_HWIN hObj);
+int       WIDGET__GetXSize           (const WIDGET * pWidget);
+int       WIDGET__GetYSize           (const WIDGET * pWidget);
+void      WIDGET__GetClientRect      (WIDGET * pWidget, GUI_RECT * pRect);
+void      WIDGET__GetInsideRect      (WIDGET * pWidget, GUI_RECT * pRect);
+void      WIDGET__Init               (WIDGET * pWidget, int Id, U16 State);
+void      WIDGET__RotateRect90       (WIDGET * pWidget, GUI_RECT * pDest, const GUI_RECT * pRect);
+void      WIDGET__SetScrollState     (WM_HWIN hWin, const WM_SCROLL_STATE * pVState, const WM_SCROLL_STATE * pState);
+void      WIDGET__FillStringInRect   (const char * pText, const GUI_RECT * pFillRect, const GUI_RECT * pTextRectMax, const GUI_RECT * pTextRectAct);
+
+//
+// Function pointers for drawing streamed bitmaps
+//
+extern void (* GUI__pfDrawStreamedBitmap)  (const void * p, int x, int y);
+extern int  (* GUI__pfDrawStreamedBitmapEx)(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+
+/*********************************************************************
+*
+*       API routines
+*
+**********************************************************************
+*/
+void  WIDGET_SetState     (WM_HWIN hObj, int State);
+void  WIDGET_AndState     (WM_HWIN hObj, int State);
+void  WIDGET_OrState      (WM_HWIN hObj, int State);
+int   WIDGET_HandleActive (WM_HWIN hObj, WM_MESSAGE* pMsg);
+int   WIDGET_GetState     (WM_HWIN hObj);
+int   WIDGET_SetWidth     (WM_HWIN hObj, int Width);
+void  WIDGET_SetFocusable (WM_HWIN hObj, int State);
+
+void  WIDGET_EFFECT_3D_DrawUp(void);
+
+const WIDGET_EFFECT* WIDGET_SetDefaultEffect(const WIDGET_EFFECT* pEffect);
+
+void  WIDGET_SetEffect              (WM_HWIN hObj, const WIDGET_EFFECT* pEffect);
+
+const WIDGET_EFFECT* WIDGET_GetDefaultEffect(void);
+
+void WIDGET_EFFECT_3D_SetColor    (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_3D1L_SetColor  (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_3D2L_SetColor  (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_Simple_SetColor(unsigned Index, GUI_COLOR Color);
+
+GUI_COLOR WIDGET_EFFECT_3D_GetColor    (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_3D1L_GetColor  (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_3D2L_GetColor  (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_Simple_GetColor(unsigned Index);
+
+int WIDGET_EFFECT_3D_GetNumColors(void);
+int WIDGET_EFFECT_3D1L_GetNumColors(void);
+int WIDGET_EFFECT_3D2L_GetNumColors(void);
+int WIDGET_EFFECT_Simple_GetNumColors(void);
+
+/*********************************************************************
+*
+*       Compatibility macros
+*
+**********************************************************************
+*/
+#define WIDGET_EnableStreamAuto() GUI_DrawStreamedEnableAuto()
+
+#define WIDGET_SetDefaultEffect_3D()     WIDGET_SetDefaultEffect(&WIDGET_Effect_3D)
+#define WIDGET_SetDefaultEffect_3D1L()   WIDGET_SetDefaultEffect(&WIDGET_Effect_3D1L)
+#define WIDGET_SetDefaultEffect_3D2L()   WIDGET_SetDefaultEffect(&WIDGET_Effect_3D2L)
+#define WIDGET_SetDefaultEffect_None()   WIDGET_SetDefaultEffect(&WIDGET_Effect_None)
+#define WIDGET_SetDefaultEffect_Simple() WIDGET_SetDefaultEffect(&WIDGET_Effect_Simple)
+
+#endif /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif   /* SLIDER_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WINDOW_Private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,78 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : WINDOW_Private.h
+Purpose     : WINDOW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef WINDOW_PRIVATE_H
+#define WINDOW_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+  WIDGET Widget;
+  WM_CALLBACK * cb;
+  WM_HWIN hFocusedChild;
+  WM_DIALOG_STATUS * pDialogStatus;
+  GUI_COLOR BkColor;
+} WINDOW_OBJ;
+
+/*********************************************************************
+*
+*       Externals
+*
+**********************************************************************
+*/
+
+extern GUI_COLOR WINDOW__DefaultBkColor;
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* WINDOW_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,793 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : WM.h
+Purpose     : Windows manager include
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_H            /* Make sure we only include it once */
+#define WM_H
+
+
+#include "GUI_ConfDefaults.h"
+#include "GUI_Type.h"      /* Needed because of typedefs only */
+#include "WM_GUI.h"       /* Some functions needed by GUI routines */
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/* Static memory devices */
+#ifndef   WM_SUPPORT_STATIC_MEMDEV
+  #define WM_SUPPORT_STATIC_MEMDEV GUI_SUPPORT_MEMDEV
+#endif
+
+/* Support for transparency. Switching it off makes Wm smaller and faster */
+#ifndef   WM_SUPPORT_TRANSPARENCY
+  #define WM_SUPPORT_TRANSPARENCY 1 /* Should be defined outside of GUI_WINSUPPORT because of '#if GUI_WINSUPPORT && WM_SUPPORT_TRANSPARENCY' in some files */
+#endif
+
+/* This is for tests only. It will fill the invalid area of a window.
+   Can be used for debugging. */
+#ifndef WM_SUPPORT_DIAG
+  #ifdef WIN32   /* In simulation */
+    #define WM_SUPPORT_DIAG GUI_WINSUPPORT
+  #else
+    #define WM_SUPPORT_DIAG 0
+  #endif
+#endif
+
+/* Make sure we actually have configured windows. If we have not,
+  there is no point for a windows manager and it will therefor not
+  generate any code !
+*/
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       Config defaults
+*/
+#ifndef   WM_ASSERT
+  #define WM_ASSERT(expr) GUI_DEBUG_ASSERT(expr)
+#endif
+
+#ifndef   WM_SUPPORT_TOUCH
+  #define WM_SUPPORT_TOUCH        GUI_SUPPORT_TOUCH
+#endif
+
+/* Allow older API calls */
+#ifndef   WM_COMPATIBLE_MODE
+  #define WM_COMPATIBLE_MODE 1
+#endif
+
+/* Send a message if visibility of a window has changed */
+#ifndef   WM_SUPPORT_NOTIFY_VIS_CHANGED
+  #define WM_SUPPORT_NOTIFY_VIS_CHANGED 0
+#endif
+
+#ifndef   WM_SUPPORT_CPP
+  #if defined (_MSC_VER)
+    #define WM_SUPPORT_CPP 1
+  #else
+    #define WM_SUPPORT_CPP 0
+  #endif
+#endif
+
+/*********************************************************************
+*
+*       Locking macros
+*/
+#define WM_LOCK()   GUI_LOCK()
+#define WM_UNLOCK() GUI_UNLOCK()
+
+#define WM_LOCK_H(hWin) (WM_Obj *)GUI_LOCK_H(hWin)
+
+/*********************************************************************
+*
+*       Data types
+*/
+typedef struct WM_WINDOW_INFO WM_WINDOW_INFO;
+
+struct WM_WINDOW_INFO {
+  GUI_HMEM hWin;
+  GUI_HMEM hParent;
+  GUI_HMEM hFirstChild;
+  GUI_HMEM hNext;
+  GUI_RECT Rect;
+  U32      Status;
+  U32      DebugId;
+  WM_WINDOW_INFO * pNext;
+};
+
+typedef struct {
+  int Key, PressedCnt;
+} WM_KEY_INFO;
+
+typedef struct {
+  int NumItems, v, PageSize;
+} WM_SCROLL_STATE;
+
+typedef struct {
+  int Done;
+  int ReturnValue;
+} WM_DIALOG_STATUS;
+
+typedef struct {
+  int x,y;
+  U8  State;
+  U8  StatePrev;
+} WM_PID_STATE_CHANGED_INFO;
+
+typedef struct {
+  U8  Cmd;
+  U8  FinalMove;
+  U8  StopMotion;
+  U8  IsDragging;
+  int dx, dy, da;
+  int xPos, yPos;
+  int Period;
+  int SnapX;
+  int SnapY;
+  U8  IsOutside;
+  unsigned Overlap;
+  U32 Flags;
+  GUI_PID_STATE * pState;
+  GUI_HMEM hContext;
+} WM_MOTION_INFO;
+
+typedef struct {
+  I32       FactorMin;   // Minimum factor to be used (<< 16)
+  I32       FactorMax;   // Maximum factor to be used (<< 16)
+  U32       xSize;       // Native xSize of window to be zoomed in pixels
+  U32       ySize;       // Native ySize of window to be zoomed in pixels
+  U32       xSizeParent; // xSize of parent window
+  U32       ySizeParent; // ySize of parent window
+  I32       Factor0;     // Primary factor when starting zoom gesture (<< 16)
+  int       xPos0;       // Primary window position in x when starting the gesture
+  int       yPos0;       // Primary window position in y when starting the gesture
+  GUI_POINT Center0;     // Primary center point when starting the gesture
+} WM_ZOOM_INFO;
+
+typedef struct {
+  int            Flags;     // Information regarding gesture type
+  GUI_POINT      Point;     // Relative movement
+  GUI_POINT      Center;    // Center point for zooming
+  I32            Angle;     // Angle between the touch points
+  I32            Factor;    // Current zoom factor
+  WM_ZOOM_INFO * pZoomInfo; // Pointer to WM_ZOOM_INFO structure
+} WM_GESTURE_INFO;
+
+typedef struct {
+  int dx, dy;
+} WM_MOVE_INFO;
+
+/*********************************************************************
+*
+*       Gesture flags for multi touch support
+*/
+#define WM_GF_BEGIN  (1 << 0)
+#define WM_GF_END    (1 << 1)
+#define WM_GF_PAN    (1 << 2)
+#define WM_GF_ZOOM   (1 << 3)
+#define WM_GF_ROTATE (1 << 4)
+#define WM_GF_DTAP   (1 << 5)
+
+/*********************************************************************
+*
+*       Messages Ids
+*
+* The following is the list of windows messages.
+*/
+#define WM_CREATE                   0x0001  /* The first message received, right after client has actually been created */
+#define WM_MOVE                     0x0003  /* window has been moved (Same as WIN32) */
+
+#define WM_SIZE                     0x0005  /* Is sent to a window after its size has changed (Same as WIN32, do not change !) */
+
+#define WM_DELETE                   11      /* Delete (Destroy) command: This tells the client to free its data strutures since the window
+                                               it is associates with no longer exists.*/
+#define WM_TOUCH                    0x0240  /* Touch screen message */
+#define WM_TOUCH_CHILD              13      /* Touch screen message to ancestors */
+#define WM_KEY                      14      /* Key has been pressed */
+
+#define WM_PAINT                    0x000F  /* Repaint window (because content is (partially) invalid */
+
+#if GUI_SUPPORT_MOUSE
+#define WM_MOUSEOVER                16      /* Mouse has moved, no key pressed */
+#define WM_MOUSEOVER_END            18      /* Mouse has moved, no key pressed */
+#endif
+
+#define WM_PID_STATE_CHANGED        17      /* Pointer input device state has changed */
+
+#define WM_GET_INSIDE_RECT          20      /* get inside rectangle: client rectangle minus pixels lost to effect */
+#define WM_GET_ID                   21      /* Get id of widget */
+#define WM_SET_ID                   22      /* Set id of widget */
+#define WM_GET_CLIENT_WINDOW        23      /* Get window handle of client window. Default is the same as window */
+#define WM_CAPTURE_RELEASED         24      /* Let window know that mouse capture is over */
+
+#define WM_INIT_DIALOG              29      /* Inform dialog that it is ready for init */
+
+#define WM_SET_FOCUS                30      /* Inform window that it has gotten or lost the focus */
+#define WM_GET_ACCEPT_FOCUS         31      /* Find out if window can accept the focus */
+#define WM_NOTIFY_CHILD_HAS_FOCUS   32      /* Sent to parent when child receives / loses focus */
+
+#define WM_NOTIFY_OWNER_KEY         33      /* Some widgets (e.g. listbox) notify owner when receiving key messages */
+
+#define WM_GET_BKCOLOR              34      /* Return back ground color (only frame window and similar) */
+#define WM_GET_SCROLL_STATE         35      /* Query state of scroll bar */
+
+#define WM_SET_SCROLL_STATE         36      /* Set scroll info ... only effective for scrollbars */
+
+#define WM_NOTIFY_CLIENTCHANGE      37      /* Client area may have changed */
+#define WM_NOTIFY_PARENT            38      /* Notify parent. Information is detailed as notification code */
+#define WM_NOTIFY_PARENT_REFLECTION 39      /* Notify parent reflection.
+                                               Sometimes send back as a result of the WM_NOTIFY_PARENT message
+                                               to let child react on behalf of its parent.
+                                               Information is detailed as notification code */
+#define WM_NOTIFY_ENABLE            40      /* Enable or disable widget */
+#define WM_NOTIFY_VIS_CHANGED       41      /* Visibility of a window has or may have changed */
+
+#define WM_HANDLE_DIALOG_STATUS     42      /* Set or get dialog status */
+#define WM_GET_RADIOGROUP           43      /* Send to all siblings and children of a radio control when
+                                               selection changed */
+#define WM_MENU                     44      /* Send to owner window of menu widget */
+#define WM_SCREENSIZE_CHANGED       45      /* Send to all windows when size of screen has changed */
+#define WM_PRE_PAINT                46      /* Send to a window before it receives a WM_PAINT message */
+#define WM_POST_PAINT               47      /* Send to a window after (the last) WM_PAINT message */
+
+#define WM_MOTION                   48      /* Automatic motion messages */
+
+#define WM_GET_WINDOW_ID            49      /* Return widget type specific Id (DebugId) */
+
+#define WM_PRE_BANDING              50      /* Send before starting banding process */
+#define WM_POST_BANDING             51      /* Send after finishing banding process */
+
+#define WM_USER_DATA                52      /* Send immediately after setting user data */
+#define WM_SET_CALLBACK             53      /* Send immediately after setting user data */
+
+#define WM_GESTURE                  0x0119  /* Gesture message */
+
+#define WM_TIMER                    0x0113  /* Timer has expired              (Keep the same as WIN32) */
+#define WM_WIDGET                   0x0300  /* 256 messages reserved for Widget messages */
+#define WM_USER                     0x0400  /* Reserved for user messages ... (Keep the same as WIN32) */
+
+/*********************************************************************
+*
+*       Motion messages
+*/
+#define WM_MOTION_INIT    0
+#define WM_MOTION_MOVE    1
+#define WM_MOTION_GETPOS  2
+#define WM_MOTION_GETCONTEXT 3
+
+/*********************************************************************
+*
+*       Motion flags
+*/
+#define WM_MOTION_MANAGE_BY_WINDOW   (1 << 0) // Window movement is managed by window itself
+
+/*********************************************************************
+*
+*       Notification codes
+*
+* The following is the list of notification codes send
+* with the WM_NOTIFY_PARENT message
+*/
+#define WM_NOTIFICATION_CLICKED             1
+#define WM_NOTIFICATION_RELEASED            2
+#define WM_NOTIFICATION_MOVED_OUT           3
+#define WM_NOTIFICATION_SEL_CHANGED         4
+#define WM_NOTIFICATION_VALUE_CHANGED       5
+#define WM_NOTIFICATION_SCROLLBAR_ADDED     6      /* Scroller added */
+#define WM_NOTIFICATION_CHILD_DELETED       7      /* Inform window that child is about to be deleted */
+#define WM_NOTIFICATION_GOT_FOCUS           8
+#define WM_NOTIFICATION_LOST_FOCUS          9
+#define WM_NOTIFICATION_SCROLL_CHANGED     10
+
+#define WM_NOTIFICATION_WIDGET             11      /* Space for widget defined notifications */
+#define WM_NOTIFICATION_USER               16      /* Space for  application (user) defined notifications */
+
+/*********************************************************************
+*
+*       Memory management
+*/
+#define WM_HWIN        GUI_HWIN
+#define WM_HWIN_NULL   GUI_HMEM_NULL
+#define WM_HMEM        GUI_HMEM
+#define WM_HMEM_NULL   GUI_HMEM_NULL
+#define WM_HTIMER      GUI_HMEM
+
+/*********************************************************************
+*
+*       Window defines
+*/
+#define WM_HBKWIN      WM_GetDesktopWindow()                /* Handle of background window */
+#define WM_UNATTACHED  ((WM_HMEM) - 1)                      /* Do not attach to a window */
+
+/*********************************************************************
+*
+*       Window create flags.
+*
+* These flags can be passed to the create window
+* function as flag-parameter. The flags are combinable using the
+* binary or operator.
+*/
+#define WM_CF_HASTRANS         (1UL << 0)  /* Has transparency. Needs to be defined for windows which do not fill the entire
+                                          section of their (client) rectangle. */
+#define WM_CF_HIDE             (0UL << 1)  /* Hide window after creation (default !) */
+#define WM_CF_SHOW             (1UL << 1)  /* Show window after creation */
+#define WM_CF_MEMDEV           (1UL << 2)  /* Use memory device for redraws */
+#define WM_CF_STAYONTOP        (1UL << 3)  /* Stay on top */
+#define WM_CF_DISABLED         (1UL << 4)  /* Disabled: Does not receive PID (mouse & touch) input */
+
+/* Create only flags ... Not available as status flags */
+#define WM_CF_ACTIVATE         (1UL << 5)  /* If automatic activation upon creation of window is desired */
+#define WM_CF_FGND             (0UL << 6)  /* Put window in foreground after creation (default !) */
+#define WM_CF_BGND             (1UL << 6)  /* Put window in background after creation */
+
+/* Anchor flags */
+#define WM_CF_ANCHOR_RIGHT     (1UL << 7)  /* Right anchor ...  If parent is resized, distance to right  will remain const (left is default) */
+#define WM_CF_ANCHOR_BOTTOM    (1UL << 8)  /* Bottom anchor ... If parent is resized, distance to bottom will remain const (top  is default) */
+#define WM_CF_ANCHOR_LEFT      (1UL << 9)  /* Left anchor ...   If parent is resized, distance to left   will remain const (left is default) */
+#define WM_CF_ANCHOR_TOP       (1UL << 10) /* Top anchor ...    If parent is resized, distance to top    will remain const (top  is default) */
+
+#define WM_CF_CONST_OUTLINE    (1UL << 11) /* Constant outline. This is relevant for transparent windows only. If a window is transparent
+                                              and does not have a constant outline, its background is invalided instead of the window itself.
+                                              This causes add. computation time when redrawing. */
+#define WM_CF_LATE_CLIP        (1UL << 12)
+#define WM_CF_MEMDEV_ON_REDRAW (1UL << 13)
+
+#define WM_SF_INVALID_DRAW     (1UL << 14)
+#define WM_SF_DELETE           (1UL << 15) /* Marks the window to be deleted within WM_Exec() when no callback routine is executed */
+
+#define WM_CF_STATIC           (1UL << 16) /* Use static memory device for redraws */
+
+#define WM_CF_MOTION_X         (1UL << 17) /* Window can be moved automatically in X axis */
+#define WM_CF_MOTION_Y         (1UL << 18) /* Window can be moved automatically in Y axis */
+
+#define WM_CF_GESTURE          (1UL << 19) /* Marks the window to be a able to receive gesture messages */
+
+#define WM_CF_ZOOM             (1UL << 20) /* Window can be scaled automatically by multi touch gesture input */
+
+#define WM_CF_MOTION_R         (1UL << 21) // Window can be rotated
+
+/*********************************************************************
+*
+*       Window manager types
+*/
+typedef struct WM_Obj     WM_Obj;
+typedef struct WM_MESSAGE WM_MESSAGE;
+
+typedef void WM_CALLBACK( WM_MESSAGE * pMsg);
+
+struct WM_MESSAGE {
+  int MsgId;            /* type of message */
+  WM_HWIN hWin;         /* Destination window */
+  WM_HWIN hWinSrc;      /* Source window  */
+  union {
+    const void * p;     /* Message specific data pointer */
+    int v;
+    PTR_ADDR u;
+    GUI_COLOR Color;
+    void (* pFunc)(void);
+  } Data;
+};
+
+struct WM_Obj {
+  GUI_RECT Rect;        /* Outer dimensions of window */
+  GUI_RECT InvalidRect; /* Invalid rectangle */
+  WM_CALLBACK* cb;      /* Ptr to notification callback */
+  WM_HWIN hNextLin;     /* Next window in linear list */
+  WM_HWIN hParent;
+  WM_HWIN hFirstChild;
+  WM_HWIN hNext;
+  #if WM_SUPPORT_STATIC_MEMDEV
+    GUI_MEMDEV_Handle hMem; /* Static memory device */
+  #endif
+  U32 Status;           /* Status flags */
+  #if WM_SUPPORT_CPP
+    void * ObjPtr;
+  #endif
+};
+
+typedef void WM_tfPollPID(void);
+typedef void WM_tfForEach(WM_HWIN hWin, void * pData);
+
+typedef void (* WM_tfInvalidateParent)  (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+typedef void (* WM_tfInvalidateDrawFunc)(WM_HWIN hWin);
+typedef void (* WM_tfPaint1Func)        (WM_HWIN hWin);
+
+typedef struct {
+  WM_HMEM  hTimer;
+  WM_HWIN  hWin;
+  int      UserId;
+} WM_TIMER_OBJ;
+
+/*********************************************************************
+*
+*       General control routines
+*/
+void WM_Activate  (void);
+void WM_Deactivate(void);
+void WM_Init      (void);
+int  WM_Exec      (void);    /* Execute all jobs ... Return 0 if nothing was done. */
+int  WM_Exec1     (void);    // Execute only one job
+U32  WM_SetCreateFlags(U32 Flags);
+WM_tfPollPID * WM_SetpfPollPID(WM_tfPollPID * pf);
+
+/*********************************************************************
+*
+*       Window manager interface
+*/
+void    WM_AttachWindow              (WM_HWIN hWin, WM_HWIN hParent);
+void    WM_AttachWindowAt            (WM_HWIN hWin, WM_HWIN hParent, int x, int y);
+int     WM_CheckScrollPos            (WM_SCROLL_STATE * pScrollState, int Pos, int LowerDist, int UpperDist); /* not to be documented (may change in future version) */
+void    WM_ClrHasTrans               (WM_HWIN hWin);
+WM_HWIN WM_CreateWindow              (int x0, int y0, int xSize, int ySize, U32 Style, WM_CALLBACK * cb, int NumExtraBytes);
+WM_HWIN WM_CreateWindowAsChild       (int x0, int y0, int xSize, int ySize, WM_HWIN hWinParent, U32 Style, WM_CALLBACK* cb, int NumExtraBytes);
+void    WM_DeleteWindow              (WM_HWIN hWin);
+void    WM_DetachWindow              (WM_HWIN hWin);
+void    WM_EnableGestures            (WM_HWIN hWin, int OnOff);
+int     WM_GetHasTrans               (WM_HWIN hWin);
+WM_HWIN WM_GetFocusedWindow          (void);
+int     WM_GetInvalidRect            (WM_HWIN hWin, GUI_RECT * pRect);
+int     WM_GetStayOnTop              (WM_HWIN hWin);
+void    WM_HideWindow                (WM_HWIN hWin);
+void    WM_InvalidateArea            (const GUI_RECT * pRect);
+void    WM_InvalidateRect            (WM_HWIN hWin, const GUI_RECT * pRect);
+void    WM_InvalidateWindow          (WM_HWIN hWin);
+void    WM_InvalidateWindowAndDescsEx(WM_HWIN hWin, const GUI_RECT * pInvalidRect, U16 Flags);
+void    WM_InvalidateWindowAndDescs  (WM_HWIN hWin);    /* not to be documented (may change in future version) */
+int     WM_IsEnabled                 (WM_HWIN hObj);
+char    WM_IsCompletelyCovered       (WM_HWIN hWin);    /* Checks if the window is completely covered by other windows */
+char    WM_IsCompletelyVisible       (WM_HWIN hWin);    /* Is the window completely visible ? */
+int     WM_IsFocusable               (WM_HWIN hWin);
+int     WM_IsVisible                 (WM_HWIN hWin);
+int     WM_IsWindow                  (WM_HWIN hWin);    /* Check validity */
+void    WM_Rect2Screen               (WM_HWIN hWin, GUI_RECT * pRect);
+void    WM_Rect2Client               (WM_HWIN hWin, GUI_RECT * pRect);
+void    WM_SetAnchor                 (WM_HWIN hWin, U16 AnchorFlags);
+void    WM_SetHasTrans               (WM_HWIN hWin);
+void    WM_SetId                     (WM_HWIN hObj, int Id);
+void    WM_SetStayOnTop              (WM_HWIN hWin, int OnOff);
+void    WM_SetTransState             (WM_HWIN hWin, unsigned State);
+void    WM_ShowWindow                (WM_HWIN hWin);
+void    WM_ValidateRect              (WM_HWIN hWin, const GUI_RECT * pRect);
+void    WM_ValidateWindow            (WM_HWIN hWin);
+void    WM_XY2Screen                 (WM_HWIN hWin, int * px, int * py);
+void    WM_XY2Client                 (WM_HWIN hWin, int * px, int * py);
+
+#define WM_GetFocussedWindow WM_GetFocusedWindow
+#define WM_IsFocussable      WM_IsFocusable
+
+/* Gesture support */
+void WM_GESTURE_Enable  (int OnOff);
+int  WM_GESTURE_EnableEx(int OnOff, int MaxFactor);
+void WM_GESTURE_Exec    (void);
+I32  WM_GESTURE_SetThresholdAngle(I32 ThresholdAngle);
+I32  WM_GESTURE_SetThresholdDist (I32 ThresholdDist);
+
+/* Motion support */
+void     WM_MOTION_Enable          (int OnOff);
+void     WM_MOTION_SetMovement     (WM_HWIN hWin, int Axis, I32 Speed, I32 Dist);
+void     WM_MOTION_SetMotion       (WM_HWIN hWin, int Axis, I32 Speed, I32 Deceleration);
+void     WM_MOTION_SetMoveable     (WM_HWIN hWin, U32 Flags, int OnOff);
+void     WM_MOTION_SetDeceleration (WM_HWIN hWin, int Axis, I32 Deceleration);
+unsigned WM_MOTION_SetDefaultPeriod(unsigned Period);
+void     WM_MOTION_SetSpeed        (WM_HWIN hWin, int Axis, I32 Velocity);
+void     WM_MOTION_SetMinMotion    (unsigned MinMotion);
+void     WM_MOTION_SetThreshold    (unsigned Threshold);
+
+/* Motion support, private interface */
+WM_HMEM WM_MOTION__CreateContext(void);
+void    WM_MOTION__DeleteContext(WM_HMEM hContext);
+
+/* Motion support, private function(s) */
+void     WM__SetMotionCallback (void(* cbMotion) (GUI_PID_STATE * pState, void * p));
+
+/* Static memory devices */
+#if (GUI_SUPPORT_MEMDEV)
+  #define GUI_MEMDEV_EDGE_LEFT   0
+  #define GUI_MEMDEV_EDGE_RIGHT  1
+  #define GUI_MEMDEV_EDGE_TOP    2
+  #define GUI_MEMDEV_EDGE_BOTTOM 3
+
+  int               GUI_MEMDEV_BlendWinBk       (WM_HWIN hWin, int Period, U32 BlendColor, U8 BlendIntens);
+  int               GUI_MEMDEV_BlurAndBlendWinBk(WM_HWIN hWin, int Period, U8 BlurDepth, U32 BlendColor, U8 BlendIntens);
+  int               GUI_MEMDEV_BlurWinBk        (WM_HWIN hWin, int Period, U8 BlurDepth);
+  void              GUI_MEMDEV_CreateStatic     (WM_HWIN hWin);
+  GUI_MEMDEV_Handle GUI_MEMDEV_CreateWindowDevice(WM_HWIN hWin);
+  int               GUI_MEMDEV_FadeInWindow     (WM_HWIN hWin, int Period);
+  int               GUI_MEMDEV_FadeOutWindow    (WM_HWIN hWin, int Period);
+  GUI_MEMDEV_Handle GUI_MEMDEV_GetStaticDevice  (WM_HWIN hWin);
+  GUI_MEMDEV_Handle GUI_MEMDEV_GetWindowDevice  (WM_HWIN hWin);
+  int               GUI_MEMDEV_MoveInWindow     (WM_HWIN hWin, int x, int y, int a180, int Period);
+  int               GUI_MEMDEV_MoveOutWindow    (WM_HWIN hWin, int x, int y, int a180, int Period);
+  void              GUI_MEMDEV_Paint1Static     (WM_HWIN hWin);                                     /* not to be documented */
+  int               GUI_MEMDEV_ShiftInWindow    (WM_HWIN hWin, int Period, int Direction);
+  int               GUI_MEMDEV_ShiftOutWindow   (WM_HWIN hWin, int Period, int Direction);
+  int               GUI_MEMDEV_SwapWindow       (WM_HWIN hWin, int Period, int Edge);
+
+  void              GUI_MEMDEV__CreateStatic    (WM_HWIN hWin);
+#endif
+
+/* Move/resize windows */
+void WM_MoveWindow                (WM_HWIN hWin, int dx, int dy);
+void WM_ResizeWindow              (WM_HWIN hWin, int dx, int dy);
+void WM_MoveTo                    (WM_HWIN hWin, int x, int y);
+void WM_MoveChildTo               (WM_HWIN hWin, int x, int y);
+void WM_SetSize                   (WM_HWIN hWin, int XSize, int YSize);
+void WM_SetWindowPos              (WM_HWIN hWin, int xPos, int yPos, int xSize, int ySize);
+int  WM_SetXSize                  (WM_HWIN hWin, int xSize);
+int  WM_SetYSize                  (WM_HWIN hWin, int ySize);
+int  WM_SetScrollbarH             (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
+int  WM_SetScrollbarV             (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
+
+/* ToolTip support */
+#define WM_TOOLTIP_PI_FIRST 0
+#define WM_TOOLTIP_PI_SHOW  1
+#define WM_TOOLTIP_PI_NEXT  2
+
+#define WM_TOOLTIP_CI_BK    0
+#define WM_TOOLTIP_CI_FRAME 1
+#define WM_TOOLTIP_CI_TEXT  2
+
+typedef WM_HMEM WM_TOOLTIP_HANDLE;
+
+typedef struct {
+  int          Id;
+  const char * pText;
+} TOOLTIP_INFO;
+
+int               WM_TOOLTIP_AddTool         (WM_TOOLTIP_HANDLE hToolTip, WM_HWIN hTool, const char * pText);
+WM_TOOLTIP_HANDLE WM_TOOLTIP_Create          (WM_HWIN hDlg, const TOOLTIP_INFO * pInfo, unsigned NumItems);
+void              WM_TOOLTIP_Delete          (WM_TOOLTIP_HANDLE hToolTip);
+GUI_COLOR         WM_TOOLTIP_SetDefaultColor (unsigned Index, GUI_COLOR Color);
+const GUI_FONT *  WM_TOOLTIP_SetDefaultFont  (const GUI_FONT * pFont);
+unsigned          WM_TOOLTIP_SetDefaultPeriod(unsigned Index, unsigned Period);
+
+/* ToolTip support, private */
+void WM__SetToolTipCallback(void(* cbToolTip)(GUI_PID_STATE * pState, WM_HWIN));
+
+/* Timer */
+#ifdef GUI_X_CREATE_TIMER
+  int  WM_CreateTimer    (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
+  void WM_DeleteTimer    (WM_HWIN hWin, int UserId); /* not to be documented (may change in future version) */
+#else
+  WM_HMEM WM_CreateTimer (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
+  void    WM_DeleteTimer (WM_HMEM hTimer); /* not to be documented (may change in future version) */
+  void    WM_RestartTimer(WM_HMEM hTimer, int Period);
+#endif
+int WM_GetTimerId(WM_HTIMER hTimer);
+
+/* Diagnostics */
+int WM_GetNumWindows(void);
+int WM_GetNumInvalidWindows(void);
+
+/* Scroll state related functions */
+void WM_CheckScrollBounds(WM_SCROLL_STATE * pScrollState); /* not to be documented (may change in future version) */
+int  WM_GetScrollPosH    (WM_HWIN hWin);
+int  WM_GetScrollPosV    (WM_HWIN hWin);
+void WM_SetScrollPosH    (WM_HWIN hWin, unsigned ScrollPos);
+void WM_SetScrollPosV    (WM_HWIN hWin, unsigned ScrollPos);
+int  WM_SetScrollValue   (WM_SCROLL_STATE * pScrollState, int v); /* not to be documented (may change in future version) */
+
+/* Get / Set (new) callback function */
+WM_CALLBACK * WM_SetCallback(WM_HWIN hWin, WM_CALLBACK * cb);
+WM_CALLBACK * WM_GetCallback(WM_HWIN hWin);
+
+/* Get size/origin of a window */
+void      WM_GetClientRect           (GUI_RECT * pRect);
+void      WM_GetClientRectEx         (WM_HWIN hWin, GUI_RECT * pRect);
+void      WM_GetInsideRect           (GUI_RECT * pRect);
+void      WM_GetInsideRectEx         (WM_HWIN hWin, GUI_RECT * pRect);
+void      WM_GetInsideRectExScrollbar(WM_HWIN hWin, GUI_RECT * pRect); /* not to be documented (may change in future version) */
+void      WM_GetWindowRect           (GUI_RECT * pRect);
+void      WM_GetWindowRectEx         (WM_HWIN hWin, GUI_RECT * pRect);
+int       WM_GetOrgX                 (void);
+int       WM_GetOrgY                 (void);
+int       WM_GetWindowOrgX           (WM_HWIN hWin);
+int       WM_GetWindowOrgY           (WM_HWIN hWin);
+int       WM_GetWindowSizeX          (WM_HWIN hWin);
+int       WM_GetWindowSizeY          (WM_HWIN hWin);
+WM_HWIN   WM_GetFirstChild           (WM_HWIN hWin);
+WM_HWIN   WM_GetNextSibling          (WM_HWIN hWin);
+WM_HWIN   WM_GetParent               (WM_HWIN hWin);
+WM_HWIN   WM_GetPrevSibling          (WM_HWIN hWin);
+int       WM_GetId                   (WM_HWIN hWin);
+WM_HWIN   WM_GetScrollbarV           (WM_HWIN hWin);
+WM_HWIN   WM_GetScrollbarH           (WM_HWIN hWin);
+WM_HWIN   WM_GetScrollPartner        (WM_HWIN hWin);
+WM_HWIN   WM_GetClientWindow         (WM_HWIN hObj);
+GUI_COLOR WM_GetBkColor              (WM_HWIN hObj);
+
+/* Change Z-Order of windows */
+void WM_BringToBottom(WM_HWIN hWin);
+void WM_BringToTop(WM_HWIN hWin);
+
+GUI_COLOR WM_SetDesktopColor  (GUI_COLOR Color);
+GUI_COLOR WM_SetDesktopColorEx(GUI_COLOR Color, unsigned int LayerIndex);
+void      WM_SetDesktopColors (GUI_COLOR Color);
+
+/* Select window used for drawing operations */
+WM_HWIN WM_SelectWindow           (WM_HWIN  hWin);
+WM_HWIN WM_GetActiveWindow        (void);
+void    WM_Paint                  (WM_HWIN hObj);
+void    WM_Update                 (WM_HWIN hWin);
+void    WM_PaintWindowAndDescs    (WM_HWIN hWin);
+void    WM_UpdateWindowAndDescs   (WM_HWIN hWin);
+
+/* Get foreground/background windows */
+WM_HWIN WM_GetDesktopWindow  (void);
+WM_HWIN WM_GetDesktopWindowEx(unsigned int LayerIndex);
+
+/* Reduce clipping area of a window */
+const GUI_RECT * WM_SetUserClipRect(const GUI_RECT * pRect);
+void             WM_SetDefault     (void);
+
+/* Use of memory devices */
+void WM_EnableMemdev              (WM_HWIN hWin);
+void WM_DisableMemdev             (WM_HWIN hWin);
+
+/* Automatic use of multiple buffers */
+int WM_MULTIBUF_Enable  (int OnOff);
+int WM_MULTIBUF_EnableEx(int OnOff, U32 LayerMask);
+
+extern const GUI_MULTIBUF_API * WM_MULTIBUF__pAPI;
+
+typedef void (* T_WM_EXEC_GESTURE)(void);
+
+extern T_WM_EXEC_GESTURE WM__pExecGestures;
+
+/* ... */
+int WM_OnKey(int Key, int Pressed);
+void WM_MakeModal(WM_HWIN hWin);
+int WM_SetModalLayer(int LayerIndex);
+int WM_GetModalLayer(void);
+
+/*********************************************************************
+*
+*       Message related functions
+*
+*  Please note that some of these functions do not yet show up in the
+*  documentation, as they should not be required by application program.
+*/
+void      WM_NotifyParent         (WM_HWIN hWin, int Notification);
+void      WM_SendMessage          (WM_HWIN hWin, WM_MESSAGE * p);
+void      WM_SendMessageNoPara    (WM_HWIN hWin, int MsgId);             /* not to be documented (may change in future */
+void      WM_DefaultProc          (WM_MESSAGE * pMsg);
+int       WM_BroadcastMessage     (WM_MESSAGE * pMsg);
+void      WM_SetScrollState       (WM_HWIN hWin, const WM_SCROLL_STATE * pState);
+void      WM_SetEnableState       (WM_HWIN hItem, int State);
+void      WM_SendToParent         (WM_HWIN hWin, WM_MESSAGE * pMsg);
+int       WM_HasFocus             (WM_HWIN hWin);
+int       WM_SetFocus             (WM_HWIN hWin);
+WM_HWIN   WM_SetFocusOnNextChild  (WM_HWIN hParent);     /* Set the focus to the next child */
+WM_HWIN   WM_SetFocusOnPrevChild  (WM_HWIN hParent);     /* Set the focus to the previous child */
+WM_HWIN   WM_GetDialogItem        (WM_HWIN hWin, int Id);
+void      WM_EnableWindow         (WM_HWIN hWin);
+void      WM_DisableWindow        (WM_HWIN hWin);
+void      WM_GetScrollState       (WM_HWIN hObj, WM_SCROLL_STATE * pScrollState);
+
+/*********************************************************************
+*
+*       Managing user data
+*/
+int       WM_GetUserData   (WM_HWIN hWin, void * pDest, int SizeOfBuffer);
+int       WM_SetUserData   (WM_HWIN hWin, const void * pSrc, int SizeOfBuffer);
+int       WM__GetUserDataEx(WM_HWIN hWin, void * pDest, int NumBytes, int SizeOfObject);
+int       WM__SetUserDataEx(WM_HWIN hWin, const void * pSrc, int NumBytes, int SizeOfObject);
+
+/*********************************************************************
+*
+*       Capturing input focus
+*/
+int  WM_HasCaptured   (WM_HWIN hWin);
+void WM_SetCapture    (WM_HWIN hObj, int AutoRelease);
+void WM_SetCaptureMove(WM_HWIN hWin, const GUI_PID_STATE * pState, int MinVisibility, int LimitTop); /* Not yet documented */
+void WM_ReleaseCapture(void);
+
+/*********************************************************************
+*
+*       Misc routines
+*/
+int       WM_HandlePID      (void);
+WM_HWIN   WM_Screen2hWin    (int x, int y);
+WM_HWIN   WM_Screen2hWinEx  (WM_HWIN hStop, int x, int y);
+void      WM_ForEachDesc    (WM_HWIN hWin, WM_tfForEach * pcb, void * pData);
+void      WM_SetScreenSize  (int xSize, int ySize);
+int       WM_PollSimMsg     (void);
+int       WM_GetWindowInfo  (WM_WINDOW_INFO * pInfo, int FirstWindow);
+
+/*********************************************************************
+*
+*       Diagnostics routines
+*/
+#if (WM_SUPPORT_DIAG)
+void WM_DIAG_EnableInvalidationColoring(int OnOff);
+#endif
+
+/*********************************************************************
+*
+*       Macros for compatibility with older versions
+*/
+#if WM_COMPATIBLE_MODE
+  #define HBWIN             WM_HWIN
+  #define HBWIN_NULL        WM_HWIN_NULL
+
+  #define WM_HideWin        WM_HideWindow
+  #define WM_ShowWin        WM_ShowWindow
+  #define WM_GetKey         GUI_GetKey
+  #define WM_WaitKey        GUI_WaitKey
+
+  #define WM_ExecIdle       WM_Exec
+  #define WM_ExecIdle1      WM_Exec1
+
+  #define WM_Invalidate     WM_InvalidateWindow
+  #define WM_GetWinRect     WM_GetWindowRect
+  #define WM_GetWinOrgX     WM_GetWindowOrgX
+  #define WM_GetWinOrgY     WM_GetWindowOrgY
+  #define WM_GetWinSizeX    WM_GetWindowSizeX
+  #define WM_GetWinSizeY    WM_GetWindowSizeY
+  #define WM_GetXSize       WM_GetWindowSizeX
+  #define WM_GetYSize       WM_GetWindowSizeY
+  #define WM_SelWin         WM_SelectWindow
+  #define WM_GetBackgroundWindow  WM_GetDesktopWindow
+  #define WM_GetForegroundWindow    0
+  #define WM_SetForegroundWindow    WM_BringToTop
+  #define WM_SetUserClipArea WM_SetUserClipRect
+
+
+  #define WM_Start()
+  #define WM_Stop()
+  #define WM_SetBkWindowColor(Color)  WM_SetDesktopColor(Color)
+
+#endif
+
+
+#endif   /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif   /* WM_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM_GUI.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,82 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : WM_GUI.h
+Purpose     : Windows manager include for low level GUI routines
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_GUI_H            /* Make sure we only include it once */
+#define WM_GUI_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+int       WM__InitIVRSearch(const GUI_RECT* pMaxRect);
+int       WM__GetNextIVR   (void);
+int       WM__GetOrgX_AA(void);
+int       WM__GetOrgY_AA(void);
+
+#define WM_ITERATE_START(pRect)                   \
+  {                                               \
+    if (WM__InitIVRSearch(pRect))                 \
+      do {
+
+#define WM_ITERATE_END()                          \
+    } while (WM__GetNextIVR());                   \
+  }
+
+#define WM_ADDORGX(x)       (x += GUI_pContext->xOff)
+#define WM_ADDORGY(y)       (y += GUI_pContext->yOff)
+#define WM_ADDORG(x0,y0)    WM_ADDORGX(x0); WM_ADDORGY(y0)
+#define WM_ADDORGX_AA(x)    (x += WM__GetOrgX_AA())
+#define WM_ADDORGY_AA(y)    (y += WM__GetOrgY_AA())
+#define WM_ADDORG_AA(x0,y0) WM_ADDORGX_AA(x0); WM_ADDORGY_AA(y0)
+#define WM_SUBORGX(x)       (x -= GUI_pContext->xOff)
+#define WM_SUBORGY(y)       (y -= GUI_pContext->yOff)
+#define WM_SUBORG(x0,y0)    WM_SUBORGX(x0); WM_SUBORGY(y0)
+
+#if defined(__cplusplus)
+  }
+#endif
+
+
+#endif   /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM_Intern.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,265 @@
+/*********************************************************************
+*                 SEGGER Software GmbH                               *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All  Intellectual Property rights in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The  software has  been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes  of  creating  libraries  for its 
+Arm Cortex-M and  Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under  the terms and conditions  of  an  End  User  
+License  Agreement  supplied  with  the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Software GmbH
+Licensed to:              Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number:           GUI-00735
+License model:            emWin License Agreement, signed February 27, 2018
+Licensed platform:        Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2018-03-26 - 2019-03-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : WM_Intern.h
+Purpose     : Windows manager internal include
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_INTERN_H            /* Make sure we only include it once */
+#define WM_INTERN_H            /* Make sure we only include it once */
+
+#include "WM.h"
+#include "GUI_Private.h"
+
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+*       defines
+*
+**********************************************************************
+
+  The following could be placed in a file of its own as it is not
+  used outside of the window manager
+
+*/
+/* Basic Windows status flags.
+   For module-internally use only !
+*/
+#define WM_SF_HASTRANS          WM_CF_HASTRANS
+#define WM_SF_MEMDEV            WM_CF_MEMDEV
+#define WM_SF_MEMDEV_ON_REDRAW  WM_CF_MEMDEV_ON_REDRAW
+#define WM_SF_DISABLED          WM_CF_DISABLED  /* Disabled: Does not receive PID (mouse & touch) input */
+#define WM_SF_ISVIS             WM_CF_SHOW      /* Is visible flag */
+
+#define WM_SF_STAYONTOP         WM_CF_STAYONTOP
+#define WM_SF_LATE_CLIP         WM_CF_LATE_CLIP
+#define WM_SF_ANCHOR_RIGHT      WM_CF_ANCHOR_RIGHT
+#define WM_SF_ANCHOR_BOTTOM     WM_CF_ANCHOR_BOTTOM
+#define WM_SF_ANCHOR_LEFT       WM_CF_ANCHOR_LEFT
+#define WM_SF_ANCHOR_TOP        WM_CF_ANCHOR_TOP
+
+#define WM_SF_INVALID           WM_CF_ACTIVATE  /* We reuse this flag, as it is create only and Invalid is status only */
+
+#define WM_SF_CONST_OUTLINE     WM_CF_CONST_OUTLINE       /* Constant outline.*/
+
+#define WM_H2P(hWin)            ((WM_Obj*)GUI_ALLOC_h2p(hWin))
+
+
+#if GUI_DEBUG_LEVEL  >= GUI_DEBUG_LEVEL_LOG_WARNINGS
+  #define WM_ASSERT_NOT_IN_PAINT() { if (WM__PaintCallbackCnt) \
+                                       GUI_DEBUG_ERROROUT("Function may not be called from within a paint event"); \
+                                   }
+#else
+  #define WM_ASSERT_NOT_IN_PAINT()
+#endif
+
+/*********************************************************************
+*
+*       Data types & structures
+*
+**********************************************************************
+*/
+typedef struct {
+  WM_HWIN hOld;
+  WM_HWIN hNew;
+} WM_NOTIFY_CHILD_HAS_FOCUS_INFO;
+
+typedef struct WM_CRITICAL_HANDLE {
+  struct  WM_CRITICAL_HANDLE * pNext;
+  volatile WM_HWIN hWin;
+} WM_CRITICAL_HANDLE;
+
+/*********************************************************************
+*
+*       Data (extern)
+*
+**********************************************************************
+*/
+extern U32            WM__CreateFlags;
+extern WM_HWIN        WM__ahCapture[GUI_NUM_LAYERS];
+extern WM_HWIN        WM__ahWinFocus[GUI_NUM_LAYERS];
+extern char           WM__CaptureReleaseAuto;
+extern WM_tfPollPID * WM_pfPollPID;
+extern U8             WM__PaintCallbackCnt;      /* Public for assertions only */
+extern WM_HWIN        WM__hCreateStatic;
+
+#if WM_SUPPORT_TRANSPARENCY
+  extern int     WM__TransWindowCnt;
+  extern WM_HWIN WM__hATransWindow;
+#endif
+
+#if WM_SUPPORT_DIAG
+  extern void (*WM__pfShowInvalid)(WM_HWIN hWin);
+#endif
+
+extern WM_CRITICAL_HANDLE     WM__aCHWinModal[GUI_NUM_LAYERS];
+extern WM_CRITICAL_HANDLE     WM__aCHWinLast[GUI_NUM_LAYERS];
+extern int                    WM__ModalLayer;
+
+#if GUI_SUPPORT_MOUSE
+  extern WM_CRITICAL_HANDLE   WM__aCHWinMouseOver[GUI_NUM_LAYERS];
+#endif
+
+#ifdef WM_C
+  #define GUI_EXTERN
+#else
+  #define GUI_EXTERN extern
+#endif
+
+#if (GUI_NUM_LAYERS > 1)
+  GUI_EXTERN U32                       WM__InvalidLayerMask;
+  GUI_EXTERN unsigned                  WM__TouchedLayer;
+  #define WM__TOUCHED_LAYER            WM__TouchedLayer
+#else
+  #define WM__TOUCHED_LAYER            GUI_CURSOR_LAYER
+#endif
+
+GUI_EXTERN U16     WM__NumWindows;
+GUI_EXTERN U16     WM__NumInvalidWindows;
+GUI_EXTERN WM_HWIN WM__FirstWin;
+GUI_EXTERN WM_CRITICAL_HANDLE * WM__pFirstCriticalHandle;
+
+GUI_EXTERN WM_HWIN   WM__ahDesktopWin[GUI_NUM_LAYERS];
+GUI_EXTERN GUI_COLOR WM__aBkColor[GUI_NUM_LAYERS];
+
+#undef GUI_EXTERN
+
+/*********************************************************************
+*
+*       Prototypes
+*
+**********************************************************************
+*/
+void    WM__ActivateClipRect        (void);
+int     WM__ClipAtParentBorders     (GUI_RECT * pRect, WM_HWIN hWin);
+void    WM__Client2Screen           (const WM_Obj * pWin, GUI_RECT * pRect);
+void    WM__DeleteAssocTimer        (WM_HWIN hWin);
+void    WM__DeleteSecure            (WM_HWIN hWin);
+void    WM__DetachWindow            (WM_HWIN hChild);
+void    WM__ForEachDesc             (WM_HWIN hWin, WM_tfForEach * pcb, void * pData);
+void    WM__GetClientRectWin        (const WM_Obj * pWin, GUI_RECT * pRect);
+void    WM__GetClientRectEx         (WM_HWIN hWin, GUI_RECT * pRect);
+WM_HWIN WM__GetFirstSibling         (WM_HWIN hWin);
+WM_HWIN WM__GetFocusedChild         (WM_HWIN hWin);
+int     WM__GetHasFocus             (WM_HWIN hWin);
+WM_HWIN WM__GetLastSibling          (WM_HWIN hWin);
+WM_HWIN WM__GetPrevSibling          (WM_HWIN hWin);
+int     WM__GetTopLevelLayer        (WM_HWIN hWin);
+int     WM__GetWindowSizeX          (const WM_Obj * pWin);
+int     WM__GetWindowSizeY          (const WM_Obj * pWin);
+void    WM__InsertWindowIntoList    (WM_HWIN hWin, WM_HWIN hParent);
+void    WM__Invalidate1Abs          (WM_HWIN hWin, const GUI_RECT * pRect);
+void    WM__InvalidateAreaBelow     (const GUI_RECT * pRect, WM_HWIN StopWin);
+void    WM__InvalidateRectEx        (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+void    WM__InvalidateTransAreaAbove(const GUI_RECT * pRect, WM_HWIN StopWin);
+int     WM__IntersectRect           (GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+int     WM__IsAncestor              (WM_HWIN hChild, WM_HWIN hParent);
+int     WM__IsAncestorOrSelf        (WM_HWIN hChild, WM_HWIN hParent);
+int     WM__IsChild                 (WM_HWIN hWin, WM_HWIN hParent);
+int     WM__IsEnabled               (WM_HWIN hWin);
+int     WM__IsInModalArea           (WM_HWIN hWin);
+int     WM__IsInWindow              (WM_Obj * pWin, int x, int y);
+int     WM__IsWindow                (WM_HWIN hWin);
+void    WM__LeaveIVRSearch          (void);
+void    WM__MoveTo                  (WM_HWIN hWin, int x, int y);
+void    WM__MoveWindow              (WM_HWIN hWin, int dx, int dy);
+void    WM__NotifyVisChanged        (WM_HWIN hWin, GUI_RECT * pRect);
+int     WM__RectIsNZ                (const GUI_RECT * pr);
+void    WM__RemoveWindowFromList    (WM_HWIN hWin);
+void    WM__Screen2Client           (const WM_Obj * pWin, GUI_RECT * pRect);
+void    WM__SelectTopLevelLayer     (WM_HWIN  hWin);
+void    WM__SendMsgNoData           (WM_HWIN hWin, U8 MsgId);
+void    WM__SendMessage             (WM_HWIN hWin, WM_MESSAGE * pm);
+void    WM__SendMessageIfEnabled    (WM_HWIN hWin, WM_MESSAGE * pm);
+void    WM__SendMessageNoPara       (WM_HWIN hWin, int MsgId);
+void    WM__SendPIDMessage          (WM_HWIN hWin, WM_MESSAGE * pMsg);
+int     WM__SetScrollbarH           (WM_HWIN hWin, int OnOff);
+int     WM__SetScrollbarV           (WM_HWIN hWin, int OnOff);
+void    WM__UpdateChildPositions    (WM_Obj * pObj, int dx0, int dy0, int dx1, int dy1);
+void    WM_PID__GetPrevState        (GUI_PID_STATE * pPrevState, int Layer);
+void    WM_PID__SetPrevState        (GUI_PID_STATE * pPrevState, int Layer);
+void    WM__SendTouchMessage        (WM_HWIN hWin, WM_MESSAGE * pMsg);
+
+U16     WM_GetFlags                 (WM_HWIN hWin);
+int     WM__Paint                   (WM_HWIN hWin);
+void    WM__Paint1                  (WM_HWIN hWin);
+void    WM__AddCriticalHandle       (WM_CRITICAL_HANDLE * pCH);
+void    WM__RemoveCriticalHandle    (WM_CRITICAL_HANDLE * pCH);
+void    WM__SetLastTouched          (WM_HWIN hWin);
+
+#if WM_SUPPORT_STATIC_MEMDEV
+  void    WM__InvalidateDrawAndDescs(WM_HWIN hWin);
+#else
+  #define WM__InvalidateDrawAndDescs(hWin)
+#endif
+
+/* Static memory devices */
+#if (GUI_SUPPORT_MEMDEV)
+  typedef struct {
+    int xSize, ySize; // Size of bk window
+  } EFFECT_CONTEXT;
+
+  int  GUI_MEMDEV__CalcParaFadeIn    (int Period, int TimeUsed);
+  void GUI_MEMDEV__ClipBK            (EFFECT_CONTEXT * pContext);
+  void GUI_MEMDEV__RemoveStaticDevice(WM_HWIN hWin);
+  void GUI_MEMDEV__UndoClipBK        (EFFECT_CONTEXT * pContext);
+#endif
+
+void WM__InvalidateParent(const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+void WM__InvalidateRect  (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop, U16 Flags);
+
+WM_tfInvalidateParent   WM__SetInvalidateParentFunc(WM_tfInvalidateParent pfInvalidateParentFunc);
+WM_tfInvalidateDrawFunc WM__SetInvalidateDrawFunc  (WM_tfInvalidateDrawFunc pfInvalidateDrawFunc);
+WM_tfPaint1Func         WM__SetPaint1Func          (WM_tfPaint1Func pfPaint1Func);
+
+#endif   /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+  }
+#endif
+
+#endif   /* WM_INTERN_H */
+
+/*************************** End of file ****************************/
Binary file emWin/Lib/TOOLCHAIN_ARM/NUemWin_CM4_Keil.ar has changed
Binary file emWin/Lib/TOOLCHAIN_GCC/libNUemWin_CM4_GNU.a has changed
Binary file emWin/Tool/BmpCvtNuvoton.exe has changed
Binary file emWin/Tool/FontArchitect.exe has changed
Binary file emWin/Tool/GUIBuilder.exe has changed
Binary file emWin/Tool/JPEG2Movie.exe has changed
Binary file emWin/Tool/emWinPlayer.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/M48XTouchPanel.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,154 @@
+
+#include "M480.h"
+
+//#include "stdlib.h"
+#include "GUI.h"
+//#include "W55FA93_adc.h"
+#include "M48XTouchPanel.h"
+//#include "lcdconf.h"
+
+
+
+int Init_TouchPanel(void)
+{
+    /* Enable peripheral clock */
+    CLK_EnableModuleClock(EADC_MODULE);
+
+    /* Peripheral clock source */
+    CLK_SetModuleClock(EADC_MODULE, 0, CLK_CLKDIV0_EADC(8));
+
+    /* Init ADC for TP */
+    /* Set input mode as single-end and enable the A/D converter */
+    EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END);
+
+    return 1;
+}
+
+static volatile    uint32_t    g_u32AdcIntFlag_TP;
+
+/*-----------------------------------------------*/
+// ADC01 ISR
+//
+/*-----------------------------------------------*/
+void ADC01_IRQHandler(void)
+{
+    /* Clear the A/D ADINT1 interrupt flag */
+    EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+    g_u32AdcIntFlag_TP = 1;
+
+}
+
+/*-----------------------------------------------*/
+// Get X Position from Touch Panel (ADC input)
+//
+/*-----------------------------------------------*/
+uint16_t Get_TP_X(void)
+{
+    uint16_t    x_adc_in;
+
+    /*=== Get X from ADC input ===*/
+    GPIO_SetMode(PB, BIT9, GPIO_MODE_OUTPUT);   // XR
+    GPIO_SetMode(PH, BIT5, GPIO_MODE_INPUT);    // YD
+    GPIO_SetMode(PH, BIT4, GPIO_MODE_OUTPUT);   // XL
+    PB9 = 1;
+    PH4 = 0;
+
+    /* Configure the GPB8 ADC analog input pins.  */
+    SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
+    SYS->GPB_MFPH |= SYS_GPB_MFPH_PB8MFP_EADC0_CH8;
+
+    /* Disable the GPB8 digital input path to avoid the leakage current. */
+    GPIO_DISABLE_DIGITAL_PATH(PB, BIT8);
+
+    /* Configure the sample module 1 for analog input channel 8 and software trigger source.*/
+    EADC_ConfigSampleModule(EADC, 1, EADC_SOFTWARE_TRIGGER, 8); // YU
+
+    /* Clear the A/D ADINT1 interrupt flag for safe */
+    EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+    /* Enable the sample module 1 interrupt.  */
+    EADC_ENABLE_INT(EADC, BIT1);    //Enable sample module A/D ADINT1 interrupt.
+    EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT1);    //Enable sample module 1 interrupt.
+    NVIC_EnableIRQ(ADC1_IRQn);
+
+    /* Reset the ADC interrupt indicator and trigger sample module 1 to start A/D conversion */
+    g_u32AdcIntFlag_TP = 0;
+    EADC_START_CONV(EADC, BIT1);
+
+    /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
+    //while(g_u32AdcIntFlag_TP == 0);
+    EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+    g_u32AdcIntFlag_TP = 1;
+    x_adc_in = EADC_GET_CONV_DATA(EADC, 1);
+    return x_adc_in;
+
+}
+
+
+/*-----------------------------------------------*/
+// Get Y Position from Touch Panel (ADC input)
+//
+/*-----------------------------------------------*/
+uint16_t Get_TP_Y(void)
+{
+    uint16_t    y_adc_in;
+
+    /*=== Get Y from ADC input ===*/
+    GPIO_SetMode(PB, BIT8, GPIO_MODE_OUTPUT);   // YU
+    GPIO_SetMode(PH, BIT5, GPIO_MODE_OUTPUT);   // YD
+    GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);    // XL
+    PB8 = 1;
+    PH5 = 0;
+
+    /* Configure the GPB9 ADC analog input pins.  */
+    SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
+    SYS->GPB_MFPH |= SYS_GPB_MFPH_PB9MFP_EADC0_CH9;
+
+    /* Disable the GPB9 digital input path to avoid the leakage current. */
+    GPIO_DISABLE_DIGITAL_PATH(PB, BIT9);
+
+    /* Configure the sample module 2 for analog input channel 9 and software trigger source.*/
+    EADC_ConfigSampleModule(EADC, 2, EADC_SOFTWARE_TRIGGER, 9); // XR
+
+    /* Clear the A/D ADINT1 interrupt flag for safe */
+    EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+    /* Enable the sample module 2 interrupt.  */
+    EADC_ENABLE_INT(EADC, BIT2);    //Enable sample module A/D ADINT1 interrupt.
+    EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT2);    //Enable sample module 2 interrupt.
+    NVIC_EnableIRQ(ADC1_IRQn);
+
+    /* Reset the ADC interrupt indicator and trigger sample module 2 to start A/D conversion */
+    g_u32AdcIntFlag_TP = 0;
+    EADC_START_CONV(EADC, BIT2);
+
+    /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
+    //while(g_u32AdcIntFlag_TP == 0);
+    EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+    g_u32AdcIntFlag_TP = 1;
+    y_adc_in = EADC_GET_CONV_DATA(EADC, 2);
+    return y_adc_in;
+
+}
+
+int Read_TouchPanel(int *x, int *y)
+{
+    *x = Get_TP_X();
+    *y = Get_TP_Y();
+    if ( (*x == 0xFFF) || (*y == 0xFFF) )
+        return 0;
+    else
+        return 1;
+}
+
+int Uninit_TouchPanel(void)
+{
+    return 1;
+}
+
+int Check_TouchPanel(void)
+{
+    return 0;   //Pen up;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/M48XTouchPanel.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,22 @@
+#ifndef __M48XTOUCHPANEL_H__
+#define __M48XTOUCHPANEL_H__
+
+#define __DEMO_TSFILE_ADDR__    0x00040000 /* SPI flash 256KB address */
+
+#define __DEMO_TS_WIDTH__       320
+#define __DEMO_TS_HEIGHT__      240
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+int Init_TouchPanel(void);
+int Read_TouchPanel(int *x, int *y);
+int Uninit_TouchPanel(void);
+int Check_TouchPanel(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/fbutils.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,403 @@
+/*
+ * fbutils.c
+ *
+ * Utility routines for framebuffer interaction
+ *
+ * Copyright 2002 Russell King and Doug Lowder
+ *
+ * This file is placed under the GPL.  Please see the
+ * file COPYING for details.
+ *
+ */
+
+//#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+//#include <unistd.h>
+//#include <sys/fcntl.h>
+//#include <sys/ioctl.h>
+//#include <sys/mman.h>
+//#include <sys/time.h>
+#include "fbutils.h"
+//#include "wbtypes.h"
+//#include "LCDconf.h"
+#include "M48XTouchPanel.h"
+#include "GUI.h"
+#if 0
+union multiptr
+{
+    unsigned char *p8;
+    unsigned short *p16;
+    unsigned long *p32;
+};
+#endif
+//static int con_fd, fb_fd, last_vt = -1;
+//static unsigned char *line_addr;
+//static int fb_fd=0;
+static int bytes_per_pixel=2;
+static unsigned colormap [13];
+static unsigned colormap2[13];
+unsigned int xres=__DEMO_TS_WIDTH__, yres=__DEMO_TS_HEIGHT__;
+
+int red_length = 5;
+int green_length = 6;
+int blue_length = 5;
+
+int red_offset = 11;
+int green_offset = 5;
+int blue_offset = 0;
+
+//extern void * g_VAFrameBuf;
+
+void line(int x1, int y1, int x2, int y2, unsigned colidx);
+
+void put_cross(int x, int y, unsigned colidx)
+{
+    line (x - 10, y, x - 2, y, colidx);
+    line (x + 2, y, x + 10, y, colidx);
+    line (x, y - 10, x, y - 2, colidx);
+    line (x, y + 2, x, y + 10, colidx);
+
+#if 1
+    line (x - 6, y - 9, x - 9, y - 9, colidx + 1);
+    line (x - 9, y - 8, x - 9, y - 6, colidx + 1);
+    line (x - 9, y + 6, x - 9, y + 9, colidx + 1);
+    line (x - 8, y + 9, x - 6, y + 9, colidx + 1);
+    line (x + 6, y + 9, x + 9, y + 9, colidx + 1);
+    line (x + 9, y + 8, x + 9, y + 6, colidx + 1);
+    line (x + 9, y - 6, x + 9, y - 9, colidx + 1);
+    line (x + 8, y - 9, x + 6, y - 9, colidx + 1);
+#else
+    line (x - 7, y - 7, x - 4, y - 4, colidx + 1);
+    line (x - 7, y + 7, x - 4, y + 4, colidx + 1);
+    line (x + 4, y - 4, x + 7, y - 7, colidx + 1);
+    line (x + 4, y + 4, x + 7, y + 7, colidx + 1);
+#endif
+}
+#if 0
+void put_char(int x, int y, int c, int colidx)
+{
+    int i,j,bits;
+
+    for (i = 0; i < font_vga_8x8.height; i++)
+    {
+        bits = font_vga_8x8.data [font_vga_8x8.height * c + i];
+        for (j = 0; j < font_vga_8x8.width; j++, bits <<= 1)
+            if (bits & 0x80)
+                pixel (x + j, y + i, colidx);
+    }
+}
+
+void put_string(int x, int y, char *s, unsigned colidx)
+{
+    int i;
+    for (i = 0; *s; i++, x += font_vga_8x8.width, s++)
+        put_char (x, y, *s, colidx);
+}
+
+void put_string_center(int x, int y, char *s, unsigned colidx)
+{
+    size_t sl = strlen (s);
+    put_string (x - (sl / 2) * font_vga_8x8.width,
+                y - font_vga_8x8.height / 2, s, colidx);
+}
+#endif
+void setcolor(unsigned colidx, unsigned value)
+{
+    unsigned res;
+    //unsigned short red, green, blue;
+//  struct fb_cmap cmap;
+
+#ifdef DEBUG
+    if (colidx > 255)
+    {
+        fprintf (stderr, "WARNING: color index = %u, must be <256\n",
+                 colidx);
+        return;
+    }
+#endif
+
+    switch (bytes_per_pixel)
+    {
+    default:
+    case 1:
+#if 0
+        res = colidx;
+        red = (value >> 8) & 0xff00;
+        green = value & 0xff00;
+        blue = (value << 8) & 0xff00;
+        cmap.start = colidx;
+        cmap.len = 1;
+        cmap.red = &red;
+        cmap.green = &green;
+        cmap.blue = &blue;
+        cmap.transp = NULL;
+#endif
+        break;
+    case 2:
+#if 0
+        red = (value >> 16) & 0xff;
+        green = (value >> 8) & 0xff;
+        blue = value & 0xff;
+        res = ((red >> (8 - red_length)) << red_offset) |
+              ((green >> (8 - green_length)) << green_offset) |
+              ((blue >> (8 - blue_length)) << blue_offset);
+#endif
+    case 4:
+        res = value;
+    }
+    colormap [colidx] = value;
+    GUI_SetColor(value);
+    GUI_DrawPixel(0, 0);
+    res = GUI_GetPixelIndex(0, 0);
+    colormap2[colidx] = res;
+    GUI_SetColor(0x00);
+    GUI_DrawPixel(0, 0);
+}
+#if 0
+static void __setpixel (union multiptr loc, unsigned xormode, unsigned color)
+{
+    switch(bytes_per_pixel)
+    {
+    case 1:
+    default:
+        if (xormode)
+            *loc.p8 ^= color;
+        else
+            *loc.p8 = color;
+        break;
+    case 2:
+        if (xormode)
+            *loc.p16 ^= color;
+        else
+            *loc.p16 = color;
+        break;
+    case 4:
+        if (xormode)
+            *loc.p32 ^= color;
+        else
+            *loc.p32 = color;
+        break;
+    }
+}
+#endif
+void pixel (int x, int y, unsigned colidx)
+{
+    unsigned xormode;
+    unsigned color, color2;
+    //union multiptr loc;
+
+    if ((x < 0) || (x >= __DEMO_TS_WIDTH__) ||
+            (y < 0) || (y >= __DEMO_TS_HEIGHT__))
+        return;
+
+    xormode = colidx & XORMODE;
+    colidx &= ~XORMODE;
+
+#ifdef DEBUG
+    if (colidx > 255)
+    {
+        fprintf (stderr, "WARNING: color value = %u, must be <256\n",
+                 colidx);
+        return;
+    }
+#endif
+
+//  loc.p8 = line_addr [y] + x * bytes_per_pixel;
+//  line_addr = (unsigned char *)g_VAFrameBuf+ y*(LCD_XSIZE*bytes_per_pixel);
+    color = GUI_GetPixelIndex(x, y);
+    if ( color == colormap2[0] )
+        color = colormap[0];
+    else if ( color == colormap2[1] )
+        color = colormap[1];
+    else if ( color == colormap2[2] )
+        color = colormap[2];
+    else if ( color == colormap2[3] )
+        color = colormap[3];
+    else if ( color == colormap2[4] )
+        color = colormap[4];
+    else if ( color == colormap2[5] )
+        color = colormap[5];
+    else if ( color == colormap2[6] )
+        color = colormap[6];
+    else if ( color == colormap2[7] )
+        color = colormap[7];
+    else if ( color == colormap2[8] )
+        color = colormap[8];
+    else if ( color == colormap2[9] )
+        color = colormap[9];
+    else if ( color == colormap2[10] )
+        color = colormap[10];
+    else if ( color == colormap2[11] )
+        color = colormap[11];
+    else if ( color == colormap2[12] )
+        color = colormap[12];
+    color2 = colormap [colidx];
+    if (xormode)
+        color ^= color2;
+    else
+        color = color2;
+    GUI_SetColor(color);
+    GUI_DrawPixel(x, y);
+
+
+    //loc.p8 = line_addr + x*bytes_per_pixel;
+    //__setpixel(loc, xormode, colormap [colidx]);
+}
+
+void line(int x1, int y1, int x2, int y2, unsigned colidx)
+{
+    int tmp;
+    int dx = x2 - x1;
+    int dy = y2 - y1;
+
+    if (abs (dx) < abs (dy))
+    {
+        if (y1 > y2)
+        {
+            tmp = x1;
+            x1 = x2;
+            x2 = tmp;
+            tmp = y1;
+            y1 = y2;
+            y2 = tmp;
+            dx = -dx;
+            dy = -dy;
+        }
+        x1 <<= 16;
+        /* dy is apriori >0 */
+        dx = (dx << 16) / dy;
+        while (y1 <= y2)
+        {
+            pixel (x1 >> 16, y1, colidx);
+            x1 += dx;
+            y1++;
+        }
+    }
+    else
+    {
+        if (x1 > x2)
+        {
+            tmp = x1;
+            x1 = x2;
+            x2 = tmp;
+            tmp = y1;
+            y1 = y2;
+            y2 = tmp;
+            dx = -dx;
+            dy = -dy;
+        }
+        y1 <<= 16;
+        dy = dx ? (dy << 16) / dx : 0;
+        while (x1 <= x2)
+        {
+            pixel (x1, y1 >> 16, colidx);
+            y1 += dy;
+            x1++;
+        }
+    }
+}
+#if 1
+void rect (int x1, int y1, int x2, int y2, unsigned colidx)
+{
+    line (x1, y1, x2, y1, colidx);
+    line (x2, y1, x2, y2, colidx);
+    line (x2, y2, x1, y2, colidx);
+    line (x1, y2, x1, y1, colidx);
+}
+
+void fillrect (int x1, int y1, int x2, int y2, unsigned colidx)
+{
+    int tmp;
+    unsigned xormode;
+    unsigned color, color2;
+    //union multiptr loc;
+
+    /* Clipping and sanity checking */
+    if (x1 > x2)
+    {
+        tmp = x1;
+        x1 = x2;
+        x2 = tmp;
+    }
+    if (y1 > y2)
+    {
+        tmp = y1;
+        y1 = y2;
+        y2 = tmp;
+    }
+    if (x1 < 0) x1 = 0;
+    if (x1 >= xres) x1 = xres - 1;
+    if (x2 < 0) x2 = 0;
+    if (x2 >= xres) x2 = xres - 1;
+    if (y1 < 0) y1 = 0;
+    if (y1 >= yres) y1 = yres - 1;
+    if (y2 < 0) y2 = 0;
+    if (y2 >= yres) y2 = yres - 1;
+
+    if ((x1 > x2) || (y1 > y2))
+        return;
+
+    xormode = colidx & XORMODE;
+    colidx &= ~XORMODE;
+
+#ifdef DEBUG
+    if (colidx > 255)
+    {
+        fprintf (stderr, "WARNING: color value = %u, must be <256\n",
+                 colidx);
+        return;
+    }
+#endif
+
+    color2 = colormap [colidx];
+
+    for (; y1 <= y2; y1++)
+    {
+//      loc.p8 = line_addr [y1] + x1 * bytes_per_pixel;
+        //line_addr = (unsigned char *)g_VAFrameBuf+ y1*(LCD_XSIZE*bytes_per_pixel);
+        //loc.p8 = line_addr + x1* bytes_per_pixel;
+        for (tmp = x1; tmp <= x2; tmp++)
+        {
+            //__setpixel (loc, xormode, colidx);
+            //loc.p8 += bytes_per_pixel;
+            color = GUI_GetPixelIndex(tmp, y1);
+            if ( color == colormap2[0] )
+                color = colormap[0];
+            else if ( color == colormap2[1] )
+                color = colormap[1];
+            else if ( color == colormap2[2] )
+                color = colormap[2];
+            else if ( color == colormap2[3] )
+                color = colormap[3];
+            else if ( color == colormap2[4] )
+                color = colormap[4];
+            else if ( color == colormap2[5] )
+                color = colormap[5];
+            else if ( color == colormap2[6] )
+                color = colormap[6];
+            else if ( color == colormap2[7] )
+                color = colormap[7];
+            else if ( color == colormap2[8] )
+                color = colormap[8];
+            else if ( color == colormap2[9] )
+                color = colormap[9];
+            else if ( color == colormap2[10] )
+                color = colormap[10];
+            else if ( color == colormap2[11] )
+                color = colormap[11];
+            else if ( color == colormap2[12] )
+                color = colormap[12];
+            color2 = colormap [colidx];
+            if (xormode)
+                color ^= color2;
+            else
+                color = color2;
+            GUI_SetColor(color);
+            GUI_DrawPixel(tmp, y1);
+        }
+    }
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/fbutils.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,35 @@
+/*
+ * fbutils.h
+ *
+ * Headers for utility routines for framebuffer interaction
+ *
+ * Copyright 2002 Russell King and Doug Lowder
+ *
+ * This file is placed under the GPL.  Please see the
+ * file COPYING for details.
+ *
+ */
+
+#ifndef _FBUTILS_H
+#define _FBUTILS_H
+
+//#include <asm/types.h>
+
+/* This constant, being ORed with the color index tells the library
+ * to draw in exclusive-or mode (that is, drawing the same second time
+ * in the same place will remove the element leaving the background intact).
+ */
+#define XORMODE 0x80000000
+
+extern unsigned int xres, yres;
+
+void setcolor(unsigned colidx, unsigned value);
+void put_cross(int x, int y, unsigned colidx);
+void put_string(int x, int y, char *s, unsigned colidx);
+void put_string_center(int x, int y, char *s, unsigned colidx);
+void pixel (int x, int y, unsigned colidx);
+void line (int x1, int y1, int x2, int y2, unsigned colidx);
+void rect (int x1, int y1, int x2, int y2, unsigned colidx);
+void fillrect (int x1, int y1, int x2, int y2, unsigned colidx);
+
+#endif /* _FBUTILS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/testutils.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,309 @@
+/*
+ *  tslib/src/ts_getxy.c
+ *
+ *  Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the GPL.  Please see the file
+ * COPYING for more details.
+ *
+ * $Id: testutils.c,v 1.2 2004/10/19 22:01:27 dlowder Exp $
+ *
+ * Waits for the screen to be touched, averages x and y sample
+ * coordinates until the end of contact
+ */
+
+//#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+//#include <unistd.h>
+//#include <sys/time.h>
+//#include "wbio.h"
+//#include "wbtypes.h"
+//#include "wblib.h"
+#include "tslib.h"
+#include "fbutils.h"
+#include "M48XTouchPanel.h"
+#include "GUI.h"
+
+static int sort_by_x(const void* a, const void *b)
+{
+    return (((struct ts_sample *)a)->x - ((struct ts_sample *)b)->x);
+}
+
+static int sort_by_y(const void* a, const void *b)
+{
+    return (((struct ts_sample *)a)->y - ((struct ts_sample *)b)->y);
+}
+
+void getxy(int *x, int *y)
+{
+#define MAX_SAMPLES 128
+    struct ts_sample samp[MAX_SAMPLES];
+    int index, middle;
+    int sumx, sumy;
+
+    printf("getxy\n");
+again:
+    do
+    {
+        if ( Read_TouchPanel(&sumx, &sumy) > 0 )
+        {
+            if ( (sumx < 0) || ( sumy < 0 ) )
+                continue;
+            break;
+        }
+    }
+    while (1);
+
+    /* Now collect up to MAX_SAMPLES touches into the samp array. */
+    index = 0;
+    do
+    {
+        if (index < MAX_SAMPLES-1)
+            index++;
+        if ( Read_TouchPanel(&sumx, &sumy) > 0)
+        {
+            samp[index].x = sumx;
+            samp[index].y = sumy;
+            samp[index].pressure = 1000;
+        }
+        else
+        {
+            samp[index].x = samp[index-1].x;
+            samp[index].y = samp[index-1].y;
+            samp[index].pressure = 0;
+        }
+
+//      printf("%d %d %d\n", samp[index].x, samp[index].y , samp[index].pressure);
+    }
+    while (samp[index].pressure > 0);
+    //printf("Took %d samples...\n",index);
+
+    /*
+     * At this point, we have samples in indices zero to (index-1)
+     * which means that we have (index) number of samples.  We want
+     * to calculate the median of the samples so that wild outliers
+     * don't skew the result.  First off, let's assume that arrays
+     * are one-based instead of zero-based.  If this were the case
+     * and index was odd, we would need sample number ((index+1)/2)
+     * of a sorted array; if index was even, we would need the
+     * average of sample number (index/2) and sample number
+     * ((index/2)+1).  To turn this into something useful for the
+     * real world, we just need to subtract one off of the sample
+     * numbers.  So for when index is odd, we need sample number
+     * (((index+1)/2)-1).  Due to integer division truncation, we
+     * can simplify this to just (index/2).  When index is even, we
+     * need the average of sample number ((index/2)-1) and sample
+     * number (index/2).  Calculate (index/2) now and we'll handle
+     * the even odd stuff after we sort.
+     */
+    middle = index/2;
+    if (x)
+    {
+        qsort(samp, index, sizeof(struct ts_sample), sort_by_x);
+        if (index & 1)
+            *x = samp[middle].x;
+        else
+            *x = (samp[middle-1].x + samp[middle].x) / 2;
+    }
+    if (y)
+    {
+        qsort(samp, index, sizeof(struct ts_sample), sort_by_y);
+        if (index & 1)
+            *y = samp[middle].y;
+        else
+            *y = (samp[middle-1].y + samp[middle].y) / 2;
+    }
+    if ( (index <= 3) || ( *x < 0) || ( *y < 0 ) )
+        goto again;
+}
+
+extern int ts_phy2log(int *sumx, int *sumy);
+
+static int palette [] =
+{
+    /*0x000000, 0xffe080, 0xffffff, 0xe0c0a0, 0x304050, 0x80b8c0*/
+    GUI_MAKE_COLOR(0x000000), GUI_MAKE_COLOR(0x80e0ff), GUI_MAKE_COLOR(0xffffff), GUI_MAKE_COLOR(0xa0c0e0), GUI_MAKE_COLOR(0x504030), GUI_MAKE_COLOR(0xc0b880),
+    GUI_MAKE_COLOR(0x7F1F00), GUI_MAKE_COLOR(0x20201F), GUI_MAKE_COLOR(0x5F3F1F), GUI_MAKE_COLOR(0xAFBFCF), GUI_MAKE_COLOR(0xF080D0), GUI_MAKE_COLOR(0x3F477F),
+    GUI_MAKE_COLOR(0x207820)
+};
+#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))
+
+#define NR_BUTTONS 3
+struct ts_button
+{
+    int x, y, w, h;
+    char *text;
+    int flags;
+#define BUTTON_ACTIVE 0x00000001
+};
+static struct ts_button buttons [NR_BUTTONS];
+
+/* [inactive] border fill text [active] border fill text */
+static int button_palette [6] =
+{
+    1, 4, 2,
+    1, 5, 0
+};
+
+void button_draw (struct ts_button *button)
+{
+    int s = (button->flags & BUTTON_ACTIVE) ? 3 : 0;
+
+    rect(button->x, button->y, button->x + button->w,
+         button->y + button->h, button_palette [s]);
+    fillrect(button->x + 1, button->y + 1,
+             button->x + button->w - 2,
+             button->y + button->h - 2, button_palette [s + 1]);
+//    put_string_center(button->x + button->w / 2,
+//                      button->y + button->h / 2,
+//                      button->text, button_palette [s + 2]);
+
+    GUI_SetColor(palette[button_palette [s + 2]]);
+    GUI_DispStringHCenterAt(button->text, button->x + button->w / 2, button->y + button->h / 2);
+}
+
+int button_handle (struct ts_button *button, int x, int y, unsigned int p)
+{
+    int inside = (x >= button->x) && (y >= button->y) &&
+                 (x < button->x + button->w) &&
+                 (y < button->y + button->h);
+
+    if (p > 0)
+    {
+        if (inside)
+        {
+            if (!(button->flags & BUTTON_ACTIVE))
+            {
+                button->flags |= BUTTON_ACTIVE;
+                button_draw (button);
+            }
+        }
+        else if (button->flags & BUTTON_ACTIVE)
+        {
+            button->flags &= ~BUTTON_ACTIVE;
+            button_draw (button);
+        }
+    }
+    else if (button->flags & BUTTON_ACTIVE)
+    {
+        button->flags &= ~BUTTON_ACTIVE;
+        button_draw (button);
+        return 1;
+    }
+
+    return 0;
+}
+
+static void refresh_screen(void)
+{
+    int i;
+
+//    fillrect (0, 0, xres - 1, yres - 1, 0);
+    GUI_Clear();
+//    put_string_center (xres/2, yres/4,   "Touchscreen test program", 1);
+//    put_string_center (xres/2, yres/4+20,"Touch screen to move crosshair", 2);
+
+    GUI_SetColor(palette[1]);
+    GUI_DispStringHCenterAt("Touchscreen test program", xres / 2, yres / 4);
+
+    GUI_SetColor(palette[2]);
+    GUI_DispStringHCenterAt("Touch screen to move crosshair", xres / 2, yres / 4 + 20);
+
+    for (i = 0; i < NR_BUTTONS; i++)
+        button_draw (&buttons [i]);
+}
+
+int ts_test(int xsize, int ysize)
+{
+    int sumx, sumy;
+    int x, y;
+    unsigned int i;
+    unsigned int mode = 0;
+    int quit_pressed = 0;
+
+    xres = xsize;
+    yres = ysize;
+
+    x = xres/2;
+    y = yres/2;
+
+    for (i = 0; i < NR_COLORS; i++)
+        setcolor (i, palette [i]);
+
+    /* Initialize buttons */
+    //memset (&buttons, 0, sizeof (buttons));
+    buttons [0].w = buttons [1].w = buttons [2].w = xres / 4;
+    buttons [0].h = buttons [1].h = buttons [2].h = 20;
+    buttons [0].x = 0;
+    buttons [1].x = (3 * xres) / 8;
+    buttons [2].x = (3 * xres) / 4 - 1;
+    buttons [0].y = buttons [1].y = buttons [2].y = 10;
+    buttons [0].text = "Drag";
+    buttons [1].text = "Draw";
+    buttons [2].text = "Quit";
+
+    refresh_screen ();
+
+    while (1)
+    {
+        struct ts_sample samp;
+
+        /* Show the cross */
+        if ((mode & 15) != 1)
+            put_cross(x, y, 2 | XORMODE);
+
+        if ( Read_TouchPanel(&sumx, &sumy) > 0)
+        {
+            ts_phy2log(&sumx, &sumy);
+            samp.x = sumx;
+            samp.y = sumy;
+            samp.pressure = 1000;
+        }
+        else
+        {
+            samp.x = x;
+            samp.y = y;
+            samp.pressure = 0;
+        }
+        GUI_Delay(30);
+
+        /* Hide it */
+        if ((mode & 15) != 1)
+            put_cross(x, y, 2 | XORMODE);
+
+        for (i = 0; i < NR_BUTTONS; i++)
+            if (button_handle(&buttons [i], samp.x, samp.y, samp.pressure))
+                switch (i)
+                {
+                case 0:
+                    mode = 0;
+                    refresh_screen ();
+                    break;
+                case 1:
+                    mode = 1;
+                    refresh_screen ();
+                    break;
+                case 2:
+                    quit_pressed = 1;
+                }
+
+        if (samp.pressure > 0)
+        {
+            if (mode == 0x80000001)
+                line (x, y, samp.x, samp.y, 2);
+            //pixel(x, y, 2);
+            x = samp.x;
+            y = samp.y;
+            mode |= 0x80000000;
+        }
+        else
+            mode &= ~0x80000000;
+        if (quit_pressed)
+            break;
+    }
+//    fillrect(0, 0, xres - 1, yres - 1, 0);
+    GUI_Clear();
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/testutils.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,17 @@
+#ifndef _TESTUTILS_H
+#define _TESTUTILS_H
+/*
+ *  tslib/tests/testutils.h
+ *
+ *  Copyright (C) 2004 Michael Opdenacker <michaelo@handhelds.org>
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: testutils.h
+ *
+ * Misc utils for ts test programs
+ */
+
+void getxy(int *x, int *y);
+
+#endif /* _TESTUTILS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/ts_calibrate.c	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,434 @@
+/*
+ *  tslib/tests/ts_calibrate.c
+ *
+ *  Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the GPL.  Please see the file
+ * COPYING for more details.
+ *
+ * $Id: ts_calibrate.c,v 1.8 2004/10/19 22:01:27 dlowder Exp $
+ *
+ * Basic test program for touchscreen library.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+//#include <signal.h>
+//#include <string.h>
+//#include <unistd.h>
+//#include <sys/fcntl.h>
+//#include <sys/ioctl.h>
+//#include <sys/mman.h>
+//#include <sys/time.h>
+#include "tslib.h"
+#include "fbutils.h"
+#include "testutils.h"
+//#include "wbio.h"
+//#include "wbtypes.h"
+//#include "wblib.h"
+//#include "LCDconf.h"
+#include "M480.h"
+#include "GUI.h"
+#include "M48XTouchPanel.h"
+//#include "nvtfat.h"
+
+#ifdef __USE_SD__
+#include "diskio.h"
+#include "ff.h"
+#endif
+
+typedef struct
+{
+    int x[5], xfb[5];
+    int y[5], yfb[5];
+    int a[7];
+} calibration;
+
+static int palette [] =
+{
+    /*0x000000, 0xffe080, 0xffffff, 0xe0c0a0*/
+    GUI_MAKE_COLOR(0x000000), GUI_MAKE_COLOR(0x80e0ff), GUI_MAKE_COLOR(0xffffff), GUI_MAKE_COLOR(0xa0c0e0), GUI_MAKE_COLOR(0x7F1F00), GUI_MAKE_COLOR(0x20201F), GUI_MAKE_COLOR(0x5F3F1F)
+};
+#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))
+
+#ifdef __USE_SD__
+extern FIL hFile;
+#endif
+
+int ts_writefile(void);
+int ts_readfile(void);
+
+int ts_calibrate(int xsize, int ysize);
+//int linear_read(int *sumx, int *sumy);
+int ts_phy2log(int *sumx, int *sumy);
+calibration cal, final_cal;
+
+#if 0
+int perform_calibration(calibration *cal)
+{
+    int j;
+    float n, x, y, x2, y2, xy, z, zx, zy;
+    float det, a, b, c, e, f, i;
+    float scaling = 65536.0;
+
+    int nn,nx,ny,nx2,ny2, nxy;
+// Get sums for matrix
+    n = x = y = x2 = y2 = xy = 0;
+    for(j=0; j<5; j++)
+    {
+        n += 1.0;
+        x += (float)cal->x[j];
+        y += (float)cal->y[j];
+        x2 += (float)(cal->x[j]*cal->x[j]);
+        y2 += (float)(cal->y[j]*cal->y[j]);
+        xy += (float)(cal->x[j]*cal->y[j]);
+    }
+    nn = (int)n;
+    nx = (int)x;
+    ny = (int)y;
+    nx2 = (int)x2;
+    ny2 = (int)y2;
+    nxy = (int)xy;
+    printf("n=%d,x=%d,y=%d,x2=%d,y2=%d, xy=%d\n",nn,nx,ny,nx2,ny2,nxy);
+// Get determinant of matrix -- check if determinant is too small
+    det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2);
+    if(det < 0.1 && det > -0.1)
+    {
+        printf("ts_calibrate: determinant is too small -- %f\n",det);
+        return 0;
+    }
+
+// Get elements of inverse matrix
+    a = (x2*y2 - xy*xy)/det;
+    b = (xy*y - x*y2)/det;
+    c = (x*xy - y*x2)/det;
+    e = (n*y2 - y*y)/det;
+    f = (x*y - n*xy)/det;
+    i = (n*x2 - x*x)/det;
+
+// Get sums for x calibration
+    z = zx = zy = 0;
+    for(j=0; j<5; j++)
+    {
+        z += (float)cal->xfb[j];
+        zx += (float)(cal->xfb[j]*cal->x[j]);
+        zy += (float)(cal->xfb[j]*cal->y[j]);
+    }
+
+// Now multiply out to get the calibration for framebuffer x coord
+    cal->a[0] = (int)((a*z + b*zx + c*zy)*(scaling));
+    cal->a[1] = (int)((b*z + e*zx + f*zy)*(scaling));
+    cal->a[2] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if  1 //close
+    nn = (int)((a*z + b*zx + c*zy)*(scaling));
+    nx = (int)((b*z + e*zx + f*zy)*(scaling));
+    ny = (int)((c*z + f*zx + i*zy)*(scaling));
+//  nn = (int)(a*z + b*zx + c*zy);
+//  nx = (int) (b*z + e*zx + f*zy);
+//  ny = (int) (c*z + f*zx + i*zy);
+    printf("%d %d %d\n",nn,nx,ny);
+#endif
+// Get sums for y calibration
+    z = zx = zy = 0;
+    for(j=0; j<5; j++)
+    {
+        z += (float)cal->yfb[j];
+        zx += (float)(cal->yfb[j]*cal->x[j]);
+        zy += (float)(cal->yfb[j]*cal->y[j]);
+    }
+
+// Now multiply out to get the calibration for framebuffer y coord
+    cal->a[3] = (int)((a*z + b*zx + c*zy)*(scaling));
+    cal->a[4] = (int)((b*z + e*zx + f*zy)*(scaling));
+    cal->a[5] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 1  // closed
+//  nn = (int) (a*z + b*zx + c*zy);
+//  nx = (int) (b*z + e*zx + f*zy);
+//  ny = (int) (c*z + f*zx + i*zy);
+    nn = (int)((a*z + b*zx + c*zy)*(scaling));
+    nx = (int)((b*z + e*zx + f*zy)*(scaling));
+    ny = (int)((c*z + f*zx + i*zy)*(scaling));
+    printf("%d %d %d\n",nn,nx,ny);
+#endif
+// If we got here, we're OK, so assign scaling to a[6] and return
+    cal->a[6] = (int)scaling;
+    return 1;
+    /*
+    // This code was here originally to just insert default values
+        for(j=0;j<7;j++) {
+            c->a[j]=0;
+        }
+        c->a[1] = c->a[5] = c->a[6] = 1;
+        return 1;
+    */
+}
+#endif
+
+int perform_calibration(calibration *cal)
+{
+    int j;
+    float n, x, y, x2, y2, xy, z, zx, zy;
+    float det, a, b, c, e, f, i;
+    float scaling = 65536.0;
+
+// Get sums for matrix
+    n = x = y = x2 = y2 = xy = 0;
+    for(j=0; j<5; j++)
+    {
+        n += 1.0f;
+        x += (float)cal->x[j];
+        y += (float)cal->y[j];
+        x2 += (float)(cal->x[j]*cal->x[j]);
+        y2 += (float)(cal->y[j]*cal->y[j]);
+        xy += (float)(cal->x[j]*cal->y[j]);
+    }
+// Get determinant of matrix -- check if determinant is too small
+    det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2);
+    if(det < 0.1f && det > -0.1f)
+    {
+        printf("ts_calibrate: determinant is too small -- %f\n",det);
+        return 0;
+    }
+
+// Get elements of inverse matrix
+    a = (x2*y2 - xy*xy)/det;
+    b = (xy*y - x*y2)/det;
+    c = (x*xy - y*x2)/det;
+    e = (n*y2 - y*y)/det;
+    f = (x*y - n*xy)/det;
+    i = (n*x2 - x*x)/det;
+
+// Get sums for x calibration
+    z = zx = zy = 0;
+    for(j=0; j<5; j++)
+    {
+        z += (float)cal->xfb[j];
+        zx += (float)(cal->xfb[j]*cal->x[j]);
+        zy += (float)(cal->xfb[j]*cal->y[j]);
+    }
+
+// Now multiply out to get the calibration for framebuffer x coord
+    cal->a[0] = (int)((a*z + b*zx + c*zy)*(scaling));
+    cal->a[1] = (int)((b*z + e*zx + f*zy)*(scaling));
+    cal->a[2] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 0 //close
+    printf("%f %f %f\n",(a*z + b*zx + c*zy),
+              (b*z + e*zx + f*zy),
+              (c*z + f*zx + i*zy));
+#endif
+// Get sums for y calibration
+    z = zx = zy = 0;
+    for(j=0; j<5; j++)
+    {
+        z += (float)cal->yfb[j];
+        zx += (float)(cal->yfb[j]*cal->x[j]);
+        zy += (float)(cal->yfb[j]*cal->y[j]);
+    }
+
+// Now multiply out to get the calibration for framebuffer y coord
+    cal->a[3] = (int)((a*z + b*zx + c*zy)*(scaling));
+    cal->a[4] = (int)((b*z + e*zx + f*zy)*(scaling));
+    cal->a[5] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 0  // closed
+    printf("%f %f %f\n",(a*z + b*zx + c*zy),
+              (b*z + e*zx + f*zy),
+              (c*z + f*zx + i*zy));
+#endif
+// If we got here, we're OK, so assign scaling to a[6] and return
+    cal->a[6] = (int)scaling;
+    return 1;
+}
+
+static void get_sample (calibration *cal,int index, int x, int y, char *name)
+{
+    static int last_x = -1, last_y;
+
+    if (last_x != -1)
+    {
+#define NR_STEPS 10
+        int dx = ((x - last_x) << 16) / NR_STEPS;
+        int dy = ((y - last_y) << 16) / NR_STEPS;
+        int i;
+        last_x <<= 16;
+        last_y <<= 16;
+        for (i = 0; i < NR_STEPS; i++)
+        {
+            put_cross (last_x >> 16, last_y >> 16, 2 | XORMODE);
+            //usleep (1000);
+            GUI_Delay(10);
+            put_cross (last_x >> 16, last_y >> 16, 2 | XORMODE);
+            last_x += dx;
+            last_y += dy;
+        }
+    }
+
+
+    put_cross(x, y, 2 | XORMODE);
+    getxy (&cal->x [index], &cal->y [index]);
+    put_cross(x, y, 2 | XORMODE);
+
+    last_x = cal->xfb [index] = x;
+    last_y = cal->yfb [index] = y;
+
+    printf("%s : X = %4d Y = %4d\n", name, cal->x [index], cal->y [index]);
+}
+
+int ts_calibrate(int xsize, int ysize)
+{
+    int i;
+
+    xres = xsize;
+    yres = ysize;
+
+    for (i = 0; i < NR_COLORS; i++)
+        setcolor (i, palette [i]);
+
+//    put_string_center (xres / 2, yres / 4,
+//                       "TSLIB calibration utility", 1);
+//    put_string_center (xres / 2, yres / 4 + 20,
+//                       "Touch crosshair to calibrate", 2);
+
+    GUI_SetColor(palette [1]);
+    GUI_DispStringHCenterAt("TSLIB calibration utility", xres / 2, yres / 4);
+
+    GUI_SetColor(palette [2]);
+    GUI_DispStringHCenterAt("Touch crosshair to calibrate", xres / 2, yres / 4 + 20);
+
+    printf("xres = %d, yres = %d\n", xres, yres);
+
+// Read a touchscreen event to clear the buffer
+    //getxy(ts, 0, 0);
+
+    get_sample (&cal, 0, 50,        50,        "Top left");
+//  GUI_Delay(200);
+    get_sample (&cal, 1, xres - 50, 50,        "Top right");
+    //GUI_Delay(200);
+    get_sample (&cal, 2, xres - 50, yres - 50, "Bot right");
+//  GUI_Delay(200);
+    get_sample (&cal, 3, 50,        yres - 50, "Bot left");
+//  GUI_Delay(200);
+    get_sample (&cal, 4, xres / 2,  yres / 2,  "Center");
+//  GUI_Delay(200);
+    if (perform_calibration (&cal))
+    {
+        printf ("Calibration constants: ");
+        for (i = 0; i < 7; i++) printf("%d ", cal.a [i]);
+        printf("\n");
+    }
+    else
+    {
+        printf("Calibration failed.\n");
+        i = -1;
+    }
+    final_cal.a[0] = cal.a[1];
+    final_cal.a[1] = cal.a[2];
+    final_cal.a[2] = cal.a[0];
+    final_cal.a[3] = cal.a[4];
+    final_cal.a[4] = cal.a[5];
+    final_cal.a[5] = cal.a[3];
+    final_cal.a[6] = cal.a[6];
+    return i;
+}
+#if 0
+int linear_read(int *sumx, int *sumy)
+{
+    int xtemp,ytemp;
+
+//  ret = dejitter_read(info->next, samp, nr);
+    if ( Read_TouchPanel(sumx, sumy) > 0)
+    {
+//printf("Before X=%d, Y=%d\n",*sumx, *sumy);
+        xtemp = *sumx;
+        ytemp = *sumy;
+        *sumx = ( final_cal.a[2] +
+                  final_cal.a[0]*xtemp +
+                  final_cal.a[1]*ytemp ) / final_cal.a[6];
+        *sumy = ( final_cal.a[5] +
+                  final_cal.a[3]*xtemp +
+                  final_cal.a[4]*ytemp ) / final_cal.a[6];
+//printf("After X=%d, Y=%d\n",*sumx, *sumy);
+        return 1;
+    }
+    else
+    {
+        *sumx = -1;
+        *sumy = -1;
+        return -1;
+    }
+}
+#endif
+int ts_phy2log(int *sumx, int *sumy)
+{
+    int xtemp,ytemp;
+
+    xtemp = *sumx;
+    ytemp = *sumy;
+    *sumx = ( final_cal.a[2] +
+              final_cal.a[0]*xtemp +
+              final_cal.a[1]*ytemp ) / final_cal.a[6];
+    *sumy = ( final_cal.a[5] +
+              final_cal.a[3]*xtemp +
+              final_cal.a[4]*ytemp ) / final_cal.a[6];
+//printf("After X=%d, Y=%d\n",*sumx, *sumy);
+    return 1;
+}
+
+int ts_writefile(void)
+{
+#ifdef __USE_SD__
+    size_t cnt;
+    FRESULT res;
+    res = f_lseek(&hFile, 0);
+    if (res != FR_OK)
+    {
+        printf("CANNOT seek the calibration into file\n");
+        return -1;
+    }
+
+    res = f_write(&hFile, (char *)&final_cal.a[0], 28, &cnt);
+    if (res != FR_OK)
+    {
+        printf("CANNOT write the calibration into file, %d\n", cnt);
+        return -1;
+    }
+#else
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x00, final_cal.a[0]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x04, final_cal.a[1]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x08, final_cal.a[2]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x0C, final_cal.a[3]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x10, final_cal.a[4]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x14, final_cal.a[5]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x18, final_cal.a[6]);
+    FMC_Write(__DEMO_TSFILE_ADDR__ + 0x1C, 0x55AAA55A);
+#endif
+    return 0;
+}
+
+int ts_readfile(void)
+{
+#ifdef __USE_SD__
+    size_t cnt;
+    FRESULT res;
+    res = f_lseek(&hFile, 0);
+    if (res != FR_OK)
+    {
+        printf("CANNOT seek the calibration into file\n");
+        return -1;
+    }
+
+    res = f_read(&hFile, (char *)&final_cal.a[0], 28, &cnt);
+    if (res != FR_OK)
+    {
+        printf("CANNOT read the calibration into file, %d\n", cnt);
+        return -1;
+    }
+#else
+    final_cal.a[0] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x00);
+    final_cal.a[1] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x04);
+    final_cal.a[2] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x08);
+    final_cal.a[3] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x0C);
+    final_cal.a[4] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x10);
+    final_cal.a[5] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x14);
+    final_cal.a[6] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x18);
+#endif
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib-filter.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,53 @@
+#ifndef _TSLIB_FILTER_H_
+#define _TSLIB_FILTER_H_
+/*
+ *  tslib/src/tslib-filter.h
+ *
+ *  Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib-filter.h,v 1.3 2005/03/01 18:18:05 kergoth Exp $
+ *
+ * Internal touch screen library definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <tslib.h>
+
+struct tslib_module_info;
+struct tsdev;
+
+struct tslib_vars
+{
+    const char *name;
+    void *data;
+    int (*fn)(struct tslib_module_info *inf, char *str, void *data);
+};
+
+struct tslib_ops
+{
+    int (*read)(struct tslib_module_info *inf, struct ts_sample *samp, int nr);
+    int (*fini)(struct tslib_module_info *inf);
+};
+
+struct tslib_module_info
+{
+    struct tsdev *dev;
+    struct tslib_module_info *next; /* next module in chain */
+    const struct tslib_ops *ops;
+    void *handle;           /* dl handle        */
+};
+
+#if 0
+TSAPI extern int tslib_parse_vars(struct tslib_module_info *,
+                                  const struct tslib_vars *, int,
+                                  const char *);
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_FILTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib-private.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,39 @@
+#ifndef _TSLIB_PRIVATE_H_
+#define _TSLIB_PRIVATE_H_
+/*
+ *  tslib/src/tslib-private.h
+ *
+ *  Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib-private.h,v 1.3 2004/07/21 19:12:59 dlowder Exp $
+ *
+ * Internal touch screen library definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "tslib.h"
+#include "tslib-filter.h"
+
+struct tsdev
+{
+    int fd;
+    struct tslib_module_info *list;
+    struct tslib_module_info *list_raw; /* points to position in 'list' where raw reads
+                           come from.  default is the position of the
+                           ts_read_raw module. */
+};
+
+int __ts_attach(struct tsdev *ts, struct tslib_module_info *info);
+int __ts_attach_raw(struct tsdev *ts, struct tslib_module_info *info);
+int ts_load_module(struct tsdev *dev, const char *module, const char *params);
+int ts_load_module_raw(struct tsdev *dev, const char *module, const char *params);
+int ts_error(const char *fmt, ...);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_PRIVATE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib.h	Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,98 @@
+#ifndef _TSLIB_H_
+#define _TSLIB_H_
+/*
+ *  tslib/src/tslib.h
+ *
+ *  Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib.h,v 1.4 2005/02/26 01:47:23 kergoth Exp $
+ *
+ * Touch screen library interface definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#include <stdarg.h>
+//#include <sys/time.h>
+
+#ifdef WIN32
+#define TSIMPORT __declspec(dllimport)
+#define TSEXPORT __declspec(dllexport)
+#define TSLOCAL
+#else
+#define TSIMPORT
+#ifdef GCC_HASCLASSVISIBILITY
+#define TSEXPORT __attribute__ ((visibility("default")))
+#define TSLOCAL __attribute__ ((visibility("hidden")))
+#else
+#define TSEXPORT
+#define TSLOCAL
+#endif
+#endif
+
+#ifdef TSLIB_INTERNAL
+#define TSAPI TSEXPORT
+#else
+#define TSAPI TSIMPORT
+#endif // TSLIB_INTERNAL
+
+struct tsdev;
+
+struct ts_sample
+{
+    int     x;
+    int     y;
+    unsigned int    pressure;
+//  struct timeval  tv;
+};
+
+/*
+ * Close the touchscreen device, free all resources.
+ */
+TSAPI int ts_close(struct tsdev *);
+
+/*
+ * Configure the touchscreen device.
+ */
+TSAPI int ts_config(struct tsdev *);
+
+/*
+ * Change this hook to point to your custom error handling function.
+ */
+extern TSAPI int (*ts_error_fn)(const char *fmt, va_list ap);
+
+/*
+ * Returns the file descriptor in use for the touchscreen device.
+ */
+TSAPI int ts_fd(struct tsdev *);
+
+/*
+ * Load a filter/scaling module
+ */
+TSAPI int ts_load_module(struct tsdev *, const char *mod, const char *params);
+
+/*
+ * Open the touchscreen device.
+ */
+TSAPI struct tsdev *ts_open(const char *dev_name, int nonblock);
+
+/*
+ * Return a scaled touchscreen sample.
+ */
+TSAPI int ts_read(struct tsdev *, struct ts_sample *, int);
+
+/*
+ * Returns a raw, unscaled sample from the touchscreen.
+ */
+TSAPI int ts_read_raw(struct tsdev *, struct ts_sample *, int);
+
+int ts_calibrate(int xsize, int ysize);
+
+int ts_phy2log(int *sumx, int *sumy);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_H_ */