diff --git a/apps/lang/english.lang b/apps/lang/english.lang
old mode 100644
new mode 100755
index 7d1e242..d2442dd
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12604,3 +12604,101 @@
remote: "Remote Statusbar"
+
+ id: LANG_MAPPING_RULE
+ desc: mapping rule
+ user: core
+
+ *: "Tag string mapping rule"
+
+
+ *: "Tag string mapping rule"
+
+
+ *: "Tag string mapping rule"
+
+
+
+ id: LANG_MAPPING_RULE_IGNORE_DIACRITICAL_MARK
+ desc: mapping rule: ignore diacritical mark
+ user: core
+
+ *: "Ignore diacritical mark"
+
+
+ *: "Ignore diacritical mark"
+
+
+ *: "Ignore diacritical mark"
+
+
+
+ id: LANG_MAPPING_RULE_MAPPING_UMLAUT_MODE
+ desc: mapping rule: umlaut mapping mode
+ user: core
+
+ *: "Umlaut mapping mode"
+
+
+ *: "Umlaut mapping mode"
+
+
+ *: "Umlaut mapping mode"
+
+
+
+ id: LANG_MAPPING_RULE_UMLAUT_MAPPING_NOT_DELETE_UMLAUT
+ desc: mapping rule: ä != a, ae, ë != e, ee, ï != i, ie, ü != u, ue, ö != o, oe.
+ user: core
+
+ *: "ä -> ä"
+
+
+ *: "ä -> ä"
+
+
+ *: "A with umlaut mapping is done in A with umlaut"
+
+
+
+ id: LANG_MAPPING_RULE_UMLAUT_MAPPING_DELETE_UMLAUT
+ desc: mapping rule: ä -> a, ë -> e, ï -> i, ü -> u, ö -> o.
+ user: core
+
+ *: "ä -> a"
+
+
+ *: "ä -> a"
+
+
+ *: "A with umlaut mapping is done in A"
+
+
+
+ id: LANG_MAPPING_RULE_UMLAUT_MAPPING_WITH_E
+ desc: mapping rule: ä -> ae, ë -> ee, ï -> ie, ü -> ue, ö -> oe.
+ user: core
+
+ *: "ä -> ae"
+
+
+ *: "ä -> ae"
+
+
+ *: "A with umlaut mapping is done in A E"
+
+
+
+ id: LANG_MAPPING_RULE_UMLAUT_INVALID
+ desc: mapping rule: selected umlaut mapping mode is invalid
+ user: core
+
+ *: "Invalid selection"
+
+
+ *: "Invalid selection"
+
+
+ *: "Invalid selection"
+
+
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index fdc7758..cc7fdea 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -49,6 +49,32 @@
#endif
/***********************************/
+/* TAG STRING MAPPING RULE MENU */
+static int mr_umlaut_callback(int action,const struct menu_item_ex *this_item);
+MENUITEM_SETTING(mr_diacritical_mark, &global_settings.ignore_diacritical_mark, NULL);
+MENUITEM_SETTING(mr_umlaut, &global_settings.umlaut_mapping_mode, mr_umlaut_callback);
+
+static int mr_umlaut_callback(int action,const struct menu_item_ex *this_item)
+{
+ static int oldval;
+ int *variable = this_item->variable;
+ switch (action)
+ {
+ case ACTION_EXIT_MENUITEM: /* on exit */
+ if ((global_settings.ignore_diacritical_mark && *variable == 0) ||
+ (!global_settings.ignore_diacritical_mark && *variable != 0))
+ splash(HZ/2, ID2P(LANG_MAPPING_RULE_UMLAUT_INVALID));
+ else
+ oldval = *variable;
+ break;
+ }
+ return action;
+}
+
+MAKE_MENU(mapping_menu, ID2P(LANG_MAPPING_RULE), 0, Icon_NOICON,
+ &mr_diacritical_mark, &mr_umlaut);
+
+/***********************************/
/* TAGCACHE MENU */
#ifdef HAVE_TAGCACHE
@@ -86,7 +112,7 @@ MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON,
&tagcache_ram,
#endif
&tagcache_autoupdate, &tc_init, &tc_update, &runtimedb,
- &tc_export, &tc_import);
+ &tc_export, &tc_import, &mapping_menu);
#endif /* HAVE_TAGCACHE */
/* TAGCACHE MENU */
/***********************************/
diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c
index 703b330..f728770 100644
--- a/apps/plugins/text_editor.c
+++ b/apps/plugins/text_editor.c
@@ -182,13 +182,19 @@ void save_changes(int overwrite)
if (!filename[0] || !overwrite)
{
rb->strcpy(filename,"/");
- rb->kbd_input(filename,MAX_PATH);
+ if (rb->kbd_input(filename,MAX_PATH) < 0)
+ {
+ filename[0] = '\0';
+ rb->splash(HZ*2, "Changes NOT saved");
+ return;
+ }
}
fd = rb->open(filename,O_WRONLY|O_CREAT|O_TRUNC);
if (fd < 0)
{
- rb->splash(HZ*2, "Changes NOT saved");
+ filename[0] = '\0';
+ rb->splash(HZ*2, "Can not save !!");
return;
}
diff --git a/apps/settings.c b/apps/settings.c
old mode 100644
new mode 100755
index e2f40a1..2a17761
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -984,6 +984,10 @@ void settings_apply(bool read_disk)
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
list_init_viewports(NULL);
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
+
+ set_normalize_rule_diacritical_mark(global_settings.ignore_diacritical_mark);
+ set_normalize_rule_umlaut(global_settings.umlaut_mapping_mode);
+
}
diff --git a/apps/settings.h b/apps/settings.h
old mode 100644
new mode 100755
index 93a998e..c99b461
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -739,6 +739,10 @@ struct user_settings
struct touchscreen_parameter ts_calibration_data;
#endif
+ /* database tag string mapping rule */
+ bool ignore_diacritical_mark;
+ int umlaut_mapping_mode;
+
/* If values are just added to the end, no need to bump plugin API
version. */
/* new stuff to be added at the end */
diff --git a/apps/settings_list.c b/apps/settings_list.c
old mode 100644
new mode 100755
index 9cfd9aa..f0d2e93
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -1528,6 +1528,17 @@ const struct settings_list settings[] = {
tsc_is_changed, tsc_set_default),
#endif
OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent track skip", NULL),
+
+ OFFON_SETTING(0, ignore_diacritical_mark, LANG_MAPPING_RULE_IGNORE_DIACRITICAL_MARK,
+ true, "mapping rule ignore diacritical mark",
+ set_normalize_rule_diacritical_mark),
+ CHOICE_SETTING(0, umlaut_mapping_mode, LANG_MAPPING_RULE_MAPPING_UMLAUT_MODE, 1,
+ "mapping rule umlaut mapping mode",
+ "0,1,2",
+ set_normalize_rule_umlaut, 3,
+ ID2P(LANG_MAPPING_RULE_UMLAUT_MAPPING_NOT_DELETE_UMLAUT),
+ ID2P(LANG_MAPPING_RULE_UMLAUT_MAPPING_DELETE_UMLAUT),
+ ID2P(LANG_MAPPING_RULE_UMLAUT_MAPPING_WITH_E)),
};
const int nb_settings = sizeof(settings)/sizeof(*settings);
diff --git a/apps/tagcache.c b/apps/tagcache.c
old mode 100644
new mode 100755
index 07af9bf..4df4dfd
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -76,6 +76,7 @@
#include "settings.h"
#include "dir.h"
#include "structec.h"
+#include "unistring.h"
#ifndef __PCTOOL__
#include "lang.h"
@@ -806,34 +807,6 @@ long tagcache_get_numeric(const struct tagcache_search *tcs, int tag)
return check_virtual_tags(tag, &idx);
}
-inline static bool str_ends_with(const char *str1, const char *str2)
-{
- int str_len = strlen(str1);
- int clause_len = strlen(str2);
-
- if (clause_len > str_len)
- return false;
-
- return !strcasecmp(&str1[str_len - clause_len], str2);
-}
-
-inline static bool str_oneof(const char *str, const char *list)
-{
- const char *sep;
- int l, len = strlen(str);
-
- while (*list)
- {
- sep = strchr(list, '|');
- l = sep ? (long)sep - (long)list : (int)strlen(list);
- if ((l==len) && !strncasecmp(str, list, len))
- return true;
- list += sep ? l + 1 : l;
- }
-
- return false;
-}
-
static bool check_against_clause(long numeric, const char *str,
const struct tagcache_search_clause *clause)
{
@@ -862,31 +835,31 @@ static bool check_against_clause(long numeric, const char *str,
switch (clause->type)
{
case clause_is:
- return !strcasecmp(clause->str, str);
+ return !utf8strcmp(clause->str, str);
case clause_is_not:
- return strcasecmp(clause->str, str);
+ return utf8strcmp(clause->str, str);
case clause_gt:
- return 0>strcasecmp(clause->str, str);
+ return 0>utf8strcmp(clause->str, str);
case clause_gteq:
- return 0>=strcasecmp(clause->str, str);
+ return 0>=utf8strcmp(clause->str, str);
case clause_lt:
- return 0str, str);
+ return 0str, str);
case clause_lteq:
- return 0<=strcasecmp(clause->str, str);
+ return 0<=utf8strcmp(clause->str, str);
case clause_contains:
- return (strcasestr(str, clause->str) != NULL);
+ return find(str, clause->str);
case clause_not_contains:
- return (strcasestr(str, clause->str) == NULL);
+ return !find(str, clause->str);
case clause_begins_with:
- return (strcasestr(str, clause->str) == str);
+ return starts_with(str, clause->str);
case clause_not_begins_with:
- return (strcasestr(str, clause->str) != str);
+ return !starts_with(str, clause->str);
case clause_ends_with:
- return str_ends_with(str, clause->str);
+ return ends_with(str, clause->str);
case clause_not_ends_with:
- return !str_ends_with(str, clause->str);
+ return !ends_with(str, clause->str);
case clause_oneof:
- return str_oneof(str, clause->str);
+ return match_one_of(str, clause->str, '|');
default:
logf("Incorrect tag: %d", clause->type);
diff --git a/apps/tagtree.c b/apps/tagtree.c
old mode 100644
new mode 100755
index 691b227..6260b88
--- a/apps/tagtree.c
+++ b/apps/tagtree.c
@@ -53,6 +53,7 @@
#include "appevents.h"
#include "storage.h"
#include "dir_uncached.h"
+#include "unistring.h"
#define FILE_SEARCH_INSTRUCTIONS ROCKBOX_DIR "/tagnavi.config"
@@ -637,9 +638,9 @@ static int compare(const void *p1, const void *p2)
struct tagentry *e2 = (struct tagentry *)p2;
if (sort_inverse)
- return strncasecmp(e2->name, e1->name, MAX_PATH);
+ return utf8strncmp(e2->name, e1->name, MAX_PATH);
- return strncasecmp(e1->name, e2->name, MAX_PATH);
+ return utf8strncmp(e1->name, e2->name, MAX_PATH);
}
static void tagtree_buffer_event(struct mp3entry *id3)
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 7c1a17f..9440b63 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -20,6 +20,7 @@ timer.c
#endif /* SIMULATOR */
panic.c
debug.c
+unistring.c
/* Common */
common/atoi.c
diff --git a/firmware/common/unicode.c b/firmware/common/unicode.c
index 61989e5..f51cb0d 100644
--- a/firmware/common/unicode.c
+++ b/firmware/common/unicode.c
@@ -113,6 +113,49 @@ static const unsigned char utf8comp[6] =
0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC
};
+/* code normalize */
+
+/*
+ * If the mapping table file (uni.mt/unimini.mt)'s version != ACCEPT_MAPPING_TABLE_VERSION,
+ * then it is invalid file.
+ */
+#define ACCEPT_MAPPING_TABLE_VERSION 1
+
+#ifdef HAVE_LCD_BITMAP
+
+#define MAX_MAPPING_INDEX_COUNT 14
+#define MAPPING_FILENAME CODEPAGE_DIR"/uni.mt"
+
+#else /* !HAVE_LCD_BITMAP, reduced support */
+
+#define MAX_MAPPING_INDEX_COUNT 8
+#define MAPPING_FILENAME CODEPAGE_DIR"/unimini.mt"
+
+#endif
+
+#define MAX_MAPPING_TABLE_SIZE (MAX_MAPPING_INDEX_COUNT << 8)
+#define MAX_MAPPING_DATA_SIZE ((MAX_MAPPING_TABLE_SIZE << 1) + 256)
+
+static unsigned short* mapping_table[MAX_MAPPING_TABLE_SIZE];
+static unsigned short normalize_data[MAX_MAPPING_DATA_SIZE];
+static char mapping_index[256] = {0};
+static int loaded_mapping_table = 0;
+
+#define NR_WITH_DIACRITICAL_MARK 1
+#define NR_UMLAUT_MAPPING_WITH_E 2
+
+#define NR_UMLAUT_MODE_NOT_DELETE_UMLAUT 0
+#define NR_UMLAUT_MODE_DELETE_UMLAUT 1
+#define NR_UMLAUT_MODE_WITH_E 2
+
+struct normalize_rule
+{
+ bool diacritical_mark;
+ int umlaut_mode;
+};
+
+static struct normalize_rule nr = { true, NR_UMLAUT_MODE_DELETE_UMLAUT };
+
/* Load codepage file into memory */
static int load_cp_table(int cp)
{
@@ -392,3 +435,243 @@ const char* get_codepage_name(int cp)
return name_codepages[NUM_CODEPAGES];
return name_codepages[cp];
}
+
+/* normalize functions */
+
+static int read_mapping_table_data(int file, int index, unsigned short **np, bool flg)
+{
+ int i;
+ int len;
+ unsigned char tmp[MAX_MAPPING_INDEX_COUNT];
+
+ unsigned short *enp = normalize_data + MAX_MAPPING_DATA_SIZE;
+
+ if (!read(file, tmp, 1))
+ {
+ DEBUGF("[%d] Can't read maping data\n", index);
+ return 1;
+ }
+
+ len = tmp[0];
+
+ if (!flg)
+ {
+ if (lseek(file, len << 1, SEEK_CUR) < 0)
+ {
+ DEBUGF("[%d] Can't read maping data\n", index);
+ return 1;
+ }
+ return 0;
+ }
+
+ mapping_table[index] = *np;
+ **np = len;
+ (*np)++;
+
+ if (len == 0)
+ return 0;
+
+ if (len > 4)
+ {
+ DEBUGF("[%d] mapping data length too long: %d\n", index, len);
+ return 1;
+ }
+
+ if (!read(file, tmp, len << 1))
+ {
+ DEBUGF("[%d] Can't read mapping data\n", index);
+ return 1;
+ }
+
+ if (enp - *np <= len)
+ {
+ DEBUGF("[%d] mapping data too many: %d\n", index, len);
+ return 1;
+ }
+ for (i = 0; i < len; i++)
+ {
+ **np = (tmp[(i << 1) + 1] << 8) | tmp[i << 1];
+ (*np)++;
+ }
+
+ return 0;
+}
+
+/* Load character mapping data file into memory */
+static int load_mapping_table(void)
+{
+ int i;
+ int file;
+ int res = 0;
+ int index_size = 0;
+ int table_size = 0;
+ unsigned short *np = normalize_data;
+ unsigned char tmp[MAX_MAPPING_INDEX_COUNT];
+ unsigned char mapping;
+
+ if (loaded_mapping_table != 0)
+ return 1;
+
+ file = open(MAPPING_FILENAME, O_RDONLY|O_BINARY);
+
+ if (file < 0)
+ {
+ DEBUGF("Can't open mapping table file: %s\n", MAPPING_FILENAME);
+ return 0;
+ }
+
+ if (!read(file, tmp, 2))
+ {
+ DEBUGF("Can't read mapping data\n");
+ close(file);
+ return 0;
+ }
+
+ if (tmp[0] != ACCEPT_MAPPING_TABLE_VERSION)
+ {
+ DEBUGF("mapping table version invalid: %d\n", tmp[0]);
+ close(file);
+ return 0;
+ }
+
+ index_size = tmp[1];
+ table_size = tmp[1] << 8;
+
+ if (index_size > MAX_MAPPING_INDEX_COUNT)
+ {
+ DEBUGF("mapping data too many\n");
+ close(file);
+ return 0;
+ }
+
+ if (!read(file, tmp, index_size))
+ {
+ DEBUGF("Can't read mapping index data\n");
+ close(file);
+ return 0;
+ }
+
+ for (i = 0; i < index_size; i++)
+ mapping_index[tmp[i]] = i+1;
+
+ for (i = 0; i < table_size; i++)
+ {
+ if (!read(file, tmp, 1))
+ {
+ DEBUGF("[%d] Can't read maping data\n", i);
+ res = 1;
+ break;
+ }
+
+ mapping = tmp[0];
+
+ res = read_mapping_table_data(file, i, &np,
+ (mapping == 0) ||
+ (nr.diacritical_mark &&
+ (mapping == NR_WITH_DIACRITICAL_MARK ||
+ nr.umlaut_mode == NR_UMLAUT_MODE_DELETE_UMLAUT)));
+ if (res)
+ break;
+
+ if (mapping & NR_WITH_DIACRITICAL_MARK)
+ {
+ res = read_mapping_table_data(file, i, &np, !nr.diacritical_mark);
+ if (res)
+ break;
+ }
+
+ if (mapping & NR_UMLAUT_MAPPING_WITH_E)
+ {
+ res = read_mapping_table_data(file, i, &np, (nr.umlaut_mode == NR_UMLAUT_MODE_WITH_E));
+ if (res)
+ break;
+ }
+ }
+
+ loaded_mapping_table = (res == 0);
+ close(file);
+
+ return res;
+}
+
+void set_normalize_rule_diacritical_mark(bool rule)
+{
+ if (nr.diacritical_mark != rule)
+ {
+ nr.diacritical_mark = rule;
+ set_normalize_rule_umlaut(nr.umlaut_mode);
+ loaded_mapping_table = 0;
+ }
+}
+
+void set_normalize_rule_umlaut(int mode)
+{
+ if (mode < 0 || mode > 2)
+ mode = NR_UMLAUT_MODE_DELETE_UMLAUT;
+ if (mode != NR_UMLAUT_MODE_NOT_DELETE_UMLAUT && !nr.diacritical_mark)
+ mode = NR_UMLAUT_MODE_NOT_DELETE_UMLAUT;
+ else if (mode == NR_UMLAUT_MODE_NOT_DELETE_UMLAUT && nr.diacritical_mark)
+ mode = NR_UMLAUT_MODE_DELETE_UMLAUT;
+
+ if (nr.umlaut_mode != mode)
+ {
+ nr.umlaut_mode = mode;
+ loaded_mapping_table = 0;
+ }
+}
+
+inline static int search_mapping_data(const unsigned short ucs)
+{
+ return mapping_index[ucs >> 8]-1;
+}
+
+/*
+ * normalize UTF16 string
+ *
+ * Because one character replaces four characters or less as a result of normarization,
+ * "dst" should be able to store more than 4 * count + 1 characters.
+ *
+ */
+int utf16normalize(unsigned short *src, unsigned short *dst, int count)
+{
+ int idx;
+ int len;
+ unsigned short *dp = dst;
+ unsigned short *p;
+
+ if (!load_mapping_table())
+ {
+ while (count-- > 0)
+ {
+ if (*src == 0)
+ break;
+ *dp++ = *src++;
+ }
+ *dp = 0x0000;
+ return dp - dst;
+ }
+
+ while (count-- > 0)
+ {
+ if (*src == 0)
+ break;
+ idx = search_mapping_data(*src);
+ if (idx < 0)
+ *dp++ = *src;
+ else
+ {
+ p = mapping_table[(idx << 8) | (*src & 0xff)];
+ len = *p;
+ if (len == 0)
+ count++;
+ else
+ {
+ while (len-- > 0)
+ *dp++ = *(++p);
+ }
+ }
+ src++;
+ }
+ *dp = 0x0000;
+ return dp - dst;
+}
diff --git a/firmware/include/rbunicode.h b/firmware/include/rbunicode.h
index 39fe253..0185649 100644
--- a/firmware/include/rbunicode.h
+++ b/firmware/include/rbunicode.h
@@ -27,7 +27,8 @@
*/
#ifndef _RBUNICODE_H_
#define _RBUNICODE_H_
-
+
+#include
#ifndef __PCTOOL__
#include "config.h"
#endif
@@ -62,4 +63,7 @@ const unsigned char* utf8decode(const unsigned char *utf8, unsigned short *ucs);
void set_codepage(int cp);
int utf8seek(const unsigned char* utf8, int offset);
const char* get_codepage_name(int cp);
+void set_normalize_rule_diacritical_mark(bool rule);
+void set_normalize_rule_umlaut(int mode);
+int utf16normalize(unsigned short *ucs, unsigned short *out, int count);
#endif /* _RBUNICODE_H_ */
diff --git a/tools/Makefile b/tools/Makefile
old mode 100644
new mode 100755
index 43f53e2..4b4cf48
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -13,7 +13,8 @@ LDFLAGS := -g
CLEANALL := scramble descramble iriver sh2d bmp2rb rdf2binary convbdf \
generate_rocklatin mkboot ipod_fw codepages uclpack mi4 gigabeat \
- lngdump telechips gigabeats creative hmac-sha1 mktccboot mknkboot rbspeexenc mkzenboot
+ lngdump telechips gigabeats creative hmac-sha1 mktccboot mknkboot rbspeexenc mkzenboot \
+ mkmappingtable
all: scramble descramble sh2d rdf2binary mkboot mktccboot mknkboot mkzenboot \
convbdf codepages uclpack rbspeexenc voicefont
@@ -95,6 +96,9 @@ voicefont: voicefont.c
usb_benchmark: usb_benchmark.c
$(SILENT)$(CC) $(CFLAGS) -lusb $+ -o $@
+mkmappingtable: mkmappingtable.c code_mapping_tables.c
+ $(SILENT)$(CC) $(CFLAGS) $+ -o $@
+
clean:
@echo "Cleaning tools"
$(SILENT)rm -f $(CLEANALL) $(shell for f in $(CLEANALL) ; do echo $$f.exe $$f.o $$f.obj ; done) *.ajf *~
diff --git a/tools/buildzip.pl b/tools/buildzip.pl
index d21fd8e..c887868 100755
--- a/tools/buildzip.pl
+++ b/tools/buildzip.pl
@@ -255,12 +255,15 @@ STOP
if($bitmap) {
system("$ROOT/tools/codepages");
+ system("$ROOT/tools/mkmappingtable");
}
else {
system("$ROOT/tools/codepages -m");
+ system("$ROOT/tools/mkmappingtable -m");
}
glob_move('*.cp', "$rbdir/codepages/");
+ glob_move('*.mt', "$rbdir/codepages/");
if($bitmap) {
mkdir "$rbdir/codecs", 0777;
diff --git a/tools/configure b/tools/configure
index e543919..4d86700 100755
--- a/tools/configure
+++ b/tools/configure
@@ -797,7 +797,7 @@ EOF
fi
# Set of tools built for all target platforms:
- toolset="rdf2binary convbdf codepages"
+ toolset="rdf2binary convbdf codepages mkmappingtable"
# Toolsets for some target families:
archosbitmaptools="$toolset scramble descramble sh2d uclpack bmp2rb"
diff --git a/tools/root.make b/tools/root.make
index 0058637..2b507d5 100644
--- a/tools/root.make
+++ b/tools/root.make
@@ -20,7 +20,8 @@ PPCFLAGS = $(filter-out -Dmain=SDL_main,$(CFLAGS)) # cygwin sdl-config fix
TOOLS = $(TOOLSDIR)/rdf2binary $(TOOLSDIR)/convbdf \
$(TOOLSDIR)/codepages $(TOOLSDIR)/scramble $(TOOLSDIR)/bmp2rb \
- $(TOOLSDIR)/uclpack $(TOOLSDIR)/mktccboot $(TOOLSDIR)/mkboot
+ $(TOOLSDIR)/uclpack $(TOOLSDIR)/mktccboot $(TOOLSDIR)/mkboot \
+ $(TOOLSDIR)/mkmappingtable
ifeq (,$(PREFIX))
diff --git a/tools/tools.make b/tools/tools.make
index e033774..3c1e0af 100644
--- a/tools/tools.make
+++ b/tools/tools.make
@@ -21,6 +21,7 @@ $(TOOLSDIR)/mkboot: $(TOOLSDIR)/mkboot.c
$(TOOLSDIR)/mktccboot: $(TOOLSDIR)/mktccboot.c $(TOOLSDIR)/telechips.c
$(TOOLSDIR)/wavtrim: $(TOOLSDIR)/wavtrim.c
$(TOOLSDIR)/voicefont: $(TOOLSDIR)/voicefont.c
+$(TOOLSDIR)/mkmappingtable: $(TOOLSDIR)/mkmappingtable.c $(TOOLSDIR)/code_mapping_tables.c $(TOOLSDIR)/code_mapping_tables.h
$(TOOLSDIR)/iaudio_bl_flash.c $(TOOLSDIR)/iaudio_bl_flash.h: $(TOOLSDIR)/iaudio_bl_flash.bmp $(TOOLSDIR)/bmp2rb
$(call PRINTS,BMP2RB $(@F))
diff --git a/firmware/export/unistring.h b/firmware/export/unistring.h
new file mode 100644
index 0000000..ab24224
--- /dev/null
+++ b/firmware/export/unistring.h
@@ -0,0 +1,29 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include
+
+int utf8strcmp(const unsigned char *s1, const unsigned char *s2);
+int utf8strncmp(const unsigned char *s1, const unsigned char *s2, int len);
+bool find(const unsigned char *phaystack, const unsigned char *pneedle);
+bool match_one_of(const unsigned char *s, const unsigned char *list, unsigned short sepr);
+bool starts_with(const unsigned char *phaystack, const unsigned char *pneedle);
+bool ends_with(const unsigned char *phaystack, const unsigned char *pneedle);
diff --git a/firmware/unistring.c b/firmware/unistring.c
new file mode 100644
index 0000000..5d40c08
--- /dev/null
+++ b/firmware/unistring.c
@@ -0,0 +1,190 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "rbunicode.h"
+#include "unistring.h"
+
+/* -------------------------------------------------------------------------- */
+/* UTF8 -> UTF16 convert functions */
+/* -------------------------------------------------------------------------- */
+static int utf8_non_normalize_decode(const unsigned char* utf8, unsigned short* ucs, int len)
+{
+ unsigned short *p = ucs;
+
+ while (len-- > 0)
+ {
+ if (*utf8 == '\0')
+ break;
+ utf8 = utf8decode(utf8, p++);
+ }
+ *p = 0;
+ return p - ucs;
+}
+
+static int utf8_normalize_decode(const unsigned char* utf8, unsigned short* ucs, int len)
+{
+ unsigned short tucs[len+1];
+ int tlen = utf8_non_normalize_decode(utf8, tucs, len);
+
+ return utf16normalize(tucs, ucs, tlen);
+}
+
+/* -------------------------------------------------------------------------- */
+/* UTF16 string compare functions */
+/* -------------------------------------------------------------------------- */
+static int wcscmp(const unsigned short* s1, const unsigned short* s2)
+{
+ while (*s1 == *s2 && *s1 != 0)
+ {
+ s1++;
+ s2++;
+ }
+
+ return *s1 - *s2;
+}
+
+static int wcsncmp(const unsigned short* s1, const unsigned short* s2, int len)
+{
+ if (len <= 0)
+ return 0;
+
+ while (*s1 == *s2 && --len != 0)
+ {
+ if (*s1 == 0)
+ break;
+ s1++;
+ s2++;
+ }
+
+ return *s1 - *s2;
+}
+
+/* -------------------------------------------------------------------------- */
+/* UTF8 string compare functions */
+/* -------------------------------------------------------------------------- */
+
+int utf8strcmp(const unsigned char* s1, const unsigned char* s2)
+{
+ int len1 = utf8length(s1);
+ int len2 = utf8length(s2);
+
+ unsigned short ws1[4*len1+1];
+ unsigned short ws2[4*len2+1];
+
+ utf8_normalize_decode(s1, ws1, len1);
+ utf8_normalize_decode(s2, ws2, len2);
+
+ return wcscmp(ws1, ws2);
+}
+
+int utf8strncmp(const unsigned char* s1, const unsigned char* s2, int len)
+{
+ int len1 = utf8length(s1);
+ int len2 = utf8length(s2);
+ unsigned short ws1[4*len1+1];
+ unsigned short ws2[4*len2+1];
+
+ utf8_normalize_decode(s1, ws1, len1);
+ utf8_normalize_decode(s2, ws2, len2);
+
+ return wcsncmp(ws1, ws2, len);
+}
+
+bool find(const unsigned char* phaystack, const unsigned char* pneedle)
+{
+ int hlen = utf8length(phaystack);
+ int nlen = utf8length(pneedle);
+ unsigned short hws[4*hlen+1];
+ unsigned short nws[4*nlen+1];
+ unsigned short *p = hws;
+ int len;
+
+ hlen = utf8_normalize_decode(phaystack, hws, hlen);
+ nlen = utf8_normalize_decode(pneedle, nws, nlen);
+
+ len = hlen - nlen;
+ if (len < 0)
+ return false;
+
+ while (len-- >= 0)
+ {
+ if (!wcsncmp(p++, nws, nlen))
+ return true;
+ }
+ return false;
+}
+
+bool match_one_of(const unsigned char* s, const unsigned char* list, unsigned short sepr)
+{
+ int slen = utf8length(s);
+ int llen = utf8length(list);
+ unsigned short sws[4*slen+1];
+ unsigned short lws[llen+1];
+ unsigned short tmp[4*llen+1];
+ unsigned short* p1 = lws;
+ unsigned short* p2 = lws;
+
+ utf8_normalize_decode(s, sws, slen);
+ utf8_non_normalize_decode(list, lws, llen);
+
+ while (true)
+ {
+ while (*p2 != sepr && *p2 != 0)
+ p2++;
+ utf16normalize(p1, tmp, p2 - p1);
+ if (!wcscmp(sws, tmp))
+ return true;
+ if (*p2 == 0)
+ break;
+ p1 = ++p2;
+ }
+ return false;
+}
+
+bool starts_with(const unsigned char* phaystack, const unsigned char* pneedle)
+{
+ int len = utf8length(pneedle);
+
+ unsigned short hws[4*len+1];
+ unsigned short nws[4*len+1];
+
+ len = utf8_normalize_decode(pneedle, nws, len);
+ utf8_normalize_decode(phaystack, hws, len);
+
+ return !wcsncmp(hws, nws, len);
+}
+
+bool ends_with(const unsigned char* phaystack, const unsigned char* pneedle)
+{
+ int hlen = utf8length(phaystack);
+ int nlen = utf8length(pneedle);
+
+ unsigned short hws[4*nlen+1];
+ unsigned short nws[4*nlen+1];
+
+ hlen = utf8_normalize_decode(phaystack, hws, hlen);
+ nlen = utf8_normalize_decode(pneedle, nws, nlen);
+
+ if (hlen < nlen)
+ return false;
+
+ return !wcscmp(hws + hlen - nlen, nws);
+}
diff --git a/tools/code_mapping_tables.c b/tools/code_mapping_tables.c
new file mode 100644
index 0000000..dc28655
--- /dev/null
+++ b/tools/code_mapping_tables.c
@@ -0,0 +1,4742 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "code_mapping_tables.h"
+
+const unsigned char mini_index[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x20, 0xfb
+};
+
+const unsigned char full_index[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x1e, 0x1f, 0x20, 0x2c, 0x30, 0xa6, 0xfb, 0xff,
+};
+
+int get_mini_index_size(void)
+{
+ return sizeof(mini_index);
+}
+
+int get_full_index_size(void)
+{
+ return sizeof(full_index);
+}
+
+/*
+ * mapping table structure
+ *
+ * { original utf16 code, { normalized utf16 codes } },
+ *
+ * specific normalized utf16 code:
+ * 0xfffd: invalid unicode character.
+ * 0xffff: disappearing character after normalizing.
+ */
+
+/* common mapping table
+ *
+ * mapping rule
+ * - lowercase, titlecase -> uppercase
+ * - delete diacritical mark (accent, umlaut, sound mark, etc.)
+ * - variable glyph -> normal glyph
+ * - Japanese Hiragana, halfwidth Katakana -> fullwidth Katakana
+ */
+const struct mapping_data common_mapping_table[] =
+{
+{ 0x0000, { 0x0000 } },
+{ 0x0001, { 0x0001 } },
+{ 0x0002, { 0x0002 } },
+{ 0x0003, { 0x0003 } },
+{ 0x0004, { 0x0004 } },
+{ 0x0005, { 0x0005 } },
+{ 0x0006, { 0x0006 } },
+{ 0x0007, { 0x0007 } },
+{ 0x0008, { 0x0008 } },
+{ 0x0009, { 0x0009 } },
+{ 0x000a, { 0x000a } },
+{ 0x000b, { 0x000b } },
+{ 0x000c, { 0x000c } },
+{ 0x000d, { 0x000d } },
+{ 0x000e, { 0x000e } },
+{ 0x000f, { 0x000f } },
+{ 0x0010, { 0x0010 } },
+{ 0x0011, { 0x0011 } },
+{ 0x0012, { 0x0012 } },
+{ 0x0013, { 0x0013 } },
+{ 0x0014, { 0x0014 } },
+{ 0x0015, { 0x0015 } },
+{ 0x0016, { 0x0016 } },
+{ 0x0017, { 0x0017 } },
+{ 0x0018, { 0x0018 } },
+{ 0x0019, { 0x0019 } },
+{ 0x001a, { 0x001a } },
+{ 0x001b, { 0x001b } },
+{ 0x001c, { 0x001c } },
+{ 0x001d, { 0x001d } },
+{ 0x001e, { 0x001e } },
+{ 0x001f, { 0x001f } },
+{ 0x0020, { 0x0020 } },
+{ 0x0021, { 0x0021 } },
+{ 0x0022, { 0x0022 } },
+{ 0x0023, { 0x0023 } },
+{ 0x0024, { 0x0024 } },
+{ 0x0025, { 0x0025 } },
+{ 0x0026, { 0x0026 } },
+{ 0x0027, { 0x0027 } },
+{ 0x0028, { 0x0028 } },
+{ 0x0029, { 0x0029 } },
+{ 0x002a, { 0x002a } },
+{ 0x002b, { 0x002b } },
+{ 0x002c, { 0x002c } },
+{ 0x002d, { 0x002d } },
+{ 0x002e, { 0x002e } },
+{ 0x002f, { 0x002f } },
+{ 0x0030, { 0x0030 } },
+{ 0x0031, { 0x0031 } },
+{ 0x0032, { 0x0032 } },
+{ 0x0033, { 0x0033 } },
+{ 0x0034, { 0x0034 } },
+{ 0x0035, { 0x0035 } },
+{ 0x0036, { 0x0036 } },
+{ 0x0037, { 0x0037 } },
+{ 0x0038, { 0x0038 } },
+{ 0x0039, { 0x0039 } },
+{ 0x003a, { 0x003a } },
+{ 0x003b, { 0x003b } },
+{ 0x003c, { 0x003c } },
+{ 0x003d, { 0x003d } },
+{ 0x003e, { 0x003e } },
+{ 0x003f, { 0x003f } },
+{ 0x0040, { 0x0040 } },
+{ 0x0041, { 0x0041 } },
+{ 0x0042, { 0x0042 } },
+{ 0x0043, { 0x0043 } },
+{ 0x0044, { 0x0044 } },
+{ 0x0045, { 0x0045 } },
+{ 0x0046, { 0x0046 } },
+{ 0x0047, { 0x0047 } },
+{ 0x0048, { 0x0048 } },
+{ 0x0049, { 0x0049 } },
+{ 0x004a, { 0x004a } },
+{ 0x004b, { 0x004b } },
+{ 0x004c, { 0x004c } },
+{ 0x004d, { 0x004d } },
+{ 0x004e, { 0x004e } },
+{ 0x004f, { 0x004f } },
+{ 0x0050, { 0x0050 } },
+{ 0x0051, { 0x0051 } },
+{ 0x0052, { 0x0052 } },
+{ 0x0053, { 0x0053 } },
+{ 0x0054, { 0x0054 } },
+{ 0x0055, { 0x0055 } },
+{ 0x0056, { 0x0056 } },
+{ 0x0057, { 0x0057 } },
+{ 0x0058, { 0x0058 } },
+{ 0x0059, { 0x0059 } },
+{ 0x005a, { 0x005a } },
+{ 0x005b, { 0x005b } },
+{ 0x005c, { 0x005c } },
+{ 0x005d, { 0x005d } },
+{ 0x005e, { 0x005e } },
+{ 0x005f, { 0x005f } },
+{ 0x0060, { 0x0060 } },
+{ 0x0061, { 0x0041 } },
+{ 0x0062, { 0x0042 } },
+{ 0x0063, { 0x0043 } },
+{ 0x0064, { 0x0044 } },
+{ 0x0065, { 0x0045 } },
+{ 0x0066, { 0x0046 } },
+{ 0x0067, { 0x0047 } },
+{ 0x0068, { 0x0048 } },
+{ 0x0069, { 0x0049 } },
+{ 0x006a, { 0x004a } },
+{ 0x006b, { 0x004b } },
+{ 0x006c, { 0x004c } },
+{ 0x006d, { 0x004d } },
+{ 0x006e, { 0x004e } },
+{ 0x006f, { 0x004f } },
+{ 0x0070, { 0x0050 } },
+{ 0x0071, { 0x0051 } },
+{ 0x0072, { 0x0052 } },
+{ 0x0073, { 0x0053 } },
+{ 0x0074, { 0x0054 } },
+{ 0x0075, { 0x0055 } },
+{ 0x0076, { 0x0056 } },
+{ 0x0077, { 0x0057 } },
+{ 0x0078, { 0x0058 } },
+{ 0x0079, { 0x0059 } },
+{ 0x007a, { 0x005a } },
+{ 0x007b, { 0x007b } },
+{ 0x007c, { 0x007c } },
+{ 0x007d, { 0x007d } },
+{ 0x007e, { 0x007e } },
+{ 0x007f, { 0x007f } },
+{ 0x0080, { 0x0080 } },
+{ 0x0081, { 0x0081 } },
+{ 0x0082, { 0x0082 } },
+{ 0x0083, { 0x0083 } },
+{ 0x0084, { 0x0084 } },
+{ 0x0085, { 0x0085 } },
+{ 0x0086, { 0x0086 } },
+{ 0x0087, { 0x0087 } },
+{ 0x0088, { 0x0088 } },
+{ 0x0089, { 0x0089 } },
+{ 0x008a, { 0x008a } },
+{ 0x008b, { 0x008b } },
+{ 0x008c, { 0x008c } },
+{ 0x008d, { 0x008d } },
+{ 0x008e, { 0x008e } },
+{ 0x008f, { 0x008f } },
+{ 0x0090, { 0x0090 } },
+{ 0x0091, { 0x0091 } },
+{ 0x0092, { 0x0092 } },
+{ 0x0093, { 0x0093 } },
+{ 0x0094, { 0x0094 } },
+{ 0x0095, { 0x0095 } },
+{ 0x0096, { 0x0096 } },
+{ 0x0097, { 0x0097 } },
+{ 0x0098, { 0x0098 } },
+{ 0x0099, { 0x0099 } },
+{ 0x009a, { 0x009a } },
+{ 0x009b, { 0x009b } },
+{ 0x009c, { 0x009c } },
+{ 0x009d, { 0x009d } },
+{ 0x009e, { 0x009e } },
+{ 0x009f, { 0x009f } },
+{ 0x00a0, { 0x0020 } },
+{ 0x00a1, { 0x00a1 } },
+{ 0x00a2, { 0x00a2 } },
+{ 0x00a3, { 0x00a3 } },
+{ 0x00a4, { 0x00a4 } },
+{ 0x00a5, { 0x00a5 } },
+{ 0x00a6, { 0x00a6 } },
+{ 0x00a7, { 0x00a7 } },
+{ 0x00a8, { 0x00a8 } },
+{ 0x00a9, { 0x00a9 } },
+{ 0x00aa, { 0x0061 } },
+{ 0x00ab, { 0x00ab } },
+{ 0x00ac, { 0x00ac } },
+{ 0x00ad, { 0x00ad } },
+{ 0x00ae, { 0x00ae } },
+{ 0x00af, { 0x00af } },
+{ 0x00b0, { 0x00b0 } },
+{ 0x00b1, { 0x00b1 } },
+{ 0x00b2, { 0x0032 } },
+{ 0x00b3, { 0x0033 } },
+{ 0x00b4, { 0x00b4 } },
+{ 0x00b5, { 0x00b5 } },
+{ 0x00b6, { 0x00b6 } },
+{ 0x00b7, { 0x00b7 } },
+{ 0x00b8, { 0x00b8 } },
+{ 0x00b9, { 0x0031 } },
+{ 0x00ba, { 0x006f } },
+{ 0x00bb, { 0x00bb } },
+{ 0x00bc, { 0x0031, 0x002f, 0x0034 } },
+{ 0x00bd, { 0x0031, 0x002f, 0x0032 } },
+{ 0x00be, { 0x0033, 0x002f, 0x0034 } },
+{ 0x00bf, { 0x00bf } },
+{ 0x00c0, { 0x0041 } },
+{ 0x00c1, { 0x0041 } },
+{ 0x00c2, { 0x0041 } },
+{ 0x00c3, { 0x0041 } },
+{ 0x00c4, { 0x0041 } },
+{ 0x00c5, { 0x0041 } },
+{ 0x00c6, { 0x0041, 0x0045 } },
+{ 0x00c7, { 0x0043 } },
+{ 0x00c8, { 0x0045 } },
+{ 0x00c9, { 0x0045 } },
+{ 0x00ca, { 0x0045 } },
+{ 0x00cb, { 0x0045 } },
+{ 0x00cc, { 0x0049 } },
+{ 0x00cd, { 0x0049 } },
+{ 0x00ce, { 0x0049 } },
+{ 0x00cf, { 0x0049 } },
+{ 0x00d0, { 0x00d0 } },
+{ 0x00d1, { 0x004e } },
+{ 0x00d2, { 0x004f } },
+{ 0x00d3, { 0x004f } },
+{ 0x00d4, { 0x004f } },
+{ 0x00d5, { 0x004f } },
+{ 0x00d6, { 0x004f } },
+{ 0x00d7, { 0x00d7 } },
+{ 0x00d8, { 0x00d8 } },
+{ 0x00d9, { 0x0055 } },
+{ 0x00da, { 0x0055 } },
+{ 0x00db, { 0x0055 } },
+{ 0x00dc, { 0x0055 } },
+{ 0x00dd, { 0x0059 } },
+{ 0x00de, { 0x00de } },
+{ 0x00df, { 0x0053, 0x0053 } },
+{ 0x00e0, { 0x0041 } },
+{ 0x00e1, { 0x0041 } },
+{ 0x00e2, { 0x0041 } },
+{ 0x00e3, { 0x0041 } },
+{ 0x00e4, { 0x0041 } },
+{ 0x00e5, { 0x0041 } },
+{ 0x00e6, { 0x0041, 0x0045 } },
+{ 0x00e7, { 0x0043 } },
+{ 0x00e8, { 0x0045 } },
+{ 0x00e9, { 0x0045 } },
+{ 0x00ea, { 0x0045 } },
+{ 0x00eb, { 0x0045 } },
+{ 0x00ec, { 0x0049 } },
+{ 0x00ed, { 0x0049 } },
+{ 0x00ee, { 0x0049 } },
+{ 0x00ef, { 0x0049 } },
+{ 0x00f0, { 0x00d0 } },
+{ 0x00f1, { 0x004e } },
+{ 0x00f2, { 0x004f } },
+{ 0x00f3, { 0x004f } },
+{ 0x00f4, { 0x004f } },
+{ 0x00f5, { 0x004f } },
+{ 0x00f6, { 0x004f } },
+{ 0x00f7, { 0x00f7 } },
+{ 0x00f8, { 0x00d8 } },
+{ 0x00f9, { 0x0055 } },
+{ 0x00fa, { 0x0055 } },
+{ 0x00fb, { 0x0055 } },
+{ 0x00fc, { 0x0055 } },
+{ 0x00fd, { 0x0059 } },
+{ 0x00fe, { 0x00de } },
+{ 0x00ff, { 0x0059 } },
+{ 0x0100, { 0x0041 } },
+{ 0x0101, { 0x0041 } },
+{ 0x0102, { 0x0041 } },
+{ 0x0103, { 0x0041 } },
+{ 0x0104, { 0x0041 } },
+{ 0x0105, { 0x0041 } },
+{ 0x0106, { 0x0043 } },
+{ 0x0107, { 0x0043 } },
+{ 0x0108, { 0x0043 } },
+{ 0x0109, { 0x0043 } },
+{ 0x010a, { 0x0043 } },
+{ 0x010b, { 0x0043 } },
+{ 0x010c, { 0x0043 } },
+{ 0x010d, { 0x0043 } },
+{ 0x010e, { 0x0044 } },
+{ 0x010f, { 0x0044 } },
+{ 0x0110, { 0x0110 } },
+{ 0x0111, { 0x0110 } },
+{ 0x0112, { 0x0045 } },
+{ 0x0113, { 0x0045 } },
+{ 0x0114, { 0x0045 } },
+{ 0x0115, { 0x0045 } },
+{ 0x0116, { 0x0045 } },
+{ 0x0117, { 0x0045 } },
+{ 0x0118, { 0x0045 } },
+{ 0x0119, { 0x0045 } },
+{ 0x011a, { 0x0045 } },
+{ 0x011b, { 0x0045 } },
+{ 0x011c, { 0x0047 } },
+{ 0x011d, { 0x0047 } },
+{ 0x011e, { 0x0047 } },
+{ 0x011f, { 0x0047 } },
+{ 0x0120, { 0x0047 } },
+{ 0x0121, { 0x0047 } },
+{ 0x0122, { 0x0047 } },
+{ 0x0123, { 0x0047 } },
+{ 0x0124, { 0x0048 } },
+{ 0x0125, { 0x0048 } },
+{ 0x0126, { 0x0126 } },
+{ 0x0127, { 0x0126 } },
+{ 0x0128, { 0x0049 } },
+{ 0x0129, { 0x0049 } },
+{ 0x012a, { 0x0049 } },
+{ 0x012b, { 0x0049 } },
+{ 0x012c, { 0x0049 } },
+{ 0x012d, { 0x0049 } },
+{ 0x012e, { 0x0049 } },
+{ 0x012f, { 0x0049 } },
+{ 0x0130, { 0x0049 } },
+{ 0x0131, { 0x0049 } },
+{ 0x0132, { 0x0049, 0x004a } },
+{ 0x0133, { 0x0049, 0x004a } },
+{ 0x0134, { 0x004a } },
+{ 0x0135, { 0x004a } },
+{ 0x0136, { 0x004b } },
+{ 0x0137, { 0x004b } },
+{ 0x0138, { 0x0138 } },
+{ 0x0139, { 0x004c } },
+{ 0x013a, { 0x004c } },
+{ 0x013b, { 0x004c } },
+{ 0x013c, { 0x004c } },
+{ 0x013d, { 0x004c } },
+{ 0x013e, { 0x004c } },
+{ 0x013f, { 0x013f } },
+{ 0x0140, { 0x013f } },
+{ 0x0141, { 0x0141 } },
+{ 0x0142, { 0x0141 } },
+{ 0x0143, { 0x004e } },
+{ 0x0144, { 0x004e } },
+{ 0x0145, { 0x004e } },
+{ 0x0146, { 0x003e } },
+{ 0x0147, { 0x004e } },
+{ 0x0148, { 0x004e } },
+{ 0x0149, { 0x02bc, 0x004e } },
+{ 0x014a, { 0x014a } },
+{ 0x014b, { 0x014a } },
+{ 0x014c, { 0x004f } },
+{ 0x014d, { 0x004f } },
+{ 0x014e, { 0x004f } },
+{ 0x014f, { 0x004f } },
+{ 0x0150, { 0x004f } },
+{ 0x0151, { 0x004f } },
+{ 0x0152, { 0x004f, 0x0045 } },
+{ 0x0153, { 0x004f, 0x0045 } },
+{ 0x0154, { 0x0052 } },
+{ 0x0155, { 0x0052 } },
+{ 0x0156, { 0x0052 } },
+{ 0x0157, { 0x0052 } },
+{ 0x0158, { 0x0052 } },
+{ 0x0159, { 0x0052 } },
+{ 0x015a, { 0x0053 } },
+{ 0x015b, { 0x0053 } },
+{ 0x015c, { 0x0053 } },
+{ 0x015d, { 0x0053 } },
+{ 0x015e, { 0x0053 } },
+{ 0x015f, { 0x0053 } },
+{ 0x0160, { 0x0053 } },
+{ 0x0161, { 0x0053 } },
+{ 0x0162, { 0x0054 } },
+{ 0x0163, { 0x0054 } },
+{ 0x0164, { 0x0054 } },
+{ 0x0165, { 0x0054 } },
+{ 0x0166, { 0x0166 } },
+{ 0x0167, { 0x0166 } },
+{ 0x0168, { 0x0055 } },
+{ 0x0169, { 0x0055 } },
+{ 0x016a, { 0x0055 } },
+{ 0x016b, { 0x0055 } },
+{ 0x016c, { 0x0055 } },
+{ 0x016d, { 0x0055 } },
+{ 0x016e, { 0x0055 } },
+{ 0x016f, { 0x0055 } },
+{ 0x0170, { 0x0055 } },
+{ 0x0171, { 0x0055 } },
+{ 0x0172, { 0x0055 } },
+{ 0x0173, { 0x0055 } },
+{ 0x0174, { 0x0057 } },
+{ 0x0175, { 0x0057 } },
+{ 0x0176, { 0x0059 } },
+{ 0x0177, { 0x0059 } },
+{ 0x0178, { 0x0059 } },
+{ 0x0179, { 0x005a } },
+{ 0x017a, { 0x005a } },
+{ 0x017b, { 0x005a } },
+{ 0x017c, { 0x005a } },
+{ 0x017d, { 0x005a } },
+{ 0x017e, { 0x005a } },
+{ 0x017f, { 0x0073 } },
+{ 0x0180, { 0x0243 } },
+{ 0x0181, { 0x0181 } },
+{ 0x0182, { 0x0182 } },
+{ 0x0183, { 0x0182 } },
+{ 0x0184, { 0x0184 } },
+{ 0x0185, { 0x0184 } },
+{ 0x0186, { 0x0186 } },
+{ 0x0187, { 0x0187 } },
+{ 0x0188, { 0x0187 } },
+{ 0x0189, { 0x0189 } },
+{ 0x018a, { 0x018a } },
+{ 0x018b, { 0x018b } },
+{ 0x018c, { 0x018b } },
+{ 0x018d, { 0x018d } },
+{ 0x018e, { 0x018e } },
+{ 0x018f, { 0x018f } },
+{ 0x0190, { 0x0190 } },
+{ 0x0191, { 0x0191 } },
+{ 0x0192, { 0x0191 } },
+{ 0x0193, { 0x0193 } },
+{ 0x0194, { 0x0194 } },
+{ 0x0195, { 0x01f6 } },
+{ 0x0196, { 0x0196 } },
+{ 0x0197, { 0x0197 } },
+{ 0x0198, { 0x0198 } },
+{ 0x0199, { 0x0198 } },
+{ 0x019a, { 0x023d } },
+{ 0x019b, { 0x019b } },
+{ 0x019c, { 0x019c } },
+{ 0x019d, { 0x019d } },
+{ 0x019e, { 0x0220 } },
+{ 0x019f, { 0x019f } },
+{ 0x01a0, { 0x004f } },
+{ 0x01a1, { 0x006f } },
+{ 0x01a2, { 0x01a2 } },
+{ 0x01a3, { 0x01a2 } },
+{ 0x01a4, { 0x01a4 } },
+{ 0x01a5, { 0x01a4 } },
+{ 0x01a6, { 0x01a6 } },
+{ 0x01a7, { 0x01a7 } },
+{ 0x01a8, { 0x01a7 } },
+{ 0x01a9, { 0x01a9 } },
+{ 0x01aa, { 0x01aa } },
+{ 0x01ab, { 0x01ab } },
+{ 0x01ac, { 0x01ac } },
+{ 0x01ad, { 0x01ac } },
+{ 0x01ae, { 0x01ae } },
+{ 0x01af, { 0x0055 } },
+{ 0x01b0, { 0x0075 } },
+{ 0x01b1, { 0x01b1 } },
+{ 0x01b2, { 0x01b2 } },
+{ 0x01b3, { 0x01b3 } },
+{ 0x01b4, { 0x01b3 } },
+{ 0x01b5, { 0x01b5 } },
+{ 0x01b6, { 0x01b5 } },
+{ 0x01b7, { 0x01b7 } },
+{ 0x01b8, { 0x01b8 } },
+{ 0x01b9, { 0x01b8 } },
+{ 0x01ba, { 0x01ba } },
+{ 0x01bb, { 0x01bb } },
+{ 0x01bc, { 0x01bc } },
+{ 0x01bd, { 0x01bc } },
+{ 0x01be, { 0x01be } },
+{ 0x01bf, { 0x01f7 } },
+{ 0x01c0, { 0x01c0 } },
+{ 0x01c1, { 0x01c1 } },
+{ 0x01c2, { 0x01c2 } },
+{ 0x01c3, { 0x0021 } },
+{ 0x01c4, { 0x0044, 0x005a } },
+{ 0x01c5, { 0x0044, 0x005a } },
+{ 0x01c6, { 0x0044, 0x005a } },
+{ 0x01c7, { 0x004c, 0x004a } },
+{ 0x01c8, { 0x004c, 0x004a } },
+{ 0x01c9, { 0x004c, 0x004a } },
+{ 0x01ca, { 0x004e, 0x004a } },
+{ 0x01cb, { 0x004e, 0x004a } },
+{ 0x01cc, { 0x004e, 0x004a } },
+{ 0x01cd, { 0x0041 } },
+{ 0x01ce, { 0x0041 } },
+{ 0x01cf, { 0x0049 } },
+{ 0x01d0, { 0x0049 } },
+{ 0x01d1, { 0x004f } },
+{ 0x01d2, { 0x004f } },
+{ 0x01d3, { 0x0055 } },
+{ 0x01d4, { 0x0055 } },
+{ 0x01d5, { 0x0055 } },
+{ 0x01d6, { 0x0055 } },
+{ 0x01d7, { 0x0055 } },
+{ 0x01d8, { 0x0055 } },
+{ 0x01d9, { 0x0055 } },
+{ 0x01da, { 0x0055 } },
+{ 0x01db, { 0x0055 } },
+{ 0x01dc, { 0x0055 } },
+{ 0x01dd, { 0x018e } },
+{ 0x01de, { 0x0041 } },
+{ 0x01df, { 0x0041 } },
+{ 0x01e0, { 0x0041 } },
+{ 0x01e1, { 0x0041 } },
+{ 0x01e2, { 0x0041, 0x0045 } },
+{ 0x01e3, { 0x0041, 0x0045 } },
+{ 0x01e4, { 0x01e4 } },
+{ 0x01e5, { 0x01e4 } },
+{ 0x01e6, { 0x0047 } },
+{ 0x01e7, { 0x0047 } },
+{ 0x01e8, { 0x004b } },
+{ 0x01e9, { 0x004b } },
+{ 0x01ea, { 0x004f } },
+{ 0x01eb, { 0x004f } },
+{ 0x01ec, { 0x004f } },
+{ 0x01ed, { 0x004f } },
+{ 0x01ee, { 0x01b7 } },
+{ 0x01ef, { 0x01b7 } },
+{ 0x01f0, { 0x004a } },
+{ 0x01f1, { 0x0044, 0x005a } },
+{ 0x01f2, { 0x0044, 0x005a } },
+{ 0x01f3, { 0x0044, 0x005a } },
+{ 0x01f4, { 0x0047 } },
+{ 0x01f5, { 0x0047 } },
+{ 0x01f6, { 0x01f6 } },
+{ 0x01f7, { 0x01f7 } },
+{ 0x01f8, { 0x004e } },
+{ 0x01f9, { 0x004e } },
+{ 0x01fa, { 0x0041 } },
+{ 0x01fb, { 0x0041 } },
+{ 0x01fc, { 0x0041, 0x0045 } },
+{ 0x01fd, { 0x0041, 0x0045 } },
+{ 0x01fe, { 0x004f } },
+{ 0x01ff, { 0x004f } },
+{ 0x0200, { 0x0041 } },
+{ 0x0201, { 0x0041 } },
+{ 0x0202, { 0x0041 } },
+{ 0x0203, { 0x0041 } },
+{ 0x0204, { 0x0045 } },
+{ 0x0205, { 0x0045 } },
+{ 0x0206, { 0x0045 } },
+{ 0x0207, { 0x0045 } },
+{ 0x0208, { 0x0049 } },
+{ 0x0209, { 0x0049 } },
+{ 0x020a, { 0x0049 } },
+{ 0x020b, { 0x0049 } },
+{ 0x020c, { 0x004f } },
+{ 0x020d, { 0x004f } },
+{ 0x020e, { 0x004f } },
+{ 0x020f, { 0x004f } },
+{ 0x0210, { 0x0052 } },
+{ 0x0211, { 0x0052 } },
+{ 0x0212, { 0x0052 } },
+{ 0x0213, { 0x0052 } },
+{ 0x0214, { 0x0055 } },
+{ 0x0215, { 0x0055 } },
+{ 0x0216, { 0x0055 } },
+{ 0x0217, { 0x0055 } },
+{ 0x0218, { 0x0053 } },
+{ 0x0219, { 0x0053 } },
+{ 0x021a, { 0x0054 } },
+{ 0x021b, { 0x0054 } },
+{ 0x021c, { 0x021c } },
+{ 0x021d, { 0x021c } },
+{ 0x021e, { 0x0048 } },
+{ 0x021f, { 0x0048 } },
+{ 0x0220, { 0x0220 } },
+{ 0x0221, { 0x0221 } },
+{ 0x0222, { 0x0222 } },
+{ 0x0223, { 0x0222 } },
+{ 0x0224, { 0x0224 } },
+{ 0x0225, { 0x0224 } },
+{ 0x0226, { 0x0041 } },
+{ 0x0227, { 0x0041 } },
+{ 0x0228, { 0x0045 } },
+{ 0x0229, { 0x0045 } },
+{ 0x022a, { 0x004f } },
+{ 0x022b, { 0x004f } },
+{ 0x022c, { 0x004f } },
+{ 0x022d, { 0x004f } },
+{ 0x022e, { 0x004f } },
+{ 0x022f, { 0x004f } },
+{ 0x0230, { 0x004f } },
+{ 0x0231, { 0x004f } },
+{ 0x0232, { 0x0059 } },
+{ 0x0233, { 0x0059 } },
+{ 0x0234, { 0x0234 } },
+{ 0x0235, { 0x0235 } },
+{ 0x0236, { 0x0236 } },
+{ 0x0237, { 0x006a } },
+{ 0x0238, { 0x0044, 0x0042 } },
+{ 0x0239, { 0x0051, 0x0050 } },
+{ 0x023a, { 0x023a } },
+{ 0x023b, { 0x023b } },
+{ 0x023c, { 0x023b } },
+{ 0x023d, { 0x023d } },
+{ 0x023e, { 0x023e } },
+{ 0x023f, { 0x023f } },
+{ 0x0240, { 0x0240 } },
+{ 0x0241, { 0x0241 } },
+{ 0x0242, { 0x0241 } },
+{ 0x0243, { 0x0243 } },
+{ 0x0244, { 0x0244 } },
+{ 0x0245, { 0x0245 } },
+{ 0x0246, { 0x0246 } },
+{ 0x0247, { 0x0246 } },
+{ 0x0248, { 0x0248 } },
+{ 0x0249, { 0x0248 } },
+{ 0x024a, { 0x024a } },
+{ 0x024b, { 0x024a } },
+{ 0x024c, { 0x024c } },
+{ 0x024d, { 0x024c } },
+{ 0x024e, { 0x024e } },
+{ 0x024f, { 0x024e } },
+{ 0x0250, { 0x2c6f } },
+{ 0x0251, { 0x2c6d } },
+{ 0x0252, { 0x0252 } },
+{ 0x0253, { 0x0181 } },
+{ 0x0254, { 0x0186 } },
+{ 0x0255, { 0x0255 } },
+{ 0x0256, { 0x0189 } },
+{ 0x0257, { 0x018a } },
+{ 0x0258, { 0x0258 } },
+{ 0x0259, { 0x018f } },
+{ 0x025a, { 0x025a } },
+{ 0x025b, { 0x0190 } },
+{ 0x025c, { 0x025c } },
+{ 0x025d, { 0x025d } },
+{ 0x025e, { 0x025e } },
+{ 0x025f, { 0x025f } },
+{ 0x0260, { 0x0193 } },
+{ 0x0261, { 0x0067 } },
+{ 0x0262, { 0x0262 } },
+{ 0x0263, { 0x0194 } },
+{ 0x0264, { 0x0264 } },
+{ 0x0265, { 0x0265 } },
+{ 0x0266, { 0x0266 } },
+{ 0x0267, { 0x0267 } },
+{ 0x0268, { 0x026a } },
+{ 0x0269, { 0x0269 } },
+{ 0x026a, { 0x026a } },
+{ 0x026b, { 0x2c62 } },
+{ 0x026c, { 0x026c } },
+{ 0x026d, { 0x026d } },
+{ 0x026e, { 0x026e } },
+{ 0x026f, { 0x019c } },
+{ 0x0270, { 0x0270 } },
+{ 0x0271, { 0x2c6e } },
+{ 0x0272, { 0x019d } },
+{ 0x0273, { 0x0273 } },
+{ 0x0274, { 0x0274 } },
+{ 0x0275, { 0x019f } },
+{ 0x0276, { 0x004f, 0x0045 } },
+{ 0x0277, { 0x0277 } },
+{ 0x0278, { 0x0278 } },
+{ 0x0279, { 0x0279 } },
+{ 0x027a, { 0x027a } },
+{ 0x027b, { 0x027b } },
+{ 0x027c, { 0x027c } },
+{ 0x027d, { 0x2c64 } },
+{ 0x027e, { 0x027e } },
+{ 0x027f, { 0x027f } },
+{ 0x0280, { 0x01a6 } },
+{ 0x0281, { 0x0281 } },
+{ 0x0282, { 0x0282 } },
+{ 0x0283, { 0x0283 } },
+{ 0x0284, { 0x0284 } },
+{ 0x0285, { 0x0285 } },
+{ 0x0286, { 0x0286 } },
+{ 0x0287, { 0x0287 } },
+{ 0x0288, { 0x0288 } },
+{ 0x0289, { 0x0244 } },
+{ 0x028a, { 0x01b1 } },
+{ 0x028b, { 0x01b2 } },
+{ 0x028c, { 0x0245 } },
+{ 0x028d, { 0x028d } },
+{ 0x028e, { 0x028e } },
+{ 0x028f, { 0x028f } },
+{ 0x0290, { 0x0290 } },
+{ 0x0291, { 0x0291 } },
+{ 0x0292, { 0x01b7 } },
+{ 0x0293, { 0x0293 } },
+{ 0x0294, { 0x0294 } },
+{ 0x0295, { 0x0295 } },
+{ 0x0296, { 0x0296 } },
+{ 0x0297, { 0x0297 } },
+{ 0x0298, { 0x0298 } },
+{ 0x0299, { 0x0299 } },
+{ 0x029a, { 0x029a } },
+{ 0x029b, { 0x029b } },
+{ 0x029c, { 0x029c } },
+{ 0x029d, { 0x029d } },
+{ 0x029e, { 0x029e } },
+{ 0x029f, { 0x029f } },
+{ 0x02a0, { 0x02a0 } },
+{ 0x02a1, { 0x02a1 } },
+{ 0x02a2, { 0x02a2 } },
+{ 0x02a3, { 0x02a3 } },
+{ 0x02a4, { 0x02a4 } },
+{ 0x02a5, { 0x02a5 } },
+{ 0x02a6, { 0x02a6 } },
+{ 0x02a7, { 0x02a7 } },
+{ 0x02a8, { 0x02a8 } },
+{ 0x02a9, { 0x02a9 } },
+{ 0x02aa, { 0x02aa } },
+{ 0x02ab, { 0x02ab } },
+{ 0x02ac, { 0x02ac } },
+{ 0x02ad, { 0x02ad } },
+{ 0x02ae, { 0x02ae } },
+{ 0x02af, { 0x02af } },
+{ 0x02b0, { 0x0068 } },
+{ 0x02b1, { 0x0266 } },
+{ 0x02b2, { 0x006a } },
+{ 0x02b3, { 0x0072 } },
+{ 0x02b4, { 0x0279 } },
+{ 0x02b5, { 0x027b } },
+{ 0x02b6, { 0x02b1 } },
+{ 0x02b7, { 0x0077 } },
+{ 0x02b8, { 0x0079 } },
+{ 0x02b9, { 0x0027 } },
+{ 0x02ba, { 0x0022 } },
+{ 0x02bb, { 0x02bb } },
+{ 0x02bc, { 0x0027 } },
+{ 0x02bd, { 0x02bd } },
+{ 0x02be, { 0x02be } },
+{ 0x02bf, { 0x02bf } },
+{ 0x02c0, { 0x02c0 } },
+{ 0x02c1, { 0x02c1 } },
+{ 0x02c2, { 0x02c2 } },
+{ 0x02c3, { 0x02c3 } },
+{ 0x02c4, { 0x02c4 } },
+{ 0x02c5, { 0x02c5 } },
+{ 0x02c6, { 0x02c6 } },
+{ 0x02c7, { 0x02c7 } },
+{ 0x02c8, { 0x02c8 } },
+{ 0x02c9, { 0x00af } },
+{ 0x02ca, { 0x00b4 } },
+{ 0x02cb, { 0x0060 } },
+{ 0x02cc, { 0x02cc } },
+{ 0x02cd, { 0x005f } },
+{ 0x02ce, { 0x02ce } },
+{ 0x02cf, { 0x02cf } },
+{ 0x02d0, { 0x003a } },
+{ 0x02d1, { 0x00b7 } },
+{ 0x02d2, { 0x02d2 } },
+{ 0x02d3, { 0x02d3 } },
+{ 0x02d4, { 0x02d4 } },
+{ 0x02d5, { 0x02d5 } },
+{ 0x02d6, { 0x02d6 } },
+{ 0x02d7, { 0x02d7 } },
+{ 0x02d8, { 0x02d8 } },
+{ 0x02d9, { 0x02d9 } },
+{ 0x02da, { 0x02da } },
+{ 0x02db, { 0x02db } },
+{ 0x02dc, { 0x02dc } },
+{ 0x02dd, { 0x02dd } },
+{ 0x02de, { 0x02de } },
+{ 0x02df, { 0x02df } },
+{ 0x02e0, { 0x0263 } },
+{ 0x02e1, { 0x006c } },
+{ 0x02e2, { 0x0073 } },
+{ 0x02e3, { 0x0078 } },
+{ 0x02e4, { 0x0295 } },
+{ 0x02e5, { 0x02e5 } },
+{ 0x02e6, { 0x02e6 } },
+{ 0x02e7, { 0x02e7 } },
+{ 0x02e8, { 0x02e8 } },
+{ 0x02e9, { 0x02e9 } },
+{ 0x02ea, { 0x02ea } },
+{ 0x02eb, { 0x02eb } },
+{ 0x02ec, { 0x02ec } },
+{ 0x02ed, { 0x02ed } },
+{ 0x02ee, { 0x02ee } },
+{ 0x02ef, { 0x02ef } },
+{ 0x02f0, { 0x02f0 } },
+{ 0x02f1, { 0x02f1 } },
+{ 0x02f2, { 0x02f2 } },
+{ 0x02f3, { 0x02f3 } },
+{ 0x02f4, { 0x02f4 } },
+{ 0x02f5, { 0x02f5 } },
+{ 0x02f6, { 0x02f6 } },
+{ 0x02f7, { 0x02f7 } },
+{ 0x02f8, { 0x02f8 } },
+{ 0x02f9, { 0x02f9 } },
+{ 0x02fa, { 0x02fa } },
+{ 0x02fb, { 0x02fb } },
+{ 0x02fc, { 0x02fc } },
+{ 0x02fd, { 0x02fd } },
+{ 0x02fe, { 0x02fe } },
+{ 0x02ff, { 0x02ff } },
+{ 0x0300, { 0xffff } },
+{ 0x0301, { 0xffff } },
+{ 0x0302, { 0xffff } },
+{ 0x0303, { 0xffff } },
+{ 0x0304, { 0xffff } },
+{ 0x0305, { 0xffff } },
+{ 0x0306, { 0xffff } },
+{ 0x0307, { 0xffff } },
+{ 0x0308, { 0xffff } },
+{ 0x0309, { 0xffff } },
+{ 0x030a, { 0xffff } },
+{ 0x030b, { 0xffff } },
+{ 0x030c, { 0xffff } },
+{ 0x030d, { 0xffff } },
+{ 0x030e, { 0xffff } },
+{ 0x030f, { 0xffff } },
+{ 0x0310, { 0xffff } },
+{ 0x0311, { 0xffff } },
+{ 0x0312, { 0xffff } },
+{ 0x0313, { 0xffff } },
+{ 0x0314, { 0xffff } },
+{ 0x0315, { 0xffff } },
+{ 0x0316, { 0xffff } },
+{ 0x0317, { 0xffff } },
+{ 0x0318, { 0xffff } },
+{ 0x0319, { 0xffff } },
+{ 0x031a, { 0xffff } },
+{ 0x031b, { 0xffff } },
+{ 0x031c, { 0xffff } },
+{ 0x031d, { 0xffff } },
+{ 0x031e, { 0xffff } },
+{ 0x031f, { 0xffff } },
+{ 0x0320, { 0xffff } },
+{ 0x0321, { 0xffff } },
+{ 0x0322, { 0xffff } },
+{ 0x0323, { 0xffff } },
+{ 0x0324, { 0xffff } },
+{ 0x0325, { 0xffff } },
+{ 0x0326, { 0xffff } },
+{ 0x0327, { 0xffff } },
+{ 0x0328, { 0xffff } },
+{ 0x0329, { 0xffff } },
+{ 0x032a, { 0xffff } },
+{ 0x032b, { 0xffff } },
+{ 0x032c, { 0xffff } },
+{ 0x032d, { 0xffff } },
+{ 0x032e, { 0xffff } },
+{ 0x032f, { 0xffff } },
+{ 0x0330, { 0xffff } },
+{ 0x0331, { 0xffff } },
+{ 0x0332, { 0xffff } },
+{ 0x0333, { 0xffff } },
+{ 0x0334, { 0xffff } },
+{ 0x0335, { 0xffff } },
+{ 0x0336, { 0xffff } },
+{ 0x0337, { 0xffff } },
+{ 0x0338, { 0xffff } },
+{ 0x0339, { 0xffff } },
+{ 0x033a, { 0xffff } },
+{ 0x033b, { 0xffff } },
+{ 0x033c, { 0xffff } },
+{ 0x033d, { 0xffff } },
+{ 0x033e, { 0xffff } },
+{ 0x033f, { 0xffff } },
+{ 0x0340, { 0xffff } },
+{ 0x0341, { 0xffff } },
+{ 0x0342, { 0xffff } },
+{ 0x0343, { 0xffff } },
+{ 0x0344, { 0xffff } },
+{ 0x0345, { 0xffff } },
+{ 0x0346, { 0xffff } },
+{ 0x0347, { 0xffff } },
+{ 0x0348, { 0xffff } },
+{ 0x0349, { 0xffff } },
+{ 0x034a, { 0xffff } },
+{ 0x034b, { 0xffff } },
+{ 0x034c, { 0xffff } },
+{ 0x034d, { 0xffff } },
+{ 0x034e, { 0xffff } },
+{ 0x034f, { 0xffff } },
+{ 0x0350, { 0xffff } },
+{ 0x0351, { 0xffff } },
+{ 0x0352, { 0xffff } },
+{ 0x0353, { 0xffff } },
+{ 0x0354, { 0xffff } },
+{ 0x0355, { 0xffff } },
+{ 0x0356, { 0xffff } },
+{ 0x0357, { 0xffff } },
+{ 0x0358, { 0xffff } },
+{ 0x0359, { 0xffff } },
+{ 0x035a, { 0xffff } },
+{ 0x035b, { 0xffff } },
+{ 0x035c, { 0xffff } },
+{ 0x035d, { 0xffff } },
+{ 0x035e, { 0xffff } },
+{ 0x035f, { 0xffff } },
+{ 0x0360, { 0xffff } },
+{ 0x0361, { 0xffff } },
+{ 0x0362, { 0xffff } },
+{ 0x0363, { 0xffff } },
+{ 0x0364, { 0xffff } },
+{ 0x0365, { 0xffff } },
+{ 0x0366, { 0xffff } },
+{ 0x0367, { 0xffff } },
+{ 0x0368, { 0xffff } },
+{ 0x0369, { 0xffff } },
+{ 0x036a, { 0xffff } },
+{ 0x036b, { 0xffff } },
+{ 0x036c, { 0xffff } },
+{ 0x036d, { 0xffff } },
+{ 0x036e, { 0xffff } },
+{ 0x036f, { 0xffff } },
+{ 0x0370, { 0x0370 } },
+{ 0x0371, { 0x0370 } },
+{ 0x0372, { 0x0372 } },
+{ 0x0373, { 0x0372 } },
+{ 0x0374, { 0x0374 } },
+{ 0x0375, { 0x0375 } },
+{ 0x0376, { 0x0376 } },
+{ 0x0377, { 0x0376 } },
+{ 0x0378, { 0xfffd } },
+{ 0x0379, { 0xfffd } },
+{ 0x037a, { 0x037a } },
+{ 0x037b, { 0x03fd } },
+{ 0x037c, { 0x03fe } },
+{ 0x037d, { 0x03ff } },
+{ 0x037e, { 0x003b } },
+{ 0x037f, { 0xfffd } },
+{ 0x0380, { 0xfffd } },
+{ 0x0381, { 0xfffd } },
+{ 0x0382, { 0xfffd } },
+{ 0x0383, { 0xfffd } },
+{ 0x0384, { 0xffff } },
+{ 0x0385, { 0xffff } },
+{ 0x0386, { 0x0391 } },
+{ 0x0387, { 0x00b7 } },
+{ 0x0388, { 0x0395 } },
+{ 0x0389, { 0x0397 } },
+{ 0x038a, { 0x0399 } },
+{ 0x038b, { 0xfffd } },
+{ 0x038c, { 0x039f } },
+{ 0x038d, { 0xfffd } },
+{ 0x038e, { 0x03a5 } },
+{ 0x038f, { 0x03a9 } },
+{ 0x0390, { 0x0399 } },
+{ 0x0391, { 0x0391 } },
+{ 0x0392, { 0x0392 } },
+{ 0x0393, { 0x0393 } },
+{ 0x0394, { 0x0394 } },
+{ 0x0395, { 0x0395 } },
+{ 0x0396, { 0x0396 } },
+{ 0x0397, { 0x0397 } },
+{ 0x0398, { 0x0398 } },
+{ 0x0399, { 0x0399 } },
+{ 0x039a, { 0x039a } },
+{ 0x039b, { 0x039b } },
+{ 0x039c, { 0x039c } },
+{ 0x039d, { 0x039d } },
+{ 0x039e, { 0x039e } },
+{ 0x039f, { 0x039f } },
+{ 0x03a0, { 0x03a0 } },
+{ 0x03a1, { 0x03a1 } },
+{ 0x03a2, { 0xfffd } },
+{ 0x03a3, { 0x03a3 } },
+{ 0x03a4, { 0x03a4 } },
+{ 0x03a5, { 0x03a5 } },
+{ 0x03a6, { 0x03a6 } },
+{ 0x03a7, { 0x03a7 } },
+{ 0x03a8, { 0x03a8 } },
+{ 0x03a9, { 0x03a9 } },
+{ 0x03aa, { 0x0399 } },
+{ 0x03ab, { 0x03a5 } },
+{ 0x03ac, { 0x0391 } },
+{ 0x03ad, { 0x0395 } },
+{ 0x03ae, { 0x0397 } },
+{ 0x03af, { 0x0399 } },
+{ 0x03b0, { 0x03a5 } },
+{ 0x03b1, { 0x0391 } },
+{ 0x03b2, { 0x0392 } },
+{ 0x03b3, { 0x0393 } },
+{ 0x03b4, { 0x0394 } },
+{ 0x03b5, { 0x0395 } },
+{ 0x03b6, { 0x0396 } },
+{ 0x03b7, { 0x0397 } },
+{ 0x03b8, { 0x0398 } },
+{ 0x03b9, { 0x0399 } },
+{ 0x03ba, { 0x039a } },
+{ 0x03bb, { 0x039b } },
+{ 0x03bc, { 0x039c } },
+{ 0x03bd, { 0x039d } },
+{ 0x03be, { 0x039e } },
+{ 0x03bf, { 0x039f } },
+{ 0x03c0, { 0x03a0 } },
+{ 0x03c1, { 0x03a1 } },
+{ 0x03c2, { 0x03a3 } },
+{ 0x03c3, { 0x03a3 } },
+{ 0x03c4, { 0x03a4 } },
+{ 0x03c5, { 0x03a5 } },
+{ 0x03c6, { 0x03a6 } },
+{ 0x03c7, { 0x03a7 } },
+{ 0x03c8, { 0x03a8 } },
+{ 0x03c9, { 0x03a9 } },
+{ 0x03ca, { 0x0399 } },
+{ 0x03cb, { 0x03a5 } },
+{ 0x03cc, { 0x039f } },
+{ 0x03cd, { 0x03a5 } },
+{ 0x03ce, { 0x03a9 } },
+{ 0x03cf, { 0x03cf } },
+{ 0x03d0, { 0x0392 } },
+{ 0x03d1, { 0x0398 } },
+{ 0x03d2, { 0x03a5 } },
+{ 0x03d3, { 0x03a5 } },
+{ 0x03d4, { 0x03a5 } },
+{ 0x03d5, { 0x03c6 } },
+{ 0x03d6, { 0x03c0 } },
+{ 0x03d7, { 0x03cf } },
+{ 0x03d8, { 0x03d8 } },
+{ 0x03d9, { 0x03d8 } },
+{ 0x03da, { 0x03da } },
+{ 0x03db, { 0x03da } },
+{ 0x03dc, { 0x03dc } },
+{ 0x03dd, { 0x03dc } },
+{ 0x03de, { 0x03de } },
+{ 0x03df, { 0x03de } },
+{ 0x03e0, { 0x03e0 } },
+{ 0x03e1, { 0x03e0 } },
+{ 0x03e2, { 0x03e2 } },
+{ 0x03e3, { 0x03e2 } },
+{ 0x03e4, { 0x03e4 } },
+{ 0x03e5, { 0x03e4 } },
+{ 0x03e6, { 0x03e6 } },
+{ 0x03e7, { 0x03e6 } },
+{ 0x03e8, { 0x03e8 } },
+{ 0x03e9, { 0x03e8 } },
+{ 0x03ea, { 0x03ea } },
+{ 0x03eb, { 0x03ea } },
+{ 0x03ec, { 0x03ec } },
+{ 0x03ed, { 0x03ec } },
+{ 0x03ee, { 0x03ee } },
+{ 0x03ef, { 0x03ee } },
+{ 0x03f0, { 0x03ba } },
+{ 0x03f1, { 0x03c1 } },
+{ 0x03f2, { 0x03c2 } },
+{ 0x03f3, { 0x03f3 } },
+{ 0x03f4, { 0x0398 } },
+{ 0x03f5, { 0x03b5 } },
+{ 0x03f6, { 0x03f6 } },
+{ 0x03f7, { 0x03f7 } },
+{ 0x03f8, { 0x03f7 } },
+{ 0x03f9, { 0x03a3 } },
+{ 0x03fa, { 0x03fa } },
+{ 0x03fb, { 0x03fa } },
+{ 0x03fc, { 0x03c1 } },
+{ 0x03fd, { 0x03fd } },
+{ 0x03fe, { 0x03fe } },
+{ 0x03ff, { 0x03ff } },
+{ 0x0400, { 0x0415 } },
+{ 0x0401, { 0x0415 } },
+{ 0x0402, { 0x0402 } },
+{ 0x0403, { 0x0413 } },
+{ 0x0404, { 0x0404 } },
+{ 0x0405, { 0x0405 } },
+{ 0x0406, { 0x0406 } },
+{ 0x0407, { 0x0406 } },
+{ 0x0408, { 0x0408 } },
+{ 0x0409, { 0x0409 } },
+{ 0x040a, { 0x040a } },
+{ 0x040b, { 0x040b } },
+{ 0x040c, { 0x041a } },
+{ 0x040d, { 0x0418 } },
+{ 0x040e, { 0x0423 } },
+{ 0x040f, { 0x040f } },
+{ 0x0410, { 0x0410 } },
+{ 0x0411, { 0x0411 } },
+{ 0x0412, { 0x0412 } },
+{ 0x0413, { 0x0413 } },
+{ 0x0414, { 0x0414 } },
+{ 0x0415, { 0x0415 } },
+{ 0x0416, { 0x0416 } },
+{ 0x0417, { 0x0417 } },
+{ 0x0418, { 0x0418 } },
+{ 0x0419, { 0x0418 } },
+{ 0x041a, { 0x041a } },
+{ 0x041b, { 0x041b } },
+{ 0x041c, { 0x041c } },
+{ 0x041d, { 0x041d } },
+{ 0x041e, { 0x041e } },
+{ 0x041f, { 0x041f } },
+{ 0x0420, { 0x0420 } },
+{ 0x0421, { 0x0421 } },
+{ 0x0422, { 0x0422 } },
+{ 0x0423, { 0x0423 } },
+{ 0x0424, { 0x0424 } },
+{ 0x0425, { 0x0425 } },
+{ 0x0426, { 0x0426 } },
+{ 0x0427, { 0x0427 } },
+{ 0x0428, { 0x0428 } },
+{ 0x0429, { 0x0429 } },
+{ 0x042a, { 0x042a } },
+{ 0x042b, { 0x042b } },
+{ 0x042c, { 0x042c } },
+{ 0x042d, { 0x042d } },
+{ 0x042e, { 0x042e } },
+{ 0x042f, { 0x042f } },
+{ 0x0430, { 0x0410 } },
+{ 0x0431, { 0x0411 } },
+{ 0x0432, { 0x0412 } },
+{ 0x0433, { 0x0413 } },
+{ 0x0434, { 0x0414 } },
+{ 0x0435, { 0x0415 } },
+{ 0x0436, { 0x0416 } },
+{ 0x0437, { 0x0417 } },
+{ 0x0438, { 0x0418 } },
+{ 0x0439, { 0x0418 } },
+{ 0x043a, { 0x041a } },
+{ 0x043b, { 0x041b } },
+{ 0x043c, { 0x041c } },
+{ 0x043d, { 0x041d } },
+{ 0x043e, { 0x041e } },
+{ 0x043f, { 0x041f } },
+{ 0x0440, { 0x0420 } },
+{ 0x0441, { 0x0421 } },
+{ 0x0442, { 0x0422 } },
+{ 0x0443, { 0x0423 } },
+{ 0x0444, { 0x0424 } },
+{ 0x0445, { 0x0425 } },
+{ 0x0446, { 0x0426 } },
+{ 0x0447, { 0x0427 } },
+{ 0x0448, { 0x0428 } },
+{ 0x0449, { 0x0429 } },
+{ 0x044a, { 0x042a } },
+{ 0x044b, { 0x042b } },
+{ 0x044c, { 0x042c } },
+{ 0x044d, { 0x042d } },
+{ 0x044e, { 0x042e } },
+{ 0x044f, { 0x042f } },
+{ 0x0450, { 0x0415 } },
+{ 0x0451, { 0x0415 } },
+{ 0x0452, { 0x0402 } },
+{ 0x0453, { 0x0413 } },
+{ 0x0454, { 0x0404 } },
+{ 0x0455, { 0x0405 } },
+{ 0x0456, { 0x0406 } },
+{ 0x0457, { 0x0406 } },
+{ 0x0458, { 0x0408 } },
+{ 0x0459, { 0x0409 } },
+{ 0x045a, { 0x040a } },
+{ 0x045b, { 0x040b } },
+{ 0x045c, { 0x041a } },
+{ 0x045d, { 0x0418 } },
+{ 0x045e, { 0x0423 } },
+{ 0x045f, { 0x040f } },
+{ 0x0460, { 0x0460 } },
+{ 0x0461, { 0x0460 } },
+{ 0x0462, { 0x0462 } },
+{ 0x0463, { 0x0462 } },
+{ 0x0464, { 0x0464 } },
+{ 0x0465, { 0x0464 } },
+{ 0x0466, { 0x0466 } },
+{ 0x0467, { 0x0466 } },
+{ 0x0468, { 0x0468 } },
+{ 0x0469, { 0x0468 } },
+{ 0x046a, { 0x046a } },
+{ 0x046b, { 0x046a } },
+{ 0x046c, { 0x046c } },
+{ 0x046d, { 0x046c } },
+{ 0x046e, { 0x046e } },
+{ 0x046f, { 0x046e } },
+{ 0x0470, { 0x0470 } },
+{ 0x0471, { 0x0470 } },
+{ 0x0472, { 0x0472 } },
+{ 0x0473, { 0x0472 } },
+{ 0x0474, { 0x0474 } },
+{ 0x0475, { 0x0474 } },
+{ 0x0476, { 0x0474 } },
+{ 0x0477, { 0x0474 } },
+{ 0x0478, { 0x0478 } },
+{ 0x0479, { 0x0478 } },
+{ 0x047a, { 0x047a } },
+{ 0x047b, { 0x047a } },
+{ 0x047c, { 0x047c } },
+{ 0x047d, { 0x047c } },
+{ 0x047e, { 0x047e } },
+{ 0x047f, { 0x047e } },
+{ 0x0480, { 0x0480 } },
+{ 0x0481, { 0x0480 } },
+{ 0x0482, { 0x0482 } },
+{ 0x0483, { 0xffff } },
+{ 0x0484, { 0xffff } },
+{ 0x0485, { 0xffff } },
+{ 0x0486, { 0xffff } },
+{ 0x0487, { 0xffff } },
+{ 0x0488, { 0xffff } },
+{ 0x0489, { 0xffff } },
+{ 0x048a, { 0x048a } },
+{ 0x048b, { 0x048a } },
+{ 0x048c, { 0x048c } },
+{ 0x048d, { 0x048c } },
+{ 0x048e, { 0x048e } },
+{ 0x048f, { 0x048e } },
+{ 0x0490, { 0x0490 } },
+{ 0x0491, { 0x0490 } },
+{ 0x0492, { 0x0492 } },
+{ 0x0493, { 0x0492 } },
+{ 0x0494, { 0x0494 } },
+{ 0x0495, { 0x0494 } },
+{ 0x0496, { 0x0496 } },
+{ 0x0497, { 0x0496 } },
+{ 0x0498, { 0x0498 } },
+{ 0x0499, { 0x0498 } },
+{ 0x049a, { 0x049a } },
+{ 0x049b, { 0x049a } },
+{ 0x049c, { 0x049c } },
+{ 0x049d, { 0x049c } },
+{ 0x049e, { 0x049e } },
+{ 0x049f, { 0x049e } },
+{ 0x04a0, { 0x04a0 } },
+{ 0x04a1, { 0x04a0 } },
+{ 0x04a2, { 0x04a2 } },
+{ 0x04a3, { 0x04a2 } },
+{ 0x04a4, { 0x04a4 } },
+{ 0x04a5, { 0x04a4 } },
+{ 0x04a6, { 0x04a6 } },
+{ 0x04a7, { 0x04a6 } },
+{ 0x04a8, { 0x04a8 } },
+{ 0x04a9, { 0x04a8 } },
+{ 0x04aa, { 0x04aa } },
+{ 0x04ab, { 0x04aa } },
+{ 0x04ac, { 0x04ac } },
+{ 0x04ad, { 0x04ac } },
+{ 0x04ae, { 0x04ae } },
+{ 0x04af, { 0x04ae } },
+{ 0x04b0, { 0x04b0 } },
+{ 0x04b1, { 0x04b0 } },
+{ 0x04b2, { 0x04b2 } },
+{ 0x04b3, { 0x04b2 } },
+{ 0x04b4, { 0x04b4 } },
+{ 0x04b5, { 0x04b4 } },
+{ 0x04b6, { 0x04b6 } },
+{ 0x04b7, { 0x04b6 } },
+{ 0x04b8, { 0x04b8 } },
+{ 0x04b9, { 0x04b8 } },
+{ 0x04ba, { 0x04ba } },
+{ 0x04bb, { 0x04ba } },
+{ 0x04bc, { 0x04bc } },
+{ 0x04bd, { 0x04bc } },
+{ 0x04be, { 0x04be } },
+{ 0x04bf, { 0x04be } },
+{ 0x04c0, { 0x04c0 } },
+{ 0x04c1, { 0x04c1 } },
+{ 0x04c2, { 0x04c1 } },
+{ 0x04c3, { 0x04c3 } },
+{ 0x04c4, { 0x04c3 } },
+{ 0x04c5, { 0x04c5 } },
+{ 0x04c6, { 0x04c5 } },
+{ 0x04c7, { 0x04c7 } },
+{ 0x04c8, { 0x04c7 } },
+{ 0x04c9, { 0x04c9 } },
+{ 0x04ca, { 0x04c9 } },
+{ 0x04cb, { 0x04cb } },
+{ 0x04cc, { 0x04cb } },
+{ 0x04cd, { 0x04cd } },
+{ 0x04ce, { 0x04cd } },
+{ 0x04cf, { 0x04c0 } },
+{ 0x04d0, { 0x0410 } },
+{ 0x04d1, { 0x0410 } },
+{ 0x04d2, { 0x0410 } },
+{ 0x04d3, { 0x0410 } },
+{ 0x04d4, { 0x04d4 } },
+{ 0x04d5, { 0x04d4 } },
+{ 0x04d6, { 0x0415 } },
+{ 0x04d7, { 0x0415 } },
+{ 0x04d8, { 0x04d8 } },
+{ 0x04d9, { 0x04d8 } },
+{ 0x04da, { 0x04d8 } },
+{ 0x04db, { 0x04d8 } },
+{ 0x04dc, { 0x0416 } },
+{ 0x04dd, { 0x0416 } },
+{ 0x04de, { 0x0417 } },
+{ 0x04df, { 0x0417 } },
+{ 0x04e0, { 0x04e0 } },
+{ 0x04e1, { 0x04e0 } },
+{ 0x04e2, { 0x0418 } },
+{ 0x04e3, { 0x0418 } },
+{ 0x04e4, { 0x0418 } },
+{ 0x04e5, { 0x0418 } },
+{ 0x04e6, { 0x041e } },
+{ 0x04e7, { 0x041e } },
+{ 0x04e8, { 0x04e8 } },
+{ 0x04e9, { 0x04e8 } },
+{ 0x04ea, { 0x04e8 } },
+{ 0x04eb, { 0x04e8 } },
+{ 0x04ec, { 0x042d } },
+{ 0x04ed, { 0x042d } },
+{ 0x04ee, { 0x0423 } },
+{ 0x04ef, { 0x0423 } },
+{ 0x04f0, { 0x0423 } },
+{ 0x04f1, { 0x0423 } },
+{ 0x04f2, { 0x0423 } },
+{ 0x04f3, { 0x0423 } },
+{ 0x04f4, { 0x0427 } },
+{ 0x04f5, { 0x0427 } },
+{ 0x04f6, { 0x04f6 } },
+{ 0x04f7, { 0x04f6 } },
+{ 0x04f8, { 0x042b } },
+{ 0x04f9, { 0x042b } },
+{ 0x04fa, { 0x04fa } },
+{ 0x04fb, { 0x04fa } },
+{ 0x04fc, { 0x04fc } },
+{ 0x04fd, { 0x04fc } },
+{ 0x04fe, { 0x04fe } },
+{ 0x04ff, { 0x04fe } },
+{ 0x0500, { 0x0500 } },
+{ 0x0501, { 0x0500 } },
+{ 0x0502, { 0x0502 } },
+{ 0x0503, { 0x0502 } },
+{ 0x0504, { 0x0504 } },
+{ 0x0505, { 0x0504 } },
+{ 0x0506, { 0x0506 } },
+{ 0x0507, { 0x0506 } },
+{ 0x0508, { 0x0508 } },
+{ 0x0509, { 0x0508 } },
+{ 0x050a, { 0x050a } },
+{ 0x050b, { 0x050a } },
+{ 0x050c, { 0x050c } },
+{ 0x050d, { 0x050c } },
+{ 0x050e, { 0x050e } },
+{ 0x050f, { 0x050e } },
+{ 0x0510, { 0x0510 } },
+{ 0x0511, { 0x0510 } },
+{ 0x0512, { 0x0512 } },
+{ 0x0513, { 0x0512 } },
+{ 0x0514, { 0x0514 } },
+{ 0x0515, { 0x0514 } },
+{ 0x0516, { 0x0516 } },
+{ 0x0517, { 0x0516 } },
+{ 0x0518, { 0x0518 } },
+{ 0x0519, { 0x0518 } },
+{ 0x051a, { 0x051a } },
+{ 0x051b, { 0x051a } },
+{ 0x051c, { 0x051c } },
+{ 0x051d, { 0x051c } },
+{ 0x051e, { 0x051e } },
+{ 0x051f, { 0x051e } },
+{ 0x0520, { 0x0520 } },
+{ 0x0521, { 0x0520 } },
+{ 0x0522, { 0x0522 } },
+{ 0x0523, { 0x0522 } },
+{ 0x0524, { 0xfffd } },
+{ 0x0525, { 0xfffd } },
+{ 0x0526, { 0xfffd } },
+{ 0x0527, { 0xfffd } },
+{ 0x0528, { 0xfffd } },
+{ 0x0529, { 0xfffd } },
+{ 0x052a, { 0xfffd } },
+{ 0x052b, { 0xfffd } },
+{ 0x052c, { 0xfffd } },
+{ 0x052d, { 0xfffd } },
+{ 0x052e, { 0xfffd } },
+{ 0x052f, { 0xfffd } },
+{ 0x0530, { 0xfffd } },
+{ 0x0531, { 0x0531 } },
+{ 0x0532, { 0x0532 } },
+{ 0x0533, { 0x0533 } },
+{ 0x0534, { 0x0534 } },
+{ 0x0535, { 0x0535 } },
+{ 0x0536, { 0x0536 } },
+{ 0x0537, { 0x0537 } },
+{ 0x0538, { 0x0538 } },
+{ 0x0539, { 0x0539 } },
+{ 0x053a, { 0x053a } },
+{ 0x053b, { 0x053b } },
+{ 0x053c, { 0x053c } },
+{ 0x053d, { 0x053d } },
+{ 0x053e, { 0x053e } },
+{ 0x053f, { 0x053f } },
+{ 0x0540, { 0x0540 } },
+{ 0x0541, { 0x0541 } },
+{ 0x0542, { 0x0542 } },
+{ 0x0543, { 0x0543 } },
+{ 0x0544, { 0x0544 } },
+{ 0x0545, { 0x0545 } },
+{ 0x0546, { 0x0546 } },
+{ 0x0547, { 0x0547 } },
+{ 0x0548, { 0x0548 } },
+{ 0x0549, { 0x0549 } },
+{ 0x054a, { 0x054a } },
+{ 0x054b, { 0x054b } },
+{ 0x054c, { 0x054c } },
+{ 0x054d, { 0x054d } },
+{ 0x054e, { 0x054e } },
+{ 0x054f, { 0x054f } },
+{ 0x0550, { 0x0550 } },
+{ 0x0551, { 0x0551 } },
+{ 0x0552, { 0x0552 } },
+{ 0x0553, { 0x0553 } },
+{ 0x0554, { 0x0554 } },
+{ 0x0555, { 0x0555 } },
+{ 0x0556, { 0x0556 } },
+{ 0x0557, { 0xfffd } },
+{ 0x0558, { 0xfffd } },
+{ 0x0559, { 0x0559 } },
+{ 0x055a, { 0x055a } },
+{ 0x055b, { 0x055b } },
+{ 0x055c, { 0x055c } },
+{ 0x055d, { 0x055d } },
+{ 0x055e, { 0x055e } },
+{ 0x055f, { 0x055f } },
+{ 0x0560, { 0xfffd } },
+{ 0x0561, { 0x0531 } },
+{ 0x0562, { 0x0532 } },
+{ 0x0563, { 0x0533 } },
+{ 0x0564, { 0x0534 } },
+{ 0x0565, { 0x0535 } },
+{ 0x0566, { 0x0536 } },
+{ 0x0567, { 0x0537 } },
+{ 0x0568, { 0x0538 } },
+{ 0x0569, { 0x0539 } },
+{ 0x056a, { 0x053a } },
+{ 0x056b, { 0x053b } },
+{ 0x056c, { 0x053c } },
+{ 0x056d, { 0x053d } },
+{ 0x056e, { 0x053e } },
+{ 0x056f, { 0x053f } },
+{ 0x0570, { 0x0540 } },
+{ 0x0571, { 0x0541 } },
+{ 0x0572, { 0x0542 } },
+{ 0x0573, { 0x0543 } },
+{ 0x0574, { 0x0544 } },
+{ 0x0575, { 0x0545 } },
+{ 0x0576, { 0x0546 } },
+{ 0x0577, { 0x0547 } },
+{ 0x0578, { 0x0548 } },
+{ 0x0579, { 0x0549 } },
+{ 0x057a, { 0x054a } },
+{ 0x057b, { 0x054b } },
+{ 0x057c, { 0x054c } },
+{ 0x057d, { 0x054d } },
+{ 0x057e, { 0x054e } },
+{ 0x057f, { 0x054f } },
+{ 0x0580, { 0x0550 } },
+{ 0x0581, { 0x0551 } },
+{ 0x0582, { 0x0552 } },
+{ 0x0583, { 0x0553 } },
+{ 0x0584, { 0x0554 } },
+{ 0x0585, { 0x0555 } },
+{ 0x0586, { 0x0556 } },
+{ 0x0587, { 0x0535, 0x0552 } },
+{ 0x0588, { 0xfffd } },
+{ 0x0589, { 0x0589 } },
+{ 0x058a, { 0x058a } },
+{ 0x058b, { 0xfffd } },
+{ 0x058c, { 0xfffd } },
+{ 0x058d, { 0xfffd } },
+{ 0x058e, { 0xfffd } },
+{ 0x058f, { 0xfffd } },
+{ 0x0590, { 0xfffd } },
+{ 0x0591, { 0x0591 } },
+{ 0x0592, { 0x0592 } },
+{ 0x0593, { 0x0593 } },
+{ 0x0594, { 0x0594 } },
+{ 0x0595, { 0x0595 } },
+{ 0x0596, { 0x0596 } },
+{ 0x0597, { 0x0597 } },
+{ 0x0598, { 0x0598 } },
+{ 0x0599, { 0x0599 } },
+{ 0x059a, { 0x059a } },
+{ 0x059b, { 0x059b } },
+{ 0x059c, { 0x059c } },
+{ 0x059d, { 0x059d } },
+{ 0x059e, { 0x059e } },
+{ 0x059f, { 0x059f } },
+{ 0x05a0, { 0x05a0 } },
+{ 0x05a1, { 0x05a1 } },
+{ 0x05a2, { 0x05a2 } },
+{ 0x05a3, { 0x05a3 } },
+{ 0x05a4, { 0x05a4 } },
+{ 0x05a5, { 0x05a5 } },
+{ 0x05a6, { 0x05a6 } },
+{ 0x05a7, { 0x05a7 } },
+{ 0x05a8, { 0x05a8 } },
+{ 0x05a9, { 0x05a9 } },
+{ 0x05aa, { 0x05aa } },
+{ 0x05ab, { 0x05ab } },
+{ 0x05ac, { 0x05ac } },
+{ 0x05ad, { 0x05ad } },
+{ 0x05ae, { 0x05ae } },
+{ 0x05af, { 0x05af } },
+{ 0x05b0, { 0x05b0 } },
+{ 0x05b1, { 0x05b1 } },
+{ 0x05b2, { 0x05b2 } },
+{ 0x05b3, { 0x05b3 } },
+{ 0x05b4, { 0x05b4 } },
+{ 0x05b5, { 0x05b5 } },
+{ 0x05b6, { 0x05b6 } },
+{ 0x05b7, { 0x05b7 } },
+{ 0x05b8, { 0x05b8 } },
+{ 0x05b9, { 0x05b9 } },
+{ 0x05ba, { 0x05ba } },
+{ 0x05bb, { 0x05bb } },
+{ 0x05bc, { 0x05bc } },
+{ 0x05bd, { 0x05bd } },
+{ 0x05be, { 0x05be } },
+{ 0x05bf, { 0x05bf } },
+{ 0x05c0, { 0x007c } },
+{ 0x05c1, { 0x05c1 } },
+{ 0x05c2, { 0x05c2 } },
+{ 0x05c3, { 0x003a } },
+{ 0x05c4, { 0x05c4 } },
+{ 0x05c5, { 0x05c5 } },
+{ 0x05c6, { 0x05c6 } },
+{ 0x05c7, { 0x05c7 } },
+{ 0x05c8, { 0xfffd } },
+{ 0x05c9, { 0xfffd } },
+{ 0x05ca, { 0xfffd } },
+{ 0x05cb, { 0xfffd } },
+{ 0x05cc, { 0xfffd } },
+{ 0x05cd, { 0xfffd } },
+{ 0x05ce, { 0xfffd } },
+{ 0x05cf, { 0xfffd } },
+{ 0x05d0, { 0x05d0 } },
+{ 0x05d1, { 0x05d1 } },
+{ 0x05d2, { 0x05d2 } },
+{ 0x05d3, { 0x05d3 } },
+{ 0x05d4, { 0x05d4 } },
+{ 0x05d5, { 0x05d5 } },
+{ 0x05d6, { 0x05d6 } },
+{ 0x05d7, { 0x05d7 } },
+{ 0x05d8, { 0x05d8 } },
+{ 0x05d9, { 0x05d9 } },
+{ 0x05da, { 0x05da } },
+{ 0x05db, { 0x05db } },
+{ 0x05dc, { 0x05dc } },
+{ 0x05dd, { 0x05dd } },
+{ 0x05de, { 0x05de } },
+{ 0x05df, { 0x05df } },
+{ 0x05e0, { 0x05e0 } },
+{ 0x05e1, { 0x05e1 } },
+{ 0x05e2, { 0x05e2 } },
+{ 0x05e3, { 0x05e3 } },
+{ 0x05e4, { 0x05e4 } },
+{ 0x05e5, { 0x05e5 } },
+{ 0x05e6, { 0x05e6 } },
+{ 0x05e7, { 0x05e7 } },
+{ 0x05e8, { 0x05e8 } },
+{ 0x05e9, { 0x05e9 } },
+{ 0x05ea, { 0x05ea } },
+{ 0x05eb, { 0xfffd } },
+{ 0x05ec, { 0xfffd } },
+{ 0x05ed, { 0xfffd } },
+{ 0x05ee, { 0xfffd } },
+{ 0x05ef, { 0xfffd } },
+{ 0x05f0, { 0x05d5, 0x05d5 } },
+{ 0x05f1, { 0x05d5, 0x05d9 } },
+{ 0x05f2, { 0x05d9, 0x05d9 } },
+{ 0x05f3, { 0x05f3 } },
+{ 0x05f4, { 0x05f4 } },
+{ 0x05f5, { 0xfffd } },
+{ 0x05f6, { 0xfffd } },
+{ 0x05f7, { 0xfffd } },
+{ 0x05f8, { 0xfffd } },
+{ 0x05f9, { 0xfffd } },
+{ 0x05fa, { 0xfffd } },
+{ 0x05fb, { 0xfffd } },
+{ 0x05fc, { 0xfffd } },
+{ 0x05fd, { 0xfffd } },
+{ 0x05fe, { 0xfffd } },
+{ 0x05ff, { 0xfffd } },
+{ 0x1e00, { 0x0041 } },
+{ 0x1e01, { 0x0041 } },
+{ 0x1e02, { 0x0042 } },
+{ 0x1e03, { 0x0042 } },
+{ 0x1e04, { 0x0042 } },
+{ 0x1e05, { 0x0042 } },
+{ 0x1e06, { 0x0042 } },
+{ 0x1e07, { 0x0042 } },
+{ 0x1e08, { 0x0043 } },
+{ 0x1e09, { 0x0043 } },
+{ 0x1e0a, { 0x0044 } },
+{ 0x1e0b, { 0x0044 } },
+{ 0x1e0c, { 0x0044 } },
+{ 0x1e0d, { 0x0044 } },
+{ 0x1e0e, { 0x0044 } },
+{ 0x1e0f, { 0x0044 } },
+{ 0x1e10, { 0x0044 } },
+{ 0x1e11, { 0x0044 } },
+{ 0x1e12, { 0x0044 } },
+{ 0x1e13, { 0x0044 } },
+{ 0x1e14, { 0x0045 } },
+{ 0x1e15, { 0x0045 } },
+{ 0x1e16, { 0x0045 } },
+{ 0x1e17, { 0x0045 } },
+{ 0x1e18, { 0x0045 } },
+{ 0x1e19, { 0x0045 } },
+{ 0x1e1a, { 0x0045 } },
+{ 0x1e1b, { 0x0045 } },
+{ 0x1e1c, { 0x0045 } },
+{ 0x1e1d, { 0x0045 } },
+{ 0x1e1e, { 0x0046 } },
+{ 0x1e1f, { 0x0046 } },
+{ 0x1e20, { 0x0047 } },
+{ 0x1e21, { 0x0047 } },
+{ 0x1e22, { 0x0048 } },
+{ 0x1e23, { 0x0048 } },
+{ 0x1e24, { 0x0048 } },
+{ 0x1e25, { 0x0048 } },
+{ 0x1e26, { 0x0048 } },
+{ 0x1e27, { 0x0048 } },
+{ 0x1e28, { 0x0048 } },
+{ 0x1e29, { 0x0048 } },
+{ 0x1e2a, { 0x0048 } },
+{ 0x1e2b, { 0x0048 } },
+{ 0x1e2c, { 0x0049 } },
+{ 0x1e2d, { 0x0049 } },
+{ 0x1e2e, { 0x0049 } },
+{ 0x1e2f, { 0x0049 } },
+{ 0x1e30, { 0x004b } },
+{ 0x1e31, { 0x004b } },
+{ 0x1e32, { 0x004b } },
+{ 0x1e33, { 0x004b } },
+{ 0x1e34, { 0x004b } },
+{ 0x1e35, { 0x004b } },
+{ 0x1e36, { 0x004c } },
+{ 0x1e37, { 0x004c } },
+{ 0x1e38, { 0x004c } },
+{ 0x1e39, { 0x004c } },
+{ 0x1e3a, { 0x004c } },
+{ 0x1e3b, { 0x004c } },
+{ 0x1e3c, { 0x004c } },
+{ 0x1e3d, { 0x004c } },
+{ 0x1e3e, { 0x004d } },
+{ 0x1e3f, { 0x004d } },
+{ 0x1e40, { 0x004d } },
+{ 0x1e41, { 0x004d } },
+{ 0x1e42, { 0x004d } },
+{ 0x1e43, { 0x004d } },
+{ 0x1e44, { 0x004e } },
+{ 0x1e45, { 0x004e } },
+{ 0x1e46, { 0x004e } },
+{ 0x1e47, { 0x004e } },
+{ 0x1e48, { 0x004e } },
+{ 0x1e49, { 0x004e } },
+{ 0x1e4a, { 0x004e } },
+{ 0x1e4b, { 0x004e } },
+{ 0x1e4c, { 0x004f } },
+{ 0x1e4d, { 0x004f } },
+{ 0x1e4e, { 0x004f } },
+{ 0x1e4f, { 0x004f } },
+{ 0x1e50, { 0x004f } },
+{ 0x1e51, { 0x004f } },
+{ 0x1e52, { 0x004f } },
+{ 0x1e53, { 0x004f } },
+{ 0x1e54, { 0x0050 } },
+{ 0x1e55, { 0x0050 } },
+{ 0x1e56, { 0x0050 } },
+{ 0x1e57, { 0x0050 } },
+{ 0x1e58, { 0x0052 } },
+{ 0x1e59, { 0x0052 } },
+{ 0x1e5a, { 0x0052 } },
+{ 0x1e5b, { 0x0052 } },
+{ 0x1e5c, { 0x0052 } },
+{ 0x1e5d, { 0x0052 } },
+{ 0x1e5e, { 0x0052 } },
+{ 0x1e5f, { 0x0052 } },
+{ 0x1e60, { 0x0053 } },
+{ 0x1e61, { 0x0053 } },
+{ 0x1e62, { 0x0053 } },
+{ 0x1e63, { 0x0053 } },
+{ 0x1e64, { 0x0053 } },
+{ 0x1e65, { 0x0053 } },
+{ 0x1e66, { 0x0053 } },
+{ 0x1e67, { 0x0053 } },
+{ 0x1e68, { 0x0053 } },
+{ 0x1e69, { 0x0053 } },
+{ 0x1e6a, { 0x0054 } },
+{ 0x1e6b, { 0x0054 } },
+{ 0x1e6c, { 0x0054 } },
+{ 0x1e6d, { 0x0054 } },
+{ 0x1e6e, { 0x0054 } },
+{ 0x1e6f, { 0x0054 } },
+{ 0x1e70, { 0x0054 } },
+{ 0x1e71, { 0x0054 } },
+{ 0x1e72, { 0x0055 } },
+{ 0x1e73, { 0x0055 } },
+{ 0x1e74, { 0x0055 } },
+{ 0x1e75, { 0x0055 } },
+{ 0x1e76, { 0x0055 } },
+{ 0x1e77, { 0x0055 } },
+{ 0x1e78, { 0x0055 } },
+{ 0x1e79, { 0x0055 } },
+{ 0x1e7a, { 0x0055 } },
+{ 0x1e7b, { 0x0055 } },
+{ 0x1e7c, { 0x0056 } },
+{ 0x1e7d, { 0x0056 } },
+{ 0x1e7e, { 0x0056 } },
+{ 0x1e7f, { 0x0056 } },
+{ 0x1e80, { 0x0057 } },
+{ 0x1e81, { 0x0057 } },
+{ 0x1e82, { 0x0057 } },
+{ 0x1e83, { 0x0057 } },
+{ 0x1e84, { 0x0057 } },
+{ 0x1e85, { 0x0057 } },
+{ 0x1e86, { 0x0057 } },
+{ 0x1e87, { 0x0057 } },
+{ 0x1e88, { 0x0057 } },
+{ 0x1e89, { 0x0057 } },
+{ 0x1e8a, { 0x0058 } },
+{ 0x1e8b, { 0x0058 } },
+{ 0x1e8c, { 0x0058 } },
+{ 0x1e8d, { 0x0058 } },
+{ 0x1e8e, { 0x0059 } },
+{ 0x1e8f, { 0x0059 } },
+{ 0x1e90, { 0x005a } },
+{ 0x1e91, { 0x005a } },
+{ 0x1e92, { 0x005a } },
+{ 0x1e93, { 0x005a } },
+{ 0x1e94, { 0x005a } },
+{ 0x1e95, { 0x005a } },
+{ 0x1e96, { 0x0048 } },
+{ 0x1e97, { 0x0054 } },
+{ 0x1e98, { 0x0057 } },
+{ 0x1e99, { 0x0059 } },
+{ 0x1e9a, { 0x0041 } },
+{ 0x1e9b, { 0x017f } },
+{ 0x1e9c, { 0x017f } },
+{ 0x1e9d, { 0x017f } },
+{ 0x1e9e, { 0x1e9e } },
+{ 0x1e9f, { 0x1e9f } },
+{ 0x1ea0, { 0x0041 } },
+{ 0x1ea1, { 0x0041 } },
+{ 0x1ea2, { 0x0041 } },
+{ 0x1ea3, { 0x0041 } },
+{ 0x1ea4, { 0x0041 } },
+{ 0x1ea5, { 0x0041 } },
+{ 0x1ea6, { 0x0041 } },
+{ 0x1ea7, { 0x0041 } },
+{ 0x1ea8, { 0x0041 } },
+{ 0x1ea9, { 0x0041 } },
+{ 0x1eaa, { 0x0041 } },
+{ 0x1eab, { 0x0041 } },
+{ 0x1eac, { 0x0041 } },
+{ 0x1ead, { 0x0041 } },
+{ 0x1eae, { 0x0041 } },
+{ 0x1eaf, { 0x0041 } },
+{ 0x1eb0, { 0x0041 } },
+{ 0x1eb1, { 0x0041 } },
+{ 0x1eb2, { 0x0041 } },
+{ 0x1eb3, { 0x0041 } },
+{ 0x1eb4, { 0x0041 } },
+{ 0x1eb5, { 0x0041 } },
+{ 0x1eb6, { 0x0041 } },
+{ 0x1eb7, { 0x0041 } },
+{ 0x1eb8, { 0x0045 } },
+{ 0x1eb9, { 0x0045 } },
+{ 0x1eba, { 0x0045 } },
+{ 0x1ebb, { 0x0045 } },
+{ 0x1ebc, { 0x0045 } },
+{ 0x1ebd, { 0x0045 } },
+{ 0x1ebe, { 0x0045 } },
+{ 0x1ebf, { 0x0045 } },
+{ 0x1ec0, { 0x0045 } },
+{ 0x1ec1, { 0x0045 } },
+{ 0x1ec2, { 0x0045 } },
+{ 0x1ec3, { 0x0045 } },
+{ 0x1ec4, { 0x0045 } },
+{ 0x1ec5, { 0x0045 } },
+{ 0x1ec6, { 0x0045 } },
+{ 0x1ec7, { 0x0045 } },
+{ 0x1ec8, { 0x0049 } },
+{ 0x1ec9, { 0x0049 } },
+{ 0x1eca, { 0x0049 } },
+{ 0x1ecb, { 0x0049 } },
+{ 0x1ecc, { 0x004f } },
+{ 0x1ecd, { 0x004f } },
+{ 0x1ece, { 0x004f } },
+{ 0x1ecf, { 0x004f } },
+{ 0x1ed0, { 0x004f } },
+{ 0x1ed1, { 0x004f } },
+{ 0x1ed2, { 0x004f } },
+{ 0x1ed3, { 0x004f } },
+{ 0x1ed4, { 0x004f } },
+{ 0x1ed5, { 0x004f } },
+{ 0x1ed6, { 0x004f } },
+{ 0x1ed7, { 0x004f } },
+{ 0x1ed8, { 0x004f } },
+{ 0x1ed9, { 0x004f } },
+{ 0x1eda, { 0x004f } },
+{ 0x1edb, { 0x004f } },
+{ 0x1edc, { 0x004f } },
+{ 0x1edd, { 0x004f } },
+{ 0x1ede, { 0x004f } },
+{ 0x1edf, { 0x004f } },
+{ 0x1ee0, { 0x004f } },
+{ 0x1ee1, { 0x004f } },
+{ 0x1ee2, { 0x004f } },
+{ 0x1ee3, { 0x004f } },
+{ 0x1ee4, { 0x0055 } },
+{ 0x1ee5, { 0x0055 } },
+{ 0x1ee6, { 0x0055 } },
+{ 0x1ee7, { 0x0055 } },
+{ 0x1ee8, { 0x0055 } },
+{ 0x1ee9, { 0x0055 } },
+{ 0x1eea, { 0x0055 } },
+{ 0x1eeb, { 0x0055 } },
+{ 0x1eec, { 0x0055 } },
+{ 0x1eed, { 0x0055 } },
+{ 0x1eee, { 0x0055 } },
+{ 0x1eef, { 0x0055 } },
+{ 0x1ef0, { 0x0055 } },
+{ 0x1ef1, { 0x0055 } },
+{ 0x1ef2, { 0x0059 } },
+{ 0x1ef3, { 0x0059 } },
+{ 0x1ef4, { 0x0059 } },
+{ 0x1ef5, { 0x0059 } },
+{ 0x1ef6, { 0x0059 } },
+{ 0x1ef7, { 0x0059 } },
+{ 0x1ef8, { 0x0059 } },
+{ 0x1ef9, { 0x0059 } },
+{ 0x1efa, { 0x1efa } },
+{ 0x1efb, { 0x1efa } },
+{ 0x1efc, { 0x1efc } },
+{ 0x1efd, { 0x1efc } },
+{ 0x1efe, { 0x1efe } },
+{ 0x1eff, { 0x1efe } },
+{ 0x1f00, { 0x0391 } },
+{ 0x1f01, { 0x0391 } },
+{ 0x1f02, { 0x0391 } },
+{ 0x1f03, { 0x0391 } },
+{ 0x1f04, { 0x0391 } },
+{ 0x1f05, { 0x0391 } },
+{ 0x1f06, { 0x0391 } },
+{ 0x1f07, { 0x0391 } },
+{ 0x1f08, { 0x0391 } },
+{ 0x1f09, { 0x0391 } },
+{ 0x1f0a, { 0x0391 } },
+{ 0x1f0b, { 0x0391 } },
+{ 0x1f0c, { 0x0391 } },
+{ 0x1f0d, { 0x0391 } },
+{ 0x1f0e, { 0x0391 } },
+{ 0x1f0f, { 0x0391 } },
+{ 0x1f10, { 0x0395 } },
+{ 0x1f11, { 0x0395 } },
+{ 0x1f12, { 0x0395 } },
+{ 0x1f13, { 0x0395 } },
+{ 0x1f14, { 0x0395 } },
+{ 0x1f15, { 0x0395 } },
+{ 0x1f16, { 0xfffd } },
+{ 0x1f17, { 0xfffd } },
+{ 0x1f18, { 0x0395 } },
+{ 0x1f19, { 0x0395 } },
+{ 0x1f1a, { 0x0395 } },
+{ 0x1f1b, { 0x0395 } },
+{ 0x1f1c, { 0x0395 } },
+{ 0x1f1d, { 0x0395 } },
+{ 0x1f1e, { 0xfffd } },
+{ 0x1f1f, { 0xfffd } },
+{ 0x1f20, { 0x0397 } },
+{ 0x1f21, { 0x0397 } },
+{ 0x1f22, { 0x0397 } },
+{ 0x1f23, { 0x0397 } },
+{ 0x1f24, { 0x0397 } },
+{ 0x1f25, { 0x0397 } },
+{ 0x1f26, { 0x0397 } },
+{ 0x1f27, { 0x0397 } },
+{ 0x1f28, { 0x0397 } },
+{ 0x1f29, { 0x0397 } },
+{ 0x1f2a, { 0x0397 } },
+{ 0x1f2b, { 0x0397 } },
+{ 0x1f2c, { 0x0397 } },
+{ 0x1f2d, { 0x0397 } },
+{ 0x1f2e, { 0x0397 } },
+{ 0x1f2f, { 0x0397 } },
+{ 0x1f30, { 0x0399 } },
+{ 0x1f31, { 0x0399 } },
+{ 0x1f32, { 0x0399 } },
+{ 0x1f33, { 0x0399 } },
+{ 0x1f34, { 0x0399 } },
+{ 0x1f35, { 0x0399 } },
+{ 0x1f36, { 0x0399 } },
+{ 0x1f37, { 0x0399 } },
+{ 0x1f38, { 0x0399 } },
+{ 0x1f39, { 0x0399 } },
+{ 0x1f3a, { 0x0399 } },
+{ 0x1f3b, { 0x0399 } },
+{ 0x1f3c, { 0x0399 } },
+{ 0x1f3d, { 0x0399 } },
+{ 0x1f3e, { 0x0399 } },
+{ 0x1f3f, { 0x0399 } },
+{ 0x1f40, { 0x039f } },
+{ 0x1f41, { 0x039f } },
+{ 0x1f42, { 0x039f } },
+{ 0x1f43, { 0x039f } },
+{ 0x1f44, { 0x039f } },
+{ 0x1f45, { 0x039f } },
+{ 0x1f46, { 0xfffd } },
+{ 0x1f47, { 0xfffd } },
+{ 0x1f48, { 0x039f } },
+{ 0x1f49, { 0x039f } },
+{ 0x1f4a, { 0x039f } },
+{ 0x1f4b, { 0x039f } },
+{ 0x1f4c, { 0x039f } },
+{ 0x1f4d, { 0x039f } },
+{ 0x1f4e, { 0xfffd } },
+{ 0x1f4f, { 0xfffd } },
+{ 0x1f50, { 0x03a5 } },
+{ 0x1f51, { 0x03a5 } },
+{ 0x1f52, { 0x03a5 } },
+{ 0x1f53, { 0x03a5 } },
+{ 0x1f54, { 0x03a5 } },
+{ 0x1f55, { 0x03a5 } },
+{ 0x1f56, { 0x03a5 } },
+{ 0x1f57, { 0x03a5 } },
+{ 0x1f58, { 0xfffd } },
+{ 0x1f59, { 0x03a5 } },
+{ 0x1f5a, { 0xfffd } },
+{ 0x1f5b, { 0x03a5 } },
+{ 0x1f5c, { 0xfffd } },
+{ 0x1f5d, { 0x03a5 } },
+{ 0x1f5e, { 0xfffd } },
+{ 0x1f5f, { 0x03a5 } },
+{ 0x1f60, { 0x03a9 } },
+{ 0x1f61, { 0x03a9 } },
+{ 0x1f62, { 0x03a9 } },
+{ 0x1f63, { 0x03a9 } },
+{ 0x1f64, { 0x03a9 } },
+{ 0x1f65, { 0x03a9 } },
+{ 0x1f66, { 0x03a9 } },
+{ 0x1f67, { 0x03a9 } },
+{ 0x1f68, { 0x03a9 } },
+{ 0x1f69, { 0x03a9 } },
+{ 0x1f6a, { 0x03a9 } },
+{ 0x1f6b, { 0x03a9 } },
+{ 0x1f6c, { 0x03a9 } },
+{ 0x1f6d, { 0x03a9 } },
+{ 0x1f6e, { 0x03a9 } },
+{ 0x1f6f, { 0x03a9 } },
+{ 0x1f70, { 0x0391 } },
+{ 0x1f71, { 0x0391 } },
+{ 0x1f72, { 0x0395 } },
+{ 0x1f73, { 0x0395 } },
+{ 0x1f74, { 0x0397 } },
+{ 0x1f75, { 0x0397 } },
+{ 0x1f76, { 0x0399 } },
+{ 0x1f77, { 0x0399 } },
+{ 0x1f78, { 0x039f } },
+{ 0x1f79, { 0x039f } },
+{ 0x1f7a, { 0x03a5 } },
+{ 0x1f7b, { 0x03a5 } },
+{ 0x1f7c, { 0x03a9 } },
+{ 0x1f7d, { 0x03a9 } },
+{ 0x1f7e, { 0xfffd } },
+{ 0x1f7f, { 0xfffd } },
+{ 0x1f80, { 0x0391 } },
+{ 0x1f81, { 0x0391 } },
+{ 0x1f82, { 0x0391 } },
+{ 0x1f83, { 0x0391 } },
+{ 0x1f84, { 0x0391 } },
+{ 0x1f85, { 0x0391 } },
+{ 0x1f86, { 0x0391 } },
+{ 0x1f87, { 0x0391 } },
+{ 0x1f88, { 0x0391 } },
+{ 0x1f89, { 0x0391 } },
+{ 0x1f8a, { 0x0391 } },
+{ 0x1f8b, { 0x0391 } },
+{ 0x1f8c, { 0x0391 } },
+{ 0x1f8d, { 0x0391 } },
+{ 0x1f8e, { 0x0391 } },
+{ 0x1f8f, { 0x0391 } },
+{ 0x1f90, { 0x0397 } },
+{ 0x1f91, { 0x0397 } },
+{ 0x1f92, { 0x0397 } },
+{ 0x1f93, { 0x0397 } },
+{ 0x1f94, { 0x0397 } },
+{ 0x1f95, { 0x0397 } },
+{ 0x1f96, { 0x0397 } },
+{ 0x1f97, { 0x0397 } },
+{ 0x1f98, { 0x0397 } },
+{ 0x1f99, { 0x0397 } },
+{ 0x1f9a, { 0x0397 } },
+{ 0x1f9b, { 0x0397 } },
+{ 0x1f9c, { 0x0397 } },
+{ 0x1f9d, { 0x0397 } },
+{ 0x1f9e, { 0x0397 } },
+{ 0x1f9f, { 0x0397 } },
+{ 0x1fa0, { 0x03a9 } },
+{ 0x1fa1, { 0x03a9 } },
+{ 0x1fa2, { 0x03a9 } },
+{ 0x1fa3, { 0x03a9 } },
+{ 0x1fa4, { 0x03a9 } },
+{ 0x1fa5, { 0x03a9 } },
+{ 0x1fa6, { 0x03a9 } },
+{ 0x1fa7, { 0x03a9 } },
+{ 0x1fa8, { 0x03a9 } },
+{ 0x1fa9, { 0x03a9 } },
+{ 0x1faa, { 0x03a9 } },
+{ 0x1fab, { 0x03a9 } },
+{ 0x1fac, { 0x03a9 } },
+{ 0x1fad, { 0x03a9 } },
+{ 0x1fae, { 0x03a9 } },
+{ 0x1faf, { 0x03a9 } },
+{ 0x1fb0, { 0x0391 } },
+{ 0x1fb1, { 0x0391 } },
+{ 0x1fb2, { 0x0391 } },
+{ 0x1fb3, { 0x0391 } },
+{ 0x1fb4, { 0x0391 } },
+{ 0x1fb5, { 0xfffd } },
+{ 0x1fb6, { 0x0391 } },
+{ 0x1fb7, { 0x0391 } },
+{ 0x1fb8, { 0x0391 } },
+{ 0x1fb9, { 0x0391 } },
+{ 0x1fba, { 0x0391 } },
+{ 0x1fbb, { 0x0391 } },
+{ 0x1fbc, { 0x0391 } },
+{ 0x1fbd, { 0x1fbd } },
+{ 0x1fbe, { 0x0399 } },
+{ 0x1fbf, { 0x1fbf } },
+{ 0x1fc0, { 0x1fc0 } },
+{ 0x1fc1, { 0x1fc1 } },
+{ 0x1fc2, { 0x0397 } },
+{ 0x1fc3, { 0x0397 } },
+{ 0x1fc4, { 0x0397 } },
+{ 0x1fc5, { 0xfffd } },
+{ 0x1fc6, { 0x0397 } },
+{ 0x1fc7, { 0x0397 } },
+{ 0x1fc8, { 0x0395 } },
+{ 0x1fc9, { 0x0395 } },
+{ 0x1fca, { 0x0397 } },
+{ 0x1fcb, { 0x0397 } },
+{ 0x1fcc, { 0x0397 } },
+{ 0x1fcd, { 0x1fcd } },
+{ 0x1fce, { 0x1fce } },
+{ 0x1fcf, { 0x1fcf } },
+{ 0x1fd0, { 0x0399 } },
+{ 0x1fd1, { 0x0399 } },
+{ 0x1fd2, { 0x0399 } },
+{ 0x1fd3, { 0x0399 } },
+{ 0x1fd4, { 0xfffd } },
+{ 0x1fd5, { 0xfffd } },
+{ 0x1fd6, { 0x0399 } },
+{ 0x1fd7, { 0x0399 } },
+{ 0x1fd8, { 0x0399 } },
+{ 0x1fd9, { 0x0399 } },
+{ 0x1fda, { 0x0399 } },
+{ 0x1fdb, { 0x0399 } },
+{ 0x1fdc, { 0xfffd } },
+{ 0x1fdd, { 0x1fdd } },
+{ 0x1fde, { 0x1fde } },
+{ 0x1fdf, { 0x1fdf } },
+{ 0x1fe0, { 0x03a5 } },
+{ 0x1fe1, { 0x03a5 } },
+{ 0x1fe2, { 0x03a5 } },
+{ 0x1fe3, { 0x03a5 } },
+{ 0x1fe4, { 0x03a1 } },
+{ 0x1fe5, { 0x03a1 } },
+{ 0x1fe6, { 0x03a5 } },
+{ 0x1fe7, { 0x03a5 } },
+{ 0x1fe8, { 0x03a5 } },
+{ 0x1fe9, { 0x03a5 } },
+{ 0x1fea, { 0x03a5 } },
+{ 0x1feb, { 0x03a5 } },
+{ 0x1fec, { 0x03a1 } },
+{ 0x1fed, { 0x1fed } },
+{ 0x1fee, { 0x1fee } },
+{ 0x1fef, { 0x1fef } },
+{ 0x1ff0, { 0xfffd } },
+{ 0x1ff1, { 0xfffd } },
+{ 0x1ff2, { 0x03a9 } },
+{ 0x1ff3, { 0x03a9 } },
+{ 0x1ff4, { 0x03a9 } },
+{ 0x1ff5, { 0xfffd } },
+{ 0x1ff6, { 0x03a9 } },
+{ 0x1ff7, { 0x03a9 } },
+{ 0x1ff8, { 0x039f } },
+{ 0x1ff9, { 0x039f } },
+{ 0x1ffa, { 0x03a9 } },
+{ 0x1ffb, { 0x03a9 } },
+{ 0x1ffc, { 0x03a9 } },
+{ 0x1ffd, { 0x1ffd } },
+{ 0x1ffe, { 0x1ffe } },
+{ 0x1fff, { 0xfffd } },
+{ 0x2000, { 0x0020 } },
+{ 0x2001, { 0x0020 } },
+{ 0x2002, { 0x0020 } },
+{ 0x2003, { 0x0020 } },
+{ 0x2004, { 0x0020 } },
+{ 0x2005, { 0x0020 } },
+{ 0x2006, { 0x0020 } },
+{ 0x2007, { 0x0020 } },
+{ 0x2008, { 0x0020 } },
+{ 0x2009, { 0x0020 } },
+{ 0x200a, { 0x0020 } },
+{ 0x200b, { 0x0020 } },
+{ 0x200c, { 0x200c } },
+{ 0x200d, { 0x200d } },
+{ 0x200e, { 0x200e } },
+{ 0x200f, { 0x200f } },
+{ 0x2010, { 0x002d } },
+{ 0x2011, { 0x002d } },
+{ 0x2012, { 0x002d } },
+{ 0x2013, { 0x002d } },
+{ 0x2014, { 0x002d } },
+{ 0x2015, { 0x002d } },
+{ 0x2016, { 0x2016 } },
+{ 0x2017, { 0x005f } },
+{ 0x2018, { 0x0027 } },
+{ 0x2019, { 0x0027 } },
+{ 0x201a, { 0x201a } },
+{ 0x201b, { 0x201b } },
+{ 0x201c, { 0x0022 } },
+{ 0x201d, { 0x0022 } },
+{ 0x201e, { 0x201e } },
+{ 0x201f, { 0x201f } },
+{ 0x2020, { 0x2020 } },
+{ 0x2021, { 0x2021 } },
+{ 0x2022, { 0x00b7 } },
+{ 0x2023, { 0x2023 } },
+{ 0x2024, { 0x002e } },
+{ 0x2025, { 0x002e, 0x002e } },
+{ 0x2026, { 0x002e, 0x002e, 0x002e } },
+{ 0x2027, { 0x2027 } },
+{ 0x2028, { 0x2028 } },
+{ 0x2029, { 0x2029 } },
+{ 0x202a, { 0x202a } },
+{ 0x202b, { 0x202b } },
+{ 0x202c, { 0x202c } },
+{ 0x202d, { 0x202d } },
+{ 0x202e, { 0x202e } },
+{ 0x202f, { 0x0020 } },
+{ 0x2030, { 0x2030 } },
+{ 0x2031, { 0x2031 } },
+{ 0x2032, { 0x0027 } },
+{ 0x2033, { 0x0022 } },
+{ 0x2034, { 0x0027, 0x0027, 0x0027 } },
+{ 0x2035, { 0x0060 } },
+{ 0x2036, { 0x0060, 0x0060 } },
+{ 0x2037, { 0x0060, 0x0060, 0x0060 } },
+{ 0x2038, { 0x2038 } },
+{ 0x2039, { 0x2039 } },
+{ 0x203a, { 0x203a } },
+{ 0x203b, { 0x203b } },
+{ 0x203c, { 0x0021, 0x0021 } },
+{ 0x203d, { 0x203d } },
+{ 0x203e, { 0x203e } },
+{ 0x203f, { 0x203f } },
+{ 0x2040, { 0x2040 } },
+{ 0x2041, { 0x2041 } },
+{ 0x2042, { 0x2042 } },
+{ 0x2043, { 0x2043 } },
+{ 0x2044, { 0x002f } },
+{ 0x2045, { 0x2045 } },
+{ 0x2046, { 0x2046 } },
+{ 0x2047, { 0x003f, 0x003f } },
+{ 0x2048, { 0x003f, 0x0021 } },
+{ 0x2049, { 0x0021, 0x003f } },
+{ 0x204a, { 0x204a } },
+{ 0x204b, { 0x204b } },
+{ 0x204c, { 0x204c } },
+{ 0x204d, { 0x204d } },
+{ 0x204e, { 0x204e } },
+{ 0x204f, { 0x204f } },
+{ 0x2050, { 0x2050 } },
+{ 0x2051, { 0x2051 } },
+{ 0x2052, { 0x2052 } },
+{ 0x2053, { 0x007e } },
+{ 0x2054, { 0x2054 } },
+{ 0x2055, { 0x2055 } },
+{ 0x2056, { 0x2056 } },
+{ 0x2057, { 0x0027, 0x0027, 0x0027, 0x0027 } },
+{ 0x2058, { 0x2058 } },
+{ 0x2059, { 0x2059 } },
+{ 0x205a, { 0x205a } },
+{ 0x205b, { 0x205b } },
+{ 0x205c, { 0x205c } },
+{ 0x205d, { 0x205d } },
+{ 0x205e, { 0x205e } },
+{ 0x205f, { 0x0020 } },
+{ 0x2060, { 0x0020 } },
+{ 0x2061, { 0x2061 } },
+{ 0x2062, { 0x2062 } },
+{ 0x2063, { 0x2063 } },
+{ 0x2064, { 0x2064 } },
+{ 0x2065, { 0xfffd } },
+{ 0x2066, { 0xfffd } },
+{ 0x2067, { 0xfffd } },
+{ 0x2068, { 0xfffd } },
+{ 0x2069, { 0xfffd } },
+{ 0x206a, { 0x206a } },
+{ 0x206b, { 0x206b } },
+{ 0x206c, { 0x206c } },
+{ 0x206d, { 0x206d } },
+{ 0x206e, { 0x206e } },
+{ 0x206f, { 0x206f } },
+{ 0x2070, { 0x0030 } },
+{ 0x2071, { 0x0069 } },
+{ 0x2072, { 0xfffd } },
+{ 0x2073, { 0xfffd } },
+{ 0x2074, { 0x0034 } },
+{ 0x2075, { 0x0035 } },
+{ 0x2076, { 0x0036 } },
+{ 0x2077, { 0x0037 } },
+{ 0x2078, { 0x0038 } },
+{ 0x2079, { 0x0039 } },
+{ 0x207a, { 0x002b } },
+{ 0x207b, { 0x002d } },
+{ 0x207c, { 0x003d } },
+{ 0x207d, { 0x0028 } },
+{ 0x207e, { 0x0029 } },
+{ 0x207f, { 0x006e } },
+{ 0x2080, { 0x0030 } },
+{ 0x2081, { 0x0031 } },
+{ 0x2082, { 0x0032 } },
+{ 0x2083, { 0x0033 } },
+{ 0x2084, { 0x0034 } },
+{ 0x2085, { 0x0035 } },
+{ 0x2086, { 0x0036 } },
+{ 0x2087, { 0x0037 } },
+{ 0x2088, { 0x0038 } },
+{ 0x2089, { 0x0039 } },
+{ 0x208a, { 0x002b } },
+{ 0x208b, { 0x002d } },
+{ 0x208c, { 0x003d } },
+{ 0x208d, { 0x0028 } },
+{ 0x208e, { 0x0029 } },
+{ 0x208f, { 0xfffd } },
+{ 0x2090, { 0x0061 } },
+{ 0x2091, { 0x0065 } },
+{ 0x2092, { 0x006f } },
+{ 0x2093, { 0x0078 } },
+{ 0x2094, { 0x0259 } },
+{ 0x2095, { 0xfffd } },
+{ 0x2096, { 0xfffd } },
+{ 0x2097, { 0xfffd } },
+{ 0x2098, { 0xfffd } },
+{ 0x2099, { 0xfffd } },
+{ 0x209a, { 0xfffd } },
+{ 0x209b, { 0xfffd } },
+{ 0x209c, { 0xfffd } },
+{ 0x209d, { 0xfffd } },
+{ 0x209e, { 0xfffd } },
+{ 0x209f, { 0xfffd } },
+{ 0x20a0, { 0x20a0 } },
+{ 0x20a1, { 0x20a1 } },
+{ 0x20a2, { 0x20a2 } },
+{ 0x20a3, { 0x20a3 } },
+{ 0x20a4, { 0x20a4 } },
+{ 0x20a5, { 0x20a5 } },
+{ 0x20a6, { 0x20a6 } },
+{ 0x20a7, { 0x20a7 } },
+{ 0x20a8, { 0x20a8 } },
+{ 0x20a9, { 0x20a9 } },
+{ 0x20aa, { 0x20aa } },
+{ 0x20ab, { 0x20ab } },
+{ 0x20ac, { 0x20ac } },
+{ 0x20ad, { 0x20ad } },
+{ 0x20ae, { 0x20ae } },
+{ 0x20af, { 0x20af } },
+{ 0x20b0, { 0x20b0 } },
+{ 0x20b1, { 0x20b1 } },
+{ 0x20b2, { 0x20b2 } },
+{ 0x20b3, { 0x20b3 } },
+{ 0x20b4, { 0x20b4 } },
+{ 0x20b5, { 0x20b5 } },
+{ 0x20b6, { 0xfffd } },
+{ 0x20b7, { 0xfffd } },
+{ 0x20b8, { 0xfffd } },
+{ 0x20b9, { 0xfffd } },
+{ 0x20ba, { 0xfffd } },
+{ 0x20bb, { 0xfffd } },
+{ 0x20bc, { 0xfffd } },
+{ 0x20bd, { 0xfffd } },
+{ 0x20be, { 0xfffd } },
+{ 0x20bf, { 0xfffd } },
+{ 0x20c0, { 0xfffd } },
+{ 0x20c1, { 0xfffd } },
+{ 0x20c2, { 0xfffd } },
+{ 0x20c3, { 0xfffd } },
+{ 0x20c4, { 0xfffd } },
+{ 0x20c5, { 0xfffd } },
+{ 0x20c6, { 0xfffd } },
+{ 0x20c7, { 0xfffd } },
+{ 0x20c8, { 0xfffd } },
+{ 0x20c9, { 0xfffd } },
+{ 0x20ca, { 0xfffd } },
+{ 0x20cb, { 0xfffd } },
+{ 0x20cc, { 0xfffd } },
+{ 0x20cd, { 0xfffd } },
+{ 0x20ce, { 0xfffd } },
+{ 0x20cf, { 0xfffd } },
+{ 0x20d0, { 0xffff } },
+{ 0x20d1, { 0xffff } },
+{ 0x20d2, { 0xffff } },
+{ 0x20d3, { 0xffff } },
+{ 0x20d4, { 0xffff } },
+{ 0x20d5, { 0xffff } },
+{ 0x20d6, { 0xffff } },
+{ 0x20d7, { 0xffff } },
+{ 0x20d8, { 0xffff } },
+{ 0x20d9, { 0xffff } },
+{ 0x20da, { 0xffff } },
+{ 0x20db, { 0xffff } },
+{ 0x20dc, { 0xffff } },
+{ 0x20dd, { 0xffff } },
+{ 0x20de, { 0xffff } },
+{ 0x20df, { 0xffff } },
+{ 0x20e0, { 0xffff } },
+{ 0x20e1, { 0xffff } },
+{ 0x20e2, { 0xffff } },
+{ 0x20e3, { 0xffff } },
+{ 0x20e4, { 0xffff } },
+{ 0x20e5, { 0xffff } },
+{ 0x20e6, { 0xffff } },
+{ 0x20e7, { 0xffff } },
+{ 0x20e8, { 0xffff } },
+{ 0x20e9, { 0xffff } },
+{ 0x20ea, { 0xffff } },
+{ 0x20eb, { 0xffff } },
+{ 0x20ec, { 0xffff } },
+{ 0x20ed, { 0xffff } },
+{ 0x20ee, { 0xffff } },
+{ 0x20ef, { 0xffff } },
+{ 0x20f0, { 0xffff } },
+{ 0x20f1, { 0xfffd } },
+{ 0x20f2, { 0xfffd } },
+{ 0x20f3, { 0xfffd } },
+{ 0x20f4, { 0xfffd } },
+{ 0x20f5, { 0xfffd } },
+{ 0x20f6, { 0xfffd } },
+{ 0x20f7, { 0xfffd } },
+{ 0x20f8, { 0xfffd } },
+{ 0x20f9, { 0xfffd } },
+{ 0x20fa, { 0xfffd } },
+{ 0x20fb, { 0xfffd } },
+{ 0x20fc, { 0xfffd } },
+{ 0x20fd, { 0xfffd } },
+{ 0x20fe, { 0xfffd } },
+{ 0x20ff, { 0xfffd } },
+{ 0x2c00, { 0x2c00 } },
+{ 0x2c01, { 0x2c01 } },
+{ 0x2c02, { 0x2c02 } },
+{ 0x2c03, { 0x2c03 } },
+{ 0x2c04, { 0x2c04 } },
+{ 0x2c05, { 0x2c05 } },
+{ 0x2c06, { 0x2c06 } },
+{ 0x2c07, { 0x2c07 } },
+{ 0x2c08, { 0x2c08 } },
+{ 0x2c09, { 0x2c09 } },
+{ 0x2c0a, { 0x2c0a } },
+{ 0x2c0b, { 0x2c0b } },
+{ 0x2c0c, { 0x2c0c } },
+{ 0x2c0d, { 0x2c0d } },
+{ 0x2c0e, { 0x2c0e } },
+{ 0x2c0f, { 0x2c0f } },
+{ 0x2c10, { 0x2c10 } },
+{ 0x2c11, { 0x2c11 } },
+{ 0x2c12, { 0x2c12 } },
+{ 0x2c13, { 0x2c13 } },
+{ 0x2c14, { 0x2c14 } },
+{ 0x2c15, { 0x2c15 } },
+{ 0x2c16, { 0x2c16 } },
+{ 0x2c17, { 0x2c17 } },
+{ 0x2c18, { 0x2c18 } },
+{ 0x2c19, { 0x2c19 } },
+{ 0x2c1a, { 0x2c1a } },
+{ 0x2c1b, { 0x2c1b } },
+{ 0x2c1c, { 0x2c1c } },
+{ 0x2c1d, { 0x2c1d } },
+{ 0x2c1e, { 0x2c1e } },
+{ 0x2c1f, { 0x2c1f } },
+{ 0x2c20, { 0x2c20 } },
+{ 0x2c21, { 0x2c21 } },
+{ 0x2c22, { 0x2c22 } },
+{ 0x2c23, { 0x2c23 } },
+{ 0x2c24, { 0x2c24 } },
+{ 0x2c25, { 0x2c25 } },
+{ 0x2c26, { 0x2c26 } },
+{ 0x2c27, { 0x2c27 } },
+{ 0x2c28, { 0x2c28 } },
+{ 0x2c29, { 0x2c29 } },
+{ 0x2c2a, { 0x2c2a } },
+{ 0x2c2b, { 0x2c2b } },
+{ 0x2c2c, { 0x2c2c } },
+{ 0x2c2d, { 0x2c2d } },
+{ 0x2c2e, { 0x2c2e } },
+{ 0x2c2f, { 0xfffd } },
+{ 0x2c30, { 0x2c00 } },
+{ 0x2c31, { 0x2c01 } },
+{ 0x2c32, { 0x2c02 } },
+{ 0x2c33, { 0x2c03 } },
+{ 0x2c34, { 0x2c04 } },
+{ 0x2c35, { 0x2c05 } },
+{ 0x2c36, { 0x2c06 } },
+{ 0x2c37, { 0x2c07 } },
+{ 0x2c38, { 0x2c08 } },
+{ 0x2c39, { 0x2c09 } },
+{ 0x2c3a, { 0x2c0a } },
+{ 0x2c3b, { 0x2c0b } },
+{ 0x2c3c, { 0x2c0c } },
+{ 0x2c3d, { 0x2c0d } },
+{ 0x2c3e, { 0x2c0e } },
+{ 0x2c3f, { 0x2c0f } },
+{ 0x2c40, { 0x2c10 } },
+{ 0x2c41, { 0x2c11 } },
+{ 0x2c42, { 0x2c12 } },
+{ 0x2c43, { 0x2c13 } },
+{ 0x2c44, { 0x2c14 } },
+{ 0x2c45, { 0x2c15 } },
+{ 0x2c46, { 0x2c16 } },
+{ 0x2c47, { 0x2c17 } },
+{ 0x2c48, { 0x2c18 } },
+{ 0x2c49, { 0x2c19 } },
+{ 0x2c4a, { 0x2c1a } },
+{ 0x2c4b, { 0x2c1b } },
+{ 0x2c4c, { 0x2c1c } },
+{ 0x2c4d, { 0x2c1d } },
+{ 0x2c4e, { 0x2c1e } },
+{ 0x2c4f, { 0x2c1f } },
+{ 0x2c50, { 0x2c20 } },
+{ 0x2c51, { 0x2c21 } },
+{ 0x2c52, { 0x2c22 } },
+{ 0x2c53, { 0x2c23 } },
+{ 0x2c54, { 0x2c24 } },
+{ 0x2c55, { 0x2c25 } },
+{ 0x2c56, { 0x2c26 } },
+{ 0x2c57, { 0x2c27 } },
+{ 0x2c58, { 0x2c28 } },
+{ 0x2c59, { 0x2c29 } },
+{ 0x2c5a, { 0x2c2a } },
+{ 0x2c5b, { 0x2c2b } },
+{ 0x2c5c, { 0x2c2c } },
+{ 0x2c5d, { 0x2c2d } },
+{ 0x2c5e, { 0x2c2e } },
+{ 0x2c5f, { 0xfffd } },
+{ 0x2c60, { 0x2c60 } },
+{ 0x2c61, { 0x2c60 } },
+{ 0x2c62, { 0x2c62 } },
+{ 0x2c63, { 0x2c63 } },
+{ 0x2c64, { 0x2c64 } },
+{ 0x2c65, { 0x023a } },
+{ 0x2c66, { 0x023e } },
+{ 0x2c67, { 0x2c67 } },
+{ 0x2c68, { 0x2c67 } },
+{ 0x2c69, { 0x2c69 } },
+{ 0x2c6a, { 0x2c69 } },
+{ 0x2c6b, { 0x2c6b } },
+{ 0x2c6c, { 0x2c6b } },
+{ 0x2c6d, { 0x2c6d } },
+{ 0x2c6e, { 0x2c6e } },
+{ 0x2c6f, { 0x2c6f } },
+{ 0x2c70, { 0xfffd } },
+{ 0x2c71, { 0x2c71 } },
+{ 0x2c72, { 0x2c72 } },
+{ 0x2c73, { 0x2c72 } },
+{ 0x2c74, { 0x2c74 } },
+{ 0x2c75, { 0x2c75 } },
+{ 0x2c76, { 0x2c75 } },
+{ 0x2c77, { 0x2c77 } },
+{ 0x2c78, { 0x2c78 } },
+{ 0x2c79, { 0x2c79 } },
+{ 0x2c7a, { 0x2c7a } },
+{ 0x2c7b, { 0x2c7b } },
+{ 0x2c7c, { 0x006a } },
+{ 0x2c7d, { 0x0056 } },
+{ 0x2c7e, { 0xfffd } },
+{ 0x2c7f, { 0xfffd } },
+{ 0x2c80, { 0x2c80 } },
+{ 0x2c81, { 0x2c80 } },
+{ 0x2c82, { 0x2c82 } },
+{ 0x2c83, { 0x2c82 } },
+{ 0x2c84, { 0x2c84 } },
+{ 0x2c85, { 0x2c84 } },
+{ 0x2c86, { 0x2c86 } },
+{ 0x2c87, { 0x2c86 } },
+{ 0x2c88, { 0x2c88 } },
+{ 0x2c89, { 0x2c88 } },
+{ 0x2c8a, { 0x2c8a } },
+{ 0x2c8b, { 0x2c8a } },
+{ 0x2c8c, { 0x2c8c } },
+{ 0x2c8d, { 0x2c8c } },
+{ 0x2c8e, { 0x2c8e } },
+{ 0x2c8f, { 0x2c8e } },
+{ 0x2c90, { 0x2c90 } },
+{ 0x2c91, { 0x2c90 } },
+{ 0x2c92, { 0x2c92 } },
+{ 0x2c93, { 0x2c92 } },
+{ 0x2c94, { 0x2c94 } },
+{ 0x2c95, { 0x2c94 } },
+{ 0x2c96, { 0x2c96 } },
+{ 0x2c97, { 0x2c96 } },
+{ 0x2c98, { 0x2c98 } },
+{ 0x2c99, { 0x2c98 } },
+{ 0x2c9a, { 0x2c9a } },
+{ 0x2c9b, { 0x2c9a } },
+{ 0x2c9c, { 0x2c9c } },
+{ 0x2c9d, { 0x2c9c } },
+{ 0x2c9e, { 0x2c9e } },
+{ 0x2c9f, { 0x2c9e } },
+{ 0x2ca0, { 0x2ca0 } },
+{ 0x2ca1, { 0x2ca0 } },
+{ 0x2ca2, { 0x2ca2 } },
+{ 0x2ca3, { 0x2ca2 } },
+{ 0x2ca4, { 0x2ca4 } },
+{ 0x2ca5, { 0x2ca4 } },
+{ 0x2ca6, { 0x2ca6 } },
+{ 0x2ca7, { 0x2ca6 } },
+{ 0x2ca8, { 0x2ca8 } },
+{ 0x2ca9, { 0x2ca8 } },
+{ 0x2caa, { 0x2caa } },
+{ 0x2cab, { 0x2caa } },
+{ 0x2cac, { 0x2cac } },
+{ 0x2cad, { 0x2cac } },
+{ 0x2cae, { 0x2cae } },
+{ 0x2caf, { 0x2cae } },
+{ 0x2cb0, { 0x2cb0 } },
+{ 0x2cb1, { 0x2cb0 } },
+{ 0x2cb2, { 0x2cb2 } },
+{ 0x2cb3, { 0x2cb2 } },
+{ 0x2cb4, { 0x2cb4 } },
+{ 0x2cb5, { 0x2cb4 } },
+{ 0x2cb6, { 0x2cb6 } },
+{ 0x2cb7, { 0x2cb6 } },
+{ 0x2cb8, { 0x2cb8 } },
+{ 0x2cb9, { 0x2cb8 } },
+{ 0x2cba, { 0x2cba } },
+{ 0x2cbb, { 0x2cba } },
+{ 0x2cbc, { 0x2cbc } },
+{ 0x2cbd, { 0x2cbc } },
+{ 0x2cbe, { 0x2cbe } },
+{ 0x2cbf, { 0x2cbe } },
+{ 0x2cc0, { 0x2cc0 } },
+{ 0x2cc1, { 0x2cc0 } },
+{ 0x2cc2, { 0x2cc2 } },
+{ 0x2cc3, { 0x2cc2 } },
+{ 0x2cc4, { 0x2cc4 } },
+{ 0x2cc5, { 0x2cc4 } },
+{ 0x2cc6, { 0x2cc6 } },
+{ 0x2cc7, { 0x2cc6 } },
+{ 0x2cc8, { 0x2cc8 } },
+{ 0x2cc9, { 0x2cc8 } },
+{ 0x2cca, { 0x2cca } },
+{ 0x2ccb, { 0x2cca } },
+{ 0x2ccc, { 0x2ccc } },
+{ 0x2ccd, { 0x2ccc } },
+{ 0x2cce, { 0x2cce } },
+{ 0x2ccf, { 0x2cce } },
+{ 0x2cd0, { 0x2cd0 } },
+{ 0x2cd1, { 0x2cd0 } },
+{ 0x2cd2, { 0x2cd2 } },
+{ 0x2cd3, { 0x2cd2 } },
+{ 0x2cd4, { 0x2cd4 } },
+{ 0x2cd5, { 0x2cd4 } },
+{ 0x2cd6, { 0x2cd6 } },
+{ 0x2cd7, { 0x2cd6 } },
+{ 0x2cd8, { 0x2cd8 } },
+{ 0x2cd9, { 0x2cd8 } },
+{ 0x2cda, { 0x2cda } },
+{ 0x2cdb, { 0x2cda } },
+{ 0x2cdc, { 0x2cdc } },
+{ 0x2cdd, { 0x2cdc } },
+{ 0x2cde, { 0x2cde } },
+{ 0x2cdf, { 0x2cde } },
+{ 0x2ce0, { 0x2ce0 } },
+{ 0x2ce1, { 0x2ce0 } },
+{ 0x2ce2, { 0x2ce2 } },
+{ 0x2ce3, { 0x2ce2 } },
+{ 0x2ce4, { 0x2ce4 } },
+{ 0x2ce5, { 0x2ce5 } },
+{ 0x2ce6, { 0x2ce6 } },
+{ 0x2ce7, { 0x2ce7 } },
+{ 0x2ce8, { 0x2ce8 } },
+{ 0x2ce9, { 0x2ce9 } },
+{ 0x2cea, { 0x2cea } },
+{ 0x2ceb, { 0xfffd } },
+{ 0x2cec, { 0xfffd } },
+{ 0x2ced, { 0xfffd } },
+{ 0x2cee, { 0xfffd } },
+{ 0x2cef, { 0xfffd } },
+{ 0x2cf0, { 0xfffd } },
+{ 0x2cf1, { 0xfffd } },
+{ 0x2cf2, { 0xfffd } },
+{ 0x2cf3, { 0xfffd } },
+{ 0x2cf4, { 0xfffd } },
+{ 0x2cf5, { 0xfffd } },
+{ 0x2cf6, { 0xfffd } },
+{ 0x2cf7, { 0xfffd } },
+{ 0x2cf8, { 0xfffd } },
+{ 0x2cf9, { 0x2cf9 } },
+{ 0x2cfa, { 0x2cfa } },
+{ 0x2cfb, { 0x2cfb } },
+{ 0x2cfc, { 0x2cfc } },
+{ 0x2cfd, { 0x0031, 0x002f, 0x0032 } },
+{ 0x2cfe, { 0x2cfe } },
+{ 0x2cff, { 0x2cff } },
+{ 0x3000, { 0x0020 } },
+{ 0x3001, { 0x3001 } },
+{ 0x3002, { 0x3002 } },
+{ 0x3003, { 0x3003 } },
+{ 0x3004, { 0x3004 } },
+{ 0x3005, { 0x3005 } },
+{ 0x3006, { 0x3006 } },
+{ 0x3007, { 0x3007 } },
+{ 0x3008, { 0x3008 } },
+{ 0x3009, { 0x3009 } },
+{ 0x300a, { 0x300a } },
+{ 0x300b, { 0x300b } },
+{ 0x300c, { 0x300c } },
+{ 0x300d, { 0x300d } },
+{ 0x300e, { 0x300e } },
+{ 0x300f, { 0x300f } },
+{ 0x3010, { 0x3010 } },
+{ 0x3011, { 0x3011 } },
+{ 0x3012, { 0x3012 } },
+{ 0x3013, { 0x3013 } },
+{ 0x3014, { 0x3014 } },
+{ 0x3015, { 0x3015 } },
+{ 0x3016, { 0x3016 } },
+{ 0x3017, { 0x3017 } },
+{ 0x3018, { 0x3018 } },
+{ 0x3019, { 0x3019 } },
+{ 0x301a, { 0x301a } },
+{ 0x301b, { 0x301b } },
+{ 0x301c, { 0x301c } },
+{ 0x301d, { 0x301d } },
+{ 0x301e, { 0x301e } },
+{ 0x301f, { 0x301f } },
+{ 0x3020, { 0x3020 } },
+{ 0x3021, { 0x3021 } },
+{ 0x3022, { 0x3022 } },
+{ 0x3023, { 0x3023 } },
+{ 0x3024, { 0x3024 } },
+{ 0x3025, { 0x3025 } },
+{ 0x3026, { 0x3026 } },
+{ 0x3027, { 0x3027 } },
+{ 0x3028, { 0x3028 } },
+{ 0x3029, { 0x3029 } },
+{ 0x302a, { 0xffff } },
+{ 0x302b, { 0xffff } },
+{ 0x302c, { 0xffff } },
+{ 0x302d, { 0xffff } },
+{ 0x302e, { 0xffff } },
+{ 0x302f, { 0xffff } },
+{ 0x3030, { 0x3030 } },
+{ 0x3031, { 0x3031 } },
+{ 0x3032, { 0x3032 } },
+{ 0x3033, { 0x3033 } },
+{ 0x3034, { 0x3034 } },
+{ 0x3035, { 0x3035 } },
+{ 0x3036, { 0x3036 } },
+{ 0x3037, { 0x3037 } },
+{ 0x3038, { 0x3038 } },
+{ 0x3039, { 0x3039 } },
+{ 0x303a, { 0x303a } },
+{ 0x303b, { 0x303b } },
+{ 0x303c, { 0x303c } },
+{ 0x303d, { 0x303d } },
+{ 0x303e, { 0x303e } },
+{ 0x303f, { 0x303f } },
+{ 0x3040, { 0xfffd } },
+{ 0x3041, { 0x30a2 } },
+{ 0x3042, { 0x30a2 } },
+{ 0x3043, { 0x30a4 } },
+{ 0x3044, { 0x30a4 } },
+{ 0x3045, { 0x30a6 } },
+{ 0x3046, { 0x30a6 } },
+{ 0x3047, { 0x30a8 } },
+{ 0x3048, { 0x30a8 } },
+{ 0x3049, { 0x30aa } },
+{ 0x304a, { 0x30aa } },
+{ 0x304b, { 0x30ab } },
+{ 0x304c, { 0x30ab } },
+{ 0x304d, { 0x30ad } },
+{ 0x304e, { 0x30ad } },
+{ 0x304f, { 0x30af } },
+{ 0x3050, { 0x30af } },
+{ 0x3051, { 0x30b1 } },
+{ 0x3052, { 0x30b1 } },
+{ 0x3053, { 0x30b3 } },
+{ 0x3054, { 0x30b3 } },
+{ 0x3055, { 0x30b5 } },
+{ 0x3056, { 0x30b5 } },
+{ 0x3057, { 0x30b7 } },
+{ 0x3058, { 0x30b7 } },
+{ 0x3059, { 0x30b9 } },
+{ 0x305a, { 0x30b9 } },
+{ 0x305b, { 0x30bb } },
+{ 0x305c, { 0x30bb } },
+{ 0x305d, { 0x30bd } },
+{ 0x305e, { 0x30bd } },
+{ 0x305f, { 0x30bf } },
+{ 0x3060, { 0x30bf } },
+{ 0x3061, { 0x30c1 } },
+{ 0x3062, { 0x30c1 } },
+{ 0x3063, { 0x30c4 } },
+{ 0x3064, { 0x30c4 } },
+{ 0x3065, { 0x30c4 } },
+{ 0x3066, { 0x30c6 } },
+{ 0x3067, { 0x30c6 } },
+{ 0x3068, { 0x30c8 } },
+{ 0x3069, { 0x30c8 } },
+{ 0x306a, { 0x30ca } },
+{ 0x306b, { 0x30cb } },
+{ 0x306c, { 0x30cc } },
+{ 0x306d, { 0x30cd } },
+{ 0x306e, { 0x30ce } },
+{ 0x306f, { 0x30cf } },
+{ 0x3070, { 0x30cf } },
+{ 0x3071, { 0x30cf } },
+{ 0x3072, { 0x30d2 } },
+{ 0x3073, { 0x30d2 } },
+{ 0x3074, { 0x30d2 } },
+{ 0x3075, { 0x30d5 } },
+{ 0x3076, { 0x30d5 } },
+{ 0x3077, { 0x30d5 } },
+{ 0x3078, { 0x30d8 } },
+{ 0x3079, { 0x30d8 } },
+{ 0x307a, { 0x30d8 } },
+{ 0x307b, { 0x30db } },
+{ 0x307c, { 0x30db } },
+{ 0x307d, { 0x30db } },
+{ 0x307e, { 0x30de } },
+{ 0x307f, { 0x30df } },
+{ 0x3080, { 0x30e0 } },
+{ 0x3081, { 0x30e1 } },
+{ 0x3082, { 0x30e2 } },
+{ 0x3083, { 0x30e4 } },
+{ 0x3084, { 0x30e4 } },
+{ 0x3085, { 0x30e6 } },
+{ 0x3086, { 0x30e6 } },
+{ 0x3087, { 0x30e8 } },
+{ 0x3088, { 0x30e8 } },
+{ 0x3089, { 0x30e9 } },
+{ 0x308a, { 0x30ea } },
+{ 0x308b, { 0x30eb } },
+{ 0x308c, { 0x30ec } },
+{ 0x308d, { 0x30ed } },
+{ 0x308e, { 0x30ef } },
+{ 0x308f, { 0x30ef } },
+{ 0x3090, { 0x30f0 } },
+{ 0x3091, { 0x30f1 } },
+{ 0x3092, { 0x30f2 } },
+{ 0x3093, { 0x30f3 } },
+{ 0x3094, { 0x30a6 } },
+{ 0x3095, { 0x30ab } },
+{ 0x3096, { 0x30b1 } },
+{ 0x3097, { 0xfffd } },
+{ 0x3098, { 0xfffd } },
+{ 0x3099, { 0xffff } },
+{ 0x309a, { 0xffff } },
+{ 0x309b, { 0xffff } },
+{ 0x309c, { 0xffff } },
+{ 0x309d, { 0x30fd } },
+{ 0x309e, { 0x30fe } },
+{ 0x309f, { 0x3088, 0x308a } },
+{ 0x30a0, { 0x30a0 } },
+{ 0x30a1, { 0x30a2 } },
+{ 0x30a2, { 0x30a2 } },
+{ 0x30a3, { 0x30a4 } },
+{ 0x30a4, { 0x30a4 } },
+{ 0x30a5, { 0x30a6 } },
+{ 0x30a6, { 0x30a6 } },
+{ 0x30a7, { 0x30a8 } },
+{ 0x30a8, { 0x30a8 } },
+{ 0x30a9, { 0x30aa } },
+{ 0x30aa, { 0x30aa } },
+{ 0x30ab, { 0x30ab } },
+{ 0x30ac, { 0x30ab } },
+{ 0x30ad, { 0x30ad } },
+{ 0x30ae, { 0x30ad } },
+{ 0x30af, { 0x30af } },
+{ 0x30b0, { 0x30af } },
+{ 0x30b1, { 0x30b1 } },
+{ 0x30b2, { 0x30b1 } },
+{ 0x30b3, { 0x30b3 } },
+{ 0x30b4, { 0x30b3 } },
+{ 0x30b5, { 0x30b5 } },
+{ 0x30b6, { 0x30b5 } },
+{ 0x30b7, { 0x30b7 } },
+{ 0x30b8, { 0x30b7 } },
+{ 0x30b9, { 0x30b9 } },
+{ 0x30ba, { 0x30b9 } },
+{ 0x30bb, { 0x30bb } },
+{ 0x30bc, { 0x30bb } },
+{ 0x30bd, { 0x30bd } },
+{ 0x30be, { 0x30bd } },
+{ 0x30bf, { 0x30bf } },
+{ 0x30c0, { 0x30bf } },
+{ 0x30c1, { 0x30c1 } },
+{ 0x30c2, { 0x30c1 } },
+{ 0x30c3, { 0x30c4 } },
+{ 0x30c4, { 0x30c4 } },
+{ 0x30c5, { 0x30c4 } },
+{ 0x30c6, { 0x30c6 } },
+{ 0x30c7, { 0x30c6 } },
+{ 0x30c8, { 0x30c8 } },
+{ 0x30c9, { 0x30c8 } },
+{ 0x30ca, { 0x30ca } },
+{ 0x30cb, { 0x30cb } },
+{ 0x30cc, { 0x30cc } },
+{ 0x30cd, { 0x30cd } },
+{ 0x30ce, { 0x30ce } },
+{ 0x30cf, { 0x30cf } },
+{ 0x30d0, { 0x30cf } },
+{ 0x30d1, { 0x30cf } },
+{ 0x30d2, { 0x30d2 } },
+{ 0x30d3, { 0x30d2 } },
+{ 0x30d4, { 0x30d2 } },
+{ 0x30d5, { 0x30d5 } },
+{ 0x30d6, { 0x30d5 } },
+{ 0x30d7, { 0x30d5 } },
+{ 0x30d8, { 0x30d8 } },
+{ 0x30d9, { 0x30d8 } },
+{ 0x30da, { 0x30d8 } },
+{ 0x30db, { 0x30db } },
+{ 0x30dc, { 0x30db } },
+{ 0x30dd, { 0x30db } },
+{ 0x30de, { 0x30de } },
+{ 0x30df, { 0x30df } },
+{ 0x30e0, { 0x30e0 } },
+{ 0x30e1, { 0x30e1 } },
+{ 0x30e2, { 0x30e2 } },
+{ 0x30e3, { 0x30e4 } },
+{ 0x30e4, { 0x30e4 } },
+{ 0x30e5, { 0x30e6 } },
+{ 0x30e6, { 0x30e6 } },
+{ 0x30e7, { 0x30e8 } },
+{ 0x30e8, { 0x30e8 } },
+{ 0x30e9, { 0x30e9 } },
+{ 0x30ea, { 0x30ea } },
+{ 0x30eb, { 0x30eb } },
+{ 0x30ec, { 0x30ec } },
+{ 0x30ed, { 0x30ed } },
+{ 0x30ee, { 0x30ef } },
+{ 0x30ef, { 0x30ef } },
+{ 0x30f0, { 0x30f0 } },
+{ 0x30f1, { 0x30f1 } },
+{ 0x30f2, { 0x30f2 } },
+{ 0x30f3, { 0x30f3 } },
+{ 0x30f4, { 0x30a6 } },
+{ 0x30f5, { 0x30ab } },
+{ 0x30f6, { 0x30b1 } },
+{ 0x30f7, { 0x30ef } },
+{ 0x30f8, { 0x30f0 } },
+{ 0x30f9, { 0x30f1 } },
+{ 0x30fa, { 0x30f2 } },
+{ 0x30fb, { 0x00b7 } },
+{ 0x30fc, { 0xffff } },
+{ 0x30fd, { 0x30fd } },
+{ 0x30fe, { 0x30fe } },
+{ 0x30ff, { 0x30b3, 0x30c8 } },
+{ 0xa600, { 0xfffd } },
+{ 0xa601, { 0xfffd } },
+{ 0xa602, { 0xfffd } },
+{ 0xa603, { 0xfffd } },
+{ 0xa604, { 0xfffd } },
+{ 0xa605, { 0xfffd } },
+{ 0xa606, { 0xfffd } },
+{ 0xa607, { 0xfffd } },
+{ 0xa608, { 0xfffd } },
+{ 0xa609, { 0xfffd } },
+{ 0xa60a, { 0xfffd } },
+{ 0xa60b, { 0xfffd } },
+{ 0xa60c, { 0xfffd } },
+{ 0xa60d, { 0xfffd } },
+{ 0xa60e, { 0xfffd } },
+{ 0xa60f, { 0xfffd } },
+{ 0xa610, { 0xfffd } },
+{ 0xa611, { 0xfffd } },
+{ 0xa612, { 0xfffd } },
+{ 0xa613, { 0xfffd } },
+{ 0xa614, { 0xfffd } },
+{ 0xa615, { 0xfffd } },
+{ 0xa616, { 0xfffd } },
+{ 0xa617, { 0xfffd } },
+{ 0xa618, { 0xfffd } },
+{ 0xa619, { 0xfffd } },
+{ 0xa61a, { 0xfffd } },
+{ 0xa61b, { 0xfffd } },
+{ 0xa61c, { 0xfffd } },
+{ 0xa61d, { 0xfffd } },
+{ 0xa61e, { 0xfffd } },
+{ 0xa61f, { 0xfffd } },
+{ 0xa620, { 0xfffd } },
+{ 0xa621, { 0xfffd } },
+{ 0xa622, { 0xfffd } },
+{ 0xa623, { 0xfffd } },
+{ 0xa624, { 0xfffd } },
+{ 0xa625, { 0xfffd } },
+{ 0xa626, { 0xfffd } },
+{ 0xa627, { 0xfffd } },
+{ 0xa628, { 0xfffd } },
+{ 0xa629, { 0xfffd } },
+{ 0xa62a, { 0xfffd } },
+{ 0xa62b, { 0xfffd } },
+{ 0xa62c, { 0xfffd } },
+{ 0xa62d, { 0xfffd } },
+{ 0xa62e, { 0xfffd } },
+{ 0xa62f, { 0xfffd } },
+{ 0xa630, { 0xfffd } },
+{ 0xa631, { 0xfffd } },
+{ 0xa632, { 0xfffd } },
+{ 0xa633, { 0xfffd } },
+{ 0xa634, { 0xfffd } },
+{ 0xa635, { 0xfffd } },
+{ 0xa636, { 0xfffd } },
+{ 0xa637, { 0xfffd } },
+{ 0xa638, { 0xfffd } },
+{ 0xa639, { 0xfffd } },
+{ 0xa63a, { 0xfffd } },
+{ 0xa63b, { 0xfffd } },
+{ 0xa63c, { 0xfffd } },
+{ 0xa63d, { 0xfffd } },
+{ 0xa63e, { 0xfffd } },
+{ 0xa63f, { 0xfffd } },
+{ 0xa640, { 0xa640 } },
+{ 0xa641, { 0xa640 } },
+{ 0xa642, { 0xa642 } },
+{ 0xa643, { 0xa642 } },
+{ 0xa644, { 0xa644 } },
+{ 0xa645, { 0xa644 } },
+{ 0xa646, { 0xa646 } },
+{ 0xa647, { 0xa646 } },
+{ 0xa648, { 0xa648 } },
+{ 0xa649, { 0xa648 } },
+{ 0xa64a, { 0xa64a } },
+{ 0xa64b, { 0xa64a } },
+{ 0xa64c, { 0xa64c } },
+{ 0xa64d, { 0xa64c } },
+{ 0xa64e, { 0xa64e } },
+{ 0xa64f, { 0xa64e } },
+{ 0xa650, { 0xa650 } },
+{ 0xa651, { 0xa650 } },
+{ 0xa652, { 0xa652 } },
+{ 0xa653, { 0xa652 } },
+{ 0xa654, { 0xa654 } },
+{ 0xa655, { 0xa654 } },
+{ 0xa656, { 0xa656 } },
+{ 0xa657, { 0xa656 } },
+{ 0xa658, { 0xa658 } },
+{ 0xa659, { 0xa658 } },
+{ 0xa65a, { 0xa65a } },
+{ 0xa65b, { 0xa65a } },
+{ 0xa65c, { 0xa65c } },
+{ 0xa65d, { 0xa65c } },
+{ 0xa65e, { 0xa65e } },
+{ 0xa65f, { 0xa65e } },
+{ 0xa660, { 0xfffd } },
+{ 0xa661, { 0xfffd } },
+{ 0xa662, { 0xa662 } },
+{ 0xa663, { 0xa662 } },
+{ 0xa664, { 0xa664 } },
+{ 0xa665, { 0xa664 } },
+{ 0xa666, { 0xa666 } },
+{ 0xa667, { 0xa666 } },
+{ 0xa668, { 0xa668 } },
+{ 0xa669, { 0xa668 } },
+{ 0xa66a, { 0xa66a } },
+{ 0xa66b, { 0xa66a } },
+{ 0xa66c, { 0xa66c } },
+{ 0xa66d, { 0xa66c } },
+{ 0xa66e, { 0xa66e } },
+{ 0xa66f, { 0xa66f } },
+{ 0xa670, { 0xa670 } },
+{ 0xa671, { 0xa671 } },
+{ 0xa672, { 0xa672 } },
+{ 0xa673, { 0xa673 } },
+{ 0xa674, { 0xfffd } },
+{ 0xa675, { 0xfffd } },
+{ 0xa676, { 0xfffd } },
+{ 0xa677, { 0xfffd } },
+{ 0xa678, { 0xfffd } },
+{ 0xa679, { 0xfffd } },
+{ 0xa67a, { 0xfffd } },
+{ 0xa67b, { 0xfffd } },
+{ 0xa67c, { 0xa67c } },
+{ 0xa67d, { 0xa67d } },
+{ 0xa67e, { 0xa67e } },
+{ 0xa67f, { 0xa67f } },
+{ 0xa680, { 0xa680 } },
+{ 0xa681, { 0xa680 } },
+{ 0xa682, { 0xa682 } },
+{ 0xa683, { 0xa682 } },
+{ 0xa684, { 0xa684 } },
+{ 0xa685, { 0xa684 } },
+{ 0xa686, { 0xa686 } },
+{ 0xa687, { 0xa686 } },
+{ 0xa688, { 0xa688 } },
+{ 0xa689, { 0xa688 } },
+{ 0xa68a, { 0xa68a } },
+{ 0xa68b, { 0xa68a } },
+{ 0xa68c, { 0xa68c } },
+{ 0xa68d, { 0xa68c } },
+{ 0xa68e, { 0xa68e } },
+{ 0xa68f, { 0xa68e } },
+{ 0xa690, { 0xa690 } },
+{ 0xa691, { 0xa690 } },
+{ 0xa692, { 0xa692 } },
+{ 0xa693, { 0xa692 } },
+{ 0xa694, { 0xa694 } },
+{ 0xa695, { 0xa694 } },
+{ 0xa696, { 0xa696 } },
+{ 0xa697, { 0xa696 } },
+{ 0xa698, { 0xfffd } },
+{ 0xa699, { 0xfffd } },
+{ 0xa69a, { 0xfffd } },
+{ 0xa69b, { 0xfffd } },
+{ 0xa69c, { 0xfffd } },
+{ 0xa69d, { 0xfffd } },
+{ 0xa69e, { 0xfffd } },
+{ 0xa69f, { 0xfffd } },
+{ 0xa6a0, { 0xfffd } },
+{ 0xa6a1, { 0xfffd } },
+{ 0xa6a2, { 0xfffd } },
+{ 0xa6a3, { 0xfffd } },
+{ 0xa6a4, { 0xfffd } },
+{ 0xa6a5, { 0xfffd } },
+{ 0xa6a6, { 0xfffd } },
+{ 0xa6a7, { 0xfffd } },
+{ 0xa6a8, { 0xfffd } },
+{ 0xa6a9, { 0xfffd } },
+{ 0xa6aa, { 0xfffd } },
+{ 0xa6ab, { 0xfffd } },
+{ 0xa6ac, { 0xfffd } },
+{ 0xa6ad, { 0xfffd } },
+{ 0xa6ae, { 0xfffd } },
+{ 0xa6af, { 0xfffd } },
+{ 0xa6b0, { 0xfffd } },
+{ 0xa6b1, { 0xfffd } },
+{ 0xa6b2, { 0xfffd } },
+{ 0xa6b3, { 0xfffd } },
+{ 0xa6b4, { 0xfffd } },
+{ 0xa6b5, { 0xfffd } },
+{ 0xa6b6, { 0xfffd } },
+{ 0xa6b7, { 0xfffd } },
+{ 0xa6b8, { 0xfffd } },
+{ 0xa6b9, { 0xfffd } },
+{ 0xa6ba, { 0xfffd } },
+{ 0xa6bb, { 0xfffd } },
+{ 0xa6bc, { 0xfffd } },
+{ 0xa6bd, { 0xfffd } },
+{ 0xa6be, { 0xfffd } },
+{ 0xa6bf, { 0xfffd } },
+{ 0xa6c0, { 0xfffd } },
+{ 0xa6c1, { 0xfffd } },
+{ 0xa6c2, { 0xfffd } },
+{ 0xa6c3, { 0xfffd } },
+{ 0xa6c4, { 0xfffd } },
+{ 0xa6c5, { 0xfffd } },
+{ 0xa6c6, { 0xfffd } },
+{ 0xa6c7, { 0xfffd } },
+{ 0xa6c8, { 0xfffd } },
+{ 0xa6c9, { 0xfffd } },
+{ 0xa6ca, { 0xfffd } },
+{ 0xa6cb, { 0xfffd } },
+{ 0xa6cc, { 0xfffd } },
+{ 0xa6cd, { 0xfffd } },
+{ 0xa6ce, { 0xfffd } },
+{ 0xa6cf, { 0xfffd } },
+{ 0xa6d0, { 0xfffd } },
+{ 0xa6d1, { 0xfffd } },
+{ 0xa6d2, { 0xfffd } },
+{ 0xa6d3, { 0xfffd } },
+{ 0xa6d4, { 0xfffd } },
+{ 0xa6d5, { 0xfffd } },
+{ 0xa6d6, { 0xfffd } },
+{ 0xa6d7, { 0xfffd } },
+{ 0xa6d8, { 0xfffd } },
+{ 0xa6d9, { 0xfffd } },
+{ 0xa6da, { 0xfffd } },
+{ 0xa6db, { 0xfffd } },
+{ 0xa6dc, { 0xfffd } },
+{ 0xa6dd, { 0xfffd } },
+{ 0xa6de, { 0xfffd } },
+{ 0xa6df, { 0xfffd } },
+{ 0xa6e0, { 0xfffd } },
+{ 0xa6e1, { 0xfffd } },
+{ 0xa6e2, { 0xfffd } },
+{ 0xa6e3, { 0xfffd } },
+{ 0xa6e4, { 0xfffd } },
+{ 0xa6e5, { 0xfffd } },
+{ 0xa6e6, { 0xfffd } },
+{ 0xa6e7, { 0xfffd } },
+{ 0xa6e8, { 0xfffd } },
+{ 0xa6e9, { 0xfffd } },
+{ 0xa6ea, { 0xfffd } },
+{ 0xa6eb, { 0xfffd } },
+{ 0xa6ec, { 0xfffd } },
+{ 0xa6ed, { 0xfffd } },
+{ 0xa6ee, { 0xfffd } },
+{ 0xa6ef, { 0xfffd } },
+{ 0xa6f0, { 0xfffd } },
+{ 0xa6f1, { 0xfffd } },
+{ 0xa6f2, { 0xfffd } },
+{ 0xa6f3, { 0xfffd } },
+{ 0xa6f4, { 0xfffd } },
+{ 0xa6f5, { 0xfffd } },
+{ 0xa6f6, { 0xfffd } },
+{ 0xa6f7, { 0xfffd } },
+{ 0xa6f8, { 0xfffd } },
+{ 0xa6f9, { 0xfffd } },
+{ 0xa6fa, { 0xfffd } },
+{ 0xa6fb, { 0xfffd } },
+{ 0xa6fc, { 0xfffd } },
+{ 0xa6fd, { 0xfffd } },
+{ 0xa6fe, { 0xfffd } },
+{ 0xa6ff, { 0xfffd } },
+{ 0xfb00, { 0x0046, 0x0046 } },
+{ 0xfb01, { 0x0046, 0x0049 } },
+{ 0xfb02, { 0x0046, 0x004c } },
+{ 0xfb03, { 0x0046, 0x0046, 0x0049 } },
+{ 0xfb04, { 0x0046, 0x0046, 0x004c } },
+{ 0xfb05, { 0x0053, 0x0054 } },
+{ 0xfb06, { 0x0053, 0x0054 } },
+{ 0xfb07, { 0xfffd } },
+{ 0xfb08, { 0xfffd } },
+{ 0xfb09, { 0xfffd } },
+{ 0xfb0a, { 0xfffd } },
+{ 0xfb0b, { 0xfffd } },
+{ 0xfb0c, { 0xfffd } },
+{ 0xfb0d, { 0xfffd } },
+{ 0xfb0e, { 0xfffd } },
+{ 0xfb0f, { 0xfffd } },
+{ 0xfb10, { 0xfffd } },
+{ 0xfb11, { 0xfffd } },
+{ 0xfb12, { 0xfffd } },
+{ 0xfb13, { 0x0544, 0x0546 } },
+{ 0xfb14, { 0x0544, 0x0546 } },
+{ 0xfb15, { 0x0544, 0x0535 } },
+{ 0xfb16, { 0x054e, 0x053b } },
+{ 0xfb17, { 0x0544, 0x053d } },
+{ 0xfb18, { 0xfffd } },
+{ 0xfb19, { 0xfffd } },
+{ 0xfb1a, { 0xfffd } },
+{ 0xfb1b, { 0xfffd } },
+{ 0xfb1c, { 0xfffd } },
+{ 0xfb1d, { 0x05d9 } },
+{ 0xfb1e, { 0xfb1e } },
+{ 0xfb1f, { 0x05f2 } },
+{ 0xfb20, { 0x05e2 } },
+{ 0xfb21, { 0x05d0 } },
+{ 0xfb22, { 0x05d3 } },
+{ 0xfb23, { 0x05d4 } },
+{ 0xfb24, { 0x05db } },
+{ 0xfb25, { 0x05dc } },
+{ 0xfb26, { 0x05dd } },
+{ 0xfb27, { 0x05e8 } },
+{ 0xfb28, { 0x05ea } },
+{ 0xfb29, { 0x002b } },
+{ 0xfb2a, { 0x05e9 } },
+{ 0xfb2b, { 0x05e9 } },
+{ 0xfb2c, { 0x05e9 } },
+{ 0xfb2d, { 0x05e9 } },
+{ 0xfb2e, { 0x05d0 } },
+{ 0xfb2f, { 0x05d0 } },
+{ 0xfb30, { 0x05d0 } },
+{ 0xfb31, { 0x05d1 } },
+{ 0xfb32, { 0x05d2 } },
+{ 0xfb33, { 0x05d3 } },
+{ 0xfb34, { 0x05d4 } },
+{ 0xfb35, { 0x05d5 } },
+{ 0xfb36, { 0x05d6 } },
+{ 0xfb37, { 0xfffd } },
+{ 0xfb38, { 0x05d8 } },
+{ 0xfb39, { 0x05d9 } },
+{ 0xfb3a, { 0x05da } },
+{ 0xfb3b, { 0x05db } },
+{ 0xfb3c, { 0x05dc } },
+{ 0xfb3d, { 0xfffd } },
+{ 0xfb3e, { 0x05de } },
+{ 0xfb3f, { 0xfffd } },
+{ 0xfb40, { 0x05e0 } },
+{ 0xfb41, { 0x05e1 } },
+{ 0xfb42, { 0xfffd } },
+{ 0xfb43, { 0x05e3 } },
+{ 0xfb44, { 0x05e4 } },
+{ 0xfb45, { 0xfffd } },
+{ 0xfb46, { 0x05e6 } },
+{ 0xfb47, { 0x05e7 } },
+{ 0xfb48, { 0x05e8 } },
+{ 0xfb49, { 0x05e9 } },
+{ 0xfb4a, { 0x05ea } },
+{ 0xfb4b, { 0x05d5 } },
+{ 0xfb4c, { 0x05d1 } },
+{ 0xfb4d, { 0x05db } },
+{ 0xfb4e, { 0x05e4 } },
+{ 0xfb4f, { 0x05d0 } },
+{ 0xfb50, { 0xfb50 } },
+{ 0xfb51, { 0xfb51 } },
+{ 0xfb52, { 0xfb52 } },
+{ 0xfb53, { 0xfb53 } },
+{ 0xfb54, { 0xfb54 } },
+{ 0xfb55, { 0xfb55 } },
+{ 0xfb56, { 0xfb56 } },
+{ 0xfb57, { 0xfb57 } },
+{ 0xfb58, { 0xfb58 } },
+{ 0xfb59, { 0xfb59 } },
+{ 0xfb5a, { 0xfb5a } },
+{ 0xfb5b, { 0xfb5b } },
+{ 0xfb5c, { 0xfb5c } },
+{ 0xfb5d, { 0xfb5d } },
+{ 0xfb5e, { 0xfb5e } },
+{ 0xfb5f, { 0xfb5f } },
+{ 0xfb60, { 0xfb60 } },
+{ 0xfb61, { 0xfb61 } },
+{ 0xfb62, { 0xfb62 } },
+{ 0xfb63, { 0xfb63 } },
+{ 0xfb64, { 0xfb64 } },
+{ 0xfb65, { 0xfb65 } },
+{ 0xfb66, { 0xfb66 } },
+{ 0xfb67, { 0xfb67 } },
+{ 0xfb68, { 0xfb68 } },
+{ 0xfb69, { 0xfb69 } },
+{ 0xfb6a, { 0xfb6a } },
+{ 0xfb6b, { 0xfb6b } },
+{ 0xfb6c, { 0xfb6c } },
+{ 0xfb6d, { 0xfb6d } },
+{ 0xfb6e, { 0xfb6e } },
+{ 0xfb6f, { 0xfb6f } },
+{ 0xfb70, { 0xfb70 } },
+{ 0xfb71, { 0xfb71 } },
+{ 0xfb72, { 0xfb72 } },
+{ 0xfb73, { 0xfb73 } },
+{ 0xfb74, { 0xfb74 } },
+{ 0xfb75, { 0xfb75 } },
+{ 0xfb76, { 0xfb76 } },
+{ 0xfb77, { 0xfb77 } },
+{ 0xfb78, { 0xfb78 } },
+{ 0xfb79, { 0xfb79 } },
+{ 0xfb7a, { 0xfb7a } },
+{ 0xfb7b, { 0xfb7b } },
+{ 0xfb7c, { 0xfb7c } },
+{ 0xfb7d, { 0xfb7d } },
+{ 0xfb7e, { 0xfb7e } },
+{ 0xfb7f, { 0xfb7f } },
+{ 0xfb80, { 0xfb80 } },
+{ 0xfb81, { 0xfb81 } },
+{ 0xfb82, { 0xfb82 } },
+{ 0xfb83, { 0xfb83 } },
+{ 0xfb84, { 0xfb84 } },
+{ 0xfb85, { 0xfb85 } },
+{ 0xfb86, { 0xfb86 } },
+{ 0xfb87, { 0xfb87 } },
+{ 0xfb88, { 0xfb88 } },
+{ 0xfb89, { 0xfb89 } },
+{ 0xfb8a, { 0xfb8a } },
+{ 0xfb8b, { 0xfb8b } },
+{ 0xfb8c, { 0xfb8c } },
+{ 0xfb8d, { 0xfb8d } },
+{ 0xfb8e, { 0xfb8e } },
+{ 0xfb8f, { 0xfb8f } },
+{ 0xfb90, { 0xfb90 } },
+{ 0xfb91, { 0xfb91 } },
+{ 0xfb92, { 0xfb92 } },
+{ 0xfb93, { 0xfb93 } },
+{ 0xfb94, { 0xfb94 } },
+{ 0xfb95, { 0xfb95 } },
+{ 0xfb96, { 0xfb96 } },
+{ 0xfb97, { 0xfb97 } },
+{ 0xfb98, { 0xfb98 } },
+{ 0xfb99, { 0xfb99 } },
+{ 0xfb9a, { 0xfb9a } },
+{ 0xfb9b, { 0xfb9b } },
+{ 0xfb9c, { 0xfb9c } },
+{ 0xfb9d, { 0xfb9d } },
+{ 0xfb9e, { 0xfb9e } },
+{ 0xfb9f, { 0xfb9f } },
+{ 0xfba0, { 0xfba0 } },
+{ 0xfba1, { 0xfba1 } },
+{ 0xfba2, { 0xfba2 } },
+{ 0xfba3, { 0xfba3 } },
+{ 0xfba4, { 0xfba4 } },
+{ 0xfba5, { 0xfba5 } },
+{ 0xfba6, { 0xfba6 } },
+{ 0xfba7, { 0xfba7 } },
+{ 0xfba8, { 0xfba8 } },
+{ 0xfba9, { 0xfba9 } },
+{ 0xfbaa, { 0xfbaa } },
+{ 0xfbab, { 0xfbab } },
+{ 0xfbac, { 0xfbac } },
+{ 0xfbad, { 0xfbad } },
+{ 0xfbae, { 0xfbae } },
+{ 0xfbaf, { 0xfbaf } },
+{ 0xfbb0, { 0xfbb0 } },
+{ 0xfbb1, { 0xfbb1 } },
+{ 0xfbb2, { 0xfffd } },
+{ 0xfbb3, { 0xfffd } },
+{ 0xfbb4, { 0xfffd } },
+{ 0xfbb5, { 0xfffd } },
+{ 0xfbb6, { 0xfffd } },
+{ 0xfbb7, { 0xfffd } },
+{ 0xfbb8, { 0xfffd } },
+{ 0xfbb9, { 0xfffd } },
+{ 0xfbba, { 0xfffd } },
+{ 0xfbbb, { 0xfffd } },
+{ 0xfbbc, { 0xfffd } },
+{ 0xfbbd, { 0xfffd } },
+{ 0xfbbe, { 0xfffd } },
+{ 0xfbbf, { 0xfffd } },
+{ 0xfbc0, { 0xfffd } },
+{ 0xfbc1, { 0xfffd } },
+{ 0xfbc2, { 0xfffd } },
+{ 0xfbc3, { 0xfffd } },
+{ 0xfbc4, { 0xfffd } },
+{ 0xfbc5, { 0xfffd } },
+{ 0xfbc6, { 0xfffd } },
+{ 0xfbc7, { 0xfffd } },
+{ 0xfbc8, { 0xfffd } },
+{ 0xfbc9, { 0xfffd } },
+{ 0xfbca, { 0xfffd } },
+{ 0xfbcb, { 0xfffd } },
+{ 0xfbcc, { 0xfffd } },
+{ 0xfbcd, { 0xfffd } },
+{ 0xfbce, { 0xfffd } },
+{ 0xfbcf, { 0xfffd } },
+{ 0xfbd0, { 0xfffd } },
+{ 0xfbd1, { 0xfffd } },
+{ 0xfbd2, { 0xfffd } },
+{ 0xfbd3, { 0xfbd3 } },
+{ 0xfbd4, { 0xfbd4 } },
+{ 0xfbd5, { 0xfbd5 } },
+{ 0xfbd6, { 0xfbd6 } },
+{ 0xfbd7, { 0xfbd7 } },
+{ 0xfbd8, { 0xfbd8 } },
+{ 0xfbd9, { 0xfbd9 } },
+{ 0xfbda, { 0xfbda } },
+{ 0xfbdb, { 0xfbdb } },
+{ 0xfbdc, { 0xfbdc } },
+{ 0xfbdd, { 0xfbdd } },
+{ 0xfbde, { 0xfbde } },
+{ 0xfbdf, { 0xfbdf } },
+{ 0xfbe0, { 0xfbe0 } },
+{ 0xfbe1, { 0xfbe1 } },
+{ 0xfbe2, { 0xfbe2 } },
+{ 0xfbe3, { 0xfbe3 } },
+{ 0xfbe4, { 0xfbe4 } },
+{ 0xfbe5, { 0xfbe5 } },
+{ 0xfbe6, { 0xfbe6 } },
+{ 0xfbe7, { 0xfbe7 } },
+{ 0xfbe8, { 0xfbe8 } },
+{ 0xfbe9, { 0xfbe9 } },
+{ 0xfbea, { 0xfbea } },
+{ 0xfbeb, { 0xfbeb } },
+{ 0xfbec, { 0xfbec } },
+{ 0xfbed, { 0xfbed } },
+{ 0xfbee, { 0xfbee } },
+{ 0xfbef, { 0xfbef } },
+{ 0xfbf0, { 0xfbf0 } },
+{ 0xfbf1, { 0xfbf1 } },
+{ 0xfbf2, { 0xfbf2 } },
+{ 0xfbf3, { 0xfbf3 } },
+{ 0xfbf4, { 0xfbf4 } },
+{ 0xfbf5, { 0xfbf5 } },
+{ 0xfbf6, { 0xfbf6 } },
+{ 0xfbf7, { 0xfbf7 } },
+{ 0xfbf8, { 0xfbf8 } },
+{ 0xfbf9, { 0xfbf9 } },
+{ 0xfbfa, { 0xfbfa } },
+{ 0xfbfb, { 0xfbfb } },
+{ 0xfbfc, { 0xfbfc } },
+{ 0xfbfd, { 0xfbfd } },
+{ 0xfbfe, { 0xfbfe } },
+{ 0xfbff, { 0xfbff } },
+{ 0xff00, { 0xfffd } },
+{ 0xff01, { 0x0021 } },
+{ 0xff02, { 0x0022 } },
+{ 0xff03, { 0x0023 } },
+{ 0xff04, { 0x0024 } },
+{ 0xff05, { 0x0025 } },
+{ 0xff06, { 0x0026 } },
+{ 0xff07, { 0x0027 } },
+{ 0xff08, { 0x0028 } },
+{ 0xff09, { 0x0029 } },
+{ 0xff0a, { 0x002a } },
+{ 0xff0b, { 0x002b } },
+{ 0xff0c, { 0x002c } },
+{ 0xff0d, { 0x002d } },
+{ 0xff0e, { 0x002e } },
+{ 0xff0f, { 0x002f } },
+{ 0xff10, { 0x0030 } },
+{ 0xff11, { 0x0031 } },
+{ 0xff12, { 0x0032 } },
+{ 0xff13, { 0x0033 } },
+{ 0xff14, { 0x0034 } },
+{ 0xff15, { 0x0035 } },
+{ 0xff16, { 0x0036 } },
+{ 0xff17, { 0x0037 } },
+{ 0xff18, { 0x0038 } },
+{ 0xff19, { 0x0039 } },
+{ 0xff1a, { 0x003a } },
+{ 0xff1b, { 0x003b } },
+{ 0xff1c, { 0x003c } },
+{ 0xff1d, { 0x003d } },
+{ 0xff1e, { 0x003e } },
+{ 0xff1f, { 0x003f } },
+{ 0xff20, { 0x0040 } },
+{ 0xff21, { 0x0041 } },
+{ 0xff22, { 0x0042 } },
+{ 0xff23, { 0x0043 } },
+{ 0xff24, { 0x0044 } },
+{ 0xff25, { 0x0045 } },
+{ 0xff26, { 0x0046 } },
+{ 0xff27, { 0x0047 } },
+{ 0xff28, { 0x0048 } },
+{ 0xff29, { 0x0049 } },
+{ 0xff2a, { 0x004a } },
+{ 0xff2b, { 0x004b } },
+{ 0xff2c, { 0x004c } },
+{ 0xff2d, { 0x004d } },
+{ 0xff2e, { 0x004e } },
+{ 0xff2f, { 0x004f } },
+{ 0xff30, { 0x0050 } },
+{ 0xff31, { 0x0051 } },
+{ 0xff32, { 0x0052 } },
+{ 0xff33, { 0x0053 } },
+{ 0xff34, { 0x0054 } },
+{ 0xff35, { 0x0055 } },
+{ 0xff36, { 0x0056 } },
+{ 0xff37, { 0x0057 } },
+{ 0xff38, { 0x0058 } },
+{ 0xff39, { 0x0059 } },
+{ 0xff3a, { 0x005a } },
+{ 0xff3b, { 0x005b } },
+{ 0xff3c, { 0x005c } },
+{ 0xff3d, { 0x005d } },
+{ 0xff3e, { 0x005e } },
+{ 0xff3f, { 0x005f } },
+{ 0xff40, { 0x0060 } },
+{ 0xff41, { 0x0041 } },
+{ 0xff42, { 0x0042 } },
+{ 0xff43, { 0x0043 } },
+{ 0xff44, { 0x0044 } },
+{ 0xff45, { 0x0045 } },
+{ 0xff46, { 0x0046 } },
+{ 0xff47, { 0x0047 } },
+{ 0xff48, { 0x0048 } },
+{ 0xff49, { 0x0049 } },
+{ 0xff4a, { 0x004a } },
+{ 0xff4b, { 0x004b } },
+{ 0xff4c, { 0x004c } },
+{ 0xff4d, { 0x004d } },
+{ 0xff4e, { 0x004e } },
+{ 0xff4f, { 0x004f } },
+{ 0xff50, { 0x0050 } },
+{ 0xff51, { 0x0051 } },
+{ 0xff52, { 0x0052 } },
+{ 0xff53, { 0x0053 } },
+{ 0xff54, { 0x0054 } },
+{ 0xff55, { 0x0055 } },
+{ 0xff56, { 0x0056 } },
+{ 0xff57, { 0x0057 } },
+{ 0xff58, { 0x0058 } },
+{ 0xff59, { 0x0059 } },
+{ 0xff5a, { 0x005a } },
+{ 0xff5b, { 0x007b } },
+{ 0xff5c, { 0x007c } },
+{ 0xff5d, { 0x007d } },
+{ 0xff5e, { 0x007e } },
+{ 0xff5f, { 0x2985 } },
+{ 0xff60, { 0x2986 } },
+{ 0xff61, { 0x3002 } },
+{ 0xff62, { 0x300c } },
+{ 0xff63, { 0x300d } },
+{ 0xff64, { 0x3001 } },
+{ 0xff65, { 0x30fb } },
+{ 0xff66, { 0x30f2 } },
+{ 0xff67, { 0x30a2 } },
+{ 0xff68, { 0x30a4 } },
+{ 0xff69, { 0x30a6 } },
+{ 0xff6a, { 0x30a8 } },
+{ 0xff6b, { 0x30aa } },
+{ 0xff6c, { 0x30e4 } },
+{ 0xff6d, { 0x30e6 } },
+{ 0xff6e, { 0x30e8 } },
+{ 0xff6f, { 0x30c4 } },
+{ 0xff70, { 0xffff } },
+{ 0xff71, { 0x30a2 } },
+{ 0xff72, { 0x30a4 } },
+{ 0xff73, { 0x30a6 } },
+{ 0xff74, { 0x30a8 } },
+{ 0xff75, { 0x30aa } },
+{ 0xff76, { 0x30ab } },
+{ 0xff77, { 0x30ad } },
+{ 0xff78, { 0x30af } },
+{ 0xff79, { 0x30b1 } },
+{ 0xff7a, { 0x30b3 } },
+{ 0xff7b, { 0x30b5 } },
+{ 0xff7c, { 0x30b7 } },
+{ 0xff7d, { 0x30b9 } },
+{ 0xff7e, { 0x30bb } },
+{ 0xff7f, { 0x30bd } },
+{ 0xff80, { 0x30bf } },
+{ 0xff81, { 0x30c1 } },
+{ 0xff82, { 0x30c4 } },
+{ 0xff83, { 0x30c6 } },
+{ 0xff84, { 0x30c8 } },
+{ 0xff85, { 0x30ca } },
+{ 0xff86, { 0x30cb } },
+{ 0xff87, { 0x30cc } },
+{ 0xff88, { 0x30cd } },
+{ 0xff89, { 0x30ce } },
+{ 0xff8a, { 0x30cf } },
+{ 0xff8b, { 0x30d2 } },
+{ 0xff8c, { 0x30d5 } },
+{ 0xff8d, { 0x30d8 } },
+{ 0xff8e, { 0x30db } },
+{ 0xff8f, { 0x30de } },
+{ 0xff90, { 0x30df } },
+{ 0xff91, { 0x30e0 } },
+{ 0xff92, { 0x30e1 } },
+{ 0xff93, { 0x30e2 } },
+{ 0xff94, { 0x30e4 } },
+{ 0xff95, { 0x30e6 } },
+{ 0xff96, { 0x30e8 } },
+{ 0xff97, { 0x30e9 } },
+{ 0xff98, { 0x30ea } },
+{ 0xff99, { 0x30eb } },
+{ 0xff9a, { 0x30ec } },
+{ 0xff9b, { 0x30ed } },
+{ 0xff9c, { 0x30ef } },
+{ 0xff9d, { 0x30f3 } },
+{ 0xff9e, { 0xffff } },
+{ 0xff9f, { 0xffff } },
+{ 0xffa0, { 0x3164 } },
+{ 0xffa1, { 0x3131 } },
+{ 0xffa2, { 0x3132 } },
+{ 0xffa3, { 0x3133 } },
+{ 0xffa4, { 0x3134 } },
+{ 0xffa5, { 0x3135 } },
+{ 0xffa6, { 0x3136 } },
+{ 0xffa7, { 0x3137 } },
+{ 0xffa8, { 0x3138 } },
+{ 0xffa9, { 0x3139 } },
+{ 0xffaa, { 0x313a } },
+{ 0xffab, { 0x313b } },
+{ 0xffac, { 0x313c } },
+{ 0xffad, { 0x313d } },
+{ 0xffae, { 0x313e } },
+{ 0xffaf, { 0x313f } },
+{ 0xffb0, { 0x3140 } },
+{ 0xffb1, { 0x3141 } },
+{ 0xffb2, { 0x3142 } },
+{ 0xffb3, { 0x3143 } },
+{ 0xffb4, { 0x3144 } },
+{ 0xffb5, { 0x3145 } },
+{ 0xffb6, { 0x3146 } },
+{ 0xffb7, { 0x3147 } },
+{ 0xffb8, { 0x3148 } },
+{ 0xffb9, { 0x3149 } },
+{ 0xffba, { 0x314a } },
+{ 0xffbb, { 0x314b } },
+{ 0xffbc, { 0x314c } },
+{ 0xffbd, { 0x314d } },
+{ 0xffbe, { 0x314e } },
+{ 0xffbf, { 0xfffd } },
+{ 0xffc0, { 0xfffd } },
+{ 0xffc1, { 0xfffd } },
+{ 0xffc2, { 0x314f } },
+{ 0xffc3, { 0x3150 } },
+{ 0xffc4, { 0x3151 } },
+{ 0xffc5, { 0x3152 } },
+{ 0xffc6, { 0x3153 } },
+{ 0xffc7, { 0x3154 } },
+{ 0xffc8, { 0xfffd } },
+{ 0xffc9, { 0xfffd } },
+{ 0xffca, { 0x3155 } },
+{ 0xffcb, { 0x3156 } },
+{ 0xffcc, { 0x3157 } },
+{ 0xffcd, { 0x3158 } },
+{ 0xffce, { 0x3159 } },
+{ 0xffcf, { 0x315a } },
+{ 0xffd0, { 0xfffd } },
+{ 0xffd1, { 0xfffd } },
+{ 0xffd2, { 0x315b } },
+{ 0xffd3, { 0x315c } },
+{ 0xffd4, { 0x315d } },
+{ 0xffd5, { 0x315e } },
+{ 0xffd6, { 0x315f } },
+{ 0xffd7, { 0x3160 } },
+{ 0xffd8, { 0xfffd } },
+{ 0xffd9, { 0xfffd } },
+{ 0xffda, { 0x3161 } },
+{ 0xffdb, { 0x3162 } },
+{ 0xffdc, { 0x3163 } },
+{ 0xffdd, { 0xfffd } },
+{ 0xffde, { 0xfffd } },
+{ 0xffdf, { 0xfffd } },
+{ 0xffe0, { 0x00a2 } },
+{ 0xffe1, { 0x00a3 } },
+{ 0xffe2, { 0x00ac } },
+{ 0xffe3, { 0x00af } },
+{ 0xffe4, { 0x00a6 } },
+{ 0xffe5, { 0x00a5 } },
+{ 0xffe6, { 0x20a9 } },
+{ 0xffe7, { 0xfffd } },
+{ 0xffe8, { 0x2502 } },
+{ 0xffe9, { 0x2190 } },
+{ 0xffea, { 0x2191 } },
+{ 0xffeb, { 0x2192 } },
+{ 0xffec, { 0x2193 } },
+{ 0xffed, { 0x25a0 } },
+{ 0xffee, { 0x25cb } },
+{ 0xffef, { 0xfffd } },
+{ 0xfff0, { 0xfffd } },
+{ 0xfff1, { 0xfffd } },
+{ 0xfff2, { 0xfffd } },
+{ 0xfff3, { 0xfffd } },
+{ 0xfff4, { 0xfffd } },
+{ 0xfff5, { 0xfffd } },
+{ 0xfff6, { 0xfffd } },
+{ 0xfff7, { 0xfffd } },
+{ 0xfff8, { 0xfffd } },
+{ 0xfff9, { 0xfff9 } },
+{ 0xfffa, { 0xfffa } },
+{ 0xfffb, { 0xfffb } },
+{ 0xfffc, { 0xfffc } },
+{ 0xfffd, { 0xfffd } },
+{ 0xfffe, { 0xfffd } },
+{ 0xffff, { 0xfffd } },
+};
+
+int get_common_mapping_table_size(void)
+{
+ return sizeof(common_mapping_table)/sizeof(struct mapping_data);
+}
+
+/*
+ * special mapping rule
+ */
+
+/* not delete diacritical mark
+ *
+ * mapping rule
+ * - lowercase, titlecase -> uppercase
+ * - Japanese Hiragana, halfwidth Katakana -> fullwidth Katakana
+ */
+const struct mapping_data with_diacritical_mark_character_table[] =
+{
+{ 0x00c0, { 0x00c0 } },
+{ 0x00c1, { 0x00c1 } },
+{ 0x00c2, { 0x00c2 } },
+{ 0x00c3, { 0x00c3 } },
+{ 0x00c4, { 0x00c4 } },
+{ 0x00c5, { 0x00c5 } },
+{ 0x00c7, { 0x0043 } },
+{ 0x00c8, { 0x0045 } },
+{ 0x00c9, { 0x0045 } },
+{ 0x00ca, { 0x0045 } },
+{ 0x00cb, { 0x0045 } },
+{ 0x00cc, { 0x00cc } },
+{ 0x00cd, { 0x00cd } },
+{ 0x00ce, { 0x00ce } },
+{ 0x00cf, { 0x00cf } },
+{ 0x00d1, { 0x00d1 } },
+{ 0x00d2, { 0x00d2 } },
+{ 0x00d3, { 0x00d3 } },
+{ 0x00d4, { 0x00d4 } },
+{ 0x00d5, { 0x00d5 } },
+{ 0x00d6, { 0x00d6 } },
+{ 0x00d9, { 0x00d9 } },
+{ 0x00da, { 0x00da } },
+{ 0x00db, { 0x00db } },
+{ 0x00dc, { 0x00dc } },
+{ 0x00dd, { 0x00dd } },
+{ 0x00e0, { 0x00c0 } },
+{ 0x00e1, { 0x00c1 } },
+{ 0x00e2, { 0x00c2 } },
+{ 0x00e3, { 0x00c3 } },
+{ 0x00e4, { 0x00c4 } },
+{ 0x00e5, { 0x00c5 } },
+{ 0x00e7, { 0x00c7 } },
+{ 0x00e8, { 0x00c8 } },
+{ 0x00e9, { 0x00c9 } },
+{ 0x00ea, { 0x00ca } },
+{ 0x00eb, { 0x00cb } },
+{ 0x00ec, { 0x00cc } },
+{ 0x00ed, { 0x00cd } },
+{ 0x00ee, { 0x00ce } },
+{ 0x00ef, { 0x00cf } },
+{ 0x00f1, { 0x00d1 } },
+{ 0x00f2, { 0x00d2 } },
+{ 0x00f3, { 0x00d3 } },
+{ 0x00f4, { 0x00d4 } },
+{ 0x00f5, { 0x00d5 } },
+{ 0x00f6, { 0x00d6 } },
+{ 0x00f9, { 0x00d9 } },
+{ 0x00fa, { 0x00da } },
+{ 0x00fb, { 0x00db } },
+{ 0x00fc, { 0x00dc } },
+{ 0x00fd, { 0x00dd } },
+{ 0x00ff, { 0x0178 } },
+{ 0x0100, { 0x0100 } },
+{ 0x0101, { 0x0100 } },
+{ 0x0102, { 0x0102 } },
+{ 0x0103, { 0x0102 } },
+{ 0x0104, { 0x0104 } },
+{ 0x0105, { 0x0104 } },
+{ 0x0106, { 0x0106 } },
+{ 0x0107, { 0x0106 } },
+{ 0x0108, { 0x0108 } },
+{ 0x0109, { 0x0108 } },
+{ 0x010a, { 0x010a } },
+{ 0x010b, { 0x010a } },
+{ 0x010c, { 0x010c } },
+{ 0x010d, { 0x010c } },
+{ 0x010e, { 0x010e } },
+{ 0x010f, { 0x010e } },
+{ 0x0112, { 0x0112 } },
+{ 0x0113, { 0x0112 } },
+{ 0x0114, { 0x0114 } },
+{ 0x0115, { 0x0114 } },
+{ 0x0116, { 0x0116 } },
+{ 0x0117, { 0x0116 } },
+{ 0x0118, { 0x0118 } },
+{ 0x0119, { 0x0118 } },
+{ 0x011a, { 0x011a } },
+{ 0x011b, { 0x011a } },
+{ 0x011c, { 0x011c } },
+{ 0x011d, { 0x011c } },
+{ 0x011e, { 0x011e } },
+{ 0x011f, { 0x011e } },
+{ 0x0120, { 0x0120 } },
+{ 0x0121, { 0x0120 } },
+{ 0x0122, { 0x0122 } },
+{ 0x0123, { 0x0122 } },
+{ 0x0124, { 0x0124 } },
+{ 0x0125, { 0x0124 } },
+{ 0x0128, { 0x0128 } },
+{ 0x0129, { 0x0128 } },
+{ 0x012a, { 0x012a } },
+{ 0x012b, { 0x012a } },
+{ 0x012c, { 0x012c } },
+{ 0x012d, { 0x012c } },
+{ 0x012e, { 0x012e } },
+{ 0x012f, { 0x012e } },
+{ 0x0130, { 0x0130 } },
+{ 0x0134, { 0x0134 } },
+{ 0x0135, { 0x0134 } },
+{ 0x0136, { 0x0136 } },
+{ 0x0137, { 0x0136 } },
+{ 0x0139, { 0x0139 } },
+{ 0x013a, { 0x0139 } },
+{ 0x013b, { 0x013b } },
+{ 0x013c, { 0x013b } },
+{ 0x013d, { 0x013d } },
+{ 0x013e, { 0x013d } },
+{ 0x0143, { 0x0143 } },
+{ 0x0144, { 0x0143 } },
+{ 0x0145, { 0x0145 } },
+{ 0x0146, { 0x0145 } },
+{ 0x0147, { 0x0147 } },
+{ 0x0148, { 0x0147 } },
+{ 0x014c, { 0x014c } },
+{ 0x014d, { 0x014c } },
+{ 0x014e, { 0x014e } },
+{ 0x014f, { 0x014e } },
+{ 0x0150, { 0x0150 } },
+{ 0x0151, { 0x0150 } },
+{ 0x0154, { 0x0154 } },
+{ 0x0155, { 0x0154 } },
+{ 0x0156, { 0x0156 } },
+{ 0x0157, { 0x0156 } },
+{ 0x0158, { 0x0158 } },
+{ 0x0159, { 0x0158 } },
+{ 0x015a, { 0x015a } },
+{ 0x015b, { 0x015a } },
+{ 0x015c, { 0x015c } },
+{ 0x015d, { 0x015c } },
+{ 0x015e, { 0x015e } },
+{ 0x015f, { 0x015e } },
+{ 0x0160, { 0x0160 } },
+{ 0x0161, { 0x0160 } },
+{ 0x0162, { 0x0162 } },
+{ 0x0163, { 0x0162 } },
+{ 0x0164, { 0x0164 } },
+{ 0x0165, { 0x0164 } },
+{ 0x0168, { 0x0168 } },
+{ 0x0169, { 0x0168 } },
+{ 0x016a, { 0x016a } },
+{ 0x016b, { 0x016a } },
+{ 0x016c, { 0x016c } },
+{ 0x016d, { 0x016c } },
+{ 0x016e, { 0x016e } },
+{ 0x016f, { 0x016e } },
+{ 0x0170, { 0x0170 } },
+{ 0x0171, { 0x0170 } },
+{ 0x0172, { 0x0172 } },
+{ 0x0173, { 0x0172 } },
+{ 0x0174, { 0x0174 } },
+{ 0x0175, { 0x0174 } },
+{ 0x0176, { 0x0176 } },
+{ 0x0177, { 0x0176 } },
+{ 0x0178, { 0x0178 } },
+{ 0x0179, { 0x0179 } },
+{ 0x017a, { 0x0179 } },
+{ 0x017b, { 0x017b } },
+{ 0x017c, { 0x017b } },
+{ 0x017d, { 0x017d } },
+{ 0x017e, { 0x017d } },
+{ 0x01a0, { 0x01a0 } },
+{ 0x01a1, { 0x01a0 } },
+{ 0x01af, { 0x01af } },
+{ 0x01b0, { 0x01af } },
+{ 0x01cd, { 0x01cd } },
+{ 0x01ce, { 0x01cd } },
+{ 0x01cf, { 0x01cf } },
+{ 0x01d0, { 0x01cf } },
+{ 0x01d1, { 0x01d1 } },
+{ 0x01d2, { 0x01d1 } },
+{ 0x01d3, { 0x01d3 } },
+{ 0x01d4, { 0x01d3 } },
+{ 0x01d5, { 0x01d5 } },
+{ 0x01d6, { 0x01d5 } },
+{ 0x01d7, { 0x01d7 } },
+{ 0x01d8, { 0x01d7 } },
+{ 0x01d9, { 0x01d9 } },
+{ 0x01da, { 0x01d9 } },
+{ 0x01db, { 0x01db } },
+{ 0x01dc, { 0x01db } },
+{ 0x01de, { 0x01de } },
+{ 0x01df, { 0x01de } },
+{ 0x01e0, { 0x01e0 } },
+{ 0x01e1, { 0x01e0 } },
+{ 0x01e2, { 0x01e2 } },
+{ 0x01e3, { 0x01e2 } },
+{ 0x01e4, { 0x01e4 } },
+{ 0x01e6, { 0x01e6 } },
+{ 0x01e7, { 0x01e6 } },
+{ 0x01e8, { 0x01e8 } },
+{ 0x01e9, { 0x01e8 } },
+{ 0x01ea, { 0x01ea } },
+{ 0x01eb, { 0x01ea } },
+{ 0x01ec, { 0x01ec } },
+{ 0x01ed, { 0x01ec } },
+{ 0x01ee, { 0x01ee } },
+{ 0x01ef, { 0x01ee } },
+{ 0x01f0, { 0x004a, 0x030c } },
+{ 0x01f4, { 0x01f4 } },
+{ 0x01f5, { 0x01f4 } },
+{ 0x01f8, { 0x01f8 } },
+{ 0x01f9, { 0x01f8 } },
+{ 0x01fa, { 0x01fa } },
+{ 0x01fb, { 0x01fa } },
+{ 0x01fc, { 0x01fc } },
+{ 0x01fd, { 0x01fc } },
+{ 0x01fe, { 0x01fe } },
+{ 0x01ff, { 0x01fe } },
+{ 0x0200, { 0x0200 } },
+{ 0x0201, { 0x0200 } },
+{ 0x0202, { 0x0202 } },
+{ 0x0203, { 0x0202 } },
+{ 0x0204, { 0x0204 } },
+{ 0x0205, { 0x0204 } },
+{ 0x0206, { 0x0206 } },
+{ 0x0207, { 0x0206 } },
+{ 0x0208, { 0x0208 } },
+{ 0x0209, { 0x0208 } },
+{ 0x020a, { 0x020a } },
+{ 0x020b, { 0x020a } },
+{ 0x020c, { 0x020c } },
+{ 0x020d, { 0x020c } },
+{ 0x020e, { 0x020e } },
+{ 0x020f, { 0x020e } },
+{ 0x0210, { 0x0210 } },
+{ 0x0211, { 0x0210 } },
+{ 0x0212, { 0x0212 } },
+{ 0x0213, { 0x0212 } },
+{ 0x0214, { 0x0214 } },
+{ 0x0215, { 0x0214 } },
+{ 0x0216, { 0x0216 } },
+{ 0x0217, { 0x0216 } },
+{ 0x0218, { 0x0218 } },
+{ 0x0219, { 0x0218 } },
+{ 0x021a, { 0x021a } },
+{ 0x021b, { 0x021a } },
+{ 0x021e, { 0x021e } },
+{ 0x021f, { 0x021e } },
+{ 0x0226, { 0x0226 } },
+{ 0x0227, { 0x0226 } },
+{ 0x0228, { 0x0228 } },
+{ 0x0229, { 0x0228 } },
+{ 0x022a, { 0x022a } },
+{ 0x022b, { 0x022a } },
+{ 0x022c, { 0x022c } },
+{ 0x022d, { 0x022c } },
+{ 0x022e, { 0x022e } },
+{ 0x022f, { 0x022e } },
+{ 0x0230, { 0x0230 } },
+{ 0x0231, { 0x0230 } },
+{ 0x0232, { 0x0232 } },
+{ 0x0233, { 0x0232 } },
+{ 0x0300, { 0x0300 } },
+{ 0x0301, { 0x0301 } },
+{ 0x0302, { 0x0302 } },
+{ 0x0303, { 0x0303 } },
+{ 0x0304, { 0x0304 } },
+{ 0x0305, { 0x0305 } },
+{ 0x0306, { 0x0306 } },
+{ 0x0307, { 0x0307 } },
+{ 0x0308, { 0x0308 } },
+{ 0x0309, { 0x0309 } },
+{ 0x030a, { 0x030a } },
+{ 0x030b, { 0x030b } },
+{ 0x030c, { 0x030c } },
+{ 0x030d, { 0x030d } },
+{ 0x030e, { 0x030e } },
+{ 0x030f, { 0x030f } },
+{ 0x0310, { 0x0310 } },
+{ 0x0311, { 0x0311 } },
+{ 0x0312, { 0x0312 } },
+{ 0x0313, { 0x0313 } },
+{ 0x0314, { 0x0314 } },
+{ 0x0315, { 0x0315 } },
+{ 0x0316, { 0x0316 } },
+{ 0x0317, { 0x0317 } },
+{ 0x0318, { 0x0318 } },
+{ 0x0319, { 0x0319 } },
+{ 0x031a, { 0x031a } },
+{ 0x031b, { 0x031b } },
+{ 0x031c, { 0x031c } },
+{ 0x031d, { 0x031d } },
+{ 0x031e, { 0x031e } },
+{ 0x031f, { 0x031f } },
+{ 0x0320, { 0x0320 } },
+{ 0x0321, { 0x0321 } },
+{ 0x0322, { 0x0322 } },
+{ 0x0323, { 0x0323 } },
+{ 0x0324, { 0x0324 } },
+{ 0x0325, { 0x0325 } },
+{ 0x0326, { 0x0326 } },
+{ 0x0327, { 0x0327 } },
+{ 0x0328, { 0x0328 } },
+{ 0x0329, { 0x0329 } },
+{ 0x032a, { 0x032a } },
+{ 0x032b, { 0x032b } },
+{ 0x032c, { 0x032c } },
+{ 0x032d, { 0x032d } },
+{ 0x032e, { 0x032e } },
+{ 0x032f, { 0x032f } },
+{ 0x0330, { 0x0330 } },
+{ 0x0331, { 0x0331 } },
+{ 0x0332, { 0x0332 } },
+{ 0x0333, { 0x0333 } },
+{ 0x0334, { 0x0334 } },
+{ 0x0335, { 0x0335 } },
+{ 0x0336, { 0x0336 } },
+{ 0x0337, { 0x0337 } },
+{ 0x0338, { 0x0338 } },
+{ 0x0339, { 0x0339 } },
+{ 0x033a, { 0x033a } },
+{ 0x033b, { 0x033b } },
+{ 0x033c, { 0x033c } },
+{ 0x033d, { 0x033d } },
+{ 0x033e, { 0x033e } },
+{ 0x033f, { 0x033f } },
+{ 0x0340, { 0x0340 } },
+{ 0x0341, { 0x0341 } },
+{ 0x0342, { 0x0342 } },
+{ 0x0343, { 0x0343 } },
+{ 0x0344, { 0x0344 } },
+{ 0x0345, { 0x0345 } },
+{ 0x0346, { 0x0346 } },
+{ 0x0347, { 0x0347 } },
+{ 0x0348, { 0x0348 } },
+{ 0x0349, { 0x0349 } },
+{ 0x034a, { 0x034a } },
+{ 0x034b, { 0x034b } },
+{ 0x034c, { 0x034c } },
+{ 0x034d, { 0x034d } },
+{ 0x034e, { 0x034e } },
+{ 0x034f, { 0x034f } },
+{ 0x0350, { 0x0350 } },
+{ 0x0351, { 0x0351 } },
+{ 0x0352, { 0x0352 } },
+{ 0x0353, { 0x0353 } },
+{ 0x0354, { 0x0354 } },
+{ 0x0355, { 0x0355 } },
+{ 0x0356, { 0x0356 } },
+{ 0x0357, { 0x0357 } },
+{ 0x0358, { 0x0358 } },
+{ 0x0359, { 0x0359 } },
+{ 0x035a, { 0x035a } },
+{ 0x035b, { 0x035b } },
+{ 0x035c, { 0x035c } },
+{ 0x035d, { 0x035d } },
+{ 0x035e, { 0x035e } },
+{ 0x035f, { 0x035f } },
+{ 0x0360, { 0x0360 } },
+{ 0x0361, { 0x0361 } },
+{ 0x0362, { 0x0362 } },
+{ 0x0363, { 0x0363 } },
+{ 0x0364, { 0x0364 } },
+{ 0x0365, { 0x0365 } },
+{ 0x0366, { 0x0366 } },
+{ 0x0367, { 0x0367 } },
+{ 0x0368, { 0x0368 } },
+{ 0x0369, { 0x0369 } },
+{ 0x036a, { 0x036a } },
+{ 0x036b, { 0x036b } },
+{ 0x036c, { 0x036c } },
+{ 0x036d, { 0x036d } },
+{ 0x036e, { 0x036e } },
+{ 0x036f, { 0x036f } },
+{ 0x0384, { 0x0384 } },
+{ 0x0385, { 0x0385 } },
+{ 0x0386, { 0x0386 } },
+{ 0x0388, { 0x0388 } },
+{ 0x0389, { 0x0389 } },
+{ 0x038a, { 0x038a } },
+{ 0x038c, { 0x038c } },
+{ 0x038e, { 0x038e } },
+{ 0x038f, { 0x038f } },
+{ 0x0390, { 0x0399, 0x0308, 0x0301 } },
+{ 0x03aa, { 0x03aa } },
+{ 0x03ab, { 0x03ab } },
+{ 0x03ac, { 0x0386 } },
+{ 0x03ad, { 0x0388 } },
+{ 0x03ae, { 0x0389 } },
+{ 0x03af, { 0x038a } },
+{ 0x03b0, { 0x03a5, 0x0308, 0x0301 } },
+{ 0x03ca, { 0x03aa } },
+{ 0x03cb, { 0x03ab } },
+{ 0x03cc, { 0x038c } },
+{ 0x03cd, { 0x038e } },
+{ 0x03ce, { 0x038f } },
+{ 0x03d3, { 0x03a5, 0x0301 } },
+{ 0x03d4, { 0x03ab } },
+{ 0x0400, { 0x0400 } },
+{ 0x0401, { 0x0401 } },
+{ 0x0403, { 0x0403 } },
+{ 0x0407, { 0x0407 } },
+{ 0x040c, { 0x040c } },
+{ 0x040d, { 0x040d } },
+{ 0x040e, { 0x040e } },
+{ 0x0419, { 0x0419 } },
+{ 0x0439, { 0x0419 } },
+{ 0x0450, { 0x0400 } },
+{ 0x0451, { 0x0401 } },
+{ 0x0453, { 0x0403 } },
+{ 0x0457, { 0x0407 } },
+{ 0x045c, { 0x040c } },
+{ 0x045d, { 0x040d } },
+{ 0x045e, { 0x040e } },
+{ 0x0476, { 0x0476 } },
+{ 0x0477, { 0x0476 } },
+{ 0x0483, { 0x0483 } },
+{ 0x0484, { 0x0484 } },
+{ 0x0485, { 0x0485 } },
+{ 0x0486, { 0x0486 } },
+{ 0x0487, { 0x0487 } },
+{ 0x0488, { 0x0488 } },
+{ 0x0489, { 0x0489 } },
+{ 0x04d0, { 0x04d0 } },
+{ 0x04d1, { 0x04d0 } },
+{ 0x04d2, { 0x04d2 } },
+{ 0x04d3, { 0x04d2 } },
+{ 0x04d6, { 0x04d6 } },
+{ 0x04d7, { 0x04d6 } },
+{ 0x04da, { 0x04da } },
+{ 0x04db, { 0x04da } },
+{ 0x04dc, { 0x04dc } },
+{ 0x04dd, { 0x04dc } },
+{ 0x04de, { 0x04de } },
+{ 0x04df, { 0x04de } },
+{ 0x04e2, { 0x04e2 } },
+{ 0x04e3, { 0x04e2 } },
+{ 0x04e4, { 0x04e4 } },
+{ 0x04e5, { 0x04e4 } },
+{ 0x04e6, { 0x04e6 } },
+{ 0x04e7, { 0x04e6 } },
+{ 0x04ea, { 0x04ea } },
+{ 0x04eb, { 0x04ea } },
+{ 0x04ec, { 0x04ec } },
+{ 0x04ed, { 0x04ec } },
+{ 0x04ee, { 0x04ee } },
+{ 0x04ef, { 0x04ee } },
+{ 0x04f0, { 0x04f0 } },
+{ 0x04f1, { 0x04f0 } },
+{ 0x04f2, { 0x04f2 } },
+{ 0x04f3, { 0x04f2 } },
+{ 0x04f4, { 0x04f4 } },
+{ 0x04f5, { 0x04f4 } },
+{ 0x04f8, { 0x04f8 } },
+{ 0x04f9, { 0x04f8 } },
+{ 0x1e00, { 0x1e00 } },
+{ 0x1e01, { 0x1e00 } },
+{ 0x1e02, { 0x1e02 } },
+{ 0x1e03, { 0x1e02 } },
+{ 0x1e04, { 0x1e04 } },
+{ 0x1e05, { 0x1e04 } },
+{ 0x1e06, { 0x1e06 } },
+{ 0x1e07, { 0x1e06 } },
+{ 0x1e08, { 0x1e08 } },
+{ 0x1e09, { 0x1e08 } },
+{ 0x1e0a, { 0x1e0a } },
+{ 0x1e0b, { 0x1e0a } },
+{ 0x1e0c, { 0x1e0c } },
+{ 0x1e0d, { 0x1e0c } },
+{ 0x1e0e, { 0x1e0e } },
+{ 0x1e0f, { 0x1e0e } },
+{ 0x1e10, { 0x1e10 } },
+{ 0x1e11, { 0x1e10 } },
+{ 0x1e12, { 0x1e12 } },
+{ 0x1e13, { 0x1e12 } },
+{ 0x1e14, { 0x1e14 } },
+{ 0x1e15, { 0x1e14 } },
+{ 0x1e16, { 0x1e16 } },
+{ 0x1e17, { 0x1e16 } },
+{ 0x1e18, { 0x1e18 } },
+{ 0x1e19, { 0x1e18 } },
+{ 0x1e1a, { 0x1e1a } },
+{ 0x1e1b, { 0x1e1a } },
+{ 0x1e1c, { 0x1e1c } },
+{ 0x1e1d, { 0x1e1c } },
+{ 0x1e1e, { 0x1e1e } },
+{ 0x1e1f, { 0x1e1e } },
+{ 0x1e20, { 0x1e20 } },
+{ 0x1e21, { 0x1e20 } },
+{ 0x1e22, { 0x1e22 } },
+{ 0x1e23, { 0x1e22 } },
+{ 0x1e24, { 0x1e24 } },
+{ 0x1e25, { 0x1e24 } },
+{ 0x1e26, { 0x1e26 } },
+{ 0x1e27, { 0x1e26 } },
+{ 0x1e28, { 0x1e28 } },
+{ 0x1e29, { 0x1e28 } },
+{ 0x1e2a, { 0x1e2a } },
+{ 0x1e2b, { 0x1e2a } },
+{ 0x1e2c, { 0x1e2c } },
+{ 0x1e2d, { 0x1e2c } },
+{ 0x1e2e, { 0x1e2e } },
+{ 0x1e2f, { 0x1e2e } },
+{ 0x1e30, { 0x1e30 } },
+{ 0x1e31, { 0x1e30 } },
+{ 0x1e32, { 0x1e32 } },
+{ 0x1e33, { 0x1e32 } },
+{ 0x1e34, { 0x1e34 } },
+{ 0x1e35, { 0x1e34 } },
+{ 0x1e36, { 0x1e36 } },
+{ 0x1e37, { 0x1e36 } },
+{ 0x1e38, { 0x1e38 } },
+{ 0x1e39, { 0x1e38 } },
+{ 0x1e3a, { 0x1e3a } },
+{ 0x1e3b, { 0x1e3a } },
+{ 0x1e3c, { 0x1e3c } },
+{ 0x1e3d, { 0x1e3c } },
+{ 0x1e3e, { 0x1e3e } },
+{ 0x1e3f, { 0x1e3e } },
+{ 0x1e40, { 0x1e40 } },
+{ 0x1e41, { 0x1e40 } },
+{ 0x1e42, { 0x1e42 } },
+{ 0x1e43, { 0x1e42 } },
+{ 0x1e44, { 0x1e44 } },
+{ 0x1e45, { 0x1e44 } },
+{ 0x1e46, { 0x1e46 } },
+{ 0x1e47, { 0x1e46 } },
+{ 0x1e48, { 0x1e48 } },
+{ 0x1e49, { 0x1e48 } },
+{ 0x1e4a, { 0x1e4a } },
+{ 0x1e4b, { 0x1e4a } },
+{ 0x1e4c, { 0x1e4c } },
+{ 0x1e4d, { 0x1e4c } },
+{ 0x1e4e, { 0x1e4e } },
+{ 0x1e4f, { 0x1e4e } },
+{ 0x1e50, { 0x1e50 } },
+{ 0x1e51, { 0x1e50 } },
+{ 0x1e52, { 0x1e52 } },
+{ 0x1e53, { 0x1e52 } },
+{ 0x1e54, { 0x1e54 } },
+{ 0x1e55, { 0x1e54 } },
+{ 0x1e56, { 0x1e56 } },
+{ 0x1e57, { 0x1e56 } },
+{ 0x1e58, { 0x1e58 } },
+{ 0x1e59, { 0x1e58 } },
+{ 0x1e5a, { 0x1e5a } },
+{ 0x1e5b, { 0x1e5a } },
+{ 0x1e5c, { 0x1e5c } },
+{ 0x1e5d, { 0x1e5c } },
+{ 0x1e5e, { 0x1e5e } },
+{ 0x1e5f, { 0x1e5e } },
+{ 0x1e60, { 0x1e60 } },
+{ 0x1e61, { 0x1e60 } },
+{ 0x1e62, { 0x1e62 } },
+{ 0x1e63, { 0x1e62 } },
+{ 0x1e64, { 0x1e64 } },
+{ 0x1e65, { 0x1e64 } },
+{ 0x1e66, { 0x1e66 } },
+{ 0x1e67, { 0x1e66 } },
+{ 0x1e68, { 0x1e68 } },
+{ 0x1e69, { 0x1e68 } },
+{ 0x1e6a, { 0x1e6a } },
+{ 0x1e6b, { 0x1e6a } },
+{ 0x1e6c, { 0x1e6c } },
+{ 0x1e6d, { 0x1e6c } },
+{ 0x1e6e, { 0x1e6e } },
+{ 0x1e6f, { 0x1e6e } },
+{ 0x1e70, { 0x1e70 } },
+{ 0x1e71, { 0x1e70 } },
+{ 0x1e72, { 0x1e72 } },
+{ 0x1e73, { 0x1e72 } },
+{ 0x1e74, { 0x1e74 } },
+{ 0x1e75, { 0x1e74 } },
+{ 0x1e76, { 0x1e76 } },
+{ 0x1e77, { 0x1e76 } },
+{ 0x1e78, { 0x1e78 } },
+{ 0x1e79, { 0x1e78 } },
+{ 0x1e7a, { 0x1e7a } },
+{ 0x1e7b, { 0x1e7a } },
+{ 0x1e7c, { 0x1e7c } },
+{ 0x1e7d, { 0x1e7c } },
+{ 0x1e7e, { 0x1e7e } },
+{ 0x1e7f, { 0x1e7e } },
+{ 0x1e80, { 0x1e80 } },
+{ 0x1e81, { 0x1e80 } },
+{ 0x1e82, { 0x1e82 } },
+{ 0x1e83, { 0x1e82 } },
+{ 0x1e84, { 0x1e84 } },
+{ 0x1e85, { 0x1e84 } },
+{ 0x1e86, { 0x1e86 } },
+{ 0x1e87, { 0x1e86 } },
+{ 0x1e88, { 0x1e88 } },
+{ 0x1e89, { 0x1e88 } },
+{ 0x1e8a, { 0x1e8a } },
+{ 0x1e8b, { 0x1e8a } },
+{ 0x1e8c, { 0x1e8c } },
+{ 0x1e8d, { 0x1e8c } },
+{ 0x1e8e, { 0x1e8e } },
+{ 0x1e8f, { 0x1e8e } },
+{ 0x1e90, { 0x1e90 } },
+{ 0x1e91, { 0x1e90 } },
+{ 0x1e92, { 0x1e92 } },
+{ 0x1e93, { 0x1e92 } },
+{ 0x1e94, { 0x1e94 } },
+{ 0x1e95, { 0x1e94 } },
+{ 0x1e96, { 0x0048, 0x0331 } },
+{ 0x1e97, { 0x0054, 0x0308 } },
+{ 0x1e98, { 0x0057, 0x030a } },
+{ 0x1e99, { 0x0059, 0x030a } },
+{ 0x1e9a, { 0x0041, 0x02be } },
+{ 0x1e9b, { 0x1e60 } },
+{ 0x1e9c, { 0x1e9c } },
+{ 0x1e9d, { 0x1e9d } },
+{ 0x1ea0, { 0x1ea0 } },
+{ 0x1ea1, { 0x1ea0 } },
+{ 0x1ea2, { 0x1ea2 } },
+{ 0x1ea3, { 0x1ea2 } },
+{ 0x1ea4, { 0x1ea4 } },
+{ 0x1ea5, { 0x1ea4 } },
+{ 0x1ea6, { 0x1ea6 } },
+{ 0x1ea7, { 0x1ea6 } },
+{ 0x1ea8, { 0x1ea8 } },
+{ 0x1ea9, { 0x1ea8 } },
+{ 0x1eaa, { 0x1eaa } },
+{ 0x1eab, { 0x1eaa } },
+{ 0x1eac, { 0x1eac } },
+{ 0x1ead, { 0x1eac } },
+{ 0x1eae, { 0x1eae } },
+{ 0x1eaf, { 0x1eae } },
+{ 0x1eb0, { 0x1eb0 } },
+{ 0x1eb1, { 0x1eb0 } },
+{ 0x1eb2, { 0x1eb2 } },
+{ 0x1eb3, { 0x1eb2 } },
+{ 0x1eb4, { 0x1eb4 } },
+{ 0x1eb5, { 0x1eb4 } },
+{ 0x1eb6, { 0x1eb6 } },
+{ 0x1eb7, { 0x1eb6 } },
+{ 0x1eb8, { 0x1eb8 } },
+{ 0x1eb9, { 0x1eb8 } },
+{ 0x1eba, { 0x1eba } },
+{ 0x1ebb, { 0x1eba } },
+{ 0x1ebc, { 0x1ebc } },
+{ 0x1ebd, { 0x1ebc } },
+{ 0x1ebe, { 0x1ebe } },
+{ 0x1ebf, { 0x1ebe } },
+{ 0x1ec0, { 0x1ec0 } },
+{ 0x1ec1, { 0x1ec0 } },
+{ 0x1ec2, { 0x1ec2 } },
+{ 0x1ec3, { 0x1ec2 } },
+{ 0x1ec4, { 0x1ec4 } },
+{ 0x1ec5, { 0x1ec4 } },
+{ 0x1ec6, { 0x1ec6 } },
+{ 0x1ec7, { 0x1ec6 } },
+{ 0x1ec8, { 0x1ec8 } },
+{ 0x1ec9, { 0x1ec8 } },
+{ 0x1eca, { 0x1eca } },
+{ 0x1ecb, { 0x1eca } },
+{ 0x1ecc, { 0x1ecc } },
+{ 0x1ecd, { 0x1ecc } },
+{ 0x1ece, { 0x1ece } },
+{ 0x1ecf, { 0x1ece } },
+{ 0x1ed0, { 0x1ed0 } },
+{ 0x1ed1, { 0x1ed0 } },
+{ 0x1ed2, { 0x1ed2 } },
+{ 0x1ed3, { 0x1ed2 } },
+{ 0x1ed4, { 0x1ed4 } },
+{ 0x1ed5, { 0x1ed4 } },
+{ 0x1ed6, { 0x1ed6 } },
+{ 0x1ed7, { 0x1ed6 } },
+{ 0x1ed8, { 0x1ed8 } },
+{ 0x1ed9, { 0x1ed8 } },
+{ 0x1eda, { 0x1eda } },
+{ 0x1edb, { 0x1eda } },
+{ 0x1edc, { 0x1edc } },
+{ 0x1edd, { 0x1edc } },
+{ 0x1ede, { 0x1ede } },
+{ 0x1edf, { 0x1ede } },
+{ 0x1ee0, { 0x1ee0 } },
+{ 0x1ee1, { 0x1ee0 } },
+{ 0x1ee2, { 0x1ee2 } },
+{ 0x1ee3, { 0x1ee2 } },
+{ 0x1ee4, { 0x1ee4 } },
+{ 0x1ee5, { 0x1ee4 } },
+{ 0x1ee6, { 0x1ee6 } },
+{ 0x1ee7, { 0x1ee6 } },
+{ 0x1ee8, { 0x1ee8 } },
+{ 0x1ee9, { 0x1ee8 } },
+{ 0x1eea, { 0x1eea } },
+{ 0x1eeb, { 0x1eea } },
+{ 0x1eec, { 0x1eec } },
+{ 0x1eed, { 0x1eec } },
+{ 0x1eee, { 0x1eee } },
+{ 0x1eef, { 0x1eee } },
+{ 0x1ef0, { 0x1ef0 } },
+{ 0x1ef1, { 0x1ef0 } },
+{ 0x1ef2, { 0x1ef2 } },
+{ 0x1ef3, { 0x1ef2 } },
+{ 0x1ef4, { 0x1ef4 } },
+{ 0x1ef5, { 0x1ef4 } },
+{ 0x1ef6, { 0x1ef6 } },
+{ 0x1ef7, { 0x1ef6 } },
+{ 0x1ef8, { 0x1ef8 } },
+{ 0x1ef9, { 0x1ef8 } },
+{ 0x1f00, { 0x1f08 } },
+{ 0x1f01, { 0x1f09 } },
+{ 0x1f02, { 0x1f0a } },
+{ 0x1f03, { 0x1f0b } },
+{ 0x1f04, { 0x1f0c } },
+{ 0x1f05, { 0x1f0d } },
+{ 0x1f06, { 0x1f0e } },
+{ 0x1f07, { 0x1f0f } },
+{ 0x1f08, { 0x1f08 } },
+{ 0x1f09, { 0x1f09 } },
+{ 0x1f0a, { 0x1f0a } },
+{ 0x1f0b, { 0x1f0b } },
+{ 0x1f0c, { 0x1f0c } },
+{ 0x1f0d, { 0x1f0d } },
+{ 0x1f0e, { 0x1f0e } },
+{ 0x1f0f, { 0x1f0f } },
+{ 0x1f10, { 0x1f18 } },
+{ 0x1f11, { 0x1f19 } },
+{ 0x1f12, { 0x1f1a } },
+{ 0x1f13, { 0x1f1b } },
+{ 0x1f14, { 0x1f1c } },
+{ 0x1f15, { 0x1f1d } },
+{ 0x1f18, { 0x1f18 } },
+{ 0x1f19, { 0x1f19 } },
+{ 0x1f1a, { 0x1f1a } },
+{ 0x1f1b, { 0x1f1b } },
+{ 0x1f1c, { 0x1f1c } },
+{ 0x1f1d, { 0x1f1d } },
+{ 0x1f20, { 0x1f28 } },
+{ 0x1f21, { 0x1f29 } },
+{ 0x1f22, { 0x1f2a } },
+{ 0x1f23, { 0x1f2b } },
+{ 0x1f24, { 0x1f2c } },
+{ 0x1f25, { 0x1f2d } },
+{ 0x1f26, { 0x1f2e } },
+{ 0x1f27, { 0x1f2f } },
+{ 0x1f28, { 0x1f28 } },
+{ 0x1f29, { 0x1f29 } },
+{ 0x1f2a, { 0x1f2a } },
+{ 0x1f2b, { 0x1f2b } },
+{ 0x1f2c, { 0x1f2c } },
+{ 0x1f2d, { 0x1f2d } },
+{ 0x1f2e, { 0x1f2e } },
+{ 0x1f2f, { 0x1f2f } },
+{ 0x1f30, { 0x1f38 } },
+{ 0x1f31, { 0x1f39 } },
+{ 0x1f32, { 0x1f3a } },
+{ 0x1f33, { 0x1f3b } },
+{ 0x1f34, { 0x1f3c } },
+{ 0x1f35, { 0x1f3d } },
+{ 0x1f36, { 0x1f3e } },
+{ 0x1f37, { 0x1f3f } },
+{ 0x1f38, { 0x1f38 } },
+{ 0x1f39, { 0x1f39 } },
+{ 0x1f3a, { 0x1f3a } },
+{ 0x1f3b, { 0x1f3b } },
+{ 0x1f3c, { 0x1f3c } },
+{ 0x1f3d, { 0x1f3d } },
+{ 0x1f3e, { 0x1f3e } },
+{ 0x1f3f, { 0x1f3f } },
+{ 0x1f40, { 0x1f48 } },
+{ 0x1f41, { 0x1f49 } },
+{ 0x1f42, { 0x1f4a } },
+{ 0x1f43, { 0x1f4b } },
+{ 0x1f44, { 0x1f4c } },
+{ 0x1f45, { 0x1f4d } },
+{ 0x1f48, { 0x1f48 } },
+{ 0x1f49, { 0x1f49 } },
+{ 0x1f4a, { 0x1f4a } },
+{ 0x1f4b, { 0x1f4b } },
+{ 0x1f4c, { 0x1f4c } },
+{ 0x1f4d, { 0x1f4d } },
+{ 0x1f50, { 0x03a5, 0x0313 } },
+{ 0x1f51, { 0x1f59 } },
+{ 0x1f52, { 0x03a5, 0x0313, 0x0300 } },
+{ 0x1f53, { 0x1f5b } },
+{ 0x1f54, { 0x03a5, 0x0313, 0x0301 } },
+{ 0x1f55, { 0x1f5d } },
+{ 0x1f56, { 0x03a5, 0x0313, 0x0342 } },
+{ 0x1f57, { 0x1f5f } },
+{ 0x1f59, { 0x1f59 } },
+{ 0x1f5b, { 0x1f5b } },
+{ 0x1f5d, { 0x1f5d } },
+{ 0x1f5f, { 0x1f5f } },
+{ 0x1f60, { 0x1f68 } },
+{ 0x1f61, { 0x1f69 } },
+{ 0x1f62, { 0x1f6a } },
+{ 0x1f63, { 0x1f6b } },
+{ 0x1f64, { 0x1f6c } },
+{ 0x1f65, { 0x1f6d } },
+{ 0x1f66, { 0x1f6e } },
+{ 0x1f67, { 0x1f6f } },
+{ 0x1f68, { 0x1f68 } },
+{ 0x1f69, { 0x1f69 } },
+{ 0x1f6a, { 0x1f6a } },
+{ 0x1f6b, { 0x1f6b } },
+{ 0x1f6c, { 0x1f6c } },
+{ 0x1f6d, { 0x1f6d } },
+{ 0x1f6e, { 0x1d6e } },
+{ 0x1f6f, { 0x1f6f } },
+{ 0x1f70, { 0x1fba } },
+{ 0x1f71, { 0x1fbb } },
+{ 0x1f72, { 0x1fc8 } },
+{ 0x1f73, { 0x1fc9 } },
+{ 0x1f74, { 0x1fca } },
+{ 0x1f75, { 0x1fcb } },
+{ 0x1f76, { 0x1fda } },
+{ 0x1f77, { 0x1fdb } },
+{ 0x1f78, { 0x1ff8 } },
+{ 0x1f79, { 0x1ff9 } },
+{ 0x1f7a, { 0x1fea } },
+{ 0x1f7b, { 0x1feb } },
+{ 0x1f7c, { 0x1ffa } },
+{ 0x1f7d, { 0x1ffb } },
+{ 0x1f80, { 0x1f08, 0x0399 } },
+{ 0x1f81, { 0x1f09, 0x0399 } },
+{ 0x1f82, { 0x1f0a, 0x0399 } },
+{ 0x1f83, { 0x1f0b, 0x0399 } },
+{ 0x1f84, { 0x1f0c, 0x0399 } },
+{ 0x1f85, { 0x1f0d, 0x0399 } },
+{ 0x1f86, { 0x1f0e, 0x0399 } },
+{ 0x1f87, { 0x1f0f, 0x0399 } },
+{ 0x1f88, { 0x1f88 } },
+{ 0x1f89, { 0x1f89 } },
+{ 0x1f8a, { 0x1f8a } },
+{ 0x1f8b, { 0x1f8b } },
+{ 0x1f8c, { 0x1f8c } },
+{ 0x1f8d, { 0x1f8d } },
+{ 0x1f8e, { 0x1f8e } },
+{ 0x1f8f, { 0x1f8f } },
+{ 0x1f90, { 0x1f28, 0x0399 } },
+{ 0x1f91, { 0x1f29, 0x0399 } },
+{ 0x1f92, { 0x1f2a, 0x0399 } },
+{ 0x1f93, { 0x1f2b, 0x0399 } },
+{ 0x1f94, { 0x1f2c, 0x0399 } },
+{ 0x1f95, { 0x1f2d, 0x0399 } },
+{ 0x1f96, { 0x1f2e, 0x0399 } },
+{ 0x1f97, { 0x1f2f, 0x0399 } },
+{ 0x1f98, { 0x1f28, 0x0399 } },
+{ 0x1f99, { 0x1f29, 0x0399 } },
+{ 0x1f9a, { 0x1f2a, 0x0399 } },
+{ 0x1f9b, { 0x1f2b, 0x0399 } },
+{ 0x1f9c, { 0x1f2c, 0x0399 } },
+{ 0x1f9d, { 0x1f2d, 0x0399 } },
+{ 0x1f9e, { 0x1f2e, 0x0399 } },
+{ 0x1f9f, { 0x1f2f, 0x0399 } },
+{ 0x1fa0, { 0x1f68, 0x0399 } },
+{ 0x1fa1, { 0x1f69, 0x0399 } },
+{ 0x1fa2, { 0x1f6a, 0x0399 } },
+{ 0x1fa3, { 0x1f6b, 0x0399 } },
+{ 0x1fa4, { 0x1f6c, 0x0399 } },
+{ 0x1fa5, { 0x1f6d, 0x0399 } },
+{ 0x1fa6, { 0x1f6e, 0x0399 } },
+{ 0x1fa7, { 0x1f6f, 0x0399 } },
+{ 0x1fa8, { 0x1f68, 0x0399 } },
+{ 0x1fa9, { 0x1f69, 0x0399 } },
+{ 0x1faa, { 0x1f6a, 0x0399 } },
+{ 0x1fab, { 0x1f6b, 0x0399 } },
+{ 0x1fac, { 0x1f6c, 0x0399 } },
+{ 0x1fad, { 0x1f6d, 0x0399 } },
+{ 0x1fae, { 0x1f6e, 0x0399 } },
+{ 0x1faf, { 0x1f6f, 0x0399 } },
+{ 0x1fb0, { 0x1fb8 } },
+{ 0x1fb1, { 0x1fb9 } },
+{ 0x1fb2, { 0x1fba, 0x0399 } },
+{ 0x1fb3, { 0x0391, 0x0399 } },
+{ 0x1fb4, { 0x0386, 0x0399 } },
+{ 0x1fb6, { 0x0391, 0x0342 } },
+{ 0x1fb7, { 0x0391, 0x0342, 0x0399 } },
+{ 0x1fb8, { 0x1fb8 } },
+{ 0x1fb9, { 0x1fb9 } },
+{ 0x1fba, { 0x1fba } },
+{ 0x1fbb, { 0x1fbb } },
+{ 0x1fbc, { 0x0391, 0x0399 } },
+{ 0x1fc2, { 0x1fca, 0x0399 } },
+{ 0x1fc3, { 0x0397, 0x0399 } },
+{ 0x1fc4, { 0x0389, 0x0399 } },
+{ 0x1fc6, { 0x0397, 0x0342 } },
+{ 0x1fc7, { 0x0397, 0x0342, 0x0399 } },
+{ 0x1fc8, { 0x1fc8 } },
+{ 0x1fc9, { 0x1fc9 } },
+{ 0x1fca, { 0x1fca } },
+{ 0x1fcb, { 0x1fcb } },
+{ 0x1fcc, { 0x0397, 0x0399 } },
+{ 0x1fd0, { 0x1fd8 } },
+{ 0x1fd1, { 0x1fd9 } },
+{ 0x1fd2, { 0x0399, 0x0308, 0x0300 } },
+{ 0x1fd3, { 0x0399, 0x0308, 0x0301 } },
+{ 0x1fd6, { 0x0399, 0x0342 } },
+{ 0x1fd7, { 0x0399, 0x0308, 0x0342 } },
+{ 0x1fd8, { 0x1fd8 } },
+{ 0x1fd9, { 0x1fd9 } },
+{ 0x1fda, { 0x1fda } },
+{ 0x1fdb, { 0x1fdb } },
+{ 0x1fe0, { 0x1fe8 } },
+{ 0x1fe1, { 0x1fe9 } },
+{ 0x1fe2, { 0x03a5, 0x0308, 0x0300 } },
+{ 0x1fe3, { 0x03a5, 0x0308, 0x0301 } },
+{ 0x1fe4, { 0x03a1, 0x0313 } },
+{ 0x1fe5, { 0x1fec } },
+{ 0x1fe6, { 0x03a5, 0x0342 } },
+{ 0x1fe7, { 0x03a5, 0x0308, 0x0342 } },
+{ 0x1fe8, { 0x1fe8 } },
+{ 0x1fe9, { 0x1fe9 } },
+{ 0x1fea, { 0x1fea } },
+{ 0x1feb, { 0x1feb } },
+{ 0x1fec, { 0x1fec } },
+{ 0x1ff2, { 0x1ffa, 0x0399 } },
+{ 0x1ff3, { 0x03a9, 0x0399 } },
+{ 0x1ff4, { 0x038f, 0x0399 } },
+{ 0x1ff6, { 0x03a9, 0x0342 } },
+{ 0x1ff7, { 0x03a9, 0x0342, 0x0399 } },
+{ 0x1ff8, { 0x1ff8 } },
+{ 0x1ff9, { 0x1ff9 } },
+{ 0x1ffa, { 0x1ffa } },
+{ 0x1ffb, { 0x1ffb } },
+{ 0x1ffc, { 0x03a9, 0x0399 } },
+{ 0x20d0, { 0x20d0 } },
+{ 0x20d1, { 0x20d1 } },
+{ 0x20d2, { 0x20d2 } },
+{ 0x20d3, { 0x20d3 } },
+{ 0x20d4, { 0x20d4 } },
+{ 0x20d5, { 0x20d5 } },
+{ 0x20d6, { 0x20d6 } },
+{ 0x20d7, { 0x20d7 } },
+{ 0x20d8, { 0x20d8 } },
+{ 0x20d9, { 0x20d9 } },
+{ 0x20da, { 0x20da } },
+{ 0x20db, { 0x20db } },
+{ 0x20dc, { 0x20dc } },
+{ 0x20dd, { 0x20dd } },
+{ 0x20de, { 0x20de } },
+{ 0x20df, { 0x20df } },
+{ 0x20e0, { 0x20e0 } },
+{ 0x20e1, { 0x20e1 } },
+{ 0x20e2, { 0x20e2 } },
+{ 0x20e3, { 0x20e3 } },
+{ 0x20e4, { 0x20e4 } },
+{ 0x20e5, { 0x20e5 } },
+{ 0x20e6, { 0x20e6 } },
+{ 0x20e7, { 0x20e7 } },
+{ 0x20e8, { 0x20e8 } },
+{ 0x20e9, { 0x20e9 } },
+{ 0x20ea, { 0x20ea } },
+{ 0x20eb, { 0x20eb } },
+{ 0x20ec, { 0x20ec } },
+{ 0x20ed, { 0x20ed } },
+{ 0x20ee, { 0x20ee } },
+{ 0x20ef, { 0x20ef } },
+{ 0x20f0, { 0x20f0 } },
+{ 0x302a, { 0x302a } },
+{ 0x302b, { 0x302b } },
+{ 0x302c, { 0x302c } },
+{ 0x302d, { 0x302d } },
+{ 0x302e, { 0x302e } },
+{ 0x302f, { 0x302f } },
+{ 0x304c, { 0x30ac } },
+{ 0x304e, { 0x30ae } },
+{ 0x3050, { 0x30b0 } },
+{ 0x3052, { 0x30b2 } },
+{ 0x3054, { 0x30b4 } },
+{ 0x3056, { 0x30b6 } },
+{ 0x3058, { 0x30b8 } },
+{ 0x305a, { 0x30ba } },
+{ 0x305c, { 0x30bc } },
+{ 0x305e, { 0x30be } },
+{ 0x3060, { 0x30c0 } },
+{ 0x3062, { 0x30c2 } },
+{ 0x3065, { 0x30c5 } },
+{ 0x3067, { 0x30c7 } },
+{ 0x3069, { 0x30c9 } },
+{ 0x3070, { 0x30d0 } },
+{ 0x3071, { 0x30d1 } },
+{ 0x3073, { 0x30d3 } },
+{ 0x3074, { 0x30d4 } },
+{ 0x3076, { 0x30d6 } },
+{ 0x3077, { 0x30d7 } },
+{ 0x3079, { 0x30d9 } },
+{ 0x307a, { 0x30da } },
+{ 0x307c, { 0x30dc } },
+{ 0x307d, { 0x30dd } },
+{ 0x3094, { 0x30f4 } },
+{ 0x3099, { 0x3099 } },
+{ 0x309a, { 0x309a } },
+{ 0x309b, { 0x309b } },
+{ 0x309c, { 0x309c } },
+{ 0x30ac, { 0x30ac } },
+{ 0x30ae, { 0x30ae } },
+{ 0x30b0, { 0x30b0 } },
+{ 0x30b2, { 0x30b2 } },
+{ 0x30b4, { 0x30b4 } },
+{ 0x30b6, { 0x30b6 } },
+{ 0x30b8, { 0x30b8 } },
+{ 0x30ba, { 0x30ba } },
+{ 0x30bc, { 0x30bc } },
+{ 0x30be, { 0x30be } },
+{ 0x30c0, { 0x30c0 } },
+{ 0x30c2, { 0x30c2 } },
+{ 0x30c5, { 0x30c5 } },
+{ 0x30c7, { 0x30c7 } },
+{ 0x30c9, { 0x30c9 } },
+{ 0x30d0, { 0x30d0 } },
+{ 0x30d1, { 0x30d1 } },
+{ 0x30d3, { 0x30d3 } },
+{ 0x30d4, { 0x30d4 } },
+{ 0x30d6, { 0x30d6 } },
+{ 0x30d7, { 0x30d7 } },
+{ 0x30d9, { 0x30d9 } },
+{ 0x30da, { 0x30da } },
+{ 0x30dc, { 0x30dc } },
+{ 0x30dd, { 0x30dd } },
+{ 0x30f4, { 0x30f4 } },
+{ 0x30f7, { 0x30f7 } },
+{ 0x30f8, { 0x30f8 } },
+{ 0x30f9, { 0x30f9 } },
+{ 0x30fa, { 0x30fa } },
+{ 0xfb1d, { 0xfb1d } },
+{ 0xfb1f, { 0xfb1f } },
+{ 0xfb2a, { 0xfb2a } },
+{ 0xfb2b, { 0xfb2b } },
+{ 0xfb2c, { 0xfb2c } },
+{ 0xfb2d, { 0xfb2d } },
+{ 0xfb2e, { 0xfb2e } },
+{ 0xfb2f, { 0xfb2f } },
+{ 0xfb30, { 0xfb30 } },
+{ 0xfb31, { 0xfb31 } },
+{ 0xfb32, { 0xfb32 } },
+{ 0xfb33, { 0xfb33 } },
+{ 0xfb34, { 0xfb34 } },
+{ 0xfb35, { 0xfb35 } },
+{ 0xfb36, { 0xfb36 } },
+{ 0xfb38, { 0xfb38 } },
+{ 0xfb39, { 0xfb39 } },
+{ 0xfb3a, { 0xfb3a } },
+{ 0xfb3b, { 0xfb3b } },
+{ 0xfb3c, { 0xfb3c } },
+{ 0xfb3e, { 0xfb3e } },
+{ 0xfb40, { 0xfb40 } },
+{ 0xfb41, { 0xfb41 } },
+{ 0xfb43, { 0xfb43 } },
+{ 0xfb44, { 0xfb44 } },
+{ 0xfb46, { 0xfb46 } },
+{ 0xfb47, { 0xfb47 } },
+{ 0xfb48, { 0xfb48 } },
+{ 0xfb49, { 0xfb49 } },
+{ 0xfb4a, { 0xfb4a } },
+{ 0xfb4b, { 0xfb4b } },
+{ 0xfb4c, { 0xfb4c } },
+{ 0xfb4d, { 0xfb4d } },
+{ 0xfb4e, { 0xfb4e } },
+{ 0xfb4f, { 0xfb4f } },
+{ 0xff9e, { 0x3099 } },
+{ 0xff9f, { 0x309a } },
+};
+
+int get_with_diacritical_mark_character_table_size(void)
+{
+ return sizeof(with_diacritical_mark_character_table)/sizeof(struct mapping_data);
+}
+
+/* character with umlaut
+ *
+ * mapping rule
+ * - lowercase, titlecase -> uppercase
+ * - Ä -> AE, Ï -> IE, Ü -> UE, Ö -> OE
+ */
+const struct mapping_data umlaut_table[] =
+{
+{ 0x00c4, { 0x0041, 0x0045 } },
+{ 0x00cb, { 0x0045, 0x0045 } },
+{ 0x00cf, { 0x0049, 0x0045 } },
+{ 0x00d6, { 0x004f, 0x0045 } },
+{ 0x00dc, { 0x0055, 0x0045 } },
+{ 0x00e4, { 0x0041, 0x0045 } },
+{ 0x00eb, { 0x0045, 0x0045 } },
+{ 0x00ef, { 0x0049, 0x0045 } },
+{ 0x00f6, { 0x004f, 0x0045 } },
+{ 0x00fc, { 0x0055, 0x0045 } },
+};
+
+int get_umlaut_table_size(void)
+{
+ return sizeof(umlaut_table)/sizeof(struct mapping_data);
+}
diff --git a/tools/code_mapping_tables.h b/tools/code_mapping_tables.h
new file mode 100644
index 0000000..bd74a81
--- /dev/null
+++ b/tools/code_mapping_tables.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#define MAPPING_TABLE_VERSION 1
+
+extern const unsigned char mini_index[];
+extern const unsigned char full_index[];
+
+struct mapping_data
+{
+ unsigned short code;
+ unsigned short data[5];
+};
+
+extern const struct mapping_data common_mapping_table[];
+extern const struct mapping_data with_diacritical_mark_character_table[];
+extern const struct mapping_data umlaut_table[];
+
+int get_mini_index_size(void);
+int get_full_index_size(void);
+int get_common_mapping_table_size(void);
+int get_with_diacritical_mark_character_table_size(void);
+int get_umlaut_table_size(void);
diff --git a/tools/mkmappingtable.c b/tools/mkmappingtable.c
new file mode 100644
index 0000000..bcc08ff
--- /dev/null
+++ b/tools/mkmappingtable.c
@@ -0,0 +1,201 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include
+#include
+#include
+#include "code_mapping_tables.h"
+
+#define WITH_DIACRITICAL_MARK 1
+#define OTHER_CHANGE_UMLAUT 2
+
+static int search_mapping_data(const struct mapping_data *table, int table_size, unsigned short ucs)
+{
+ int idx = 0;
+
+ for(idx = 0; idx < table_size; idx++)
+ {
+ if (table[idx].code == ucs)
+ return idx;
+ if (table[idx].code > ucs)
+ return -1;
+ }
+ return -1;
+}
+
+static int write_short(FILE *f, unsigned short s)
+{
+ putc(s, f);
+ return putc(s>>8, f) != EOF;
+}
+
+static int write_data(FILE *f, const unsigned short *d)
+{
+ int idx;
+ unsigned char count = 0;
+
+ for (idx = 0; idx < 5; idx++)
+ {
+ if (d[idx] == 0 && idx > 0)
+ break;
+ count++;
+ }
+
+ if (count == 1 && d[0] == 0xffff)
+ count = 0;
+
+ if (putc(count, f) == EOF)
+ return 0;
+
+ for (idx = 0; idx < count; idx++)
+ {
+ if (!write_short(f, d[idx]))
+ return 0;
+ }
+ return 1;
+}
+
+static int write_mapping_data(FILE *f, int idx)
+{
+ if (idx >= 0)
+ {
+ unsigned char kind = 0;
+ int idx2 = search_mapping_data(with_diacritical_mark_character_table,
+ get_with_diacritical_mark_character_table_size(),
+ common_mapping_table[idx].code);
+ int idx3 = search_mapping_data(umlaut_table,
+ get_umlaut_table_size(),
+ common_mapping_table[idx].code);
+
+ if (idx2 >= 0)
+ kind |= WITH_DIACRITICAL_MARK;
+
+ if (idx3 >= 0)
+ kind |= OTHER_CHANGE_UMLAUT;
+
+ if (putc(kind, f) == EOF)
+ return 0;
+
+ if (!write_data(f, common_mapping_table[idx].data))
+ return 0;
+ if (idx2 >= 0)
+ {
+ if (!write_data(f, with_diacritical_mark_character_table[idx2].data))
+ return 0;
+ }
+ if (idx3 >= 0)
+ {
+ if (!write_data(f, umlaut_table[idx3].data))
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int write_header(FILE *f, const unsigned char *table_index, int index_count)
+{
+ int i;
+ if (!write_short(f, (index_count << 8) | MAPPING_TABLE_VERSION))
+ return 0;
+ for (i = 0; i < index_count; i++)
+ {
+ if (putc(table_index[i], f) == EOF)
+ return 0;
+ }
+ return 1;
+}
+
+static int make_mapping_file(const char *fname, const unsigned char *table_index, int index_count)
+{
+ FILE *f;
+ int i, j;
+ unsigned short uni;
+ int idx;
+
+ f = fopen(fname, "wb");
+ if (!f)
+ return 1;
+
+ write_header(f, table_index, index_count);
+ for (i = 0; i < index_count; i++)
+ {
+ for (j = 0; j < 256; j++)
+ {
+ uni = (table_index[i] << 8) | (unsigned char)j;
+ idx = search_mapping_data(common_mapping_table, get_common_mapping_table_size(), uni);
+ if (idx < 0)
+ {
+ printf("error %x: mapping data does not exist.", uni);
+ fclose(f);
+ return 1;
+ }
+ write_mapping_data(f, idx);
+ }
+ }
+ fclose(f);
+ return 0;
+}
+
+
+static void print_usage(void)
+{
+ printf("Usage: mkmappingtable [-m]\n"
+ "\t-m create unimini.mt\n");
+ printf("build date: " __DATE__ "\n\n");
+}
+
+int main(int argc, char **argv)
+{
+ int i;
+ int mini_flag = 0;
+ int res;
+
+ for (i = 1;i < argc;i++)
+ {
+ if (argv[i][0] == '-')
+ {
+ switch (argv[i][1])
+ {
+ case 'm':
+ mini_flag = 1;
+ break;
+
+ case 'h': /* help */
+ case '?':
+ print_usage();
+ exit(1);
+ break;
+
+ default:
+ print_usage();
+ exit(1);
+ break;
+ }
+ }
+ }
+
+ if (mini_flag)
+ res = make_mapping_file("unimini.mt", mini_index, get_mini_index_size());
+ else
+ res = make_mapping_file("uni.mt", full_index, get_full_index_size());
+
+ return 0;
+}