RT1050 GUI demo using emWin library

Files at this revision

API Documentation at this revision

Comitter:
alejandroRL
Date:
Thu Sep 20 19:16:34 2018 +0000
Commit message:
emWin GUI Demo for RT1050

Changed in this revision

.gitignore Show annotated file Show diff for this revision Revisions of this file
README.md Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_Config/GUIConf.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_Config/LCDConf.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/BUTTON.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/BUTTON_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/CALENDAR.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/CHECKBOX.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/CHECKBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/CHOOSECOLOR.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/CHOOSEFILE.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/DIALOG.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/DIALOG_Intern.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/DROPDOWN.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/DROPDOWN_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/EDIT.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/EDIT_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/FRAMEWIN.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/FRAMEWIN_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GRAPH.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GRAPH_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_BitPlains.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_DCache.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_DCache_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Dist.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_FlexColor.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_FlexColor_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_IST3088.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_IST3088_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin_Opt_16.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin_Opt_24.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin_Opt_32.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin_Opt_8.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Lin_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_NoOpt_1_8.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_S1D13748.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_S1D13748_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_S1D13781.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_S1D13781_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_S1D15G00.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SLin.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SLin_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SPage.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SPage_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SSD1926.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_SSD1926_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_Template.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_TemplateI.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUIDRV_TemplateI_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUITDRV_ADS7846.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_ARRAY.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_ARRAY_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_BMP_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_ConfDefaults.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_Debug.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_FontIntern.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_GCache_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_GIF_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_HOOK.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_JPEG_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_SPRITE_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_SetOrientation.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_SetOrientationCX.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_Type.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_VNC.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI_Version.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI__BiDi2_Brackets_800.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/GUI__BiDi2_Types_800.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/Global.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/HEADER.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/HEADER_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/ICONVIEW.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/ICONVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/IMAGE.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/IMAGE_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/IP_FS.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/KNOB.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/KNOB_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LCD.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LCD_ConfDefaults.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LCD_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LCD_Protected.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LCD_SIM.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTBOX.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTVIEW.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTWHEEL.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/LISTWHEEL_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MENU.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MENU_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MESSAGEBOX.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MULTIEDIT.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MULTIPAGE.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/MULTIPAGE_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/PROGBAR.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/PROGBAR_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/RADIO.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/RADIO_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SCROLLBAR.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SCROLLBAR_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SEGGER.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SLIDER.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SLIDER_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SPINBOX.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SPINBOX_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SWIPELIST.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/SWIPELIST_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/TEXT.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/TEXT_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/TREEVIEW.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/TREEVIEW_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/WIDGET.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/WINDOW_Private.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/WM.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/WM_GUI.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_header/WM_Intern.h Show annotated file Show diff for this revision Revisions of this file
emwin/emWin_library/emWin_M4F.ar Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
source/board.c Show annotated file Show diff for this revision Revisions of this file
source/board.h Show annotated file Show diff for this revision Revisions of this file
source/emwin_support.c Show annotated file Show diff for this revision Revisions of this file
source/emwin_support.h Show annotated file Show diff for this revision Revisions of this file
source/fsl_ft5406_rt.c Show annotated file Show diff for this revision Revisions of this file
source/fsl_ft5406_rt.h Show annotated file Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
source/pin_mux.c Show annotated file Show diff for this revision Revisions of this file
source/pin_mux.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gitignore	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,4 @@
+.build
+.mbed
+projectfiles
+*.py*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,23 @@
+# Using the right emWin Library if using Mbed CLI
+
+##For Keil:
+1. Navigate to /source/emwin/emWin_library
+2. Change the extension of libemWin_M4F.ar to libemWin_M4F.a
+
+##For GCC:
+1. Navigate to NXP's emWin Graphics Library Downloads page https://www.nxp.com/pages/emwin-graphics-library:EMWIN-GRAPHICS-LIBRARY?tab=Design_Tools_Tab
+2. Under "Libraries" click on the Download button next to "emwin 5.30c Pre-Compiled Libraries for NXP ARM MCUs"
+3. Click "I Accept" then save the NXP_emWin530c_libraries.exe to your computer
+4. Install the libraries to a location on your computer
+
+Now that we have downloaded the emWin 5.30c pre-compiled libraries, we will need to replace the existing emWin library with the correct one in our Mbed OS project:
+
+1. Within the NXP_emWin530c_libraries folder, copy the file from the following location: NXP_emWin530c_libraries/emWin_library/LPCXpresso/libemWin_M4F.a
+2. With the file copied, navigate to the following folder within your Mbed OS Project: /source/emwin/emWin_library
+3. Paste the copied file and delete the file libemWin_M4F.ar
+
+##For IAR:
+1. Follow the same steps as for the GCC compiler except this time download the "Segger emWin 5.38b Libraries and Utilities for NXP Cortex M3/M4 MCUs"
+2. Copy the file located in the following path NXP-emWin538b-libraries/emWin_library/LPCXpresso/libemWin_M4F.a
+3. With the file copied, navigate to the following folder within your Mbed OS Project: /source/emwin/emWin_library
+4. Paste the copied file and delete the file libemWin_M4F.ar
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_Config/GUIConf.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,82 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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                    (1)  // 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    1    // 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/emWin_Config/LCDConf.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,49 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : LCDConf.h
+Purpose     : Display driver configuration file
+----------------------------------------------------------------------
+*/
+
+#ifndef LCDCONF_H
+#define LCDCONF_H
+
+#endif /* LCDCONF_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/BUTTON.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,214 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_FOCUSSED    1
+#define BUTTON_SKINFLEX_PI_ENABLED     2
+#define BUTTON_SKINFLEX_PI_DISABLED    3
+
+/*********************************************************************
+*
+*       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_SetFocussable      (BUTTON_Handle hObj, int State);
+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);
+
+/*********************************************************************
+*
+*       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/emWin_header/BUTTON_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,136 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/CALENDAR.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,161 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+void    CALENDAR_GetSel           (WM_HWIN hWin, 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);
+
+/*********************************************************************
+*
+*       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/emWin_header/CHECKBOX.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,208 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
+*
+**********************************************************************
+*/
+
+int       CHECKBOX_GetState     (CHECKBOX_Handle hObj);
+int       CHECKBOX_GetText      (CHECKBOX_Handle hObj, char * pBuffer, int MaxLen);
+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/emWin_header/CHECKBOX_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,163 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/CHOOSECOLOR.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,139 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/CHOOSEFILE.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,134 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/DIALOG.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,104 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 "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"
+#include "KNOB.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/emWin_header/DIALOG_Intern.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,110 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/DROPDOWN.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,201 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_FOCUSSED 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);
+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);
+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/emWin_header/DROPDOWN_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,144 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/EDIT.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,226 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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)
+
+//
+// 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_SetFocussable    (EDIT_Handle hObj, int State);
+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);
+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);
+
+/*********************************************************************
+*
+*             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/emWin_header/EDIT_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,142 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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;
+};
+
+/*********************************************************************
+*
+*       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/emWin_header/FRAMEWIN.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,264 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/FRAMEWIN_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,257 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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                 hFocussedChild;  // Handle to focussed 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GRAPH.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,197 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+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_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/emWin_header/GRAPH_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,161 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUI.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,2480 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUI.h
+Purpose     : GUI API include file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef  GUI_H
+#define  GUI_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;
+  //
+  // 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;
+  LCD_PIXELINDEX * LCD_pAColorIndex;
+  //
+  // 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 * apDevice[GUI_NUM_LAYERS];
+  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
+};
+
+/* 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_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
+
+/*********************************************************************
+*
+*       Rectangle helper functions
+*/
+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);
+void GUI__memcpy(void * pDest, const void * pSrc, int NumBytes);
+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);
+
+/*********************************************************************
+*
+*       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);
+
+/*********************************************************************
+*
+*       Graphic 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);
+
+/*********************************************************************
+*
+*       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);
+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_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);
+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);
+
+/*********************************************************************
+*
+*       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_BITMAP GUI_BitmapArrowS, GUI_BitmapArrowSI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapArrowM, GUI_BitmapArrowMI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapArrowL, GUI_BitmapArrowLI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossS, GUI_BitmapCrossSI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossM, GUI_BitmapCrossMI;
+extern GUI_CONST_STORAGE GUI_BITMAP GUI_BitmapCrossL, GUI_BitmapCrossLI;
+
+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. */
+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);
+int   GUI_SetTextAlign         (int Align);
+int   GUI_SetTextMode          (int Mode);
+char  GUI_SetTextStyle         (char Style);
+int   GUI_SetLBorder           (int x);
+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_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_SetEncodeUTF8 (void);
+void  GUI_UC_SetBaseDir    (int Dir);  // Only available with new version of BIDI algorithm
+int   GUI_UC_GetBaseDir    (void);     // Only available with new version of BIDI algorithm
+
+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
+
+/*********************************************************************
+*
+*       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_DRAWBITMAP32_FUNC (int LayerIndex, int x, int y, U32 const * p, int xSize, int ySize, int BytesPerLine);
+
+int GUI_SetFuncDrawAlpha(GUI_DRAWMEMDEV_FUNC * pfDrawAlphaMemdevFunc, GUI_DRAWBITMAP32_FUNC * pfDrawAlphaBitmapFunc);
+
+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));
+void     GUI_SetFuncMixColors    (LCD_COLOR (* pFunc)(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));
+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_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);
+
+/*********************************************************************
+*
+*       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;
+  U32              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, U32 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_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
+
+/*********************************************************************
+*
+*       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_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
+*/
+#if (GUI_USE_ARGB)
+  #define GUI_BLUE          0xFF0000FF
+  #define GUI_GREEN         0xFF00FF00
+  #define GUI_RED           0xFFFF0000
+  #define GUI_CYAN          0xFF00FFFF
+  #define GUI_MAGENTA       0xFFFF00FF
+  #define GUI_YELLOW        0xFFFFFF00
+  #define GUI_LIGHTBLUE     0xFF8080FF
+  #define GUI_LIGHTGREEN    0xFF80FF80
+  #define GUI_LIGHTRED      0xFFFF8080
+  #define GUI_LIGHTCYAN     0xFF80FFFF
+  #define GUI_LIGHTMAGENTA  0xFFFF80FF
+  #define GUI_LIGHTYELLOW   0xFFFFFF80
+  #define GUI_DARKBLUE      0xFF000080
+  #define GUI_DARKGREEN     0xFF008000
+  #define GUI_DARKRED       0xFF800000
+  #define GUI_DARKCYAN      0xFF008080
+  #define GUI_DARKMAGENTA   0xFF800080
+  #define GUI_DARKYELLOW    0xFF808000
+  #define GUI_WHITE         0xFFFFFFFF
+  #define GUI_LIGHTGRAY     0xFFD3D3D3
+  #define GUI_GRAY          0xFF808080
+  #define GUI_DARKGRAY      0xFF404040
+  #define GUI_BLACK         0xFF000000
+  #define GUI_BROWN         0xFFA52A2A
+  #define GUI_ORANGE        0xFFFFA500
+  #define GUI_TRANSPARENT   0x00000000
+
+  #define GUI_GRAY_3F       0xFF3F3F3F
+  #define GUI_GRAY_50       0xFF505050
+  #define GUI_GRAY_55       0xFF555555
+  #define GUI_GRAY_60       0xFF606060
+  #define GUI_GRAY_7C       0xFF7C7C7C
+  #define GUI_GRAY_9A       0xFF9A9A9A
+  #define GUI_GRAY_AA       0xFFAAAAAA
+  #define GUI_GRAY_C0       0xFFC0C0C0
+  #define GUI_GRAY_C8       0xFFC8C8C8
+  #define GUI_GRAY_D0       0xFFD0D0D0
+  #define GUI_GRAY_E7       0xFFE7E7E7
+  #define GUI_BLUE_98       0xFF000098
+#else
+  #define GUI_BLUE          0x00FF0000
+  #define GUI_GREEN         0x0000FF00
+  #define GUI_RED           0x000000FF
+  #define GUI_CYAN          0x00FFFF00
+  #define GUI_MAGENTA       0x00FF00FF
+  #define GUI_YELLOW        0x0000FFFF
+  #define GUI_LIGHTBLUE     0x00FF8080
+  #define GUI_LIGHTGREEN    0x0080FF80
+  #define GUI_LIGHTRED      0x008080FF
+  #define GUI_LIGHTCYAN     0x00FFFF80
+  #define GUI_LIGHTMAGENTA  0x00FF80FF
+  #define GUI_LIGHTYELLOW   0x0080FFFF
+  #define GUI_DARKBLUE      0x00800000
+  #define GUI_DARKGREEN     0x00008000
+  #define GUI_DARKRED       0x00000080
+  #define GUI_DARKCYAN      0x00808000
+  #define GUI_DARKMAGENTA   0x00800080
+  #define GUI_DARKYELLOW    0x00008080
+  #define GUI_WHITE         0x00FFFFFF
+  #define GUI_LIGHTGRAY     0x00D3D3D3
+  #define GUI_GRAY          0x00808080
+  #define GUI_DARKGRAY      0x00404040
+  #define GUI_BLACK         0x00000000
+  #define GUI_BROWN         0x002A2AA5
+  #define GUI_ORANGE        0x0000A5FF
+  #define GUI_TRANSPARENT   0xFF000000
+
+  #define GUI_GRAY_3F       0x003F3F3F
+  #define GUI_GRAY_50       0x00505050
+  #define GUI_GRAY_55       0x00555555
+  #define GUI_GRAY_60       0x00606060
+  #define GUI_GRAY_7C       0x007C7C7C
+  #define GUI_GRAY_9A       0x009A9A9A
+  #define GUI_GRAY_AA       0x00AAAAAA
+  #define GUI_GRAY_C0       0x00C0C0C0
+  #define GUI_GRAY_C8       0x00C8C8C8
+  #define GUI_GRAY_D0       0x00D0D0D0
+  #define GUI_GRAY_E7       0x00E7E7E7
+  #define GUI_BLUE_98       0x00980000
+#endif
+
+#define GUI_INVALID_COLOR 0xFFFFFFF      /* Invalid color - more than 24 bits */
+
+#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
+
+
+/*********************************************************************
+*
+*       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 orientation flags */
+#define GUI_MIRROR_X (1 << 0)
+#define GUI_MIRROR_Y (1 << 1)
+#define GUI_SWAP_XY  (1 << 2)
+
+/*********************************************************************
+*
+*       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/emWin_header/GUIDRV_BitPlains.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,99 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Bitplains.h
+Purpose     : Interface definition for GUIDRV_Bitplains driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_BITPLAINS_H
+#define GUIDRV_BITPLAINS_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Configuration structure
+*/
+typedef struct {
+  int Mirror;
+} CONFIG_BITPLAINS;
+
+typedef struct {
+  U8 * apVRAM[8];
+} CONFIG_VRAM_BITPLAINS;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_BitPlains_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_BITPLAINS        &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_BITPLAINS        &GUIDRV_BitPlains_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_BitPlains_Config(GUI_DEVICE * pDevice, CONFIG_BITPLAINS * pConfig);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_BITPLAINS_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_DCache.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,95 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_DCache.h
+Purpose     : Interface definition for GUIDRV_DCache driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_DCACHE_H
+#define GUIDRV_DCACHE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Display driver
+*/
+//
+// Address
+//
+extern const GUI_DEVICE_API GUIDRV_DCache_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_DCACHE &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_DCACHE &GUIDRV_DCache_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_DCache_AddDriver(pDevice, pDriver)
+  #define GUIDRV_DCache_SetMode1bpp(pDevice)
+
+#else
+
+  void GUIDRV_DCache_AddDriver  (GUI_DEVICE * pDevice, GUI_DEVICE * pDriver);
+  void GUIDRV_DCache_SetMode1bpp(GUI_DEVICE * pDevice);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_DCACHE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_DCache_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,147 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_DCache_Private.h
+Purpose     : Private declarations for GUIDRV_DCache driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_DCACHE_PRIVATE_H
+#define GUIDRV_DCACHE_PRIVATE_H
+
+#include "GUIDRV_DCache.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_DCACHE
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+typedef struct {
+  //
+  // Data
+  //
+  int xSize, ySize;       // Display size
+  int vxSize, vySize;     // Virtual display size
+  int BitsPerPixelDriver;
+  int BitsPerPixel;
+  int NumColors;
+  LCD_PIXELINDEX IndexMask;
+  U32 MemSize;
+  GUI_RECT rDirty;
+  const GUI_DEVICE_API * pMemdev_API;
+  //
+  // Cache mamagement
+  //
+  void           (* pfFlush        )(GUI_DEVICE * pDevice);
+  void           (* pfSendCacheRect)(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+  //
+  // Setting the rectangle to be filled up within the real driver
+  //
+  void           (* pfSetRect      )(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1, int OnOff);
+  //
+  // Mode dependent 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           (* 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);
+  //
+  // Request information
+  //
+  I32            (* pfGetDevProp   )(GUI_DEVICE * pDevice, int Index);
+  //
+  // Initialization
+  //
+  void           (* pfInit)         (GUI_DEVICE * pDevice);
+  //
+  // Conversion array from cache to real display driver
+  //
+  LCD_PIXELINDEX * pConvert;
+  LCD_PIXELINDEX * pIndex;
+  //
+  // Cache
+  //
+  U8 * pVRAM;
+  U8 * pVRAM_Lock;
+  int CacheLocked;
+  int CacheStat;
+  int CacheDirty;
+  //
+  // The driver which is used for the actual drawing operations
+  //
+  GUI_DEVICE * pDriver;
+} DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       Private interface
+*
+**********************************************************************
+*/
+void GUIDRV_DCache__AddDirtyRect  (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+void GUIDRV_DCache__ClearDirtyRect(DRIVER_CONTEXT * pContext);
+void GUIDRV_DCache__InitOnce      (GUI_DEVICE * pDevice);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_DCACHE_PRIVATE_H */
+
+/*************************** End of file ****************************/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Dist.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,93 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Dist.h
+Purpose     : Interface definition for GUIDRV_Dist driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_DIST_H
+#define GUIDRV_DIST_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Display driver
+*/
+//
+// Address
+//
+extern const GUI_DEVICE_API GUIDRV_Dist_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_DIST &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_DIST &GUIDRV_Dist_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_Dist_AddDriver(pDevice, pDriver, pRect)
+
+#else
+
+  void GUIDRV_Dist_AddDriver(GUI_DEVICE * pDevice, GUI_DEVICE * pDriver, GUI_RECT * pRect);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_DIST_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_FlexColor.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,286 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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_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);
+
+  //
+  // 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_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)
+
+  //
+  // 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/emWin_header/GUIDRV_FlexColor_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,255 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_FlexColor_Private.h
+Purpose     : Private declarations for GUIDRV_FlexColor driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_FlexColor.h"
+
+#ifndef GUIDRV_FLEXCOLOR_PRIVATE_H
+#define GUIDRV_FLEXCOLOR_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define LCD_WRITE_BUFFER_SIZE           500
+
+#define FLEXCOLOR_CF_MANAGE_ORIENTATION (1 << 0)
+#define FLEXCOLOR_CF_RAM_ADDR_SET       (1 << 1)
+#define FLEXCOLOR_CF_SET_CURSOR         (1 << 2)
+
+#define FLEXCOLOR_CF_DEFAULT            FLEXCOLOR_CF_RAM_ADDR_SET
+
+#define FLEXCOLOR_MAX_NUM_DUMMY_READS   5
+#define FLEXCOLOR_NUM_DUMMY_READS       1
+
+#define PUSH_RECT 0
+#define POP_RECT  1
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_FLEXCOLOR
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Data
+  //
+  int xSize, ySize;   // Display size
+  int vxSize, vySize; // Virtual display size
+  int x0, y0, x1, y1; // Current rectangle
+  int NumDummyReads;  // Number of required dummy reads
+  U16 RegEntryMode;   // Can be used for storing additional configuration bits for 'EntryMode' register which is modified by the driver
+  U16 Flags;
+  LCD_PIXELINDEX IndexMask;
+  int FirstSEG, FirstCOM;
+  int Orientation;
+  int BitsPerPixel;
+  int Shift;
+  GUI_DEVICE * pDevice;
+  const GUI_DEVICE_API * pMemdev_API;
+  //
+  // Cache
+  //
+  void * pVRAM;
+  int CacheLocked;
+  int CacheStat;
+  int xPos, yPos;
+  U32 Addr;
+  GUI_RECT CacheRect;
+  //
+  // Buffers
+  //
+  void * pWriteBuffer;
+  void * pLineBuffer;
+  U8  aPair_8 [3 + FLEXCOLOR_MAX_NUM_DUMMY_READS];
+  U16 aPair_16[3 + FLEXCOLOR_MAX_NUM_DUMMY_READS];
+  //
+  // Functions for writing single items (data, cmd) regardless of the interface and getting the status
+  //
+  U16  (* pfReadReg)     (DRIVER_CONTEXT * _pContext);
+  void (* pfSetReg)      (DRIVER_CONTEXT * _pContext, U16 _Data);
+  void (* pfWritePara)   (DRIVER_CONTEXT * _pContext, U16 _Data);
+  void (* pfSetInterface)(DRIVER_CONTEXT * _pContext, int _BusWidth);
+  //
+  // Setting read mode, required for RA8870
+  //
+  void (* pfSetReadMode)(DRIVER_CONTEXT * _pContext, int OnOff, int SetCursor);
+  //
+  // Cache related function pointers
+  //
+  void (* pfSendCacheRect)(DRIVER_CONTEXT * _pContext, int _x0, int _y0, int _x1, int _y1);
+  U32  (* pfReadData)     (DRIVER_CONTEXT * _pContext);
+  void (* pfWriteData)    (DRIVER_CONTEXT * _pContext, U32 _PixelIndex);
+  //
+  // Controller specific routines
+  //
+  void (* pfSetRect)            (DRIVER_CONTEXT * _pContext, int _x0, int _y0, int _x1, int _y1);
+  void (* pfSetPhysRAMAddr)     (DRIVER_CONTEXT * _pContext, int _x, int _y);
+  void (* pfSetOrientation)     (DRIVER_CONTEXT * _pContext);
+  U16  (* pfReadPixel_16bpp_B16)(DRIVER_CONTEXT * _pContext);
+  U16  (* pfReadPixel_16bpp_B8) (DRIVER_CONTEXT * _pContext);
+  U32  (* pfReadPixel_18bpp_B9) (DRIVER_CONTEXT * _pContext);
+  U32  (* pfReadPixel_18bpp_B18)(DRIVER_CONTEXT * _pContext);
+  U32  (* pfReadPixel_32bpp_B8) (DRIVER_CONTEXT * _pContext);
+  void (* pfReadRect_16bpp_B16) (GUI_DEVICE * _pDevice, int _x0, int _y0, int _x1, int _y1, U16 * _pBuffer);
+  void (* pfReadRect_16bpp_B8)  (GUI_DEVICE * _pDevice, int _x0, int _y0, int _x1, int _y1, U16 * _pBuffer);
+  void (* pfReadRect_18bpp_B9)  (GUI_DEVICE * _pDevice, int _x0, int _y0, int _x1, int _y1, U32 * _pBuffer);
+  void (* pfReadRect_18bpp_B18) (GUI_DEVICE * _pDevice, int _x0, int _y0, int _x1, int _y1, U32 * _pBuffer);
+  void (* pfReadRect_32bpp_B8)  (GUI_DEVICE * _pDevice, int _x0, int _y0, int _x1, int _y1, U32 * _pBuffer);
+  //
+  // Custom read functions
+  //
+  U16 (* pfReadPixelCust_16bpp) (int LayerIndex);
+  U32 (* pfReadPixelCust_18bpp) (int LayerIndex);
+  void(* pfReadMPixelCust_16bpp)(int LayerIndex, U16 * pBuffer, U32 NumPixels);
+  void(* pfReadMPixelCust_18bpp)(int LayerIndex, U32 * pBuffer, U32 NumPixels);
+  //
+  // Mode dependent 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          (* 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);
+  int           (* pfControlCache )(GUI_DEVICE *  _pDevice, int _Cmd);
+  void          (* pfRefresh      )(GUI_DEVICE *  _pDevice);
+  //
+  // Controller dependent function pointers
+  //
+  void (* pfReadRect)(void);
+  //
+  // Orientation
+  //
+  int  (* pfLog2PhysX)(DRIVER_CONTEXT * _pContext, int _x, int _y);
+  int  (* pfLog2PhysY)(DRIVER_CONTEXT * _pContext, int _x, int _y);
+  //
+  // Function pointer for setting up pfLog2Phys<X,Y>
+  //
+  void (* pfSetLog2Phys)(DRIVER_CONTEXT * _pContext);
+  //
+  // Hardware routines
+  //
+  GUI_PORT_API HW_API;
+};
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void GUIDRV_FlexColor__InitOnce       (GUI_DEVICE * pDevice);
+int  GUIDRV_FlexColor__ControlCache   (GUI_DEVICE * pDevice, int Cmd);
+void GUIDRV_FlexColor__Refresh        (GUI_DEVICE * pDevice);
+
+void GUIDRV_FlexColor__AddCacheRect   (DRIVER_CONTEXT * pContext);
+void GUIDRV_FlexColor__ManageRect     (DRIVER_CONTEXT * pContext, int Cmd);
+void GUIDRV_FlexColor__SetCacheAddr   (DRIVER_CONTEXT * pContext, int x, int y);
+void GUIDRV_FlexColor__SetCacheRect   (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+void GUIDRV_FlexColor__SetLog2Phys    (DRIVER_CONTEXT * pContext);
+void GUIDRV_FlexColor__SetSubRect     (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+void GUIDRV_FlexColor__ClearCacheRect (DRIVER_CONTEXT * pContext);
+
+LCD_PIXELINDEX GUIDRV_FlexColor__GetPixelIndexCache  (GUI_DEVICE * pDevice, int x, int y);
+void           GUIDRV_FlexColor__SetPixelIndexCache  (GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex);
+LCD_PIXELINDEX GUIDRV_FlexColor__GetPixelIndexNoCache(GUI_DEVICE * pDevice, int x, int y);
+void           GUIDRV_FlexColor__SetPixelIndexNoCache(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex);
+
+void GUIDRV_FlexColor__SetFunc66712(GUI_DEVICE * pDevice, U16 AndMask_SetAddrRAM);
+
+/*********************************************************************
+*
+*       Simulation (Segger internal use only)
+*
+**********************************************************************
+*/
+#if defined(WIN32) && defined(LCD_SIMCONTROLLER)
+
+  extern GUI_PORT_API SIM_FlexColor_HW_API;
+
+  void SIM_FlexColor_Config      (GUI_DEVICE * pDevice, int Orientation, int xSize, int ySize, int FirstSEG, int FirstCOM, int BitsPerPixel, int NumDummyReads);
+  void SIM_FlexColor_SetBus8     (GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetBus9     (GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetBus16    (GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetBus32    (GUI_DEVICE * pDevice, int Shift);
+  void SIM_FlexColor_SetBus8_24  (GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66702(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66708(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66709(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66712(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66714(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66715(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66718(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66719(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66720(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66721(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66722(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66723(GUI_DEVICE * pDevice);
+  void SIM_FlexColor_SetFunc66772(GUI_DEVICE * pDevice);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_FLEXCOLOR_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_IST3088.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,106 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_IST3088_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,215 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_IST3088_Private.h
+Purpose     : Interface definition for GUIDRV_IST3088 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_IST3088.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_IST3088_PRIVATE_H
+#define GUIDRV_IST3088_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_IST3088
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       MANAGE_VRAM_CONTEXT
+*/
+typedef struct {
+  //
+  // Function pointers for writing to display controller
+  //
+  void           (* pfManagePixel)      (DRIVER_CONTEXT * pContext, int * px, int * py);
+  void           (* pfManageRect)       (DRIVER_CONTEXT * pContext, int * px0, int * py0, int * px1, int * py1);
+  void           (* pfAddDirtyPixelPhys)(DRIVER_CONTEXT * pContext, int x, int y);
+  void           (* pfAddDirtyRectPhys) (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+  void           (* pfAddDirtyPixel)    (DRIVER_CONTEXT * pContext, int x, int y);
+  void           (* pfAddDirtyRect)     (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+  LCD_PIXELINDEX (* pfGetPixelIndexPhys)(DRIVER_CONTEXT * pContext, int x, int y);
+  void           (* pfSetPixelIndexPhys)(DRIVER_CONTEXT * pContext, int x, int y, LCD_PIXELINDEX ColorIndex);
+  void           (* pfXorPixelIndexPhys)(DRIVER_CONTEXT * pContext, int x, int y);
+  LCD_PIXELINDEX (* pfGetPixelIndex)    (DRIVER_CONTEXT * pContext, int x, int y);
+  void           (* pfSetPixelIndex)    (DRIVER_CONTEXT * pContext, int x, int y, LCD_PIXELINDEX ColorIndex);
+  void           (* pfXorPixelIndex)    (DRIVER_CONTEXT * pContext, int x, int y);
+  void           (* pfFlush)            (DRIVER_CONTEXT * pContext);
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int Orientation;
+  //
+  // Cache management
+  //
+  GUI_RECT rDirty;
+  //
+  // Accelerators for calculation
+  //
+  int ShortsPerLine;
+  int BitsPerPixel;
+  //
+  // VRAM
+  //
+  U16 * pVMEM;
+  //
+  // Pointer to driver internal initialization routine
+  //
+  void (* pfInit) (GUI_DEVICE * pDevice);
+  void (* pfCheck)(GUI_DEVICE * pDevice);
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex);                                           \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT * pContext;                                                     \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS);                         \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__IST3088_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__IST3088_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__IST3088_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__IST3088_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Lin.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,264 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_Lin_Opt_16.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,206 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Lin_Opt_16.h
+Purpose     : Optimized routines, included by GUIDRV_Lin_..._16.c
+---------------------------END-OF-HEADER------------------------------
+*/
+
+/*********************************************************************
+*
+*       Static functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _FillRectOpt16
+*
+* Purpose:
+*   Optimized filling routine for 16 bpp
+*/
+static void _FillRectOpt16(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+  DRIVER_CONTEXT * pContext;
+  U32 * pDest;
+  U32 * pDest0;
+  U32 Off, OffLine;
+  int RemPixels, NumLines, RemLines, RemItems;
+  U32 Data, ColorMask;
+  LCD_PIXELINDEX ColorIndex;
+
+  pContext   = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  ColorIndex = LCD__GetColorIndex();
+  Off        = XY2OFF32(pContext->vxSizePhys, x0, y0);
+  pDest0     = OFF2PTR32(pContext->VRAMAddr, Off);
+  RemPixels  = x1 - x0 + 1;
+  NumLines   = y1 - y0 + 1;
+  OffLine    = pContext->vxSizePhys >> 1;
+  pDest      = NULL;
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    //
+    // First DWORD
+    //
+    if (x0 & 1) {
+      for (RemLines = NumLines, pDest = pDest0; RemLines; RemLines--) {
+        Data = READ_MEM32P(pDest);
+        #if (LCD_ENDIAN_BIG == 0)
+          Data ^= 0xFFFF0000;
+        #else
+          Data ^= 0xFFFF;
+        #endif
+        WRITE_MEM32P(pDest, Data);
+        pDest += OffLine;
+      }
+      pDest0++;
+      RemPixels--;
+    }
+    //
+    // Complete DWORDS
+    //
+    if (RemPixels >= 2) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = pDest0 + OffLine * (RemLines - 1);
+        do {
+          Data  = READ_MEM32P(pDest);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32P(pDest, Data);
+          pDest++;
+          RemItems -= 2;
+        } while (RemItems >= 2);
+      }
+      pDest0 = pDest;
+      RemPixels -= (RemPixels >> 1) << 1;
+    }
+    //
+    // Last DWORD
+    //
+    if (RemPixels > 0) {
+      for (RemLines = NumLines, pDest = pDest0; RemLines; RemLines--) {
+        Data = READ_MEM32P(pDest);
+        #if (LCD_ENDIAN_BIG == 0)
+          Data ^= 0xFFFF;
+        #else
+          Data ^= 0xFFFF0000;
+        #endif
+        WRITE_MEM32P(pDest, Data);
+        pDest += OffLine;
+      }
+    }
+  } else {
+    //
+    // First DWORD
+    //
+    if (x0 & 1) {
+      for (RemLines = NumLines, pDest = pDest0; RemLines; RemLines--) {
+        Data = READ_MEM32P(pDest);
+        #if (LCD_ENDIAN_BIG == 0)
+          Data &= 0xFFFF;
+          Data |= (((U32)ColorIndex) << 16);
+        #else
+          Data &= 0xFFFF0000;
+          Data |= ColorIndex;
+        #endif
+        WRITE_MEM32P(pDest, Data);
+        pDest += OffLine;
+      }
+      pDest0++;
+      RemPixels--;
+    }
+    //
+    // Complete DWORDS
+    //
+    ColorMask = ColorIndex * 0x00010001;
+    if (RemPixels >= 16) {
+      RemPixels -= 16;
+      
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = pDest0 + OffLine * (RemLines - 1);
+        do {
+          WRITE_MEM32P(pDest,     ColorMask);
+          WRITE_MEM32P(pDest + 1, ColorMask);
+          WRITE_MEM32P(pDest + 2, ColorMask);
+          WRITE_MEM32P(pDest + 3, ColorMask);
+          WRITE_MEM32P(pDest + 4, ColorMask);
+          WRITE_MEM32P(pDest + 5, ColorMask);
+          WRITE_MEM32P(pDest + 6, ColorMask);
+          WRITE_MEM32P(pDest + 7, ColorMask);
+          pDest    += 8;
+          RemItems -= 16;
+        } while (RemItems >= 0);
+      }
+      pDest0 = pDest;
+
+      RemPixels += 16;
+      RemPixels -= (RemPixels >> 4) << 4;
+    }
+    if (RemPixels >= 2) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = pDest0 + OffLine * (RemLines - 1);
+        do {
+          WRITE_MEM32P(pDest, ColorMask);
+          pDest++;
+          RemItems -= 2;
+        } while (RemItems >= 2);
+      }
+      pDest0 = pDest;
+      RemPixels -= (RemPixels >> 1) << 1;
+    }
+    //
+    // Last DWORD
+    //
+    if (RemPixels > 0) {
+      for (RemLines = NumLines, pDest = pDest0; RemLines; RemLines--) {
+        Data = READ_MEM32P(pDest);
+        #if (LCD_ENDIAN_BIG == 0)
+          Data &= 0xFFFF0000;
+          Data |= ColorIndex;
+        #else
+          Data &= 0xFFFF;
+          Data |= (((U32)ColorIndex) << 16);
+        #endif
+        WRITE_MEM32P(pDest, Data);
+        pDest += OffLine;
+      }
+    }
+  }
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Lin_Opt_24.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,509 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Lin_Opt_24.h
+Purpose     : Optimized routines, included by GUIDRV_Lin_..._24.c
+---------------------------END-OF-HEADER------------------------------
+*/
+
+/*********************************************************************
+*
+*       Static functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _FillRectOpt24
+*
+* Purpose:
+*   Optimized filling routine for 24 bpp
+*/
+static void _FillRectOpt24(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+  DRIVER_CONTEXT * pContext;
+  U32 Off, Off0, OffLine;
+  int RemPixels, NumLines, RemLines, RemItems, Odd;
+  U32 Data, Data0, Data1, Data2;
+  LCD_PIXELINDEX ColorIndex;
+
+  pContext  = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  Off0      = XY2OFF32(pContext->vxSizePhys, x0, y0);
+  RemPixels = x1 - x0 + 1;
+  Odd       = x0 & 3;
+  NumLines  = y1 - y0 + 1;
+  OffLine   = (pContext->vxSizePhys + pContext->vxSizePhys +pContext->vxSizePhys) >> 2;
+  RemItems  = 0;
+  Off       = 0;
+#if (LCD_ENDIAN_BIG == 0)
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    //
+    // First triple DWORD
+    //
+    if (Odd) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data     = READ_MEM32(pContext->VRAMAddr, Off);
+        switch (Odd) {
+        case 1:
+          Data ^= 0xFF000000;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data ^= 0x0000FFFF;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 2:
+          Data ^= 0xFFFF0000;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data ^= 0x000000FF;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 3:
+          Data ^= 0xFFFFFF00;
+          RemItems--;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+        }
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels - RemItems);
+    }
+    //
+    // Complete triple DWORDS
+    //
+    if (RemPixels >= 4) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        do {
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 0);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data);
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 1);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data);
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 2);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data);
+          Off += 3;
+        } while ((RemItems -= 4) >= 4);
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last triple DWORD
+    //
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0x00FFFFFF;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data ^= 0xFF000000;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0x0000FFFF;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data ^= 0xFFFF0000;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0x000000FF;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+      }
+    }
+  } else {
+    ColorIndex = LCD__GetColorIndex() & 0xFFFFFF;
+    //
+    // First triple DWORD
+    //
+    if (Odd) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        switch (Odd) {
+        case 1:
+          Data &= 0x00FFFFFF;
+          Data |= ColorIndex << 24;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data &= 0xFFFF0000;
+          Data |= ColorIndex >> 8;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 2:
+          Data &= 0x0000FFFF;
+          Data |= ColorIndex << 16;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data &= 0xFFFFFF00;
+          Data |= ColorIndex >> 16;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 3:
+          Data &= 0x000000FF;
+          Data |= ColorIndex << 8;
+          RemItems--;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+        }
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels - RemItems);
+    }
+    //
+    // Complete triple DWORDS
+    //
+    if (RemPixels >= 4) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data0 = (ColorIndex      ) | (ColorIndex << 24);
+        Data1 = (ColorIndex >>  8) | (ColorIndex << 16);
+        Data2 = (ColorIndex >> 16) | (ColorIndex <<  8);
+        do {
+          WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data0);
+          WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data1);
+          WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data2);
+          Off += 3;
+        } while ((RemItems -= 4) >= 4);
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last triple DWORD
+    //
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0xFF000000;
+        Data |= ColorIndex;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data &= 0x00FFFFFF;
+        Data |= ColorIndex << 24;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0xFFFF0000;
+        Data |= ColorIndex >> 8;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data &= 0x0000FFFF;
+        Data |= ColorIndex << 16;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0xFFFFFF00;
+        Data |= ColorIndex >> 16;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+      }
+    }
+  }
+#else
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    //
+    // First triple DWORD
+    //
+    if (Odd) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data     = READ_MEM32(pContext->VRAMAddr, Off);
+        switch (Odd) {
+        case 1:
+          Data ^= 0x000000FF;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data ^= 0xFFFF0000;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 2:
+          Data ^= 0x0000FFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data ^= 0xFF000000;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 3:
+          Data ^= 0x00FFFFFF;
+          RemItems--;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+        }
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels - RemItems);
+    }
+    //
+    // Complete triple DWORDS
+    //
+    if (RemPixels >= 4) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        do {
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 0);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data);
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 1);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data);
+          Data  = READ_MEM32(pContext->VRAMAddr, Off + 2);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data);
+          Off += 3;
+        } while ((RemItems -= 4) >= 4);
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last triple DWORD
+    //
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0xFFFFFF00;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data ^= 0x000000FF;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0xFFFF0000;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data ^= 0x0000FFFF;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data ^= 0xFF000000;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+      }
+    }
+  } else {
+    ColorIndex = LCD__GetColorIndex();
+    //
+    // First triple DWORD
+    //
+    if (Odd) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        switch (Odd) {
+        case 1:
+          Data &= 0xFFFFFF00;
+          Data |= ColorIndex >> 16;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data &= 0x0000FFFF;
+          Data |= ColorIndex << 16;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 2:
+          Data &= 0xFFFF0000;
+          Data |= ColorIndex >> 8;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+          Data  = READ_MEM32(pContext->VRAMAddr, Off);
+          Data &= 0x00FFFFFF;
+          Data |= ColorIndex << 24;
+          RemItems--;
+          if (!RemItems) {
+            WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+            break;
+          }
+          //
+          // no break at this position required...
+          //
+        case 3:
+          Data &= 0xFF000000;
+          Data |= ColorIndex;
+          RemItems--;
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          Off++;
+        }
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels - RemItems);
+    }
+    //
+    // Complete triple DWORDS
+    //
+    if (RemPixels >= 4) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+        Data0 = (ColorIndex <<  8) | (ColorIndex >> 16);
+        Data1 = (ColorIndex << 16) | (ColorIndex >>  8);
+        Data2 = (ColorIndex << 24) | (ColorIndex      );
+        do {
+          WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data0);
+          WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data1);
+          WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data2);
+          Off += 3;
+        } while ((RemItems -= 4) >= 4);
+      }
+      Off0       = Off;
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last triple DWORD
+    //
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off      = Off0 + OffLine * (RemLines - 1);
+
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0x000000FF;
+        Data |= (ColorIndex << 8);
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data &= 0xFFFFFF00;
+        Data |= ColorIndex >> 16;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0x0000FFFF;
+        Data |= ColorIndex << 16;
+        RemItems--;
+        if (!RemItems) {
+          WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+          continue;
+        }
+        Data &= 0xFFFF0000;
+        Data |= ColorIndex >> 8;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+        Off++;
+        Data  = READ_MEM32(pContext->VRAMAddr, Off);
+        Data &= 0x00FFFFFF;
+        Data |= ColorIndex << 24;
+        WRITE_MEM32(pContext->VRAMAddr, Off, Data);
+      }
+    }
+  }
+#endif
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Lin_Opt_32.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,130 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Lin_Opt_32.h
+Purpose     : Optimized routines, included by GUIDRV_Lin_..._32.c
+---------------------------END-OF-HEADER------------------------------
+*/
+
+/*********************************************************************
+*
+*       Static functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _FillRectOpt32
+*
+* Purpose:
+*   Optimized filling routine for 32 bpp
+*/
+static void _FillRectOpt32(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+  DRIVER_CONTEXT * pContext;
+  register LCD_PIXELINDEX ColorIndex;
+  U32 * pDest;
+  U32 * pDest0;
+  U32 Off, Off0, RemPixels, NumLines, RemLines, OffLine, RemItems;
+  LCD_PIXELINDEX IndexMask;
+
+  pContext  = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  RemPixels = x1 - x0 + 1;
+  NumLines  = y1 - y0 + 1;
+  OffLine   = pContext->vxSizePhys;
+  pDest     = NULL;
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    IndexMask = pDevice->pColorConvAPI->pfGetIndexMask();
+    Off0      = XY2OFF32(pContext->vxSizePhys, x0, y0);
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        Off = Off0 + OffLine * (RemLines - 1);
+        do {
+          ColorIndex  = READ_MEM32(pContext->VRAMAddr, Off);
+          ColorIndex ^= IndexMask;
+          WRITE_MEM32(pContext->VRAMAddr, Off, ColorIndex);
+          Off++;
+        } while (--RemItems);
+      }
+    }
+  } else {
+    Off        = XY2OFF32(pContext->vxSizePhys, x0, y0);
+    pDest0     = OFF2PTR32(pContext->VRAMAddr, Off);
+    ColorIndex = LCD__GetColorIndex();
+    if (RemPixels >= 16) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = pDest0 + OffLine * (RemLines - 1);
+        do {
+          WRITE_MEM32P(pDest     , ColorIndex);
+          WRITE_MEM32P(pDest +  1, ColorIndex);
+          WRITE_MEM32P(pDest +  2, ColorIndex);
+          WRITE_MEM32P(pDest +  3, ColorIndex);
+          WRITE_MEM32P(pDest +  4, ColorIndex);
+          WRITE_MEM32P(pDest +  5, ColorIndex);
+          WRITE_MEM32P(pDest +  6, ColorIndex);
+          WRITE_MEM32P(pDest +  7, ColorIndex);
+          WRITE_MEM32P(pDest +  8, ColorIndex);
+          WRITE_MEM32P(pDest +  9, ColorIndex);
+          WRITE_MEM32P(pDest + 10, ColorIndex);
+          WRITE_MEM32P(pDest + 11, ColorIndex);
+          WRITE_MEM32P(pDest + 12, ColorIndex);
+          WRITE_MEM32P(pDest + 13, ColorIndex);
+          WRITE_MEM32P(pDest + 14, ColorIndex);
+          WRITE_MEM32P(pDest + 15, ColorIndex);
+          pDest     += 16;
+          RemItems -= 16;
+        } while (RemItems >= 16);
+      }
+      pDest0 = pDest;
+      RemPixels -= (RemPixels >> 4) << 4;
+    }
+    if (RemPixels) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = pDest0 + OffLine * (RemLines - 1);
+        do {
+          WRITE_MEM32P(pDest, ColorIndex);
+          pDest++;
+        } while (--RemItems);
+      }
+    }
+  }
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Lin_Opt_8.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,200 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Lin_Opt_8.h
+Purpose     : Optimized routines, included by GUIDRV_Lin_..._8.c
+---------------------------END-OF-HEADER------------------------------
+*/
+
+/*********************************************************************
+*
+*       Static functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _FillRectOpt8
+*
+* Purpose:
+*   Optimized filling routine for 8 bpp
+*/
+static void _FillRectOpt8(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+  DRIVER_CONTEXT * pContext;
+  U32 Data, ColorMask, AndMask, Off0, OffLine;
+  int NumPixel_0, NumPixel_1, RemPixels, NumLines, RemLines, RemItems;
+  LCD_PIXELINDEX ColorIndex;
+  U32 * pDest;
+
+  pContext   = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  ColorIndex = LCD__GetColorIndex();
+  Off0       = XY2OFF32(pContext->vxSizePhys, x0, y0);
+  RemPixels  = x1 - x0 + 1;
+  NumLines   = y1 - y0 + 1;
+  OffLine    = pContext->vxSizePhys >> 2;
+  NumPixel_0 = x0 & 3;
+  NumPixel_1 = x1 & 3;
+  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+    //
+    // First DWORD
+    //
+    if (NumPixel_0) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        pDest   = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        AndMask = ~(0xFFFFFFFF << (8 * NumPixel_0));
+        if ((RemPixels < 3) && (NumPixel_1)) {
+          AndMask |= ~(0xFFFFFFFF >> (8 * (3 - NumPixel_1)));
+        }
+        #if (LCD_ENDIAN_BIG == 1)
+          MIRROR(AndMask);
+        #endif
+        Data = READ_MEM32P(pDest);
+        Data ^= ~AndMask;
+        WRITE_MEM32P(pDest, Data);
+      }
+      Off0++;
+      RemPixels -= (4 - NumPixel_0);
+    }
+    //
+    // Complete DWORDS
+    //
+    if (RemPixels >= 4) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        while (RemItems >= 4) {
+          Data  = READ_MEM32P(pDest);
+          Data ^= 0xFFFFFFFF;
+          WRITE_MEM32P(pDest, Data);
+          pDest++;
+          RemItems -= 4;
+        }
+      }
+      Off0      += (RemPixels >> 2);
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last DWORD
+    //
+    if (RemPixels > 0) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        pDest   = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        AndMask = 0xFFFFFF00 << (8 * NumPixel_1);
+        #if (LCD_ENDIAN_BIG == 1)
+          MIRROR(AndMask);
+        #endif
+        Data = READ_MEM32P(pDest);
+        Data ^= ~AndMask;
+        WRITE_MEM32P(pDest, Data);
+      }
+    }
+  } else {
+    //
+    // First DWORD
+    //
+    if (NumPixel_0) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        pDest   = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        AndMask = ~(0xFFFFFFFF << (8 * NumPixel_0));
+        if ((RemPixels < 3) && (NumPixel_1)) {
+          AndMask |= ~(0xFFFFFFFF >> (8 * (3 - NumPixel_1)));
+        }
+        ColorMask = (ColorIndex * 0x01010101) & ~AndMask;
+        #if (LCD_ENDIAN_BIG == 1)
+          MIRROR(AndMask);
+          MIRROR(ColorMask);
+        #endif
+        Data = READ_MEM32P(pDest);
+        Data &= AndMask;
+        Data |= ColorMask;
+        WRITE_MEM32P(pDest, Data);
+      }
+      Off0++;
+      RemPixels -= (4 - NumPixel_0);
+    }
+    //
+    // Complete DWORDS
+    //
+    if (RemPixels >= 4) {
+      ColorMask = ColorIndex * 0x01010101;
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        RemItems = RemPixels;
+        pDest    = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        while (RemItems >= 32) {
+          WRITE_MEM32P(pDest    , ColorMask);
+          WRITE_MEM32P(pDest + 1, ColorMask);
+          WRITE_MEM32P(pDest + 2, ColorMask);
+          WRITE_MEM32P(pDest + 3, ColorMask);
+          WRITE_MEM32P(pDest + 4, ColorMask);
+          WRITE_MEM32P(pDest + 5, ColorMask);
+          WRITE_MEM32P(pDest + 6, ColorMask);
+          WRITE_MEM32P(pDest + 7, ColorMask);
+          pDest += 8;
+          RemItems -= 32;
+        }
+        while (RemItems >= 4) {
+          WRITE_MEM32P(pDest, ColorMask);
+          pDest++;
+          RemItems -= 4;
+        }
+      }
+      Off0      += (RemPixels >> 2);
+      RemPixels -= (RemPixels >> 2) << 2;
+    }
+    //
+    // Last DWORD
+    //
+    if (RemPixels > 0) {
+      for (RemLines = NumLines; RemLines; RemLines--) {
+        pDest   = ((U32 *)pContext->VRAMAddr) + Off0 + OffLine * (RemLines - 1);
+        AndMask = 0xFFFFFF00 << (8 * NumPixel_1);
+        ColorMask = (ColorIndex * 0x01010101) & ~AndMask;
+        #if (LCD_ENDIAN_BIG == 1)
+          MIRROR(AndMask);
+          MIRROR(ColorMask);
+        #endif
+        Data = READ_MEM32P(pDest);
+        Data &= AndMask;
+        Data |= ColorMask;
+        WRITE_MEM32P(pDest, Data);
+      }
+    }
+  }
+}
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Lin_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,791 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Lin_Private.h
+Purpose     : Common definitions and common code for all LIN-drivers
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_LIN_PRIVATE_H
+#define GUIDRV_LIN_PRIVATE_H
+
+#include <string.h>
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Common definitions for all variants of the LIN driver
+*
+**********************************************************************
+*/
+#if defined(WIN32)
+  //
+  // Simulation prototypes
+  //
+  U16  SIM_Lin_ReadMem16  (unsigned int Off);
+  U32  SIM_Lin_ReadMem32  (unsigned int Off);
+  U8   SIM_Lin_ReadMem08p (U8  * p);
+  U32  SIM_Lin_ReadMem32p (U32 * p);
+  void SIM_Lin_WriteMem16 (unsigned int Off, U16 Data);
+  void SIM_Lin_WriteMem32 (unsigned int Off, U32 Data);
+  void SIM_Lin_WriteMem08p(U8  * p, U8 Data);
+  void SIM_Lin_WriteMem16p(U16 * p, U16 Data);
+  void SIM_Lin_WriteMem32p(U32 * p, U32 Data);
+  void SIM_Lin_memcpy     (void * pDst, const void * pSrc, int Len);
+  void SIM_Lin_memset     (void * pDst, U8 Value, U32 Len);
+  void SIM_Lin_SetVRAMAddr(int LayerIndex, void * pVRAM);
+  void SIM_Lin_SetVRAMSize(int LayerIndex, int vxSize, int vySize, int xSize, int ySize);
+  void SIM_Lin_CopyBuffer (int IndexSrc, int IndexDst);
+  void SIM_Lin_ShowBuffer (int Index);
+  //
+  // Access macro definition for internal simulation
+  //
+  #define LCD_READ_MEM16(VRAMAddr, Off)        SIM_Lin_ReadMem16(Off)
+  #define LCD_READ_MEM32(VRAMAddr, Off)        SIM_Lin_ReadMem32(Off)
+  #define LCD_READ_MEM08P(p)                   SIM_Lin_ReadMem08p(p)
+  #define LCD_READ_MEM32P(p)                   SIM_Lin_ReadMem32p(p)
+  #define LCD_WRITE_MEM16(VRAMAddr, Off, Data) SIM_Lin_WriteMem16(Off, Data)
+  #define LCD_WRITE_MEM32(VRAMAddr, Off, Data) SIM_Lin_WriteMem32(Off, Data)
+  #define LCD_WRITE_MEM08P(p, Data)            SIM_Lin_WriteMem08p(p, Data)
+  #define LCD_WRITE_MEM16P(p, Data)            SIM_Lin_WriteMem16p(p, Data)
+  #define LCD_WRITE_MEM32P(p, Data)            SIM_Lin_WriteMem32p(p, Data)
+  #undef  GUI_MEMCPY
+  #define GUI_MEMCPY(pDst, pSrc, Len)          SIM_Lin_memcpy(pDst, pSrc, Len)
+  #undef  GUI_MEMSET
+  #define GUI_MEMSET(pDst, Value, Len)         SIM_Lin_memset(pDst, Value, Len)
+#else
+  //
+  // Access macro definition for hardware
+  //
+  #define LCD_READ_MEM16(VRAMAddr, Off)        (*((U16 *)VRAMAddr + (U32)Off))
+  #define LCD_READ_MEM32(VRAMAddr, Off)        (*((U32 *)VRAMAddr + (U32)Off))
+  #define LCD_READ_MEM08P(p)                   (*((U8  *)p))
+  #define LCD_READ_MEM32P(p)                   (*((U32 *)p))
+  #define LCD_WRITE_MEM16(VRAMAddr, Off, Data) *((U16 *)VRAMAddr + (U32)Off) = (U16)(Data)
+  #define LCD_WRITE_MEM32(VRAMAddr, Off, Data) *((U32 *)VRAMAddr + (U32)Off) = Data
+  #define LCD_WRITE_MEM08P(p, Data)            *((U8  *)p) = (U8)(Data)
+  #define LCD_WRITE_MEM16P(p, Data)            *((U16 *)p) = (U16)(Data)
+  #define LCD_WRITE_MEM32P(p, Data)            *((U32 *)p) = Data
+#endif
+
+#ifndef   WRITE_MEM16
+  #define WRITE_MEM16(VRAMAddr, Off, Data) LCD_WRITE_MEM16(VRAMAddr, Off, Data)
+#endif
+#ifndef   WRITE_MEM32
+  #define WRITE_MEM32(VRAMAddr, Off, Data) LCD_WRITE_MEM32(VRAMAddr, Off, Data)
+#endif
+#ifndef   READ_MEM08P
+  #define READ_MEM08P(p)                   LCD_READ_MEM08P(p)
+#endif
+#ifndef   READ_MEM16
+  #define READ_MEM16(VRAMAddr, Off)        LCD_READ_MEM16(VRAMAddr, Off)
+#endif
+#ifndef   READ_MEM32
+  #define READ_MEM32(VRAMAddr, Off)        LCD_READ_MEM32(VRAMAddr, Off)
+#endif
+#ifndef   READ_MEM32P
+  #define READ_MEM32P(p)                   LCD_READ_MEM32P(p)
+#endif
+#ifndef   WRITE_MEM08P
+  #define WRITE_MEM08P(p, Data)            LCD_WRITE_MEM08P(p, Data)
+#endif
+#ifndef   WRITE_MEM16P
+  #define WRITE_MEM16P(p, Data)            LCD_WRITE_MEM16P(p, Data)
+#endif
+#ifndef   WRITE_MEM32P
+  #define WRITE_MEM32P(p, Data)            LCD_WRITE_MEM32P(p, Data)
+#endif
+
+#define OFF2PTR08(VRAMAddr, Off)     (U8  *)((U8 *)VRAMAddr + (Off     ))
+#define OFF2PTR16(VRAMAddr, Off)     (U16 *)((U8 *)VRAMAddr + (Off << 1))
+#define OFF2PTR32(VRAMAddr, Off)     (U32 *)((U8 *)VRAMAddr + (Off << 2))
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_LIN
+
+//
+// Definition of default members for DRIVER_CONTEXT structure
+//
+#define DEFAULT_CONTEXT_MEMBERS                               \
+  U32 VRAMAddr;                                               \
+  U32 BaseAddr;                                               \
+  int BufferIndex;                                            \
+  int xSize, ySize;                                           \
+  int vxSize, vySize;                                         \
+  int vxSizePhys;                                             \
+  int xPos, yPos;                                             \
+  int Alpha;                                                  \
+  int IsVisible;                                              \
+  void (* pfFillRect)  (int /* LayerIndex */,                 \
+                        int /* x0 */,                         \
+                        int /* y0 */,                         \
+                        int /* x1 */,                         \
+                        int /* y1 */,                         \
+                        U32 /* PixelIndex */);                \
+  void (* pfCopyBuffer)(int /* LayerIndex */,                 \
+                        int /* IndexSrc */,                   \
+                        int /* IndexDst */);                  \
+  void (* pfDrawBMP1)  (int /* LayerIndex */,                 \
+                        int /* x */,                          \
+                        int /* y */,                          \
+                        U8 const * /* p */,                   \
+                        int /* Diff */,                       \
+                        int /* xSize */,                      \
+                        int /* ySize */,                      \
+                        int /* BytesPerLine */,               \
+                        const LCD_PIXELINDEX * /* pTrans */); \
+  void (* pfDrawBMP8)  (int /* LayerIndex */,                 \
+                        int /* x */,                          \
+                        int /* y */,                          \
+                        U8 const * /* p */,                   \
+                        int /* xSize */,                      \
+                        int /* ySize */,                      \
+                        int /* BytesPerLine */,               \
+                        const LCD_PIXELINDEX * /* pTrans */); \
+  void (* pfCopyRect)  (int /* LayerIndex */,                 \
+                        int /* x0 */,                         \
+                        int /* y0 */,                         \
+                        int /* x1 */,                         \
+                        int /* y1 */,                         \
+                        int /* xSize */,                      \
+                        int /* ySize */);                     \
+  void (* pfSetPos)    (int /* LayerIndex */,                 \
+                        int /* xPos */,                       \
+                        int /* yPos */);
+
+#ifndef   PRIVATE_CONTEXT_MEMBERS
+  #define PRIVATE_CONTEXT_MEMBERS
+#endif
+
+//
+// Definition of default function management for _GetDevFunc()
+//
+#define DEFAULT_MANAGEMENT_GETDEVFUNC()                                             \
+  case LCD_DEVFUNC_SET_VRAM_ADDR:                                                   \
+    return (void (*)(void))_SetVRAMAddr;                                            \
+  case LCD_DEVFUNC_SET_VSIZE:                                                       \
+    return (void (*)(void))_SetVSize;                                               \
+  case LCD_DEVFUNC_SET_SIZE:                                                        \
+    return (void (*)(void))_SetSize;                                                \
+  case LCD_DEVFUNC_SETPOS:                                                          \
+    return (void (*)(void))_SetPos;                                                 \
+  case LCD_DEVFUNC_GETPOS:                                                          \
+    return (void (*)(void))_GetPos;                                                 \
+  case LCD_DEVFUNC_SETALPHA:                                                        \
+    return (void (*)(void))_SetAlpha;                                               \
+  case LCD_DEVFUNC_SETVIS:                                                          \
+    return (void (*)(void))_SetVis;                                                 \
+  case LCD_DEVFUNC_INIT:                                                            \
+    return (void (*)(void))_Init;                                                   \
+  case LCD_DEVFUNC_ON:                                                              \
+    return (void (*)(void))_On;                                                     \
+  case LCD_DEVFUNC_OFF:                                                             \
+    return (void (*)(void))_Off;                                                    \
+  case LCD_DEVFUNC_ALPHAMODE:                                                       \
+    return (void (*)(void))_SetAlphaMode;                                           \
+  case LCD_DEVFUNC_CHROMAMODE:                                                      \
+    return (void (*)(void))_SetChromaMode;                                          \
+  case LCD_DEVFUNC_CHROMA:                                                          \
+    return (void (*)(void))_SetChroma;                                              \
+  case LCD_DEVFUNC_COPYBUFFER:                                                      \
+    return (void (*)(void))_CopyBuffer;                                             \
+  case LCD_DEVFUNC_SHOWBUFFER:                                                      \
+    return (void (*)(void))_ShowBuffer;                                             \
+  case LCD_DEVFUNC_SETFUNC:                                                         \
+    return (void (*)(void))_SetDevFunc;                                             \
+  case LCD_DEVFUNC_FILLRECT:                                                        \
+    return (void (*)(void))((DRIVER_CONTEXT *)(*ppDevice)->u.pContext)->pfFillRect; \
+  case LCD_DEVFUNC_DRAWBMP_1BPP:                                                    \
+    return (void (*)(void))((DRIVER_CONTEXT *)(*ppDevice)->u.pContext)->pfDrawBMP1; \
+  case LCD_DEVFUNC_DRAWBMP_8BPP:                                                    \
+    return (void (*)(void))((DRIVER_CONTEXT *)(*ppDevice)->u.pContext)->pfDrawBMP8; \
+  case LCD_DEVFUNC_COPYRECT:                                                        \
+    return (void (*)(void))((DRIVER_CONTEXT *)(*ppDevice)->u.pContext)->pfCopyRect;
+
+//
+// Definition of private function management for _GetDevFunc()
+//
+#ifndef   PRIVATE_MANAGEMENT_GETDEVFUNC
+  #define PRIVATE_MANAGEMENT_GETDEVFUNC()
+#endif
+
+//
+// Definition of default function management for _SetDevFunc()
+//
+#define DEFAULT_MANAGEMENT_SETDEVFUNC()                                                                                                                                      \
+    case LCD_DEVFUNC_FILLRECT:                                                                                                                                               \
+      pContext->pfFillRect   = (void (*)(int LayerIndex, int x0, int y0, int x1, int y1, U32 PixelIndex))pFunc;                                                              \
+      break;                                                                                                                                                                 \
+    case LCD_DEVFUNC_COPYBUFFER:                                                                                                                                             \
+      pContext->pfCopyBuffer = (void (*)(int LayerIndex, int IndexSrc, int IndexDst))pFunc;                                                                                  \
+      break;                                                                                                                                                                 \
+    case LCD_DEVFUNC_DRAWBMP_1BPP:                                                                                                                                           \
+      pContext->pfDrawBMP1   = (void (*)(int LayerIndex, int x, int y, U8 const * p, int Diff, int xSize, int ySize, int BytesPerLine, const LCD_PIXELINDEX * pTrans))pFunc; \
+      break;                                                                                                                                                                 \
+    case LCD_DEVFUNC_DRAWBMP_8BPP:                                                                                                                                           \
+      pContext->pfDrawBMP8   = (void (*)(int LayerIndex, int x, int y, U8 const * p, int xSize, int ySize, int BytesPerLine, const LCD_PIXELINDEX * pTrans))pFunc;           \
+      break;                                                                                                                                                                 \
+    case LCD_DEVFUNC_COPYRECT:                                                                                                                                               \
+      pContext->pfCopyRect   = (void (*)(int LayerIndex, int x0, int y0, int x1, int y1, int xSize, int ySize))pFunc;                                                        \
+      break;                                                                                                                                                                 \
+    case LCD_DEVFUNC_SETPOS:                                                                                                                                                 \
+      pContext->pfSetPos     = (void (*)(int LayerIndex, int xPos, int yPos))pFunc;                                                                                          \
+      break;
+
+//
+// Definition of private function management for _GetDevFunc()
+//
+#ifndef   PRIVATE_MANAGEMENT_SETDEVFUNC
+  #define PRIVATE_MANAGEMENT_SETDEVFUNC()
+#endif
+
+//
+// Endian related definitions
+//
+#ifndef   LCD_MIRROR
+  #define LCD_MIRROR 0
+#endif
+
+#if (LCD_MIRROR == 2)
+#define MIRROR(x) x = ((x & 0x000000ffUL) <<  8) \
+                    | ((x & 0x0000ff00UL) >>  8) \
+                    | ((x & 0x00ff0000UL) <<  8) \
+                    | ((x & 0xff000000UL) >>  8)
+#else
+#define MIRROR(x) x = ((x & 0x000000ffUL) << 24) \
+                    | ((x & 0x0000ff00UL) <<  8) \
+                    | ((x & 0x00ff0000UL) >>  8) \
+                    | ((x & 0xff000000UL) >> 24)
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+//
+// DRIVER_CONTEXT structure consisting of default and private members
+//
+typedef struct {
+  DEFAULT_CONTEXT_MEMBERS
+  PRIVATE_CONTEXT_MEMBERS
+} DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       Static code (common for all)
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       _InitOnce
+*
+* Purpose:
+*   Allocates a fixed block for the context of the driver
+*
+* Return value:
+*   0 on success, 1 on error
+*/
+static int _InitOnce(GUI_DEVICE * pDevice) {
+  if (pDevice->u.pContext == NULL) {
+    pDevice->u.pContext = GUI_ALLOC_GetFixedBlock(sizeof(DRIVER_CONTEXT));
+    GUI__memset((U8 *)pDevice->u.pContext, 0, sizeof(DRIVER_CONTEXT));
+  }
+  return pDevice->u.pContext ? 0 : 1;
+}
+
+/*********************************************************************
+*
+*       _GetRect
+*
+* Purpose:
+*   Returns the display size.
+*/
+static void _GetRect(GUI_DEVICE * pDevice, LCD_RECT * pRect) {
+  DRIVER_CONTEXT * pContext;
+
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+  pRect->x0 = 0;
+  pRect->y0 = 0;
+  pRect->x1 = pContext->vxSize - 1;
+  pRect->y1 = pContext->vySize - 1;
+}
+
+/*********************************************************************
+*
+*       _SetVis
+*
+* Purpose:
+*   Sets the visibility of the given layer by sending a LCD_X_SETVIS command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetVis(GUI_DEVICE * pDevice, int OnOff) {
+  DRIVER_CONTEXT * pContext;
+  LCD_X_SETVIS_INFO Data = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    pContext->IsVisible = OnOff;
+    Data.OnOff = OnOff;
+    LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETVIS, (void *)&Data);
+  }
+}
+
+/*********************************************************************
+*
+*       _SetPos
+*
+* Purpose:
+*   Sets the position of the given layer by sending a LCD_X_SETPOS command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetPos(GUI_DEVICE * pDevice, int xPos, int yPos) {
+  DRIVER_CONTEXT * pContext;
+  int xSizeDisplay, ySizeDisplay, xSizeLayer, ySizeLayer, BitsPerPixel;
+  LCD_X_SETPOS_INFO PosInfo = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    if (pContext->pfSetPos) {
+      //
+      // Use custom callback to setlayer position
+      //
+      pContext->pfSetPos(pDevice->LayerIndex, xPos, yPos);
+    } else {
+      //
+      // Calculate xPos/yPos and new layer size
+      //
+      pContext->xPos = xPos;
+      pContext->yPos = yPos;
+
+      xSizeDisplay  = LCD_GetXSizeDisplay();
+      ySizeDisplay  = LCD_GetYSizeDisplay();
+      xSizeLayer    = pContext->xSize;
+      ySizeLayer    = pContext->ySize;
+      BitsPerPixel  = pDevice->pDeviceAPI->pfGetDevProp(pDevice, LCD_DEVCAP_BITSPERPIXEL);
+      PosInfo.BytesPerPixel = (BitsPerPixel + 7) / 8;
+      if (xPos < 0) {
+        PosInfo.Off -= xPos * PosInfo.BytesPerPixel;
+        PosInfo.xPos = 0;
+        PosInfo.xLen = xSizeLayer + xPos;
+      } else {
+        PosInfo.xPos = xPos;
+        PosInfo.xLen = xSizeLayer;
+        if ((PosInfo.xPos + PosInfo.xLen) > xSizeDisplay) {
+          PosInfo.xLen = xSizeDisplay - xPos;
+        }
+      }
+      if (yPos < 0) {
+        PosInfo.Off -= yPos * PosInfo.BytesPerPixel * xSizeLayer;
+        PosInfo.yPos = 0;
+        PosInfo.yLen = ySizeLayer + yPos;
+      } else {
+        PosInfo.yPos = yPos;
+        PosInfo.yLen = ySizeLayer;
+        if ((PosInfo.yPos + PosInfo.yLen) > ySizeDisplay) {
+          PosInfo.yLen = ySizeDisplay - yPos;
+        }
+      }
+      if ((PosInfo.xLen <= 0) || (PosInfo.yLen <= 0) || (PosInfo.xPos >= xSizeDisplay) || (PosInfo.yPos >= ySizeDisplay)) {
+        if (pContext->IsVisible == 1) {
+          _SetVis(pDevice, 0);
+        }
+        return;
+      }
+      if (pContext->IsVisible == 0) {
+        _SetVis(pDevice, 1);
+      }
+      LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETPOS, (void *)&PosInfo);
+    }
+  }
+}
+
+/*********************************************************************
+*
+*       _GetPos
+*
+* Purpose:
+*   Returns the position of the given layer.
+*/
+static void _GetPos(GUI_DEVICE * pDevice, int * pxPos, int * pyPos) {
+  DRIVER_CONTEXT * pContext;
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    *pxPos = pContext->xPos;
+    *pyPos = pContext->yPos;
+  }
+}
+
+/*********************************************************************
+*
+*       _SetAlpha
+*
+* Purpose:
+*   Sets the alpha value of the given layer by sending a LCD_X_SETALPHA command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetAlpha(GUI_DEVICE * pDevice, int Alpha) {
+  DRIVER_CONTEXT * pContext;
+  LCD_X_SETALPHA_INFO Data = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    pContext->Alpha = Alpha;
+    Data.Alpha = Alpha;
+    LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETALPHA, (void *)&Data);
+  }
+}
+
+/*********************************************************************
+*
+*       _Init
+*
+* Purpose:
+*   Called during the initialization process of emWin.
+*/
+static int  _Init(GUI_DEVICE * pDevice) {
+  int r;
+
+  r = _InitOnce(pDevice);
+  r |= LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_INITCONTROLLER, NULL);
+  return r;
+}
+
+/*********************************************************************
+*
+*       _On
+*
+* Purpose:
+*   Sends a LCD_X_ON command to LCD_X_DisplayDriver().
+*/
+static void _On (GUI_DEVICE * pDevice) {
+  LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_ON, NULL);
+}
+
+/*********************************************************************
+*
+*       _Off
+*
+* Purpose:
+*   Sends a LCD_X_OFF command to LCD_X_DisplayDriver().
+*/
+static void _Off (GUI_DEVICE * pDevice) {
+  LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_OFF, NULL);
+}
+
+/*********************************************************************
+*
+*       _SetAlphaMode
+*
+* Purpose:
+*   Sets the alpha mode of the given layer by sending a LCD_X_SETALPHAMODE command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetAlphaMode(GUI_DEVICE * pDevice, int AlphaMode) {
+  LCD_X_SETALPHAMODE_INFO Data = {0};
+
+  Data.AlphaMode = AlphaMode;
+  LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETALPHAMODE, (void *)&Data);
+}
+
+/*********************************************************************
+*
+*       _SetChromaMode
+*
+* Purpose:
+*   Sets the chroma mode of the given layer by sending a LCD_X_SETCHROMAMODE command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetChromaMode(GUI_DEVICE * pDevice, int ChromaMode) {
+  LCD_X_SETCHROMAMODE_INFO Data = {0};
+
+  Data.ChromaMode = ChromaMode;
+  LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETCHROMAMODE, (void *)&Data);
+}
+
+/*********************************************************************
+*
+*       _SetChroma
+*
+* Purpose:
+*   Sets the chroma values of the given layer by sending a LCD_X_SETCHROMA command to LCD_X_DisplayDriver()
+*   (Requires special hardware support.)
+*/
+static void _SetChroma(GUI_DEVICE * pDevice, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax) {
+  LCD_X_SETCHROMA_INFO Data = {0};
+
+  Data.ChromaMin = ChromaMin;
+  Data.ChromaMax = ChromaMax;
+  LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETCHROMA, (void *)&Data);
+}
+
+/*********************************************************************
+*
+*       _CopyBuffer
+*
+* Purpose:
+*   Copies the source buffer to the destination buffer and routes
+*   further drawing operations to the destination buffer.
+*
+*   (Required for using multiple buffers)
+*/
+static void _CopyBuffer(GUI_DEVICE * pDevice, int IndexSrc, int IndexDst) {
+  DRIVER_CONTEXT * pContext;
+  #if (!defined(WIN32))
+    U32 AddrSrc, AddrDst;
+    I32 BufferSize;
+    int BitsPerPixel;
+  #endif
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    if (IndexSrc != IndexDst) {
+      #if defined(WIN32)
+        SIM_Lin_CopyBuffer(IndexSrc, IndexDst);
+      #else
+        BitsPerPixel = pDevice->pDeviceAPI->pfGetDevProp(pDevice, LCD_DEVCAP_BITSPERPIXEL);
+        BufferSize = (((U32)pContext->xSize * pContext->ySize * BitsPerPixel) >> 3);
+        AddrSrc = pContext->BaseAddr + BufferSize * IndexSrc;
+        AddrDst = pContext->BaseAddr + BufferSize * IndexDst;
+        if (pContext->pfCopyBuffer) {
+          //
+          // Use custom callback function for copy operation
+          //
+          pContext->pfCopyBuffer(pDevice->LayerIndex, IndexSrc, IndexDst);
+        } else {
+          //
+          // Calculate pointers for copy operation
+          //
+          GUI_MEMCPY((void *)AddrDst, (void *)AddrSrc, BufferSize);
+        }
+        //
+        // Set destination buffer as target for further drawing operations
+        //
+        pContext->VRAMAddr = AddrDst;
+      #endif
+    }
+  }
+}
+
+/*********************************************************************
+*
+*       _ShowBuffer
+*
+* Purpose:
+*   Sends a LCD_X_SHOWBUFFER command to LCD_X_DisplayDriver() to make the given buffer visible.
+*
+*   (Required for using multiple buffers)
+*/
+static void _ShowBuffer(GUI_DEVICE * pDevice, int Index) {
+  LCD_X_SHOWBUFFER_INFO Data = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    #if defined(WIN32)
+      SIM_Lin_ShowBuffer(Index);
+    #else
+      Data.Index = Index;
+      LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SHOWBUFFER, (void *)&Data);
+    #endif
+  }
+}
+
+/*********************************************************************
+*
+*       _SetOrg
+*
+* Purpose:
+*   Calls the driver callback function with the display origin to be set
+*/
+static void _SetOrg(GUI_DEVICE * pDevice, int x, int y) {
+  #if (!defined(WIN32))
+    DRIVER_CONTEXT * pContext;
+    int Orientation;
+  #endif
+  LCD_X_SETORG_INFO Data = {0};
+
+  #if defined(WIN32)
+    LCDSIM_SetOrg(x, y, pDevice->LayerIndex);
+  #else
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    Orientation  = LCD_GetMirrorXEx(pDevice->LayerIndex) * GUI_MIRROR_X;
+    Orientation |= LCD_GetMirrorYEx(pDevice->LayerIndex) * GUI_MIRROR_Y;
+    Orientation |= LCD_GetSwapXYEx (pDevice->LayerIndex) * GUI_SWAP_XY;
+    switch (Orientation) {
+    case 0:
+      Data.xPos = x;
+      Data.yPos = y;
+      break;
+    case GUI_MIRROR_X:
+      Data.xPos = pContext->vxSize - pContext->xSize - x;
+      Data.yPos = y;
+      break;
+    case GUI_MIRROR_Y:
+      Data.xPos = x;
+      Data.yPos = pContext->vySize - pContext->ySize - y;
+      break;
+    case GUI_MIRROR_X | GUI_MIRROR_Y:
+      Data.xPos = pContext->vxSize - pContext->xSize - x;
+      Data.yPos = pContext->vySize - pContext->ySize - y;
+      break;
+    case GUI_SWAP_XY:
+      Data.xPos = y;
+      Data.yPos = x;
+      break;
+    case GUI_SWAP_XY | GUI_MIRROR_X:
+      Data.xPos = pContext->vySize - pContext->ySize  - y;
+      Data.yPos = x;
+      break;
+    case GUI_SWAP_XY | GUI_MIRROR_Y:
+      Data.xPos = y;
+      Data.yPos = pContext->vxSize - pContext->xSize  - x;
+      break;
+    case GUI_SWAP_XY | GUI_MIRROR_X | GUI_MIRROR_Y:
+      Data.xPos = pContext->vySize - pContext->ySize  - y;
+      Data.yPos = pContext->vxSize - pContext->xSize  - x;
+      break;
+    }
+    LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETORG, (void *)&Data);
+  #endif
+}
+
+/*********************************************************************
+*
+*       _SetVRAMAddr
+*/
+static void _SetVRAMAddr(GUI_DEVICE * pDevice, void * pVRAM) {
+  DRIVER_CONTEXT * pContext;
+  LCD_X_SETVRAMADDR_INFO Data = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    pContext->VRAMAddr = pContext->BaseAddr = (U32)pVRAM;
+    Data.pVRAM = pVRAM;
+    LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETVRAMADDR, (void *)&Data);
+  }
+  #if defined(WIN32)
+    SIM_Lin_SetVRAMAddr(pDevice->LayerIndex, pVRAM);
+  #endif
+}
+
+/*********************************************************************
+*
+*       _SetVSize
+*/
+static void _SetVSize(GUI_DEVICE * pDevice, int xSize, int ySize) {
+  DRIVER_CONTEXT * pContext;
+  #if defined(WIN32)
+    int NumBuffers;
+  #endif
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    #if defined(WIN32)
+      NumBuffers = GUI_MULTIBUF_GetNumBuffers();
+    #endif
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    if (LCD_GetSwapXYEx(pDevice->LayerIndex)) {
+      #if defined(WIN32)
+        pContext->vxSize = xSize * NumBuffers;
+      #else
+        pContext->vxSize = xSize;
+      #endif
+      pContext->vySize = ySize;
+      pContext->vxSizePhys = ySize;
+    } else {
+      pContext->vxSize = xSize;
+      #if defined(WIN32)
+        pContext->vySize = ySize * NumBuffers;
+      #else
+        pContext->vySize = ySize;
+      #endif
+      pContext->vxSizePhys = xSize;
+    }
+  }
+  #if defined(WIN32)
+    SIM_Lin_SetVRAMSize(pDevice->LayerIndex, pContext->vxSize, pContext->vySize, pContext->xSize, pContext->ySize);
+  #endif
+}
+
+/*********************************************************************
+*
+*       _SetSize
+*/
+static void _SetSize(GUI_DEVICE * pDevice, int xSize, int ySize) {
+  DRIVER_CONTEXT * pContext;
+  LCD_X_SETSIZE_INFO Data = {0};
+
+  _InitOnce(pDevice);
+  if (pDevice->u.pContext) {
+    pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+    if (pContext->vxSizePhys == 0) {
+      if (LCD_GetSwapXYEx(pDevice->LayerIndex)) {
+        pContext->vxSizePhys = ySize;
+      } else {
+        pContext->vxSizePhys = xSize;
+      }
+    }
+    pContext->xSize = xSize;
+    pContext->ySize = ySize;
+    Data.xSize = xSize;
+    Data.ySize = ySize;
+    LCD_X_DisplayDriver(pDevice->LayerIndex, LCD_X_SETSIZE, (void *)&Data);
+  }
+}
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_LIN_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_NoOpt_1_8.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,57 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_NoOpt_1_8.h
+Purpose     : Interface definition for non optimized drawing functions
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI_Private.h"
+
+#ifndef GUIDRV_NOOPT_1_8_H
+#define GUIDRV_NOOPT_1_8_H
+
+void GUIDRV__NoOpt_XorPixel  (GUI_DEVICE * pDevice, int x, int y);
+void GUIDRV__NoOpt_DrawHLine (GUI_DEVICE * pDevice, int x0, int y,  int x1);
+void GUIDRV__NoOpt_DrawVLine (GUI_DEVICE * pDevice, int x, int y0,  int y1);
+void GUIDRV__NoOpt_FillRect  (GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+void GUIDRV__NoOpt_DrawBitmap(GUI_DEVICE * pDevice, int x0, int y0, int xSize, int ySize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_S1D13748.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,124 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_S1D13748_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,217 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_S1D13748_Private.h
+Purpose     : Interface definition for GUIDRV_S1D13748 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_S1D13748.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_S1D13748_PRIVATE_H
+#define GUIDRV_S1D13748_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#ifndef   LCD_WRITE_BUFFER_SIZE
+  #define LCD_WRITE_BUFFER_SIZE 500
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       MANAGE_VMEM_API
+*/
+typedef struct {
+  //
+  // Private function pointers
+  //
+  void (* pfSetAddrR)   (DRIVER_CONTEXT * pContext, int x, int y);                     // Sets the address to be read
+  void (* pfSetAddrW)   (DRIVER_CONTEXT * pContext, int x, int y);                     // Sets the address to be written
+  void (* pfSetRectR)   (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);   // Sets the rectangular area to be read
+  void (* pfSetRectW)   (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);   // Sets the rectangular area to be written
+  void (* pfFlushBuffer)(DRIVER_CONTEXT * pContext);                                   // Sends remaining data of the write buffer to the controller
+  void (* pfWriteData)  (DRIVER_CONTEXT * pContext, U16 Data);                         // Writes one 16 bit data item using the write buffer
+  void (* pfWriteDataM) (DRIVER_CONTEXT * pContext, U16 Data, U32 NumPixels);          // Writes a number of items of the same color using the write buffer
+  void (* pfWriteDataMP)(DRIVER_CONTEXT * pContext, U16 const * pData, U32 NumPixels); // Writes data using the write buffer
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int xPos, yPos;
+  int MemSize;
+  int SwapXY;
+  int XOff;
+  U32 BufferOffset;
+  int NumBytesInBuffer;
+  int IsVisible;
+  //
+  // Driver specific data
+  //
+  int WriteBufferSize;
+  int UseLayer;
+  //
+  // Accelerators for calculation
+  //
+  int BitsPerPixel;
+  //
+  // VRAM
+  //
+  U16 * pWriteBuffer;
+  U16 * pWrite;
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex);                                           \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT * pContext;                                                     \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS);                         \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__S1D13748_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__S1D13748_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__S1D13748_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__S1D13748_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_S1D13748_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_S1D13781.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,110 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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;
+
+//
+// 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
+
+#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
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+  #define GUIDRV_S1D13781_Config(pDevice, pConfig)
+  #define GUIDRV_S1D13781_SetBusSPI(pDevice, pHW_API)
+#else
+  void GUIDRV_S1D13781_Config   (GUI_DEVICE * pDevice, CONFIG_S1D13781 * pConfig);
+  void GUIDRV_S1D13781_SetBusSPI(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_S1D13781_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,254 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_S1D13781_Private.h
+Purpose     : Interface definition for GUIDRV_S1D13781 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_S1D13781.h"
+
+#ifndef GUIDRV_S1D13781_PRIVATE_H
+#define GUIDRV_S1D13781_PRIVATE_H
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#ifndef   LCD_WRITE_BUFFER_SIZE
+  #define LCD_WRITE_BUFFER_SIZE 500
+#endif
+
+//
+// BitBLT registers
+//
+#define REG_BITBLT_CR0    0x60880
+#define REG_BITBLT_CR1    0x60882
+#define REG_BITBLT_SR     0x60884
+#define REG_BITBLT_CR     0x60886
+#define REG_BITBLT_SSAR0  0x60888
+#define REG_BITBLT_SSAR1  0x6088A
+#define REG_BITBLT_DSAR0  0x6088C
+#define REG_BITBLT_DSAR1  0x6088E
+#define REG_BITBLT_ROR    0x60890
+#define REG_BITBLT_WR     0x60892
+#define REG_BITBLT_HR     0x60894
+#define REG_BITBLT_BCR0   0x60896
+#define REG_BITBLT_BCR1   0x60898
+#define REG_BITBLT_FCR0   0x6089A
+#define REG_BITBLT_FCR1   0x6089C
+
+#define REG_BITBLT_CR_MOVEP  (0 << 0)
+#define REG_BITBLT_CR_FILL   (1 << 1)
+#define REG_BITBLT_CR0_START (1 << 0)
+
+#define REG_MAIN_XSIZE    0x60824
+#define REG_MAIN_YSIZE    0x60828
+
+#define REG_MAIN_SETUP    0x60840
+#define REG_MAIN_SADDR0   0x60842
+#define REG_MAIN_SADDR1   0x60844
+
+#define REG_PIP_SETUP     0x60850
+#define REG_PIP_SADDR0    0x60852
+#define REG_PIP_SADDR1    0x60854
+#define REG_PIP_XSIZE     0x60856
+#define REG_PIP_YSIZE     0x60858
+#define REG_PIP_XPOS      0x6085A
+#define REG_PIP_YPOS      0x6085C
+#define REG_PIP_ENABLE    0x60860
+
+#define REG_PIP_ALPHA     0x60862
+#define REG_PIP_TRANS     0x60864
+#define REG_PIP_TCOL0     0x60866
+#define REG_PIP_TCOL1     0x60868
+
+#define REG_PCR_DSR       0x60822
+#define REG_CR_PSR        0x60802
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_S1D13781
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       MANAGE_VMEM_API
+*/
+typedef struct {
+  //
+  // Private function pointers
+  //
+  void (* pfWriteDataAuto_8) (DRIVER_CONTEXT * pContext, U32 Addr, U8 Data);
+  void (* pfWriteDataFlush_8)(DRIVER_CONTEXT * pContext);
+
+  void (* pfWriteDataM_8) (DRIVER_CONTEXT * pContext, U32 Addr, U8 Data, U32 NumItems);
+  void (* pfWriteDataMP_8)(DRIVER_CONTEXT * pContext, U32 Addr, U8 * pData, U32 NumItems);
+  U8 * (* pfReadDataM_8)  (DRIVER_CONTEXT * pContext, U32 Addr, U8 * pData, U32 NumItems);
+  U8   (* pfReadData_8)   (DRIVER_CONTEXT * pContext, U32 Addr);
+  void (* pfWriteReg)     (DRIVER_CONTEXT * pContext, U32 Addr, U16 Data);
+  U16  (* pfReadReg)      (DRIVER_CONTEXT * pContext, U32 Addr);
+
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT_S1D13781
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int MemSize;
+  int SwapXY;
+  int XOff;
+  U32 BufferOffset;
+  int NumBytesInBuffer;
+  U32 Addr;
+  U32 BaseAddr;
+  int WaitUntilVNDP;
+  //
+  // PIP layer
+  //
+  int IsVisible;
+  int xPos, yPos;
+  //
+  // Driver specific data
+  //
+  int WriteBufferSize;
+  int WriteBufferSizeNew;
+  int UseLayer;
+  U8 aInitialWriteBuffer[10];
+  //
+  // Accelerators for calculation
+  //
+  int BitsPerPixel;
+  int BytesPerPixel;
+  //
+  // VRAM
+  //
+  U8 * pReadBuffer;
+  U8 * pWriteBuffer;
+  U8 * pWrite;
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT)                                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT_S1D13781 * pContext;                                                             \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT_S1D13781 *)pDevice->u.pContext;                                      \
+  _SetPixelIndex(pContext, x, y, PixelIndex);                                                     \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT)                                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT_S1D13781 * pContext;                                            \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT_S1D13781 *)pDevice->u.pContext;                     \
+  PixelIndex = _GetPixelIndex(pContext, x, y);                                   \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT)                 \
+  DEFINE_GETPIXELINDEX(EXT)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__S1D13781_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__S1D13781_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__S1D13781_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__S1D13781_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+int    GUIDRV__S1D13781_InitOnce  (GUI_DEVICE *  pDevice);
+int    GUIDRV__S1D13781_Init      (GUI_DEVICE *  pDevice);
+
+U32    GUIDRV__S1D13781_GetAddr   (DRIVER_CONTEXT * pContext, int x, int y);
+
+#endif /* GUIDRV_S1D13781_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_S1D15G00.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,102 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_SLin.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,199 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_SLin_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,252 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_SLin.h
+Purpose     : Interface definition for GUIDRV_SLin driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_SLin.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_SLIN_PRIVATE_H
+#define GUIDRV_SLIN_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_SLIN
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       MANAGE_VRAM_CONTEXT
+*/
+typedef struct {
+  //
+  // Should be the same for all controllers
+  //
+  U8   (* pfReadVMEM )  (DRIVER_CONTEXT * pContext, U32 Off);
+  void (* pfWriteVMEM)  (DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
+  void (* pfWritePixels)(DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
+  //
+  // Depends on controller
+  //
+  void (* pfSetADDR)    (DRIVER_CONTEXT * pContext, U32 Off);
+  void (* pfSetWriteNC) (DRIVER_CONTEXT * pContext);
+  void (* pfSetWriteC)  (DRIVER_CONTEXT * pContext);
+  void (* pfSendCache)  (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+  U32  (* pfXY2Off)     (DRIVER_CONTEXT * pContext, int x, int y);
+  //
+  // Only used by SSD1848
+  //
+  U8   (* pfData)       (U8 Data);
+  void (* pfPutData)    (DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
+  U8   (* pfGetData)    (DRIVER_CONTEXT * pContext, U32 Off);
+  void (* pfWriteData)  (DRIVER_CONTEXT * pContext, U8 Data);
+  //
+  // Only used by T6963
+  //
+  void (* pfCheckBusy)  (DRIVER_CONTEXT * pContext, U8 Mask);
+  void (* pfSetOrg)     (DRIVER_CONTEXT * pContext);
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int UseCache;
+  int MemSize;
+  U32 BufferOffset;
+  //
+  // Cache specific data
+  //
+  U8 * pVMEM;
+  int CacheLocked;
+  int IsDirty;
+  GUI_RECT DirtyRect;
+  //
+  // Driver specific data
+  //
+  int FirstSEG;
+  int FirstCOM;
+  int UseMirror;   // Used by SSD1848
+  int CheckBusy;   // Used by T6963
+  U32 Off;         // Used by T6963
+  U8  UseDualScan; // Used by T6963
+  //
+  // Accelerators for calculation
+  //
+  int BytesPerLine;
+  int BitsPerPixel;
+  //
+  // Mirroring (used by UC1617)
+  //
+  const U8 * pMirror;
+  //
+  // Pointer to driver internal initialization routine
+  //
+  void (* pfInit)(GUI_DEVICE * pDevice);
+  //
+  // Set if cache is used
+  //
+  int  (* pfControlCache)(GUI_DEVICE *  pDevice, int Cmd);
+  void (* pfRefresh     )(GUI_DEVICE *  pDevice);
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex);                                           \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT * pContext;                                                     \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS);                         \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__SLin_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__SLin_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__SLin_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__SLin_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+
+void   GUIDRV__SLin_SendCache (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
+void   GUIDRV__SLin_WriteVMEM (DRIVER_CONTEXT * pContext, U32 Off, U8 Data, int x, int y);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_SPage.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,286 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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_SetUC1611 (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/emWin_header/GUIDRV_SPage_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,253 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_SPage_Private.h
+Purpose     : Private interface of GUIDRV_SPage driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_SPage.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_SPAGE_PRIVATE_H
+#define GUIDRV_SPAGE_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define SPAGE_MAX_NUM_DUMMY_READS 5
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_SPAGE
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int NumDummyReads;
+  int BitsPerPixel;
+  int NumPages;
+  //
+  // Driver specific data
+  //
+  int FirstSEG;
+  int FirstCOM;
+  //
+  // Accelerators for calculation
+  //
+  int BytesPerLine;
+  //
+  // Cache
+  //
+  U8 * pVRAM;
+  int CacheLocked;
+  int CacheStat;
+  int xOff;
+  U16 * pDirtyMin;
+  U16 * pDirtyMax;
+  //
+  // Pointer to driver internal initialization routine
+  //
+  void (* pfInit)(GUI_DEVICE * pDevice);
+  //
+  // Display controller specific functions
+  //
+  void (* pfSetAddrW) (DRIVER_CONTEXT * pContext, int Column, int Page);
+  void (* pfSetAddrR) (DRIVER_CONTEXT * pContext, int Column, int Page);
+  U8   (* pfReadVMem) (DRIVER_CONTEXT * pContext, int Column, int Page);
+  void (* pfWriteVMem)(DRIVER_CONTEXT * pContext, int Column, int Page, U8 Data);
+  //
+  // Writing and reading data, makes it possible to mirror pixels if required
+  //
+  U8   (* pfReadData) (U8 * pData);
+  void (* pfWriteData)(U8 * pData, U8 Data);
+  void (* pfWrite)    (DRIVER_CONTEXT * pContext, U8 Data);
+  //
+  // Hardware routines
+  //
+  GUI_PORT_API HW_API;
+};
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex);                                           \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT * pContext;                                                     \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS);                         \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions, common
+*
+**********************************************************************
+*/
+void (*GUIDRV__SPage_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__SPage_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__SPage_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__SPage_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+int    GUIDRV__SPage_Init      (GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+*       Private functions, cache related
+*
+**********************************************************************
+*/
+void GUIDRV__SPage_WriteCache  (DRIVER_CONTEXT * pContext, int x, int Page, U8 Data);
+U8   GUIDRV__SPage_ReadCache   (DRIVER_CONTEXT * pContext, int x, int Page);
+void GUIDRV__SPage_FlushCache  (DRIVER_CONTEXT * pContext);
+void GUIDRV__SPage_AddDirtyRect(DRIVER_CONTEXT * pContext, int Page0, int Page1, int x0, int x1);
+int  GUIDRV__SPage_ControlCache(GUI_DEVICE * pDevice, int Cmd);
+
+/*********************************************************************
+*
+*       Simulation (Segger internal use only)
+*
+**********************************************************************
+*/
+#if defined(WIN32) && defined(LCD_SIMCONTROLLER)
+
+  extern GUI_PORT_API SIM_SPage_HW_API;
+
+  void SIM_SPage_SetFunc1502 (GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc1510 (GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc1512 (GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc1802 (GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc1638 (GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc75256(GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc75320(GUI_DEVICE * pDevice);
+  void SIM_SPage_SetFunc7591 (GUI_DEVICE * pDevice);
+  void SIM_SPage_Config      (GUI_DEVICE * pDevice, int xSize, int ySize, int FirstSEG, int FirstCOM, int BitsPerPixel, int NumDummyReads);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_SPAGE_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_SSD1926.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,120 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUIDRV_SSD1926_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,239 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_SSD1926_Private.h
+Purpose     : Interface definition for GUIDRV_SSD1926 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_SSD1926.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_SSD1926_PRIVATE_H
+#define GUIDRV_SSD1926_PRIVATE_H
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_SSD1926
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+*       MANAGE_VRAM_CONTEXT
+*/
+typedef struct {
+  //
+  // Function pointers for writing to display controller
+  //
+  void (* pfWriteReg)  (DRIVER_CONTEXT * pContext, U16 Reg, U16 Data);
+  void (* pfWriteAddrW)(DRIVER_CONTEXT * pContext, U32 Addr);
+  void (* pfWriteAddrB)(DRIVER_CONTEXT * pContext, U32 Addr);
+  void (* pfWrite8)    (DRIVER_CONTEXT * pContext, U8  Data);
+  void (* pfSetAddr)   (DRIVER_CONTEXT * pContext, U32 Addr);
+  U8   (* pfRead8)     (DRIVER_CONTEXT * pContext, U32 Addr);
+  void (* pfFlush)     (DRIVER_CONTEXT * pContext);
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  int UseCache;
+  int MemSize;
+  //
+  // Driver specific data
+  //
+  int FirstSEG;
+  int FirstCOM;
+  //
+  // Accelerators for calculation
+  //
+  int BytesPerLine;
+  int BitsPerPixel;
+  //
+  // VRAM
+  //
+  U8 * pVMEM;
+  //
+  // Colors
+  //
+  U32 * pColors;
+  //
+  // Buffer for one line of data
+  //
+  U16 * aBuffer;        // Allocated buffer
+  U16 * pBuffer;        // Pointer for writing operations
+  int NumBytesInBuffer; // Number of bytes in buffer
+  U32 Addr;             // Destination address of buffer
+  int Odd;              // 1 if the next address to be written is odd
+  //
+  // Pointer to driver internal initialization routine
+  //
+  void (* pfInit) (GUI_DEVICE * pDevice);
+  void (* pfCheck)(GUI_DEVICE * pDevice);
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       Access macros
+*/
+#define LCD_WRITE_A0(Data)             pContext->HW_API.pfWrite8_A0(Data)
+#define LCD_WRITE_A1(Data)             pContext->HW_API.pfWrite8_A1(Data)
+#define LCD_WRITEM_A0(pData, NumItems) pContext->HW_API.pfWriteM8_A0(pData, NumItems)
+#define LCD_WRITEM_A1(pData, NumItems) pContext->HW_API.pfWriteM8_A1(pData, NumItems)
+#define LCD_READ_A1(Data)              Data = pContext->HW_API.pfRead8_A1()
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex);                                           \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  DRIVER_CONTEXT * pContext;                                                     \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS);                         \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__SSD1926_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__SSD1926_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__SSD1926_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__SSD1926_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_Template.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,73 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_Template.h
+Purpose     : Interface definition for GUIDRV_Template driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_TEMPLATE_H
+#define GUIDRV_TEMPLATE_H
+
+/*********************************************************************
+*
+*       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
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_TEMPLATE            &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_TEMPLATE            &GUIDRV_Template_API
+
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_TemplateI.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,119 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_TemplateI.h
+Purpose     : Interface definition for GUIDRV_TemplateI driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_TEMPLATE_I_H
+#define GUIDRV_TEMPLATE_I_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 Dummy;
+} CONFIG_TEMPLATE_I;
+
+/*********************************************************************
+*
+*       Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OY_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OX_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OXY_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OS_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OSY_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OSX_16_API;
+extern const GUI_DEVICE_API GUIDRV_TEMPLATE_I_OSXY_16_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+  #define GUIDRV_TEMPLATE_I_16       &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OY_16    &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OX_16    &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OXY_16   &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OS_16    &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OSY_16   &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OSX_16   &GUIDRV_Win_API
+  #define GUIDRV_TEMPLATE_I_OSXY_16  &GUIDRV_Win_API
+
+#else
+
+  #define GUIDRV_TEMPLATE_I_16       &GUIDRV_TEMPLATE_I_16_API
+  #define GUIDRV_TEMPLATE_I_OY_16    &GUIDRV_TEMPLATE_I_OY_16_API
+  #define GUIDRV_TEMPLATE_I_OX_16    &GUIDRV_TEMPLATE_I_OX_16_API
+  #define GUIDRV_TEMPLATE_I_OXY_16   &GUIDRV_TEMPLATE_I_OXY_16_API
+  #define GUIDRV_TEMPLATE_I_OS_16    &GUIDRV_TEMPLATE_I_OS_16_API
+  #define GUIDRV_TEMPLATE_I_OSY_16   &GUIDRV_TEMPLATE_I_OSY_16_API
+  #define GUIDRV_TEMPLATE_I_OSX_16   &GUIDRV_TEMPLATE_I_OSX_16_API
+  #define GUIDRV_TEMPLATE_I_OSXY_16  &GUIDRV_TEMPLATE_I_OSXY_16_API
+
+#endif
+
+/*********************************************************************
+*
+*       Public routines
+*/
+void GUIDRV_TemplateI_Config    (GUI_DEVICE * pDevice, CONFIG_TEMPLATE_I * pConfig);
+void GUIDRV_TemplateI_SetBus_XXX(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+void GUIDRV_TemplateI_SetFuncXXX(GUI_DEVICE * pDevice);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUIDRV_TemplateI_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,206 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUIDRV_TemplateI_Private.h
+Purpose     : Interface definition for GUIDRV_TemplateI driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUIDRV_TemplateI.h"
+#include "GUIDRV_NoOpt_1_8.h"
+
+#ifndef GUIDRV_TEMPLATE_I_PRIVATE_H
+#define GUIDRV_TEMPLATE_I_PRIVATE_H
+
+/*********************************************************************
+*
+*       Defines
+*
+**********************************************************************
+*/
+#define PRIVATE_DEVFUNC_ONINITHOOK 0x1000
+
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_TEMPLATE_I
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+typedef void (* T_ONINITHOOK)(DRIVER_CONTEXT * pContext);
+
+/*********************************************************************
+*
+*       MANAGE_VMEM_API
+*/
+typedef struct {
+  //
+  // TBD: Add private function pointers...
+  //
+  int Dummy;
+} MANAGE_VMEM_API;
+
+/*********************************************************************
+*
+*       DRIVER_CONTEXT
+*/
+struct DRIVER_CONTEXT {
+  //
+  // Common data
+  //
+  int xSize, ySize;
+  int vxSize, vySize;
+  //
+  // Driver specific data
+  //
+  //
+  // Accelerators for calculation
+  //
+  int BytesPerLine;
+  int BitsPerPixel;
+  //
+  // VRAM
+  //
+  U8 * pVMEM;
+  //
+  // Pointer to driver internal initialization routine
+  //
+  void (* pfInit) (GUI_DEVICE * pDevice);
+  void (* pfCheck)(GUI_DEVICE * pDevice);
+  //
+  // API-Tables
+  //
+  MANAGE_VMEM_API ManageVMEM_API; // Memory management
+  GUI_PORT_API    HW_API;         // Hardware routines
+};
+
+/*********************************************************************
+*
+*       LOG2PHYS_xxx
+*/
+#define LOG2PHYS_X      (                  x    )
+#define LOG2PHYS_X_OX   (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OY   (                  x    )
+#define LOG2PHYS_X_OXY  (pContext->xSize - x - 1)
+#define LOG2PHYS_X_OS   (                  y    )
+#define LOG2PHYS_X_OSX  (pContext->ySize - y - 1)
+#define LOG2PHYS_X_OSY  (                  y    )
+#define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
+
+#define LOG2PHYS_Y      (                  y    )
+#define LOG2PHYS_Y_OX   (                  y    )
+#define LOG2PHYS_Y_OY   (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OXY  (pContext->ySize - y - 1)
+#define LOG2PHYS_Y_OS   (                  x    )
+#define LOG2PHYS_Y_OSX  (                  x    )
+#define LOG2PHYS_Y_OSY  (pContext->xSize - x - 1)
+#define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
+
+/*********************************************************************
+*
+*       _SetPixelIndex_##EXT
+*/
+#define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                                 \
+static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
+  DRIVER_CONTEXT * pContext;                                                                      \
+                                                                                                  \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                                               \
+  pContext->xSize = pContext->xSize; /* Keep compiler happy */                                    \
+  _SetPixelIndex(pDevice, X_PHYS, Y_PHYS, PixelIndex);                                            \
+}
+
+/*********************************************************************
+*
+*       _GetPixelIndex_##EXT
+*/
+#define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                                \
+static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
+  LCD_PIXELINDEX PixelIndex;                                                     \
+  DRIVER_CONTEXT * pContext;                                                     \
+                                                                                 \
+  pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;                              \
+  pContext->xSize = pContext->xSize; /* Keep compiler happy */                   \
+  PixelIndex = _GetPixelIndex(pDevice, X_PHYS, Y_PHYS);                          \
+  return PixelIndex;                                                             \
+}
+
+/*********************************************************************
+*
+*       _GetDevProp_##EXT
+*/
+#define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                    \
+static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
+  switch (Index) {                                              \
+  case LCD_DEVCAP_MIRROR_X: return MX;                          \
+  case LCD_DEVCAP_MIRROR_Y: return MY;                          \
+  case LCD_DEVCAP_SWAP_XY:  return SWAP;                        \
+  }                                                             \
+  return _GetDevProp(pDevice, Index);                           \
+}
+
+/*********************************************************************
+*
+*       DEFINE_FUNCTIONS
+*/
+#define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
+  DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS)                 \
+  DEFINE_GETDEVPROP(EXT, MX, MY, SWAP)                      \
+  DEFINE_GUI_DEVICE_API(EXT)
+
+
+/*********************************************************************
+*
+*       Private functions
+*
+**********************************************************************
+*/
+void (*GUIDRV__TemplateI_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
+void   GUIDRV__TemplateI_SetOrg    (GUI_DEVICE *  pDevice,  int x, int y);
+I32    GUIDRV__TemplateI_GetDevProp(GUI_DEVICE *  pDevice,  int Index);
+void   GUIDRV__TemplateI_GetRect   (GUI_DEVICE *  pDevice,  LCD_RECT * pRect);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUITDRV_ADS7846.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,169 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : GUITDRV_ADS7846.h
+Purpose     : Touch screen driver include
+----------------------------------------------------------------------
+
+Notes
+=====
+(1) The driver needs some function pointer to be filled correctly to be able
+    to communicate with the external peripheral correctly. The correct assignment
+    of these function pointers is checked during driver configuration.
+    
+(2) The driver needs some configuration variables filled in to be able to calculate
+    the logical screen coordinates from the physical AD values.
+    A description of the typical paramaters that have to be known by the driver is
+    listed below:
+    - Orientation: Orientation of the touch screen if not the same as the physical orientation.
+                   A or-combination of the defines GUI_SWAP_XY, GUI_MIRROR_X and GUI_MIRROR_Y
+                   can be used.
+    - xLog0      : Logical pixel value of horizontal reference point 0. Typically 0.
+    - xLog1      : Logical pixel value of horizontal reference point 1. Typically horizontal screen resolution -1.
+    - xPhys0     : Physical AD value of horizontal reference point 0.
+    - xPhys1     : Physical AD value of horizontal reference point 1.
+    - yLog0      : Logical pixel value of vertical reference point 0. Typically 0.
+    - yLog1      : Logical pixel value of vertical reference point 1. Typically vertical screen resolution -1.
+    - yPhys0     : Physical AD value of vertical reference point 0.
+    - yPhys1     : Physical AD value of vertical reference point 1.
+
+(3) If the PENIRQ line of the touch controller is connected to a port of the target hardware
+    a touch event can be detected by the driver. Upon polling the driver's exec routine the
+    driver can check if a touch event is ready to be sampled by checking the PENIRQ line.
+    Without PENIRQ line the driver will always try to sample a touch event even if no touch
+    happened which will consume time even if not necessary.
+    Without PENIRQ it is the responsibility of the user's pfGetResult() routine to return
+    0xFFFF if the measured AD value is out of bounds.
+    If both, the PENIRQ and the touch pressure recognition are enabled first the PENIRQ will
+    signal that there is a touch event. Afterwards the touch pressure measurement is used to
+    confirm that this was a valid touch and the touch had enough pressure to deliver good
+    measurements.
+
+(4) The touch pressure measurement is activated by setting a value for PressureMin and
+    PressureMax .
+    To calculate the correct touch pressure the resistance of the X-plate has to be known.
+    This can be set via PlateResistanceX [Ohm].
+    A touch event that we have measured with a pressure within these thresholds is confirmed
+    as valid touch event with good measurment samples.
+    If both, the PENIRQ and the touch pressure recognition are enabled first the PENIRQ will
+    signal that there is a touch event. Afterwards the touch pressure measurement is used to
+    confirm that this was a valid touch and the touch had enough pressure to deliver good
+    measurements.
+    If no PENIRQ line is connected this measurement takes place everytime the touch event is
+    polled regardless if there is a touch event or not as the driver will only know for sure
+    after calculating the touch pressure.
+    Setting the value for PlateResistanceX to 0 is invalid. The driver will internally use a
+    value of 1 instead.
+*/
+
+#ifndef GUITDRV_ADS7846_H            /* Make sure we only include it once */
+#define GUITDRV_ADS7846_H
+
+#include "GUI_Type.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Types
+*
+**********************************************************************
+*/
+
+typedef struct {
+  //
+  // Function pointer (1)
+  //
+  void     (* pfSendCmd)   (U8 Data);     // Sends a 8-bit command to the peripheral
+  U16      (* pfGetResult) (void);        // Retrieves the result of the AD conversion. 4 dummy bytes have to be shifted out to the left.
+  char     (* pfGetBusy)   (void);        // Retrieves the status of the busy line. 0: Not busy; 1: Busy
+  void     (* pfSetCS)     (char OnOff);  // Set chip select line. OnOff == 1 means peripheral selected
+  //
+  // Configuration (2)
+  //
+  unsigned Orientation;
+  int      xLog0;
+  int      xLog1;
+  int      xPhys0;
+  int      xPhys1;
+  int      yLog0;
+  int      yLog1;
+  int      yPhys0;
+  int      yPhys1;
+  //
+  // Optional, touch recognition via PENIRQ line (3)
+  //
+  char     (* pfGetPENIRQ) (void);        // Retrieves the status of the PENIRQ line to detect a touch event.
+  //
+  // Optional, touch recognition via touch pressure measurement (4)
+  //
+  int      PressureMin;                   // Minimum pressure threshold. A measured pressure below this value means we do not have a valid touch event.
+  int      PressureMax;                   // Maximum pressure threshold. A measured pressure above this value means we do not have a valid touch event.
+  int      PlateResistanceX;              // Resistance of the X-plate of the touch screen. This value is needed for calculation of the touch pressure.
+} GUITDRV_ADS7846_CONFIG;
+
+typedef struct {
+  int      xPhys;     // Last measured x value
+  int      yPhys;     // Last measured y value
+  int      z1Phys;    // Last measured z1 value
+  int      z2Phys;    // Last measured z2 value
+  int      PENIRQ;    // Last sampled PENIRQ state if PENIRQ callback has been set
+  int      Pressure;  // Last measured touch pressure if touch pressure measurement is enabled
+} GUITDRV_ADS7846_LAST_VAL;
+
+/*********************************************************************
+*
+*       Prototypes
+*
+**********************************************************************
+*/
+
+void GUITDRV_ADS7846_Config    (GUITDRV_ADS7846_CONFIG * pConfig);
+char GUITDRV_ADS7846_Exec      (void);
+void GUITDRV_ADS7846_GetLastVal(GUITDRV_ADS7846_LAST_VAL * p);
+
+#if defined(__cplusplus)
+}                /* Make sure we have C-declarations in C++ programs */
+#endif
+
+
+#endif   /* GUITDRV_ADS7846_H */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUI_ARRAY.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,80 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUI_ARRAY_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,77 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUI_BMP_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,114 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_ConfDefaults.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,195 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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 (default)
+   ARGB: 0x00 means transparent, 0xFF means opaque
+*/
+#ifndef GUI_USE_ARGB
+  #define GUI_USE_ARGB 0
+#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_MEMCPY
+  #define GUI_MEMCPY(pDest, pSrc, NumBytes) memcpy(pDest, pSrc, NumBytes)
+#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 GUI__memset
+#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/emWin_header/GUI_Debug.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,200 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_FontIntern.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,92 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_GCache_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,114 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_GIF_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,133 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_HOOK.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,86 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_JPEG_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,318 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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];
+  //
+  // Banding
+  //
+  U8 BandingRequired;   // Flag if banding is required
+  unsigned NumBands;    // Number of required bands for drawing the complete frame
+  int NumBlocksPerBand; // Number of vertical blocks per band
+  int FirstBlockOfBand;
+  int aFirstBlockOfBand[MAX_COMPONENTS];
+};
+
+/*********************************************************************
+*
+*       Private interface
+*
+**********************************************************************
+*/
+int       GUI_JPEG__AllocBandingCoeffBuffer (GUI_HMEM hContext);
+int       GUI_JPEG__DecodeLine              (GUI_JPEG_DCONTEXT * pContext);
+int       GUI_JPEG__DecodeProgressiveBanding(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/emWin_header/GUI_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,741 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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_AddDec     (I32 v, U8 Len, 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__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);
+
+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);
+
+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__GetNextTimer   (GUI_TIMER_HANDLE hTimer, U32 * pContext);
+GUI_TIMER_HANDLE GUI_TIMER__GetFirstTimer  (U32 * pContext);
+GUI_TIMER_HANDLE GUI_TIMER__GetNextTimerLin(GUI_TIMER_HANDLE hTimer, U32 * 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);
+
+
+/*********************************************************************
+*
+*       Callback pointers for dynamic linkage
+*
+**********************************************************************
+Dynamic linkage pointers reduces configuration hassles.
+*/
+typedef int  GUI_tfTimer(void);
+typedef int  WM_tfHandlePID(void);
+
+
+/*********************************************************************
+*
+*       Cursors
+*
+**********************************************************************
+*/
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_ArrowS[45];
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_ArrowM[60];
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_ArrowL[150];
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_CrossS[33];
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_CrossM[126];
+extern GUI_CONST_STORAGE unsigned char  GUI_Pixels_CrossL[248];
+extern GUI_CONST_STORAGE unsigned char  GUI_PixelsHeaderM[5 * 17];
+
+extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPal;
+extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPalI;
+
+
+/*********************************************************************
+*
+*       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;
+
+//
+// Function pointer for drawing alpha bitmaps
+//
+extern GUI_DRAWBITMAP32_FUNC * GUI__pfDrawAlphaBitmapFunc;
+
+//
+// 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);
+
+GUI_EXTERN   void (* GUI_pfAfterInitHook)(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           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/emWin_header/GUI_SPRITE_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,77 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_SetOrientation.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,94 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_SetOrientationCX.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,613 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI_Type.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,681 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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;
+
+typedef struct GUI_REGISTER_EXIT GUI_REGISTER_EXIT;
+
+struct GUI_REGISTER_EXIT {
+  void (* pfVoid)(void);
+  GUI_REGISTER_EXIT * 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;
+  GUI_HMEM       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/emWin_header/GUI_VNC.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,210 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 * pBuffer, 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/emWin_header/GUI_Version.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,51 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 53800
+
+#endif   /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/GUI__BiDi2_Brackets_800.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,173 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/GUI__BiDi2_Types_800.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,16606 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/Global.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,93 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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: 6050 $
+---------------------------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
+
+#ifdef _WIN32
+  //
+  // Microsoft VC6 compiler related
+  //
+  #ifdef __MINGW32__
+    #define U64   unsigned long long
+    #define I64   long long
+  #else
+    #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
+  #endif
+#else
+  //
+  // C99 compliant compiler
+  //
+  #define U64   unsigned long long
+  #define I64   signed long long
+  #define U64_C(x) x##ULL
+#endif
+
+#endif                      // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/HEADER.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,196 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+int       HEADER_GetHeight          (HEADER_Handle hObj);
+int       HEADER_GetItemWidth       (HEADER_Handle hObj, unsigned int 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 int Index, const GUI_BITMAP * pBitmap);
+void      HEADER_SetBitmapEx        (HEADER_Handle hObj, unsigned int 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 int Index, const void * pBitmap);
+void      HEADER_SetBMPEx           (HEADER_Handle hObj, unsigned int 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 int Index, int Align);
+void      HEADER_SetItemText        (HEADER_Handle hObj, unsigned int Index, const char * s);
+void      HEADER_SetItemWidth       (HEADER_Handle hObj, unsigned int Index, int Width);
+void      HEADER_SetScrollPos       (HEADER_Handle hObj, int ScrollPos);
+void      HEADER_SetStreamedBitmap  (HEADER_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
+void      HEADER_SetStreamedBitmapEx(HEADER_Handle hObj, unsigned int 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/emWin_header/HEADER_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,135 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/ICONVIEW.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,150 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+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);
+int  ICONVIEW_GetUserData             (ICONVIEW_Handle hObj, void * pDest, int NumBytes);
+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_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_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);
+
+#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/emWin_header/ICONVIEW_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,144 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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;
+} 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;
+
+/*********************************************************************
+*
+*       Function pointer(s)
+*
+**********************************************************************
+*/
+extern void (* ICONVIEW__pfDrawStreamedBitmap)(const void * p, int x, int y);
+
+/*********************************************************************
+*
+*       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/emWin_header/IMAGE.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,117 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/IMAGE_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,144 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/IP_FS.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,114 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+File        : IP_FS.h
+Purpose     : File system abstraction layer
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file !
+*/
+
+#ifndef  IP_FS_H
+#define  IP_FS_H
+
+#include "SEGGER.h"
+
+#if defined(__cplusplus)
+extern "C" {     /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+*       Functions
+*
+**********************************************************************
+*/
+
+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* pContext, void* pFileEntry));
+  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;
+
+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_FS;                    // Target file system (emFile), shows and allows access to hidden files.
+extern const IP_FS_API IP_FS_FS_AllowHiddenAccess;  // Target file system (emFile), does not show hidden files but allows access to them.
+extern const IP_FS_API IP_FS_FS_DenyHiddenAccess;   // Target file system (emFile), does not show hidden files and does not allow access to them.
+
+void IP_FS_WIN32_ConfigBaseDir(const char* sDir);
+
+
+#if defined(__cplusplus)
+  }
+#endif
+
+
+#endif   /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/KNOB.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,120 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/KNOB_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,110 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LCD.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,754 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_GetDevFunc(int LayerIndex, int Item))(void);
+
+/*********************************************************************
+*
+*       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 */
+
+/*********************************************************************
+*
+*       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 */
+
+/*********************************************************************
+*
+*       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);
+
+/*********************************************************************
+*
+*       Set layer properties
+*/
+int LCD_SetAlphaEx     (int LayerIndex, int Alpha);
+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_SetAlphaModeEx (int LayerIndex, int AlphaMode);
+int LCD_SetChromaModeEx(int LayerIndex, int ChromaMode);
+int LCD_SetChromaEx    (int LayerIndex, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+
+int LCD_SetAlpha     (int Alpha);
+int LCD_SetVRAMAddr  (void * pVRAM);
+int LCD_SetVSize     (int xSize, int ySize);
+int LCD_SetSize      (int xSize, int ySize);
+int LCD_SetVis       (int OnOff);
+int LCD_SetPos       (int xPos, int yPos);
+int LCD_SetAlphaMode (int AlphaMode);
+int LCD_SetChromaMode(int ChromaMode);
+int LCD_SetChroma    (LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+int LCD_SetLUTEntry  (U8 Pos, LCD_COLOR Color);
+int LCD_SetDevFunc   (int LayerIndex, int IdFunc, void (* pDriverFunc)(void));
+
+void LCD_SetOrg(int xOrg, int yOrg);
+
+/*********************************************************************
+*
+*       Get layer properties
+*/
+int LCD_GetPosEx(int LayerIndex, int * pxPos, int * pyPos);
+
+int LCD_GetPos  (int * pxPos, int * pyPos);
+
+/*********************************************************************
+*
+*       Display refresh (optional)
+*/
+int LCD_Refresh  (void);
+int LCD_RefreshEx(int LayerIndex);
+
+/*********************************************************************
+*
+*       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);
+
+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);
+int  LCD_SetLUTEntryEx(int LayerIndex, U8 Pos, LCD_COLOR Color);
+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/emWin_header/LCD_ConfDefaults.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,83 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LCD_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,99 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LCD_Protected.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,132 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LCD_SIM.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,208 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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/emWin_header/LISTBOX.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,210 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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
+
+/*********************************************************************
+*
+*       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 int Index);
+void         LISTBOX_EnableWrapMode  (LISTBOX_Handle hObj, int OnOff);
+unsigned     LISTBOX_GetItemSpacing  (LISTBOX_Handle hObj);
+unsigned     LISTBOX_GetNumItems     (LISTBOX_Handle hObj);
+int          LISTBOX_GetSel          (LISTBOX_Handle hObj);
+const GUI_FONT * LISTBOX_GetFont     (LISTBOX_Handle hObj);
+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 int 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 int Index, GUI_COLOR color);
+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 int 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 int 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/emWin_header/LISTBOX_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,151 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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;
+} 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/emWin_header/LISTVIEW.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,202 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LISTVIEW_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,193 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/LISTWHEEL.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,152 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+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);
+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/emWin_header/LISTWHEEL_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,142 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/MENU.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,269 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+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);
+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/emWin_header/MENU_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,183 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/MESSAGEBOX.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,72 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/MULTIEDIT.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,160 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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);
+int  MULTIEDIT_GetCursorCharPos (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_GetCursorPixelPos(MULTIEDIT_HANDLE hObj, int * pxPos, int * pyPos);
+void MULTIEDIT_GetPrompt        (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+int  MULTIEDIT_GetTextSize      (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_GetText          (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+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_SetFocussable    (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);
+
+/*********************************************************************
+*
+*       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/emWin_header/MULTIPAGE.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,224 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+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);
+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/emWin_header/MULTIPAGE_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,186 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+int  MULTIPAGE__SetDrawObj     (MULTIPAGE_Handle hObj, GUI_DRAW_HANDLE hDrawObj, int Index, int State);
+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/emWin_header/PROGBAR.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,166 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
+*
+**********************************************************************
+*/
+
+void PROGBAR_GetMinMax   (PROGBAR_Handle hObj, int * pMin, int * pMax);
+int  PROGBAR_GetUserData (PROGBAR_Handle hObj, void * pDest, int NumBytes);
+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/emWin_header/PROGBAR_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,136 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/RADIO.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,194 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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);
+int       RADIO_GetText      (RADIO_Handle hObj, unsigned Index, char * pBuffer, int MaxLen);
+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);
+
+const GUI_BITMAP * RADIO_GetImage(RADIO_Handle hObj, unsigned int Index);
+
+/*********************************************************************
+*
+*       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/emWin_header/RADIO_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,201 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/SCROLLBAR.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,213 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_FOCUSSABLE   WIDGET_STATE_FOCUSSABLE
+
+/************************************************************
+*
+*       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
+*
+**********************************************************************
+*/
+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/emWin_header/SCROLLBAR_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,194 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/SEGGER.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,189 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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* pContext); // 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/emWin_header/SLIDER.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,194 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/SLIDER_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,131 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/SPINBOX.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,189 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_FOCUSSED 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);
+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/emWin_header/SPINBOX_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,156 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/SWIPELIST.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,229 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/SWIPELIST_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,146 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/TEXT.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,154 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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_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/emWin_header/TEXT_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,100 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/TREEVIEW.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,240 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/TREEVIEW_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,158 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/WIDGET.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,389 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
+  #define WIDGET_USE_FLEX_SKIN     1
+#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_FOCUSSABLE         (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 */
+
+/*********************************************************************
+*
+*       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_OVERLAY    WIDGET_ITEM_DRAW_OVERLAY   
+#define WIDGET_DRAW_BACKGROUND WIDGET_ITEM_DRAW_BACKGROUND
+
+/*********************************************************************
+*
+*       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);
+
+/* 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);
+
+/*********************************************************************
+*
+*       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_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_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 */
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/WINDOW_Private.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,61 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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
+
+/*********************************************************************
+*
+*       Externals
+*
+**********************************************************************
+*/
+
+extern GUI_COLOR WINDOW__DefaultBkColor;
+
+#endif   /* GUI_WINSUPPORT */
+#endif   /* WINDOW_PRIVATE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin/emWin_header/WM.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,775 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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 {
+  int Cmd;
+  int dx, dy, da;
+  int xPos, yPos;
+  int Period;
+  int SnapX;
+  int SnapY;
+  int FinalMove;
+  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
+#define WM_POST_BANDING             51
+
+#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;            /* Some messages need more info ... Pointer is declared "const" because some systems (M16C) have 4 byte const, byte 2 byte default ptrs */
+    int v;
+    GUI_COLOR Color;
+  } 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_GetFocussedWindow         (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_IsFocussable              (WM_HWIN hWin);
+int     WM_IsVisible                 (WM_HWIN hWin);
+int     WM_IsWindow                  (WM_HWIN hWin);    /* Check validity */
+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);
+
+/* 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);
+
+/* 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/emWin_header/WM_GUI.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,82 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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/emWin_header/WM_Intern.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,265 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2016  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.38 - 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 to  NXP Semiconductors USA, Inc.  whose
+registered  office  is  situated  at 411 E. Plumeria Drive, San  Jose,
+CA 95134, USA  solely for  the  purposes  of  creating  libraries  for
+NXPs M0, M3/M4 and  ARM7/9 processor-based  devices,  sublicensed  and
+distributed under the terms and conditions of the NXP End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00186
+License model:            emWin License Agreement, dated August 20th 2011
+Licensed product:         -
+Licensed platform:        NXP's ARM 7/9, Cortex-M0,M3,M4
+Licensed number of seats: -
+----------------------------------------------------------------------
+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__GetFocussedChild        (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/emWin_library/emWin_M4F.ar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#949cb49ab0a144da0e3b04b6af46db0cd2a20d75
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/board.c	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,66 @@
+#include "board.h"
+#include "fsl_gpio.h"
+#include "fsl_clock_config.h"
+#include "emwin_support.h"
+
+/* Initialize the LCD_DISP. */
+void BOARD_InitLcd(void)
+{
+    volatile uint32_t i = 0x100U;
+
+    gpio_pin_config_t config = {
+        kGPIO_DigitalOutput, 0,
+    };
+
+    /* Reset the LCD. */
+    GPIO_PinInit(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, &config);
+
+    GPIO_WritePinOutput(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, 0);
+
+    while (i--)
+    {
+    }
+
+    GPIO_WritePinOutput(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, 1);
+
+    /* Backlight. */
+    config.outputLogic = 1;
+    GPIO_PinInit(LCD_BL_GPIO, LCD_BL_GPIO_PIN, &config);
+
+    /*Clock setting for LPI2C*/
+    CLOCK_SetMux(kCLOCK_Lpi2cMux, LPI2C_CLOCK_SOURCE_SELECT);
+    CLOCK_SetDiv(kCLOCK_Lpi2cDiv, LPI2C_CLOCK_SOURCE_DIVIDER);
+}
+
+void BOARD_InitLcdifPixelClock(void)
+{
+    /*
+     * The desired output frame rate is 60Hz. So the pixel clock frequency is:
+     * (480 + 41 + 4 + 18) * (272 + 10 + 4 + 2) * 60 = 9.2M.
+     * Here set the LCDIF pixel clock to 9.3M.
+     */
+
+    /*
+     * Initialize the Video PLL.
+     * Video PLL output clock is OSC24M * (loopDivider + (denominator / numerator)) / postDivider = 93MHz.
+     */
+    clock_video_pll_config_t config = {
+        .loopDivider = 31, .postDivider = 8, .numerator = 0, .denominator = 0,
+    };
+
+    CLOCK_InitVideoPll(&config);
+
+    /*
+     * 000 derive clock from PLL2
+     * 001 derive clock from PLL3 PFD3
+     * 010 derive clock from PLL5
+     * 011 derive clock from PLL2 PFD0
+     * 100 derive clock from PLL2 PFD1
+     * 101 derive clock from PLL3 PFD1
+     */
+    CLOCK_SetMux(kCLOCK_LcdifPreMux, 2);
+
+    CLOCK_SetDiv(kCLOCK_LcdifPreDiv, 4);
+
+    CLOCK_SetDiv(kCLOCK_LcdifDiv, 1);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/board.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,10 @@
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/* Initialize the LCD_DISP. */
+void BOARD_InitLcd(void);
+
+void BOARD_InitLcdifPixelClock(void);
+
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/emwin_support.c	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,350 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "GUI.h"
+#include "WM.h"
+#include "emwin_support.h"
+#include "GUIDRV_Lin.h"
+
+#include "fsl_elcdif.h"
+#include "fsl_lpi2c.h"
+#include "fsl_ft5406_rt.h"
+
+/*
+**      Define everything necessary for different color depths
+*/
+#if LCD_BITS_PER_PIXEL == 8 /* Palette definition for LUT */
+static uint32_t lutData[ELCDIF_LUT_ENTRY_NUM];
+static const LCD_COLOR _aColors_256[] = {
+    0x000000, 0x000033, 0x000066, 0x000099, 0x0000CC, 0x0000FF, 0x003300, 0x003333, 0x003366, 0x003399, 0x0033CC,
+    0x0033FF, 0x006600, 0x006633, 0x006666, 0x006699, 0x0066CC, 0x0066FF, 0x009900, 0x009933, 0x009966, 0x009999,
+    0x0099CC, 0x0099FF, 0x00CC00, 0x00CC33, 0x00CC66, 0x00CC99, 0x00CCCC, 0x00CCFF, 0x00FF00, 0x00FF33, 0x00FF66,
+    0x00FF99, 0x00FFCC, 0x00FFFF, 0x330000, 0x330033, 0x330066, 0x330099, 0x3300CC, 0x3300FF, 0x333300, 0x333333,
+    0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336600, 0x336633, 0x336666, 0x336699, 0x3366CC, 0x3366FF, 0x339900,
+    0x339933, 0x339966, 0x339999, 0x3399CC, 0x3399FF, 0x33CC00, 0x33CC33, 0x33CC66, 0x33CC99, 0x33CCCC, 0x33CCFF,
+    0x33FF00, 0x33FF33, 0x33FF66, 0x33FF99, 0x33FFCC, 0x33FFFF, 0x660000, 0x660033, 0x660066, 0x660099, 0x6600CC,
+    0x6600FF, 0x663300, 0x663333, 0x663366, 0x663399, 0x6633CC, 0x6633FF, 0x666600, 0x666633, 0x666666, 0x666699,
+    0x6666CC, 0x6666FF, 0x669900, 0x669933, 0x669966, 0x669999, 0x6699CC, 0x6699FF, 0x66CC00, 0x66CC33, 0x66CC66,
+    0x66CC99, 0x66CCCC, 0x66CCFF, 0x66FF00, 0x66FF33, 0x66FF66, 0x66FF99, 0x66FFCC, 0x66FFFF, 0x000000, 0x000000,
+    0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+    0x111111, 0x222222, 0x333333, 0x444444, 0x555555, 0x666666, 0x777777, 0x888888, 0x999999, 0xAAAAAA, 0xBBBBBB,
+    0xCCCCCC, 0xDDDDDD, 0xEEEEEE, 0xFFFFFF, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+    0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x990000, 0x990033, 0x990066, 0x990099, 0x9900CC, 0x9900FF,
+    0x993300, 0x993333, 0x993366, 0x993399, 0x9933CC, 0x9933FF, 0x996600, 0x996633, 0x996666, 0x996699, 0x9966CC,
+    0x9966FF, 0x999900, 0x999933, 0x999966, 0x999999, 0x9999CC, 0x9999FF, 0x99CC00, 0x99CC33, 0x99CC66, 0x99CC99,
+    0x99CCCC, 0x99CCFF, 0x99FF00, 0x99FF33, 0x99FF66, 0x99FF99, 0x99FFCC, 0x99FFFF, 0xCC0000, 0xCC0033, 0xCC0066,
+    0xCC0099, 0xCC00CC, 0xCC00FF, 0xCC3300, 0xCC3333, 0xCC3366, 0xCC3399, 0xCC33CC, 0xCC33FF, 0xCC6600, 0xCC6633,
+    0xCC6666, 0xCC6699, 0xCC66CC, 0xCC66FF, 0xCC9900, 0xCC9933, 0xCC9966, 0xCC9999, 0xCC99CC, 0xCC99FF, 0xCCCC00,
+    0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCCC, 0xCCCCFF, 0xCCFF00, 0xCCFF33, 0xCCFF66, 0xCCFF99, 0xCCFFCC, 0xCCFFFF,
+    0xFF0000, 0xFF0033, 0xFF0066, 0xFF0099, 0xFF00CC, 0xFF00FF, 0xFF3300, 0xFF3333, 0xFF3366, 0xFF3399, 0xFF33CC,
+    0xFF33FF, 0xFF6600, 0xFF6633, 0xFF6666, 0xFF6699, 0xFF66CC, 0xFF66FF, 0xFF9900, 0xFF9933, 0xFF9966, 0xFF9999,
+    0xFF99CC, 0xFF99FF, 0xFFCC00, 0xFFCC33, 0xFFCC66, 0xFFCC99, 0xFFCCCC, 0xFFCCFF, 0xFFFF00, 0xFFFF33, 0xFFFF66,
+    0xFFFF99, 0xFFFFCC, 0xFFFFFF
+
+};
+static const LCD_PHYSPALETTE _aPalette_256 = {ARRAY_SIZE(_aColors_256), _aColors_256};
+#endif
+#if LCD_BITS_PER_PIXEL < 32 /* Buffer definitions for emwin and LCD framebuffer */
+AT_NONCACHEABLE_SECTION_ALIGN(uint8_t s_gui_memory[GUI_NUMBYTES * LCD_BYTES_PER_PIXEL], FRAME_BUFFER_ALIGN);
+AT_NONCACHEABLE_SECTION_ALIGN(uint8_t s_vram_buffer[VRAM_SIZE * GUI_BUFFERS * LCD_BYTES_PER_PIXEL], FRAME_BUFFER_ALIGN);
+#else
+uint32_t s_gui_memory[(GUI_NUMBYTES)];
+uint32_t s_vram_buffer[VRAM_SIZE * GUI_BUFFERS];
+#endif
+
+/* Memory address definitions */
+#define GUI_MEMORY_ADDR ((uint32_t)s_gui_memory)
+#define VRAM_ADDR ((uint32_t)s_vram_buffer)
+
+static volatile int32_t s_LCDpendingBuffer = -1;
+
+/*******************************************************************************
+ * Implementation of PortAPI for emWin LCD driver
+ ******************************************************************************/
+
+/* Enable interrupt. */
+void BOARD_EnableLcdInterrupt(void)
+{
+    EnableIRQ(LCDIF_IRQn);
+}
+
+void APP_LCDIF_IRQHandler(void)
+{
+    uint32_t intStatus;
+
+    intStatus = ELCDIF_GetInterruptStatus(APP_ELCDIF);
+
+    ELCDIF_ClearInterruptStatus(APP_ELCDIF, intStatus);
+
+    if (intStatus & kELCDIF_CurFrameDone)
+    {
+        if (s_LCDpendingBuffer >= 0)
+        {
+            /* Send a confirmation that the given buffer is visible */
+            GUI_MULTIBUF_Confirm(s_LCDpendingBuffer);
+            s_LCDpendingBuffer = -1;
+        }
+    }
+/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
+  exception return operation might vector to incorrect interrupt */
+#if defined __CORTEX_M && (__CORTEX_M == 4U)
+    __DSB();
+#endif
+}
+
+void LCDIF_IRQHandler(void)
+{
+    APP_LCDIF_IRQHandler();
+}
+
+void APP_ELCDIF_Init(void)
+{
+    const elcdif_rgb_mode_config_t config = {
+        .panelWidth = APP_IMG_WIDTH,
+        .panelHeight = APP_IMG_HEIGHT,
+        .hsw = APP_HSW,
+        .hfp = APP_HFP,
+        .hbp = APP_HBP,
+        .vsw = APP_VSW,
+        .vfp = APP_VFP,
+        .vbp = APP_VBP,
+        .polarityFlags = APP_POL_FLAGS,
+        .bufferAddr = VRAM_ADDR,
+        .pixelFormat = ELCDIF_PIXEL_FORMAT,
+        .dataBus = APP_LCDIF_DATA_BUS,
+    };
+    ELCDIF_RgbModeInit(APP_ELCDIF, &config);
+
+#if (LCD_BITS_PER_PIXEL == 8)
+    /* Load the LUT data. */
+    ELCDIF_UpdateLut(APP_ELCDIF, kELCDIF_Lut0, 0, lutData, ELCDIF_LUT_ENTRY_NUM);
+    ELCDIF_EnableLut(APP_ELCDIF, true);
+#endif
+    BOARD_EnableLcdInterrupt();
+    ELCDIF_EnableInterrupts(APP_ELCDIF, kELCDIF_CurFrameDoneInterruptEnable);
+    ELCDIF_RgbModeStart(APP_ELCDIF);
+}
+
+/*******************************************************************************
+ * Implementation of communication with the touch controller
+ ******************************************************************************/
+
+/* Touch driver handle. */
+static ft5406_rt_handle_t touchHandle;
+
+static void BOARD_Touch_Init(void)
+{
+    lpi2c_master_config_t masterConfig = {0};
+    /*
+    * masterConfig.debugEnable = false;
+    * masterConfig.ignoreAck = false;
+    * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
+    * masterConfig.baudRate_Hz = 100000U;
+    * masterConfig.busIdleTimeout_ns = 0;
+    * masterConfig.pinLowTimeout_ns = 0;
+    * masterConfig.sdaGlitchFilterWidth_ns = 0;
+    * masterConfig.sclGlitchFilterWidth_ns = 0;
+    */
+    LPI2C_MasterGetDefaultConfig(&masterConfig);
+
+    /* Change the default baudrate configuration */
+    masterConfig.baudRate_Hz = BOARD_TOUCH_I2C_BAUDRATE;
+
+    /* Initialize the LPI2C master peripheral */
+    LPI2C_MasterInit(BOARD_TOUCH_I2C, &masterConfig, BOARD_TOUCH_I2C_CLOCK_FREQ);
+
+    /* Initialize the touch handle. */
+    FT5406_RT_Init(&touchHandle, BOARD_TOUCH_I2C);
+}
+
+void BOARD_Touch_Deinit(void)
+{
+    LPI2C_MasterDeinit(BOARD_TOUCH_I2C);
+}
+
+int BOARD_Touch_Poll(void)
+{
+    touch_event_t touch_event;
+    int touch_x;
+    int touch_y;
+    GUI_PID_STATE pid_state;
+
+    if (kStatus_Success != FT5406_RT_GetSingleTouch(&touchHandle, &touch_event, &touch_x, &touch_y))
+    {
+        return 0;
+    }
+    else if (touch_event != kTouch_Reserved)
+    {
+        pid_state.x = touch_y;
+        pid_state.y = touch_x;
+        pid_state.Pressed = ((touch_event == kTouch_Down) || (touch_event == kTouch_Contact));
+        pid_state.Layer = 0;
+        GUI_TOUCH_StoreStateEx(&pid_state);
+        return 1;
+    }
+    return 0;
+}
+
+/*******************************************************************************
+ * Application implemented functions required by emWin library
+ ******************************************************************************/
+void LCD_X_Config(void)
+{
+    GUI_MULTIBUF_Config(GUI_BUFFERS);
+    GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
+    LCD_SetSizeEx(0, LCD_WIDTH, LCD_HEIGHT);
+    LCD_SetVSizeEx(0, LCD_WIDTH, LCD_HEIGHT);
+    LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);
+#if (LCD_BITS_PER_PIXEL == 8)
+    LCD_SetLUT(&_aPalette_256);
+#endif
+    BOARD_Touch_Init();
+}
+
+int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void *p)
+{
+    uint32_t addr;
+#if (LCD_BITS_PER_PIXEL == 8)
+    uint16_t colorR, colorG, colorB;
+    uint32_t color;
+#endif
+    int result = 0;
+    LCD_X_SHOWBUFFER_INFO *pData;
+    switch (Cmd)
+    {
+        case LCD_X_INITCONTROLLER:
+        {
+            APP_ELCDIF_Init();
+            break;
+        }
+        case LCD_X_SHOWBUFFER:
+        {
+            pData = (LCD_X_SHOWBUFFER_INFO *)p;
+            /* Calculate address of the given buffer */
+            addr = VRAM_ADDR + VRAM_SIZE * pData->Index;
+            /* Make the given buffer visible */
+            ELCDIF_SetNextBufferAddr(APP_ELCDIF, addr);
+            //
+            // Remember buffer index to be used by ISR
+            //
+            s_LCDpendingBuffer = pData->Index;
+            while (s_LCDpendingBuffer >= 0)
+                ;
+            return 0;
+        }
+#if (LCD_BITS_PER_PIXEL == 8)
+        case LCD_X_SETLUTENTRY:
+        {
+            //
+            // Required for setting a lookup table entry which is passed in the 'Pos' and 'Color' element of p
+            //
+            LCD_X_SETLUTENTRY_INFO *pData;
+            pData = (LCD_X_SETLUTENTRY_INFO *)p;
+            //
+            // Call hardware routine to write a LUT entry to the controller
+            //
+            color = pData->Color;
+            colorB = (color & 0xFF0000) >> 16;
+            colorG = (color & 0x00FF00) >> 8;
+            colorR = (color & 0x0000FF);
+            /* 16-bit bus */
+            lutData[pData->Pos] = ((colorR >> 3) << 11) | ((colorG >> 2) << 5) | ((colorB >> 3) << 0);
+            return 0;
+        }
+#endif
+        default:
+            result = -1;
+            break;
+    }
+
+    return result;
+}
+
+void GUI_X_Config(void)
+{
+    /* Assign work memory area to emWin */
+    GUI_ALLOC_AssignMemory((void *)GUI_MEMORY_ADDR, GUI_NUMBYTES);
+
+    /* Select default font */
+    GUI_SetDefaultFont(GUI_FONT_6X8);
+}
+
+void GUI_X_Init(void)
+{
+}
+
+/* Dummy RTOS stub required by emWin */
+void GUI_X_InitOS(void)
+{
+}
+
+/* Dummy RTOS stub required by emWin */
+void GUI_X_Lock(void)
+{
+}
+
+/* Dummy RTOS stub required by emWin */
+void GUI_X_Unlock(void)
+{
+}
+
+/* Dummy RTOS stub required by emWin */
+U32 GUI_X_GetTaskId(void)
+{
+    return 0;
+}
+
+void GUI_X_ExecIdle(void)
+{
+}
+
+GUI_TIMER_TIME GUI_X_GetTime(void)
+{
+    return 0;
+}
+
+void GUI_X_Delay(int Period)
+{
+    volatile int i;
+    for (; Period > 0; Period--)
+    {
+        for (i = 15000; i > 0; i--)
+            ;
+    }
+}
+
+void *emWin_memcpy(void *pDst, const void *pSrc, long size)
+{
+    return memcpy(pDst, pSrc, size);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/emwin_support.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,120 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _EMWIN_SUPPORT_H_
+#define _EMWIN_SUPPORT_H_
+
+/* Macros for the LCD controller. */
+#define APP_ELCDIF LCDIF
+
+#define APP_IMG_HEIGHT 272
+#define APP_IMG_WIDTH 480
+#define APP_HSW 41
+#define APP_HFP 4
+#define APP_HBP 8
+#define APP_VSW 10
+#define APP_VFP 4
+#define APP_VBP 2
+#define APP_POL_FLAGS \
+    (kELCDIF_DataEnableActiveHigh | kELCDIF_VsyncActiveLow | kELCDIF_HsyncActiveLow | kELCDIF_DriveDataOnRisingClkEdge)
+
+/* Display. */
+#define LCD_DISP_GPIO GPIO1
+#define LCD_DISP_GPIO_PIN 2
+/* Back light. */
+#define LCD_BL_GPIO GPIO2
+#define LCD_BL_GPIO_PIN 31
+
+/* Macros for the touch touch controller. */
+#define BOARD_TOUCH_I2C LPI2C1
+
+/* Select USB1 PLL (480 MHz) as master lpi2c clock source */
+#define LPI2C_CLOCK_SOURCE_SELECT (0U)
+/* Clock divider for master lpi2c clock source */
+#define LPI2C_CLOCK_SOURCE_DIVIDER (5U)
+
+#define BOARD_TOUCH_I2C_CLOCK_FREQ ((CLOCK_GetFreq(kCLOCK_Usb1PllClk) / 8) / (LPI2C_CLOCK_SOURCE_DIVIDER + 1U))
+#define BOARD_TOUCH_I2C_BAUDRATE 100000U
+
+#define LPI2C_DATA_LENGTH 32U
+
+#define LPI2C_MASTER_IRQ LPI2C1_IRQn
+#define LPI2C_MASTER_IRQHandler LPI2C1_IRQHandler
+#define BOARD_TOUCH_INT_PORT PORTA
+#define BOARD_TOUCH_INT_PIN 2
+
+#define BOARD_LCD_READABLE 1
+
+#define LCD_WIDTH 480
+#define LCD_HEIGHT 272
+#define LCD_BITS_PER_PIXEL 8
+#define LCD_BYTES_PER_PIXEL (LCD_BITS_PER_PIXEL / 8)
+
+/* Color depth dependent definitions */
+#if LCD_BITS_PER_PIXEL == 8
+#define DISPLAY_DRIVER GUIDRV_LIN_8
+#define COLOR_CONVERSION GUICC_0
+#define ELCDIF_PIXEL_FORMAT kELCDIF_PixelFormatRAW8
+#define APP_LCDIF_DATA_BUS kELCDIF_DataBus8Bit
+#elif LCD_BITS_PER_PIXEL == 16
+#define DISPLAY_DRIVER GUIDRV_LIN_16
+#define COLOR_CONVERSION GUICC_M565
+#define ELCDIF_PIXEL_FORMAT kELCDIF_PixelFormatRGB565
+#define APP_LCDIF_DATA_BUS kELCDIF_DataBus16Bit
+#else
+#define DISPLAY_DRIVER GUIDRV_LIN_32
+#define COLOR_CONVERSION GUICC_M8888I
+#define ELCDIF_PIXEL_FORMAT kELCDIF_PixelFormatXRGB8888
+#define APP_LCDIF_DATA_BUS kELCDIF_DataBus16Bit
+#endif
+
+/* Define scale factors */
+#define GUI_SCALE_FACTOR 0.8
+#define GUI_SCALE_FACTOR_X 1.5
+#define GUI_SCALE_FACTOR_Y 1.1
+
+/* Use larger fonts */
+#define GUI_NORMAL_FONT (&GUI_Font24_ASCII)
+#define GUI_LARGE_FONT (&GUI_Font32B_ASCII)
+
+#define GUI_BUFFERS 2
+#define GUI_NUMBYTES 20000U /*! Amount of memory assigned to the emWin library */
+
+#define FRAME_BUFFER_ALIGN 64
+
+#define VRAM_SIZE (LCD_HEIGHT * LCD_WIDTH * LCD_BYTES_PER_PIXEL)
+
+extern int BOARD_Touch_Poll(void);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/fsl_ft5406_rt.c	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,202 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fsl_common.h"
+#include "fsl_lpi2c.h"
+#include "fsl_ft5406_rt.h"
+
+typedef struct _ft5406_rt_touch_point
+{
+    uint8_t XH;
+    uint8_t XL;
+    uint8_t YH;
+    uint8_t YL;
+    uint8_t RESERVED[2];
+} ft5406_rt_touch_point_t;
+
+typedef struct _ft5406_rt_touch_data
+{
+    uint8_t GEST_ID;
+    uint8_t TD_STATUS;
+    ft5406_rt_touch_point_t TOUCH[FT5406_RT_MAX_TOUCHES];
+} ft5406_rt_touch_data_t;
+
+#define TOUCH_POINT_GET_EVENT(T) ((touch_event_t)((T).XH >> 6))
+#define TOUCH_POINT_GET_ID(T) ((T).YH >> 4)
+#define TOUCH_POINT_GET_X(T) ((((T).XH & 0x0f) << 8) | (T).XL)
+#define TOUCH_POINT_GET_Y(T) ((((T).YH & 0x0f) << 8) | (T).YL)
+
+status_t FT5406_RT_Init(ft5406_rt_handle_t *handle, LPI2C_Type *base)
+{
+    lpi2c_master_transfer_t *xfer = &(handle->xfer);
+    status_t status;
+    uint8_t mode;
+
+    assert(handle);
+    assert(base);
+
+    if (!handle || !base)
+    {
+        return kStatus_InvalidArgument;
+    }
+
+    handle->base = base;
+
+    /* clear transfer structure and buffer */
+    memset(xfer, 0, sizeof(*xfer));
+    memset(handle->touch_buf, 0, FT5406_RT_TOUCH_DATA_LEN);
+
+    /* set device mode to normal operation */
+    mode = 0;
+    xfer->slaveAddress = FT5406_RT_I2C_ADDRESS;
+    xfer->direction = kLPI2C_Write;
+    xfer->subaddress = 0;
+    xfer->subaddressSize = 1;
+    xfer->data = &mode;
+    xfer->dataSize = 1;
+    xfer->flags = kLPI2C_TransferDefaultFlag;
+
+    status = LPI2C_MasterTransferBlocking(handle->base, &handle->xfer);
+
+    /* prepare transfer structure for reading touch data */
+    xfer->slaveAddress = FT5406_RT_I2C_ADDRESS;
+    xfer->direction = kLPI2C_Read;
+    xfer->subaddress = 1;
+    xfer->subaddressSize = 1;
+    xfer->data = handle->touch_buf;
+    xfer->dataSize = FT5406_RT_TOUCH_DATA_LEN;
+    xfer->flags = kLPI2C_TransferDefaultFlag;
+
+    return status;
+}
+
+status_t FT5406_RT_Denit(ft5406_rt_handle_t *handle)
+{
+    assert(handle);
+
+    if (!handle)
+    {
+        return kStatus_InvalidArgument;
+    }
+
+    handle->base = NULL;
+    return kStatus_Success;
+}
+
+status_t FT5406_RT_ReadTouchData(ft5406_rt_handle_t *handle)
+{
+    assert(handle);
+
+    if (!handle)
+    {
+        return kStatus_InvalidArgument;
+    }
+
+    return LPI2C_MasterTransferBlocking(handle->base, &handle->xfer);
+}
+
+status_t FT5406_RT_GetSingleTouch(ft5406_rt_handle_t *handle, touch_event_t *touch_event, int *touch_x, int *touch_y)
+{
+    status_t status;
+    touch_event_t touch_event_local;
+
+    status = FT5406_RT_ReadTouchData(handle);
+
+    if (status == kStatus_Success)
+    {
+        ft5406_rt_touch_data_t *touch_data = (ft5406_rt_touch_data_t *)(void *)(handle->touch_buf);
+
+        if (touch_event == NULL)
+        {
+            touch_event = &touch_event_local;
+        }
+        *touch_event = TOUCH_POINT_GET_EVENT(touch_data->TOUCH[0]);
+
+        /* Update coordinates only if there is touch detected */
+        if ((*touch_event == kTouch_Down) || (*touch_event == kTouch_Contact))
+        {
+            if (touch_x)
+            {
+                *touch_x = TOUCH_POINT_GET_X(touch_data->TOUCH[0]);
+            }
+            if (touch_y)
+            {
+                *touch_y = TOUCH_POINT_GET_Y(touch_data->TOUCH[0]);
+            }
+        }
+    }
+
+    return status;
+}
+
+status_t FT5406_RT_GetMultiTouch(ft5406_rt_handle_t *handle,
+                                 int *touch_count,
+                                 touch_point_t touch_array[FT5406_RT_MAX_TOUCHES])
+{
+    status_t status;
+
+    status = FT5406_RT_ReadTouchData(handle);
+
+    if (status == kStatus_Success)
+    {
+        ft5406_rt_touch_data_t *touch_data = (ft5406_rt_touch_data_t *)(void *)(handle->touch_buf);
+        int i;
+
+        /* Decode number of touches */
+        if (touch_count)
+        {
+            *touch_count = touch_data->TD_STATUS;
+        }
+
+        /* Decode valid touch points */
+        for (i = 0; i < touch_data->TD_STATUS; i++)
+        {
+            touch_array[i].TOUCH_ID = TOUCH_POINT_GET_ID(touch_data->TOUCH[i]);
+            touch_array[i].TOUCH_EVENT = TOUCH_POINT_GET_EVENT(touch_data->TOUCH[i]);
+            touch_array[i].TOUCH_X = TOUCH_POINT_GET_X(touch_data->TOUCH[i]);
+            touch_array[i].TOUCH_Y = TOUCH_POINT_GET_Y(touch_data->TOUCH[i]);
+        }
+
+        /* Clear vacant elements of touch_array */
+        for (; i < FT5406_RT_MAX_TOUCHES; i++)
+        {
+            touch_array[i].TOUCH_ID = 0;
+            touch_array[i].TOUCH_EVENT = kTouch_Reserved;
+            touch_array[i].TOUCH_X = 0;
+            touch_array[i].TOUCH_Y = 0;
+        }
+    }
+
+    return status;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/fsl_ft5406_rt.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,94 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _FSL_FT5406_RT_H_
+#define _FSL_FT5406_RT_H_
+
+#include "fsl_common.h"
+
+/*!
+ * @addtogroup ft5406_rt
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*! @brief FT5406_RT I2C address. */
+#define FT5406_RT_I2C_ADDRESS (0x38)
+
+/*! @brief FT5406_RT maximum number of simultaneously detected touches. */
+#define FT5406_RT_MAX_TOUCHES (5U)
+
+/*! @brief FT5406_RT register address where touch data begin. */
+#define FT5406_RT_TOUCH_DATA_SUBADDR (1)
+
+/*! @brief FT5406_RT raw touch data length. */
+#define FT5406_RT_TOUCH_DATA_LEN (0x20)
+
+typedef enum _touch_event
+{
+    kTouch_Down = 0,    /*!< The state changed to touched. */
+    kTouch_Up = 1,      /*!< The state changed to not touched. */
+    kTouch_Contact = 2, /*!< There is a continuous touch being detected. */
+    kTouch_Reserved = 3 /*!< No touch information available. */
+} touch_event_t;
+
+typedef struct _touch_point
+{
+    touch_event_t TOUCH_EVENT; /*!< Indicates the state or event of the touch point. */
+    uint8_t TOUCH_ID; /*!< Id of the touch point. This numeric value stays constant between down and up event. */
+    uint16_t TOUCH_X; /*!< X coordinate of the touch point */
+    uint16_t TOUCH_Y; /*!< Y coordinate of the touch point */
+} touch_point_t;
+
+typedef struct _ft5406_rt_handle
+{
+    LPI2C_Type *base;
+    lpi2c_master_transfer_t xfer;
+    uint8_t touch_buf[FT5406_RT_TOUCH_DATA_LEN];
+} ft5406_rt_handle_t;
+
+status_t FT5406_RT_Init(ft5406_rt_handle_t *handle, LPI2C_Type *base);
+
+status_t FT5406_RT_Denit(ft5406_rt_handle_t *handle);
+
+status_t FT5406_RT_GetSingleTouch(ft5406_rt_handle_t *handle, touch_event_t *touch_event, int *touch_x, int *touch_y);
+
+status_t FT5406_RT_GetMultiTouch(ft5406_rt_handle_t *handle,
+                                 int *touch_count,
+                                 touch_point_t touch_array[FT5406_RT_MAX_TOUCHES]);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.cpp	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,348 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "mbed.h"
+
+#include "GUI.h"
+#include "BUTTON.h"
+#include "CHECKBOX.h"
+#include "SLIDER.h"
+#include "DROPDOWN.h"
+#include "RADIO.h"
+#include "MULTIPAGE.h"
+
+extern "C" {
+#include "board.h"
+#include "pin_mux.h"    
+#include "emwin_support.h"
+}
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+#ifndef GUI_NORMAL_FONT
+#define GUI_NORMAL_FONT (&GUI_Font16_ASCII)
+#endif
+
+#ifndef GUI_LARGE_FONT
+#define GUI_LARGE_FONT (&GUI_Font16B_ASCII)
+#endif
+
+#ifndef GUI_SCALE_FACTOR
+#define GUI_SCALE_FACTOR 1
+#endif
+
+#ifndef GUI_SCALE_FACTOR_X
+#define GUI_SCALE_FACTOR_X GUI_SCALE_FACTOR
+#endif
+
+#ifndef GUI_SCALE_FACTOR_Y
+#define GUI_SCALE_FACTOR_Y GUI_SCALE_FACTOR
+#endif
+
+#define GUI_SCALE(a) ((int)((a) * (GUI_SCALE_FACTOR)))
+#define GUI_SCALE_X(x) ((int)((x) * (GUI_SCALE_FACTOR_X)))
+#define GUI_SCALE_Y(y) ((int)((y) * (GUI_SCALE_FACTOR_Y)))
+#define GUI_SCALE_COORDS(x, y) GUI_SCALE_X(x), GUI_SCALE_Y(y)
+#define GUI_SCALE_RECT(x0, y0, xs, ys) GUI_SCALE_X(x0), GUI_SCALE_Y(y0), GUI_SCALE_X(xs), GUI_SCALE_Y(ys)
+
+#define GUI_ID_DRAWAREA (GUI_ID_USER + 0)
+#define GUI_ID_PAGEWIN1 (GUI_ID_USER + 1)
+#define GUI_ID_PAGEWIN2 (GUI_ID_USER + 2)
+
+/*******************************************************************************
+ * Variables
+ ******************************************************************************/
+Serial pc(USBTX, USBRX);
+
+/*******************************************************************************
+ * Prototypes
+ ******************************************************************************/
+void BOARD_EnableLcdInterrupt(void);
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+
+static DROPDOWN_Handle hDropdown0;
+static RADIO_Handle hRadio0;
+static CHECKBOX_Handle hCheck0;
+static WM_HWIN hDrawArea;
+
+static SLIDER_Handle hSlider0;
+static SLIDER_Handle hSlider1;
+static SPINBOX_Handle hSpinbox0;
+static PROGBAR_Handle hProgbar0;
+
+static const GUI_COLOR color_list[] = {GUI_BLACK,   GUI_YELLOW, GUI_ORANGE, GUI_RED,
+                                       GUI_MAGENTA, GUI_BLUE,   GUI_CYAN,   GUI_GREEN};
+static const GUI_POINT triangle_points[] = {
+    {GUI_SCALE(0), GUI_SCALE(0)}, {GUI_SCALE(-50), GUI_SCALE(100)}, {GUI_SCALE(50), GUI_SCALE(100)}};
+
+static void cbDrawArea(WM_MESSAGE *pMsg)
+{
+    switch (pMsg->MsgId)
+    {
+        case WM_PAINT:
+            GUI_SetColor(color_list[DROPDOWN_GetSel(hDropdown0)]);
+            switch (RADIO_GetValue(hRadio0))
+            {
+                case 0:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50),
+                                     GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50));
+                    }
+                    else
+                    {
+                        GUI_DrawRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50),
+                                     GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50));
+                    }
+                    break;
+                case 1:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20));
+                    }
+                    else
+                    {
+                        GUI_DrawPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20));
+                    }
+                    break;
+                case 2:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50));
+                    }
+                    else
+                    {
+                        GUI_DrawEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50));
+                    }
+                    break;
+            }
+            break;
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+static void cbPageWin1(WM_MESSAGE *pMsg)
+{
+    int NCode;
+    int Id;
+
+    switch (pMsg->MsgId)
+    {
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+
+            switch (Id)
+            {
+                case GUI_ID_RADIO0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_DROPDOWN0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_SEL_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_CHECK0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+            }
+            break;
+
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+static void cbPageWin2(WM_MESSAGE *pMsg)
+{
+    int NCode;
+    int Id;
+
+    switch (pMsg->MsgId)
+    {
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+
+            switch (Id)
+            {
+                case GUI_ID_SLIDER0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            PROGBAR_SetValue(hProgbar0, SLIDER_GetValue(hSlider0));
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_SLIDER1:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            SPINBOX_SetValue(hSpinbox0, SLIDER_GetValue(hSlider1));
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_SPINBOX0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            SLIDER_SetValue(hSlider1, SPINBOX_GetValue(hSpinbox0));
+                            break;
+                    }
+                    break;
+            }
+            break;
+
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+/*!
+ * @brief Main function
+ */
+int main(void)
+{
+    BOARD_InitPins();
+    BOARD_InitI2C1Pins();
+    BOARD_InitSemcPins();
+    BOARD_InitLcdifPixelClock();
+    BOARD_InitLcd();
+    
+    pc.baud(115200);
+    pc.printf("GUI demo start.\r\n");
+
+    GUI_Init();
+
+    CHECKBOX_SetDefaultFont(GUI_NORMAL_FONT);
+    DROPDOWN_SetDefaultFont(GUI_NORMAL_FONT);
+    MULTIPAGE_SetDefaultFont(GUI_NORMAL_FONT);
+    RADIO_SetDefaultFont(GUI_NORMAL_FONT);
+
+    /* Create multipage widget */
+    MULTIPAGE_Handle hMultipage0;
+    hMultipage0 = MULTIPAGE_CreateEx(GUI_SCALE_RECT(10, 10, 300, 220), 0, WM_CF_SHOW, 0, GUI_ID_MULTIPAGE0);
+
+    WM_HWIN hPageWin;
+
+    /* Create window for page 1 and add it */
+    hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN1, cbPageWin1);
+    MULTIPAGE_AddPage(hMultipage0, hPageWin, "Shapes & Colors");
+
+    /* Create widgets on page 1 */
+    hDropdown0 = DROPDOWN_CreateEx(GUI_SCALE_RECT(10, 10, 100, 80), hPageWin, WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR,
+                                   GUI_ID_DROPDOWN0);
+    DROPDOWN_SetTextHeight(hDropdown0, GUI_SCALE_Y(20));
+    DROPDOWN_SetScrollbarWidth(hDropdown0, GUI_SCALE_X(20));
+    DROPDOWN_AddString(hDropdown0, "Black");
+    DROPDOWN_AddString(hDropdown0, "Yellow");
+    DROPDOWN_AddString(hDropdown0, "Orange");
+    DROPDOWN_AddString(hDropdown0, "Red");
+    DROPDOWN_AddString(hDropdown0, "Purple");
+    DROPDOWN_AddString(hDropdown0, "Blue");
+    DROPDOWN_AddString(hDropdown0, "Cyan");
+    DROPDOWN_AddString(hDropdown0, "Green");
+
+    hRadio0 =
+        RADIO_CreateEx(GUI_SCALE_RECT(10, 50, 100, 90), hPageWin, WM_CF_SHOW, 0, GUI_ID_RADIO0, 3, GUI_SCALE_Y(30));
+    RADIO_SetText(hRadio0, "Square", 0);
+    RADIO_SetText(hRadio0, "Triangle", 1);
+    RADIO_SetText(hRadio0, "Circle", 2);
+
+    hCheck0 = CHECKBOX_CreateEx(GUI_SCALE_RECT(10, 150, 100, 16), hPageWin, WM_CF_SHOW, 0, GUI_ID_CHECK0);
+    CHECKBOX_SetText(hCheck0, "Fill");
+
+    hDrawArea =
+        WINDOW_CreateEx(GUI_SCALE_RECT(130, 30, 140, 140), hPageWin, WM_CF_SHOW, 0, GUI_ID_DRAWAREA, cbDrawArea);
+
+    /* Create window for page 2 and add it */
+    hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN2, cbPageWin2);
+    MULTIPAGE_AddPage(hMultipage0, hPageWin, "Sliders & spinbox");
+
+    /* Create widgets on page 2 */
+    hSlider0 = SLIDER_CreateEx(GUI_SCALE_RECT(60, 160, 200, 30), hPageWin, WM_CF_SHOW, 0, GUI_ID_SLIDER0);
+    SLIDER_SetWidth(hSlider0, GUI_SCALE(10));
+    SLIDER_SetValue(hSlider0, 50);
+
+    hSlider1 =
+        SLIDER_CreateEx(GUI_SCALE_RECT(10, 10, 30, 180), hPageWin, WM_CF_SHOW, SLIDER_CF_VERTICAL, GUI_ID_SLIDER1);
+    SLIDER_SetWidth(hSlider1, GUI_SCALE(10));
+    SLIDER_SetValue(hSlider1, 50);
+
+    hSpinbox0 = SPINBOX_CreateEx(GUI_SCALE_RECT(100, 80, 100, 50), hPageWin, WM_CF_SHOW, GUI_ID_SPINBOX0, 0, 100);
+    SPINBOX_SetFont(hSpinbox0, GUI_LARGE_FONT);
+    SPINBOX_SetValue(hSpinbox0, 50);
+
+    hProgbar0 =
+        PROGBAR_CreateEx(GUI_SCALE_RECT(60, 10, 200, 40), hPageWin, WM_CF_SHOW, PROGBAR_CF_HORIZONTAL, GUI_ID_PROGBAR0);
+    PROGBAR_SetFont(hProgbar0, GUI_LARGE_FONT);
+    PROGBAR_SetValue(hProgbar0, 50);
+
+    WM_SetDesktopColor(GUI_WHITE);
+    WM_Exec();
+
+    while (1)
+    {
+        /* Poll touch controller for update */
+        if (BOARD_Touch_Poll())
+        {
+            GUI_Exec();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/pin_mux.c	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,1101 @@
+/*
+ * The Clear BSD License
+ * Copyright 2017-2018 NXP
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ * that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+!!GlobalInfo
+product: Pins v4.1
+processor: MIMXRT1052xxxxB
+package_id: MIMXRT1052DVL6B
+mcu_data: ksdk2_0
+processor_version: 0.0.0
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+
+#include "fsl_common.h"
+#include "fsl_iomuxc.h"
+#include "pin_mux.h"
+
+/* FUNCTION ************************************************************************************************************
+ * 
+ * Function Name : BOARD_InitBootPins
+ * Description   : Calls initialization functions.
+ * 
+ * END ****************************************************************************************************************/
+void BOARD_InitBootPins(void) {
+    BOARD_InitPins();
+    BOARD_InitI2C1Pins();
+}
+
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitPins:
+- options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'}
+- pin_list:
+  - {pin_num: L14, peripheral: LPUART1, signal: RX, pin_signal: GPIO_AD_B0_13, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: K14, peripheral: LPUART1, signal: TX, pin_signal: GPIO_AD_B0_12, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D7, peripheral: LCDIF, signal: lcdif_clk, pin_signal: GPIO_B0_00, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C8, peripheral: LCDIF, signal: 'lcdif_data, 00', pin_signal: GPIO_B0_04, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B8, peripheral: LCDIF, signal: 'lcdif_data, 01', pin_signal: GPIO_B0_05, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A8, peripheral: LCDIF, signal: 'lcdif_data, 02', pin_signal: GPIO_B0_06, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A9, peripheral: LCDIF, signal: 'lcdif_data, 03', pin_signal: GPIO_B0_07, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B9, peripheral: LCDIF, signal: 'lcdif_data, 04', pin_signal: GPIO_B0_08, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C9, peripheral: LCDIF, signal: 'lcdif_data, 05', pin_signal: GPIO_B0_09, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D9, peripheral: LCDIF, signal: 'lcdif_data, 06', pin_signal: GPIO_B0_10, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A10, peripheral: LCDIF, signal: 'lcdif_data, 07', pin_signal: GPIO_B0_11, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C10, peripheral: LCDIF, signal: 'lcdif_data, 08', pin_signal: GPIO_B0_12, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D10, peripheral: LCDIF, signal: 'lcdif_data, 09', pin_signal: GPIO_B0_13, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E10, peripheral: LCDIF, signal: 'lcdif_data, 10', pin_signal: GPIO_B0_14, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E11, peripheral: LCDIF, signal: 'lcdif_data, 11', pin_signal: GPIO_B0_15, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A11, peripheral: LCDIF, signal: 'lcdif_data, 12', pin_signal: GPIO_B1_00, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B11, peripheral: LCDIF, signal: 'lcdif_data, 13', pin_signal: GPIO_B1_01, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C11, peripheral: LCDIF, signal: 'lcdif_data, 14', pin_signal: GPIO_B1_02, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D11, peripheral: LCDIF, signal: 'lcdif_data, 15', pin_signal: GPIO_B1_03, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E7, peripheral: LCDIF, signal: lcdif_enable, pin_signal: GPIO_B0_01, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E8, peripheral: LCDIF, signal: lcdif_hsync, pin_signal: GPIO_B0_02, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D8, peripheral: LCDIF, signal: lcdif_vsync, pin_signal: GPIO_B0_03, software_input_on: Disable, hysteresis_enable: Enable, pull_up_down_config: Pull_Up_100K_Ohm,
+    pull_keeper_select: Pull, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B14, peripheral: GPIO2, signal: 'gpio_io, 31', pin_signal: GPIO_B1_15, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: M11, peripheral: GPIO1, signal: 'gpio_io, 02', pin_signal: GPIO_AD_B0_02, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitPins
+ * Description   : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitPins(void) {
+  CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03u */
+
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_AD_B0_02_GPIO1_IO02,        /* GPIO_AD_B0_02 is configured as GPIO1_IO02 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_AD_B0_12_LPUART1_TX,        /* GPIO_AD_B0_12 is configured as LPUART1_TX */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_AD_B0_13_LPUART1_RX,        /* GPIO_AD_B0_13 is configured as LPUART1_RX */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_00_LCD_CLK,              /* GPIO_B0_00 is configured as LCD_CLK */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_01_LCD_ENABLE,           /* GPIO_B0_01 is configured as LCD_ENABLE */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_02_LCD_HSYNC,            /* GPIO_B0_02 is configured as LCD_HSYNC */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_03_LCD_VSYNC,            /* GPIO_B0_03 is configured as LCD_VSYNC */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_04_LCD_DATA00,           /* GPIO_B0_04 is configured as LCD_DATA00 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_05_LCD_DATA01,           /* GPIO_B0_05 is configured as LCD_DATA01 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_06_LCD_DATA02,           /* GPIO_B0_06 is configured as LCD_DATA02 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_07_LCD_DATA03,           /* GPIO_B0_07 is configured as LCD_DATA03 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_08_LCD_DATA04,           /* GPIO_B0_08 is configured as LCD_DATA04 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_09_LCD_DATA05,           /* GPIO_B0_09 is configured as LCD_DATA05 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_10_LCD_DATA06,           /* GPIO_B0_10 is configured as LCD_DATA06 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_11_LCD_DATA07,           /* GPIO_B0_11 is configured as LCD_DATA07 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_12_LCD_DATA08,           /* GPIO_B0_12 is configured as LCD_DATA08 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_13_LCD_DATA09,           /* GPIO_B0_13 is configured as LCD_DATA09 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_14_LCD_DATA10,           /* GPIO_B0_14 is configured as LCD_DATA10 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B0_15_LCD_DATA11,           /* GPIO_B0_15 is configured as LCD_DATA11 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B1_00_LCD_DATA12,           /* GPIO_B1_00 is configured as LCD_DATA12 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B1_01_LCD_DATA13,           /* GPIO_B1_01 is configured as LCD_DATA13 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B1_02_LCD_DATA14,           /* GPIO_B1_02 is configured as LCD_DATA14 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B1_03_LCD_DATA15,           /* GPIO_B1_03 is configured as LCD_DATA15 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_B1_15_GPIO2_IO31,           /* GPIO_B1_15 is configured as GPIO2_IO31 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_AD_B0_02_GPIO1_IO02,        /* GPIO_AD_B0_02 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_AD_B0_12_LPUART1_TX,        /* GPIO_AD_B0_12 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_AD_B0_13_LPUART1_RX,        /* GPIO_AD_B0_13 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_00_LCD_CLK,              /* GPIO_B0_00 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_01_LCD_ENABLE,           /* GPIO_B0_01 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_02_LCD_HSYNC,            /* GPIO_B0_02 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_03_LCD_VSYNC,            /* GPIO_B0_03 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_04_LCD_DATA00,           /* GPIO_B0_04 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_05_LCD_DATA01,           /* GPIO_B0_05 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_06_LCD_DATA02,           /* GPIO_B0_06 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_07_LCD_DATA03,           /* GPIO_B0_07 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_08_LCD_DATA04,           /* GPIO_B0_08 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_09_LCD_DATA05,           /* GPIO_B0_09 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_10_LCD_DATA06,           /* GPIO_B0_10 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_11_LCD_DATA07,           /* GPIO_B0_11 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_12_LCD_DATA08,           /* GPIO_B0_12 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_13_LCD_DATA09,           /* GPIO_B0_13 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_14_LCD_DATA10,           /* GPIO_B0_14 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B0_15_LCD_DATA11,           /* GPIO_B0_15 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B1_00_LCD_DATA12,           /* GPIO_B1_00 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B1_01_LCD_DATA13,           /* GPIO_B1_01 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B1_02_LCD_DATA14,           /* GPIO_B1_02 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B1_03_LCD_DATA15,           /* GPIO_B1_03 PAD functional properties : */
+      0x01B0B0u);                             /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Pull
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Enabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_B1_15_GPIO2_IO31,           /* GPIO_B1_15 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+}
+
+
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitSemcPins:
+- options: {coreID: core0, enableClock: 'true'}
+- pin_list:
+  - {pin_num: C2, peripheral: SEMC, signal: 'ADDR, 00', pin_signal: GPIO_EMC_09, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: G1, peripheral: SEMC, signal: 'ADDR, 01', pin_signal: GPIO_EMC_10, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: G3, peripheral: SEMC, signal: 'ADDR, 02', pin_signal: GPIO_EMC_11, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: H1, peripheral: SEMC, signal: 'ADDR, 03', pin_signal: GPIO_EMC_12, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A6, peripheral: SEMC, signal: 'ADDR, 04', pin_signal: GPIO_EMC_13, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B6, peripheral: SEMC, signal: 'ADDR, 05', pin_signal: GPIO_EMC_14, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B1, peripheral: SEMC, signal: 'ADDR, 06', pin_signal: GPIO_EMC_15, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A5, peripheral: SEMC, signal: 'ADDR, 07', pin_signal: GPIO_EMC_16, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A4, peripheral: SEMC, signal: 'ADDR, 08', pin_signal: GPIO_EMC_17, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B2, peripheral: SEMC, signal: 'ADDR, 09', pin_signal: GPIO_EMC_18, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: G2, peripheral: SEMC, signal: 'ADDR, 10', pin_signal: GPIO_EMC_23, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B4, peripheral: SEMC, signal: 'ADDR, 11', pin_signal: GPIO_EMC_19, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A3, peripheral: SEMC, signal: 'ADDR, 12', pin_signal: GPIO_EMC_20, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C1, peripheral: SEMC, signal: 'BA, 0', pin_signal: GPIO_EMC_21, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: F1, peripheral: SEMC, signal: 'BA, 1', pin_signal: GPIO_EMC_22, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D3, peripheral: SEMC, signal: semc_cas, pin_signal: GPIO_EMC_24, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: A2, peripheral: SEMC, signal: semc_cke, pin_signal: GPIO_EMC_27, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: B3, peripheral: SEMC, signal: semc_clk, pin_signal: GPIO_EMC_26, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E1, peripheral: SEMC, signal: 'CS, 0', pin_signal: GPIO_EMC_29, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E3, peripheral: SEMC, signal: 'DATA, 00', pin_signal: GPIO_EMC_00, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: F3, peripheral: SEMC, signal: 'DATA, 01', pin_signal: GPIO_EMC_01, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: F4, peripheral: SEMC, signal: 'DATA, 02', pin_signal: GPIO_EMC_02, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: G4, peripheral: SEMC, signal: 'DATA, 03', pin_signal: GPIO_EMC_03, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: F2, peripheral: SEMC, signal: 'DATA, 04', pin_signal: GPIO_EMC_04, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: G5, peripheral: SEMC, signal: 'DATA, 05', pin_signal: GPIO_EMC_05, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: H5, peripheral: SEMC, signal: 'DATA, 06', pin_signal: GPIO_EMC_06, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: H4, peripheral: SEMC, signal: 'DATA, 07', pin_signal: GPIO_EMC_07, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C6, peripheral: SEMC, signal: 'DATA, 08', pin_signal: GPIO_EMC_30, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C5, peripheral: SEMC, signal: 'DATA, 09', pin_signal: GPIO_EMC_31, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D5, peripheral: SEMC, signal: 'DATA, 10', pin_signal: GPIO_EMC_32, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C4, peripheral: SEMC, signal: 'DATA, 11', pin_signal: GPIO_EMC_33, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D4, peripheral: SEMC, signal: 'DATA, 12', pin_signal: GPIO_EMC_34, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E5, peripheral: SEMC, signal: 'DATA, 13', pin_signal: GPIO_EMC_35, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: C3, peripheral: SEMC, signal: 'DATA, 14', pin_signal: GPIO_EMC_36, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: E4, peripheral: SEMC, signal: 'DATA, 15', pin_signal: GPIO_EMC_37, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: H3, peripheral: SEMC, signal: 'DM, 0', pin_signal: GPIO_EMC_08, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D6, peripheral: SEMC, signal: 'DM, 1', pin_signal: GPIO_EMC_38, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D2, peripheral: SEMC, signal: semc_ras, pin_signal: GPIO_EMC_25, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: D1, peripheral: SEMC, signal: semc_we, pin_signal: GPIO_EMC_28, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitSemcPins
+ * Description   : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitSemcPins(void) {
+  CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03u */
+
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_00_SEMC_DATA00,         /* GPIO_EMC_00 is configured as SEMC_DATA00 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_01_SEMC_DATA01,         /* GPIO_EMC_01 is configured as SEMC_DATA01 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_02_SEMC_DATA02,         /* GPIO_EMC_02 is configured as SEMC_DATA02 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_03_SEMC_DATA03,         /* GPIO_EMC_03 is configured as SEMC_DATA03 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_04_SEMC_DATA04,         /* GPIO_EMC_04 is configured as SEMC_DATA04 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_05_SEMC_DATA05,         /* GPIO_EMC_05 is configured as SEMC_DATA05 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_06_SEMC_DATA06,         /* GPIO_EMC_06 is configured as SEMC_DATA06 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_07_SEMC_DATA07,         /* GPIO_EMC_07 is configured as SEMC_DATA07 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_08_SEMC_DM00,           /* GPIO_EMC_08 is configured as SEMC_DM00 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_09_SEMC_ADDR00,         /* GPIO_EMC_09 is configured as SEMC_ADDR00 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_10_SEMC_ADDR01,         /* GPIO_EMC_10 is configured as SEMC_ADDR01 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_11_SEMC_ADDR02,         /* GPIO_EMC_11 is configured as SEMC_ADDR02 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_12_SEMC_ADDR03,         /* GPIO_EMC_12 is configured as SEMC_ADDR03 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_13_SEMC_ADDR04,         /* GPIO_EMC_13 is configured as SEMC_ADDR04 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_14_SEMC_ADDR05,         /* GPIO_EMC_14 is configured as SEMC_ADDR05 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_15_SEMC_ADDR06,         /* GPIO_EMC_15 is configured as SEMC_ADDR06 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_16_SEMC_ADDR07,         /* GPIO_EMC_16 is configured as SEMC_ADDR07 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_17_SEMC_ADDR08,         /* GPIO_EMC_17 is configured as SEMC_ADDR08 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_18_SEMC_ADDR09,         /* GPIO_EMC_18 is configured as SEMC_ADDR09 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_19_SEMC_ADDR11,         /* GPIO_EMC_19 is configured as SEMC_ADDR11 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_20_SEMC_ADDR12,         /* GPIO_EMC_20 is configured as SEMC_ADDR12 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_21_SEMC_BA0,            /* GPIO_EMC_21 is configured as SEMC_BA0 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_22_SEMC_BA1,            /* GPIO_EMC_22 is configured as SEMC_BA1 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_23_SEMC_ADDR10,         /* GPIO_EMC_23 is configured as SEMC_ADDR10 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_24_SEMC_CAS,            /* GPIO_EMC_24 is configured as SEMC_CAS */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_25_SEMC_RAS,            /* GPIO_EMC_25 is configured as SEMC_RAS */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_26_SEMC_CLK,            /* GPIO_EMC_26 is configured as SEMC_CLK */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_27_SEMC_CKE,            /* GPIO_EMC_27 is configured as SEMC_CKE */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_28_SEMC_WE,             /* GPIO_EMC_28 is configured as SEMC_WE */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_29_SEMC_CS0,            /* GPIO_EMC_29 is configured as SEMC_CS0 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_30_SEMC_DATA08,         /* GPIO_EMC_30 is configured as SEMC_DATA08 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_31_SEMC_DATA09,         /* GPIO_EMC_31 is configured as SEMC_DATA09 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_32_SEMC_DATA10,         /* GPIO_EMC_32 is configured as SEMC_DATA10 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_33_SEMC_DATA11,         /* GPIO_EMC_33 is configured as SEMC_DATA11 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_34_SEMC_DATA12,         /* GPIO_EMC_34 is configured as SEMC_DATA12 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_35_SEMC_DATA13,         /* GPIO_EMC_35 is configured as SEMC_DATA13 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_36_SEMC_DATA14,         /* GPIO_EMC_36 is configured as SEMC_DATA14 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_37_SEMC_DATA15,         /* GPIO_EMC_37 is configured as SEMC_DATA15 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_EMC_38_SEMC_DM01,           /* GPIO_EMC_38 is configured as SEMC_DM01 */
+      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_00_SEMC_DATA00,         /* GPIO_EMC_00 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_01_SEMC_DATA01,         /* GPIO_EMC_01 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_02_SEMC_DATA02,         /* GPIO_EMC_02 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_03_SEMC_DATA03,         /* GPIO_EMC_03 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_04_SEMC_DATA04,         /* GPIO_EMC_04 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_05_SEMC_DATA05,         /* GPIO_EMC_05 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_06_SEMC_DATA06,         /* GPIO_EMC_06 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_07_SEMC_DATA07,         /* GPIO_EMC_07 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_08_SEMC_DM00,           /* GPIO_EMC_08 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_09_SEMC_ADDR00,         /* GPIO_EMC_09 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_10_SEMC_ADDR01,         /* GPIO_EMC_10 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_11_SEMC_ADDR02,         /* GPIO_EMC_11 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_12_SEMC_ADDR03,         /* GPIO_EMC_12 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_13_SEMC_ADDR04,         /* GPIO_EMC_13 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_14_SEMC_ADDR05,         /* GPIO_EMC_14 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_15_SEMC_ADDR06,         /* GPIO_EMC_15 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_16_SEMC_ADDR07,         /* GPIO_EMC_16 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_17_SEMC_ADDR08,         /* GPIO_EMC_17 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_18_SEMC_ADDR09,         /* GPIO_EMC_18 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_19_SEMC_ADDR11,         /* GPIO_EMC_19 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_20_SEMC_ADDR12,         /* GPIO_EMC_20 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_21_SEMC_BA0,            /* GPIO_EMC_21 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_22_SEMC_BA1,            /* GPIO_EMC_22 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_23_SEMC_ADDR10,         /* GPIO_EMC_23 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_24_SEMC_CAS,            /* GPIO_EMC_24 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_25_SEMC_RAS,            /* GPIO_EMC_25 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_26_SEMC_CLK,            /* GPIO_EMC_26 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_27_SEMC_CKE,            /* GPIO_EMC_27 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_28_SEMC_WE,             /* GPIO_EMC_28 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_29_SEMC_CS0,            /* GPIO_EMC_29 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_30_SEMC_DATA08,         /* GPIO_EMC_30 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_31_SEMC_DATA09,         /* GPIO_EMC_31 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_32_SEMC_DATA10,         /* GPIO_EMC_32 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_33_SEMC_DATA11,         /* GPIO_EMC_33 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_34_SEMC_DATA12,         /* GPIO_EMC_34 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_35_SEMC_DATA13,         /* GPIO_EMC_35 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_36_SEMC_DATA14,         /* GPIO_EMC_36 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_37_SEMC_DATA15,         /* GPIO_EMC_37 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_EMC_38_SEMC_DM01,           /* GPIO_EMC_38 PAD functional properties : */
+      0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Disabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+}
+
+
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitI2C1Pins:
+- options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'}
+- pin_list:
+  - {pin_num: J11, peripheral: LPI2C1, signal: SCL, pin_signal: GPIO_AD_B1_00, software_input_on: Enable, hysteresis_enable: Disable, pull_up_down_config: Pull_Up_22K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Enable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+  - {pin_num: K11, peripheral: LPI2C1, signal: SDA, pin_signal: GPIO_AD_B1_01, software_input_on: Enable, hysteresis_enable: Disable, pull_up_down_config: Pull_Up_22K_Ohm,
+    pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Enable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitI2C1Pins
+ * Description   : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitI2C1Pins(void) {
+  CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03u */
+
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL,        /* GPIO_AD_B1_00 is configured as LPI2C1_SCL */
+      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_00 */
+  IOMUXC_SetPinMux(
+      IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA,        /* GPIO_AD_B1_01 is configured as LPI2C1_SDA */
+      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_01 */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL,        /* GPIO_AD_B1_00 PAD functional properties : */
+      0xD8B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Enabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 22K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+  IOMUXC_SetPinConfig(
+      IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA,        /* GPIO_AD_B1_01 PAD functional properties : */
+      0xD8B0u);                               /* Slew Rate Field: Slow Slew Rate
+                                                 Drive Strength Field: R0/6
+                                                 Speed Field: medium(100MHz)
+                                                 Open Drain Enable Field: Open Drain Enabled
+                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
+                                                 Pull / Keep Select Field: Keeper
+                                                 Pull Up / Down Config. Field: 22K Ohm Pull Up
+                                                 Hyst. Enable Field: Hysteresis Disabled */
+}
+
+/***********************************************************************************************************************
+ * EOF
+ **********************************************************************************************************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/pin_mux.h	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,105 @@
+/*
+ * The Clear BSD License
+ * Copyright 2017-2018 NXP
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ * that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+#ifndef _PIN_MUX_H_
+#define _PIN_MUX_H_
+
+/***********************************************************************************************************************
+ * Definitions
+ **********************************************************************************************************************/
+
+/*! @brief Direction type  */
+typedef enum _pin_mux_direction
+{
+  kPIN_MUX_DirectionInput = 0U,         /* Input direction */
+  kPIN_MUX_DirectionOutput = 1U,        /* Output direction */
+  kPIN_MUX_DirectionInputOrOutput = 2U  /* Input or output direction */
+} pin_mux_direction_t;
+
+/*!
+ * @addtogroup pin_mux
+ * @{
+ */
+
+/***********************************************************************************************************************
+ * API
+ **********************************************************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ * @brief Calls initialization functions.
+ *
+ */
+void BOARD_InitBootPins(void);
+
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitPins(void);
+
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitSemcPins(void);
+
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitI2C1Pins(void);
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*!
+ * @}
+ */
+#endif /* _PIN_MUX_H_ */
+
+/***********************************************************************************************************************
+ * EOF
+ **********************************************************************************************************************/