LCOV - code coverage report
Current view: top level - gdk - gdk_string.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 839 1108 75.7 %
Date: 2024-11-15 19:37:45 Functions: 27 28 96.4 %

          Line data    Source code
       1             : /*
       2             :  * SPDX-License-Identifier: MPL-2.0
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * Copyright 2024 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : #include "monetdb_config.h"
      14             : #include "gdk.h"
      15             : #include "gdk_private.h"
      16             : #include "gdk_cand.h"
      17             : 
      18             : /* String Atom Implementation
      19             :  *
      20             :  * Strings are stored in two parts.  The first part is the normal tail
      21             :  * heap which contains a list of offsets.  The second part is the
      22             :  * theap which contains the actual strings.  The offsets in the tail
      23             :  * heap (a.k.a. offset heap) point into the theap (a.k.a. string
      24             :  * heap).  Strings are NULL-terminated and are stored without any
      25             :  * escape sequences.  Strings are encoded using the UTF-8 encoding
      26             :  * of Unicode.  This means that individual "characters" (really,
      27             :  * Unicode code points) can be between one and four bytes long.
      28             :  *
      29             :  * Because in many typical situations there are lots of duplicated
      30             :  * string values that are being stored in a table, but also in many
      31             :  * (other) typical situations there are very few duplicated string
      32             :  * values stored, a scheme has been introduced to cater to both
      33             :  * situations.
      34             :  *
      35             :  * When the string heap is "small" (defined as less than 64KiB), the
      36             :  * string heap is fully duplicate eliminated.  When the string heap
      37             :  * grows beyond this size, the heap is not kept free of duplicate
      38             :  * strings, but there is then a heuristic that tries to limit the
      39             :  * number of duplicates.
      40             :  *
      41             :  * This is done by having a fixed sized hash table at the start of the
      42             :  * string heap, and allocating space for collision lists in the first
      43             :  * 64KiB of the string heap.  After the first 64KiB no extra space is
      44             :  * allocated for lists, so hash collisions cannot be resolved.
      45             :  */
      46             : 
      47             : /* some of these macros are duplicates from gdk_atoms.c */
      48             : #define num08(x)        ((x) >= '0' && (x) <= '7')
      49             : #define base08(x)       ((x) - '0')
      50             : #define mult08(x)       ((x) << 3)
      51             : 
      52             : #define num16(x)        isxdigit((unsigned char) (x))
      53             : #define base16(x)       (((x) >= 'a' && (x) <= 'f') ? ((x) - 'a' + 10) : ((x) >= 'A' && (x) <= 'F') ? ((x) - 'A' + 10) : (x) - '0')
      54             : #define mult16(x)       ((x) << 4)
      55             : 
      56             : #define atommem(size)                                   \
      57             :         do {                                            \
      58             :                 if (*dst == NULL || *len < (size)) { \
      59             :                         GDKfree(*dst);                  \
      60             :                         *len = (size);                  \
      61             :                         *dst = GDKmalloc(*len);         \
      62             :                         if (*dst == NULL) {             \
      63             :                                 *len = 0;               \
      64             :                                 return -1;              \
      65             :                         }                               \
      66             :                 }                                       \
      67             :         } while (0)
      68             : 
      69             : const char str_nil[2] = { '\200', 0 };
      70             : 
      71             : gdk_return
      72      855784 : strHeap(Heap *d, size_t cap)
      73             : {
      74      855784 :         size_t size;
      75             : 
      76      855784 :         cap = MAX(cap, BATTINY);
      77      855784 :         size = GDK_STRHASHTABLE * sizeof(stridx_t) + MIN(GDK_ELIMLIMIT, cap * GDK_VARALIGN);
      78      855784 :         return HEAPalloc(d, size, 1);
      79             : }
      80             : 
      81             : 
      82             : void
      83        3215 : strCleanHash(Heap *h, bool rebuild)
      84             : {
      85        3215 :         stridx_t newhash[GDK_STRHASHTABLE];
      86        3215 :         size_t pad, pos;
      87        3215 :         BUN off, strhash;
      88        3215 :         const char *s;
      89             : 
      90        3215 :         (void) rebuild;
      91        3215 :         if (!h->cleanhash)
      92         623 :                 return;
      93        2592 :         if (h->size < GDK_STRHASHTABLE * sizeof(stridx_t) &&
      94           0 :             HEAPextend(h, GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN, true) != GDK_SUCCEED) {
      95           0 :                 GDKclrerr();
      96           0 :                 if (h->size > 0)
      97           0 :                         memset(h->base, 0, h->size);
      98           0 :                 return;
      99             :         }
     100             : 
     101             :         /* rebuild hash table for double elimination
     102             :          *
     103             :          * If appending strings to the BAT was aborted, if the heap
     104             :          * was memory mapped, the hash in the string heap may well be
     105             :          * incorrect.  Therefore we don't trust it when we read in a
     106             :          * string heap and we rebuild the complete table (it is small,
     107             :          * so this won't take any time at all).
     108             :          * Note that we will only do this the first time the heap is
     109             :          * loaded, and only for heaps that existed when the server was
     110             :          * started. */
     111        2592 :         memset(newhash, 0, sizeof(newhash));
     112        2592 :         pos = GDK_STRHASHSIZE;
     113      232061 :         while (pos < h->free) {
     114      229653 :                 pad = GDK_VARALIGN - (pos & (GDK_VARALIGN - 1));
     115      229653 :                 if (pad < sizeof(stridx_t))
     116      199068 :                         pad += GDK_VARALIGN;
     117      229653 :                 pos += pad;
     118      229653 :                 if (pos >= GDK_ELIMLIMIT)
     119             :                         break;
     120      229469 :                 s = h->base + pos;
     121      229469 :                 strhash = strHash(s);
     122      229469 :                 off = strhash & GDK_STRHASHMASK;
     123      229469 :                 newhash[off] = (stridx_t) (pos - sizeof(stridx_t));
     124      229469 :                 pos += strlen(s) + 1;
     125             :         }
     126             :         /* only set dirty flag if the hash table actually changed */
     127        2592 :         if (memcmp(newhash, h->base, sizeof(newhash)) != 0) {
     128         128 :                 memcpy(h->base, newhash, sizeof(newhash));
     129         128 :                 if (h->storage == STORE_MMAP) {
     130           7 :                         if (!(ATOMIC_GET(&GDKdebug) & NOSYNCMASK))
     131           0 :                                 (void) MT_msync(h->base, GDK_STRHASHSIZE);
     132             :                 } else
     133         121 :                         h->dirty = true;
     134             :         }
     135             : #ifndef NDEBUG
     136        2592 :         if (GDK_ELIMDOUBLES(h)) {
     137             :                 pos = GDK_STRHASHSIZE;
     138      162392 :                 while (pos < h->free) {
     139      159984 :                         pad = GDK_VARALIGN - (pos & (GDK_VARALIGN - 1));
     140      159984 :                         if (pad < sizeof(stridx_t))
     141      137441 :                                 pad += GDK_VARALIGN;
     142      159984 :                         pos += pad;
     143      159984 :                         s = h->base + pos;
     144      159984 :                         assert(strLocate(h, s) != 0);
     145      159984 :                         pos += strlen(s) + 1;
     146             :                 }
     147             :         }
     148             : #endif
     149        2592 :         h->cleanhash = false;
     150             : }
     151             : 
     152             : /*
     153             :  * The strPut routine. The routine strLocate can be used to identify
     154             :  * the location of a string in the heap if it exists. Otherwise it
     155             :  * returns (var_t) -2 (-1 is reserved for error).
     156             :  */
     157             : var_t
     158      348860 : strLocate(Heap *h, const char *v)
     159             : {
     160      348860 :         stridx_t *ref, *next;
     161             : 
     162             :         /* search hash-table, if double-elimination is still in place */
     163      348860 :         BUN off;
     164      348860 :         if (h->free == 0) {
     165             :                 /* empty, so there are no strings */
     166             :                 return (var_t) -2;
     167             :         }
     168             : 
     169      348860 :         off = strHash(v);
     170      348860 :         off &= GDK_STRHASHMASK;
     171             : 
     172             :         /* should only use strLocate iff fully double eliminated */
     173      348860 :         assert(GDK_ELIMBASE(h->free) == 0);
     174             : 
     175             :         /* search the linked list */
     176      377037 :         for (ref = ((stridx_t *) h->base) + off; *ref; ref = next) {
     177      376275 :                 next = (stridx_t *) (h->base + *ref);
     178      376275 :                 if (strcmp(v, (str) (next + 1)) == 0)
     179      348098 :                         return (var_t) ((sizeof(stridx_t) + *ref));     /* found */
     180             :         }
     181             :         return (var_t) -2;
     182             : }
     183             : 
     184             : var_t
     185    91182535 : strPut(BAT *b, var_t *dst, const void *V)
     186             : {
     187    91182535 :         const char *v = V;
     188    91182535 :         Heap *h = b->tvheap;
     189    91182535 :         size_t pad;
     190    91182535 :         size_t pos, len = strlen(v) + 1;
     191    91182535 :         stridx_t *bucket;
     192    91182535 :         BUN off;
     193             : 
     194    91182535 :         if (h->free == 0) {
     195      218655 :                 if (h->size < GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN) {
     196           0 :                         if (HEAPgrow(&b->tvheap, GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN, true) != GDK_SUCCEED) {
     197             :                                 return (var_t) -1;
     198             :                         }
     199           0 :                         h = b->tvheap;
     200             :                 }
     201      218655 :                 h->free = GDK_STRHASHTABLE * sizeof(stridx_t);
     202      218655 :                 h->dirty = true;
     203             : #ifdef NDEBUG
     204             :                 memset(h->base, 0, h->free);
     205             : #else
     206             :                 /* fill should solve initialization problems within valgrind */
     207      218655 :                 memset(h->base, 0, h->size);
     208             : #endif
     209      218655 :                 b->tascii = true;
     210             :         }
     211             : 
     212    91182535 :         off = strHash(v);
     213    91182535 :         off &= GDK_STRHASHMASK;
     214    91182535 :         bucket = ((stridx_t *) h->base) + off;
     215             : 
     216    91182535 :         if (*bucket) {
     217    89029122 :                 assert(*bucket < h->free);
     218             :                 /* the hash list is not empty */
     219    89029122 :                 if (*bucket < GDK_ELIMLIMIT) {
     220             :                         /* small string heap (<64KiB) -- fully double
     221             :                          * eliminated: search the linked list */
     222             :                         const stridx_t *ref = bucket;
     223             : 
     224    44218330 :                         do {
     225    44218330 :                                 pos = *ref + sizeof(stridx_t);
     226    44218330 :                                 assert(pos < h->free);
     227    44218330 :                                 if (strcmp(v, h->base + pos) == 0) {
     228             :                                         /* found */
     229    40677482 :                                         return *dst = (var_t) pos;
     230             :                                 }
     231     3540848 :                                 ref = (stridx_t *) (h->base + *ref);
     232     3540848 :                         } while (*ref);
     233             :                 } else {
     234             :                         /* large string heap (>=64KiB) -- there is no
     235             :                          * linked list, so only look at single
     236             :                          * entry */
     237    47476765 :                         pos = *bucket;
     238    47476765 :                         if (strcmp(v, h->base + pos) == 0) {
     239             :                                 /* already in heap: reuse */
     240      797612 :                                 return *dst = (var_t) pos;
     241             :                         }
     242             :                 }
     243             :         }
     244             :         /* the string was not found in the heap, we need to enter it */
     245             : 
     246             :         /* check that string is correctly encoded UTF-8; there was no
     247             :          * need to do this earlier: if the string was found above, it
     248             :          * must have gone through here in the past */
     249             : #ifndef NDEBUG
     250    49707441 :         if (!checkUTF8(v)) {
     251           0 :                 GDKerror("incorrectly encoded UTF-8\n");
     252           0 :                 return (var_t) -1;
     253             :         }
     254             : #endif
     255             : 
     256    50056027 :         pad = GDK_VARALIGN - (h->free & (GDK_VARALIGN - 1));
     257    50056027 :         if (GDK_ELIMBASE(h->free + pad) == 0) {      /* i.e. h->free+pad < GDK_ELIMLIMIT */
     258     2337700 :                 if (pad < sizeof(stridx_t)) {
     259             :                         /* make room for hash link */
     260     1879087 :                         pad += GDK_VARALIGN;
     261             :                 }
     262    47718327 :         } else if (GDK_ELIMBASE(h->free) != 0) {
     263             :                 /* no extra padding needed when no hash links needed
     264             :                  * (but only when padding doesn't cross duplicate
     265             :                  * elimination boundary) */
     266    47765562 :                 pad = 0;
     267             :         }
     268             : 
     269             :         /* check heap for space (limited to a certain maximum after
     270             :          * which nils are inserted) */
     271    50056027 :         if (h->free + pad + len >= h->size) {
     272        7703 :                 size_t newsize = MAX(h->size, 4096);
     273             : 
     274             :                 /* double the heap size until we have enough space */
     275        7747 :                 do {
     276        7747 :                         if (newsize < 4 * 1024 * 1024)
     277        7478 :                                 newsize <<= 1;
     278             :                         else
     279         269 :                                 newsize += 4 * 1024 * 1024;
     280        7747 :                 } while (newsize <= h->free + pad + len);
     281             : 
     282        7703 :                 assert(newsize);
     283             : 
     284        7703 :                 if (h->free + pad + len >= (size_t) VAR_MAX) {
     285           0 :                         GDKerror("string heap gets larger than %zuGiB.\n", (size_t) VAR_MAX >> 30);
     286           0 :                         return (var_t) -1;
     287             :                 }
     288        7703 :                 TRC_DEBUG(HEAP, "HEAPextend in strPut %s %zu %zu\n", h->filename, h->size, newsize);
     289        7703 :                 if (HEAPgrow(&b->tvheap, newsize, true) != GDK_SUCCEED) {
     290             :                         return (var_t) -1;
     291             :                 }
     292        7703 :                 h = b->tvheap;
     293             : 
     294             :                 /* make bucket point into the new heap */
     295        7703 :                 bucket = ((stridx_t *) h->base) + off;
     296             :         }
     297             : 
     298             :         /* insert string */
     299    50056027 :         pos = h->free + pad;
     300    50056027 :         *dst = (var_t) pos;
     301    50056027 :         if (pad > 0)
     302     2334661 :                 memset(h->base + h->free, 0, pad);
     303    50056027 :         memcpy(h->base + pos, v, len);
     304    50056027 :         h->free += pad + len;
     305    50056027 :         h->dirty = true;
     306             : 
     307             :         /* maintain hash table */
     308    50056027 :         if (GDK_ELIMBASE(pos) == 0) {   /* small string heap: link the next pointer */
     309             :                 /* the stridx_t next pointer directly precedes the
     310             :                  * string */
     311     2324358 :                 pos -= sizeof(stridx_t);
     312     2324358 :                 *(stridx_t *) (h->base + pos) = *bucket;
     313             :         }
     314    50056027 :         *bucket = (stridx_t) pos;       /* set bucket to the new string */
     315             : 
     316    99960657 :         if (b->tascii && !strNil(v)) {
     317  2122014378 :                 for (const uint8_t *p = (const uint8_t *) v; *p; p++) {
     318  2071864121 :                         if (*p >= 128) {
     319         321 :                                 b->tascii = false;
     320         321 :                                 break;
     321             :                         }
     322             :                 }
     323             :         }
     324             : 
     325    50056027 :         return *dst;
     326             : }
     327             : 
     328             : /*
     329             :  * Convert an "" separated string to a GDK string value, checking that
     330             :  * the input is correct UTF-8.
     331             :  */
     332             : 
     333             : #ifdef __has_builtin
     334             : #if __has_builtin(__builtin_expect)
     335             : /* __builtin_expect returns its first argument; it is expected to be
     336             :  * equal to the second argument */
     337             : #define unlikely(expr)  __builtin_expect((expr) != 0, 0)
     338             : #define likely(expr)    __builtin_expect((expr) != 0, 1)
     339             : #endif
     340             : #endif
     341             : #ifndef unlikely
     342             : #ifdef _MSC_VER
     343             : #define unlikely(expr)  (__assume(!(expr)), (expr))
     344             : #define likely(expr)    (__assume((expr)), (expr))
     345             : #else
     346             : #define unlikely(expr)  (expr)
     347             : #define likely(expr)    (expr)
     348             : #endif
     349             : #endif
     350             : 
     351             : ssize_t
     352   313279982 : GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len, char quote)
     353             : {
     354   313279982 :         unsigned char *p = dst;
     355   313279982 :         const unsigned char *cur = src, *end = src + len;
     356   313279982 :         bool escaped = false;
     357   313279982 :         int mask = 0, n, c, utf8char = 0;
     358             : 
     359   313279982 :         if (len >= 2 && strNil((const char *) src)) {
     360           0 :                 strcpy((char *) dst, str_nil);
     361           0 :                 return 1;
     362             :         }
     363             : 
     364             :         /* copy it in, while performing the correct escapes */
     365             :         /* n is the number of follow-on bytes left in a multi-byte
     366             :          * UTF-8 sequence */
     367  2052455788 :         for (cur = src, n = 0; cur < end || escaped; cur++) {
     368             :                 /* first convert any \ escapes and store value in c */
     369  1739175810 :                 if (escaped) {
     370      547168 :                         switch (*cur) {
     371        3825 :                         case '0':
     372             :                         case '1':
     373             :                         case '2':
     374             :                         case '3':
     375             :                         case '4':
     376             :                         case '5':
     377             :                         case '6':
     378             :                         case '7':
     379             :                                 /* \ with up to three octal digits */
     380        3825 :                                 c = base08(*cur);
     381        3825 :                                 if (num08(cur[1])) {
     382        3825 :                                         cur++;
     383        3825 :                                         c = mult08(c) + base08(*cur);
     384        3825 :                                         if (num08(cur[1])) {
     385        3825 :                                                 if (unlikely(c > 037)) {
     386             :                                                         /* octal
     387             :                                                          * escape
     388             :                                                          * sequence
     389             :                                                          * out or
     390             :                                                          * range */
     391           1 :                                                         GDKerror("not an octal number\n");
     392           1 :                                                         return -1;
     393             :                                                 }
     394        3824 :                                                 cur++;
     395        3824 :                                                 c = mult08(c) + base08(*cur);
     396        3824 :                                                 assert(c >= 0 && c <= 0377);
     397             :                                         }
     398             :                                 }
     399             :                                 break;
     400          57 :                         case 'x':
     401             :                                 /* \x with one or two hexadecimal digits */
     402          57 :                                 if (num16(cur[1])) {
     403          57 :                                         cur++;
     404          57 :                                         c = base16(*cur);
     405          57 :                                         if (num16(cur[1])) {
     406          57 :                                                 cur++;
     407          57 :                                                 c = mult16(c) + base16(*cur);
     408             :                                         }
     409             :                                 } else
     410             :                                         c = 'x';
     411             :                                 break;
     412           1 :                         case 'u':
     413             :                         case 'U':
     414             :                                 /* \u with four hexadecimal digits or
     415             :                                  * \U with eight hexadecimal digits */
     416           1 :                                 if (unlikely(n > 0)) {
     417             :                                         /* not when in the middle of a
     418             :                                          * UTF-8 sequence */
     419           0 :                                         goto notutf8;
     420             :                                 }
     421           1 :                                 c = 0;
     422           2 :                                 for (n = *cur == 'U' ? 8 : 4; n > 0; n--) {
     423           1 :                                         cur++;
     424           1 :                                         if (unlikely(!num16(*cur))) {
     425           1 :                                                 GDKerror("not a Unicode code point escape\n");
     426           1 :                                                 return -1;
     427             :                                         }
     428           0 :                                         c = c << 4 | base16(*cur);
     429             :                                 }
     430             :                                 /* n == 0 now */
     431           0 :                                 if (unlikely(c == 0 || c > 0x10FFFF ||
     432             :                                              (c & 0xFFF800) == 0xD800)) {
     433           0 :                                         GDKerror("illegal Unicode code point\n");
     434           0 :                                         return -1;
     435             :                                 }
     436           0 :                                 if (c < 0x80) {
     437           0 :                                         *p++ = (unsigned char) c;
     438             :                                 } else {
     439           0 :                                         if (c < 0x800) {
     440           0 :                                                 *p++ = 0xC0 | (c >> 6);
     441             :                                         } else {
     442           0 :                                                 if (c < 0x10000) {
     443           0 :                                                         *p++ = 0xE0 | (c >> 12);
     444             :                                                 } else {
     445           0 :                                                         *p++ = 0xF0 | (c >> 18);
     446           0 :                                                         *p++ = 0x80 | ((c >> 12) & 0x3F);
     447             :                                                 }
     448           0 :                                                 *p++ = 0x80 | ((c >> 6) & 0x3F);
     449             :                                         }
     450           0 :                                         *p++ = 0x80 | (c & 0x3F);
     451             :                                 }
     452           0 :                                 escaped = false;
     453           0 :                                 continue;
     454             :                         case 'a':
     455             :                                 c = '\a';
     456             :                                 break;
     457           1 :                         case 'b':
     458           1 :                                 c = '\b';
     459           1 :                                 break;
     460           5 :                         case 'f':
     461           5 :                                 c = '\f';
     462           5 :                                 break;
     463       10773 :                         case 'n':
     464       10773 :                                 c = '\n';
     465       10773 :                                 break;
     466          12 :                         case 'r':
     467          12 :                                 c = '\r';
     468          12 :                                 break;
     469        2015 :                         case 't':
     470        2015 :                                 c = '\t';
     471        2015 :                                 break;
     472           0 :                         case '\0':
     473           0 :                                 c = '\\';
     474           0 :                                 break;
     475      530479 :                         case '\'':
     476             :                         case '\\':
     477             :                                 /* \' and \\ can be handled by the
     478             :                                  * default case */
     479             :                         default:
     480             :                                 /* unrecognized \ escape, just copy
     481             :                                  * the backslashed character */
     482      530479 :                                 c = *cur;
     483      530479 :                                 break;
     484             :                         }
     485             :                         escaped = false;
     486  1738628642 :                 } else if ((c = *cur) == '\\') {
     487      547168 :                         escaped = true;
     488      547168 :                         continue;
     489  1738081474 :                 } else if (c == quote && cur[1] == quote) {
     490        5370 :                         assert(c != 0);
     491        5370 :                         if (unlikely(n > 0))
     492           0 :                                 goto notutf8;
     493        5370 :                         *p++ = quote;
     494        5370 :                         cur++;
     495        5370 :                         continue;
     496             :                 }
     497             : 
     498  1738623270 :                 if (n > 0) {
     499             :                         /* we're still expecting follow-up bytes in a
     500             :                          * UTF-8 sequence */
     501           0 :                         if (unlikely((c & 0xC0) != 0x80)) {
     502             :                                 /* incorrect UTF-8 sequence: byte is
     503             :                                  * not 10xxxxxx */
     504           0 :                                 goto notutf8;
     505             :                         }
     506           0 :                         utf8char = (utf8char << 6) | (c & 0x3F);
     507           0 :                         n--;
     508           0 :                         if (n == 0) {
     509             :                                 /* this was the last byte in the sequence */
     510       26834 :                                 if (unlikely((utf8char & mask) == 0)) {
     511             :                                         /* incorrect UTF-8 sequence:
     512             :                                          * not shortest possible */
     513           0 :                                         goto notutf8;
     514             :                                 }
     515       26834 :                                 if (unlikely(utf8char > 0x10FFFF)) {
     516             :                                         /* incorrect UTF-8 sequence:
     517             :                                          * value too large */
     518           0 :                                         goto notutf8;
     519             :                                 }
     520       26834 :                                 if (unlikely((utf8char & 0x1FFF800) == 0xD800)) {
     521             :                                         /* incorrect UTF-8 sequence:
     522             :                                          * low or high surrogate
     523             :                                          * encoded as UTF-8 */
     524           0 :                                         goto notutf8;
     525             :                                 }
     526             :                         }
     527  1745698644 :                 } else if ((c & 0x80) == 0) {
     528             :                         ;
     529       26836 :                 } else if ((c & 0xE0) == 0xC0) {
     530        1892 :                         n = 1;
     531        1892 :                         mask = 0x000780;
     532        1892 :                         utf8char = c & 0x1F;
     533       24944 :                 } else if ((c & 0xF0) == 0xE0) {
     534       24930 :                         n = 2;
     535       24930 :                         mask = 0x00F800;
     536       24930 :                         utf8char = c & 0x0F;
     537          14 :                 } else if ((c & 0xF8) == 0xF0) {
     538          12 :                         n = 3;
     539          12 :                         mask = 0x1F0000;
     540          12 :                         utf8char = c & 0x07;
     541             :                 } else {
     542             :                         /* incorrect UTF-8 sequence */
     543           2 :                         goto notutf8;
     544             :                 }
     545  1738623268 :                 *p++ = c;
     546             :         }
     547   313279978 :         if (unlikely(n > 0)) {
     548             :                 /* incomplete UTF-8 sequence */
     549           0 :                 goto notutf8;
     550             :         }
     551   313279978 :         *p++ = 0;
     552   313279978 :         return len;
     553           2 :   notutf8:
     554           2 :         GDKerror("not a proper UTF-8 sequence\n");
     555           2 :         return -1;
     556             : }
     557             : 
     558             : ssize_t
     559    29555169 : strFromStr(const char *restrict src, size_t *restrict len, char **restrict dst, bool external)
     560             : {
     561    29555169 :         const char *cur = src, *start = NULL;
     562    29555169 :         size_t l = 1;
     563    29555169 :         bool escaped = false;
     564             : 
     565    29555169 :         if (!external) {
     566    29555004 :                 size_t sz = strLen(src);
     567    29555004 :                 atommem(sz);
     568    29568021 :                 return (ssize_t) strcpy_len(*dst, src, sz);
     569             :         }
     570             : 
     571         165 :         if (strNil(src)) {
     572           0 :                 atommem(2);
     573           0 :                 strcpy(*dst, str_nil);
     574           0 :                 return 1;
     575             :         }
     576             : 
     577         165 :         while (GDKisspace(*cur))
     578           0 :                 cur++;
     579         165 :         if (*cur != '"') {
     580           0 :                 if (strncmp(cur, "nil", 3) == 0) {
     581           0 :                         atommem(2);
     582           0 :                         strcpy(*dst, str_nil);
     583           0 :                         return (ssize_t) (cur - src) + 3;
     584             :                 }
     585           0 :                 GDKerror("not a quoted string\n");
     586           0 :                 return -1;
     587             :         }
     588             : 
     589             :         /* scout the string to find out its length and whether it was
     590             :          * properly quoted */
     591        1598 :         for (start = ++cur; *cur != '"' || escaped; cur++) {
     592        1433 :                 if (*cur == 0) {
     593           0 :                         GDKerror("no closing quotes\n");
     594           0 :                         return -1;
     595        1433 :                 } else if (*cur == '\\' && !escaped) {
     596             :                         escaped = true;
     597             :                 } else {
     598        1424 :                         escaped = false;
     599        1424 :                         l++;
     600             :                 }
     601             :         }
     602             : 
     603             :         /* alloc new memory */
     604         165 :         if (*dst == NULL || *len < l) {
     605         165 :                 GDKfree(*dst);
     606         165 :                 *dst = GDKmalloc(*len = l);
     607         165 :                 if (*dst == NULL) {
     608           0 :                         *len = 0;
     609           0 :                         return -1;
     610             :                 }
     611             :         }
     612             : 
     613         165 :         return GDKstrFromStr((unsigned char *) *dst,
     614             :                              (const unsigned char *) start,
     615             :                              (ssize_t) (cur - start),
     616             :                              '\0');
     617             : }
     618             : 
     619             : /*
     620             :  * Convert a GDK string value to something printable.
     621             :  */
     622             : /* all but control characters (in range 0 to 31) and DEL */
     623             : #define printable_chr(ch)       ((' ' <= (ch) && (ch) <= '~') || ((ch) & 0x80) != 0)
     624             : 
     625             : size_t
     626    11493026 : escapedStrlen(const char *restrict src, const char *sep1, const char *sep2, int quote)
     627             : {
     628    11493026 :         size_t end, sz = 0;
     629    11493026 :         size_t sep1len, sep2len;
     630             : 
     631    11493026 :         sep1len = sep1 ? strlen(sep1) : 0;
     632    11493026 :         sep2len = sep2 ? strlen(sep2) : 0;
     633   259751370 :         for (end = 0; src[end]; end++)
     634   248258344 :                 if (src[end] == '\\'
     635   248258051 :                     || src[end] == quote
     636   248209399 :                     || (sep1len && strncmp(src + end, sep1, sep1len) == 0)
     637   248206842 :                     || (sep2len && strncmp(src + end, sep2, sep2len) == 0)) {
     638       55538 :                         sz += 2;
     639   248202806 :                 } else if (src[end] == (char) '\302' &&
     640           8 :                            0200 <= ((int) src[end + 1] & 0377) &&
     641           8 :                            ((int) src[end + 1] & 0377) <= 0237) {
     642             :                         /* Unicode control character (code point range
     643             :                          * U-00000080 through U-0000009F encoded in
     644             :                          * UTF-8 */
     645             :                         /* for the first one of the two UTF-8 bytes we
     646             :                          * count a width of 7 and for the second one
     647             :                          * 1, together that's 8, i.e. the width of two
     648             :                          * backslash-escaped octal coded characters */
     649           0 :                         sz += 7;
     650   248202806 :                 } else if (!printable_chr(src[end])) {
     651       12080 :                         sz += 4;
     652             :                 } else {
     653   248190726 :                         sz++;
     654             :                 }
     655    11493026 :         return sz;
     656             : }
     657             : 
     658             : size_t
     659     5751910 : escapedStr(char *restrict dst, const char *restrict src, size_t dstlen, const char *sep1, const char *sep2, int quote)
     660             : {
     661     5751910 :         size_t cur = 0, l = 0;
     662     5751910 :         size_t sep1len, sep2len;
     663             : 
     664     5751910 :         sep1len = sep1 ? strlen(sep1) : 0;
     665     5751910 :         sep2len = sep2 ? strlen(sep2) : 0;
     666   129982269 :         for (; src[cur] && l < dstlen; cur++)
     667   124230359 :                 if (!printable_chr(src[cur])
     668   124221517 :                     || (src[cur] == '\302'
     669           4 :                         && 0200 <= (src[cur + 1] & 0377)
     670           4 :                         && ((int) src[cur + 1] & 0377) <= 0237)
     671   124221517 :                     || (cur > 0
     672   118472967 :                         && src[cur - 1] == '\302'
     673           4 :                         && 0200 <= (src[cur] & 0377)
     674           4 :                         && (src[cur] & 0377) <= 0237)) {
     675        8842 :                         dst[l++] = '\\';
     676        8842 :                         switch (src[cur]) {
     677         331 :                         case '\t':
     678         331 :                                 dst[l++] = 't';
     679         331 :                                 break;
     680        8499 :                         case '\n':
     681        8499 :                                 dst[l++] = 'n';
     682        8499 :                                 break;
     683           3 :                         case '\r':
     684           3 :                                 dst[l++] = 'r';
     685           3 :                                 break;
     686           2 :                         case '\f':
     687           2 :                                 dst[l++] = 'f';
     688           2 :                                 break;
     689           7 :                         default:
     690           7 :                                 snprintf(dst + l, dstlen - l, "%03o", (unsigned char) src[cur]);
     691           7 :                                 l += 3;
     692           7 :                                 break;
     693             :                         }
     694   124221517 :                 } else if (src[cur] == '\\'
     695   124221352 :                            || src[cur] == quote
     696   124186697 :                            || (sep1len && strncmp(src + cur, sep1, sep1len) == 0)
     697   124186697 :                            || (sep2len && strncmp(src + cur, sep2, sep2len) == 0)) {
     698       34820 :                         dst[l++] = '\\';
     699       34820 :                         dst[l++] = src[cur];
     700             :                 } else {
     701   124186697 :                         dst[l++] = src[cur];
     702             :                 }
     703     5751910 :         assert(l < dstlen);
     704     5751910 :         dst[l] = 0;
     705     5751910 :         return l;
     706             : }
     707             : 
     708             : ssize_t
     709       16956 : strToStr(char **restrict dst, size_t *restrict len, const char *restrict src, bool external)
     710             : {
     711       16956 :         size_t sz;
     712             : 
     713       16956 :         if (!external) {
     714        6490 :                 sz = strLen(src);
     715        6490 :                 atommem(sz);
     716        6490 :                 return (ssize_t) strcpy_len(*dst, src, sz);
     717             :         }
     718       10466 :         if (strNil(src)) {
     719          52 :                 atommem(4);
     720          52 :                 strcpy(*dst, "nil");
     721          52 :                 return 3;
     722             :         } else {
     723       10414 :                 ssize_t l = 0;
     724       10414 :                 size_t sz = escapedStrlen(src, NULL, NULL, '"');
     725             : 
     726       10417 :                 atommem(sz + 3);
     727       10421 :                 l = (ssize_t) escapedStr((*dst) + 1, src, *len - 1, NULL, NULL, '"');
     728       10422 :                 l++;
     729       10422 :                 (*dst)[0] = (*dst)[l++] = '"';
     730       10422 :                 (*dst)[l] = 0;
     731       10422 :                 return l;
     732             :         }
     733             : }
     734             : 
     735             : str
     736          96 : strRead(str a, size_t *dstlen, stream *s, size_t cnt)
     737             : {
     738          96 :         int len;
     739             : 
     740          96 :         (void) cnt;
     741          96 :         assert(cnt == 1);
     742          96 :         if (mnstr_readInt(s, &len) != 1 || len < 0)
     743             :                 return NULL;
     744          96 :         if (a == NULL || *dstlen < (size_t) len + 1) {
     745           0 :                 if ((a = GDKrealloc(a, len + 1)) == NULL)
     746             :                         return NULL;
     747           0 :                 *dstlen = len + 1;
     748             :         }
     749          96 :         if (len && mnstr_read(s, a, len, 1) != 1) {
     750           0 :                 GDKfree(a);
     751           0 :                 return NULL;
     752             :         }
     753          96 :         a[len] = 0;
     754          96 :         return a;
     755             : }
     756             : 
     757             : gdk_return
     758          96 : strWrite(const char *a, stream *s, size_t cnt)
     759             : {
     760          96 :         size_t len = strlen(a);
     761             : 
     762          96 :         (void) cnt;
     763          96 :         assert(cnt == 1);
     764          96 :         if (!checkUTF8(a)) {
     765           0 :                 GDKerror("incorrectly encoded UTF-8\n");
     766           0 :                 return GDK_FAIL;
     767             :         }
     768          96 :         if (mnstr_writeInt(s, (int) len) && mnstr_write(s, a, len, 1) == 1)
     769             :                 return GDK_SUCCEED;
     770             :         else
     771           0 :                 return GDK_FAIL;
     772             : }
     773             : 
     774             : static gdk_return
     775         111 : concat_strings(BAT **bnp, ValPtr pt, BAT *b, oid seqb,
     776             :                BUN ngrp, struct canditer *restrict ci,
     777             :                const oid *restrict gids, oid min, oid max, bool skip_nils,
     778             :                BAT *sep, const char *restrict separator, BUN *has_nils)
     779             : {
     780         111 :         oid gid;
     781         111 :         BUN i, p, nils = 0;
     782         111 :         size_t *restrict lengths = NULL, separator_length = 0, next_length;
     783         111 :         str *restrict astrings = NULL;
     784         111 :         BATiter bi, bis = (BATiter) {0};
     785         111 :         BAT *bn = NULL;
     786         111 :         gdk_return rres = GDK_FAIL;
     787             : 
     788         111 :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();
     789             : 
     790             :         /* exactly one of bnp and pt must be NULL, the other non-NULL */
     791         111 :         assert((bnp == NULL) != (pt == NULL));
     792             :         /* if pt not NULL, only a single group allowed */
     793         111 :         assert(pt == NULL || ngrp == 1);
     794             : 
     795         111 :         if (bnp) {
     796          56 :                 if ((bn = COLnew(min, TYPE_str, ngrp, TRANSIENT)) == NULL)
     797             :                         return GDK_FAIL;
     798          56 :                 *bnp = bn;
     799             :         }
     800             : 
     801         111 :         bi = bat_iterator(b);
     802         111 :         bis = bat_iterator(sep);
     803         111 :         if (separator)
     804          58 :                 separator_length = strlen(separator);
     805             : 
     806         111 :         if (ngrp == 1) {
     807          62 :                 size_t offset = 0, single_length = 0;
     808          62 :                 bool empty = true;
     809             : 
     810          62 :                 if (separator) {
     811          43 :                         assert(sep == NULL);
     812       18251 :                         TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
     813       18121 :                                 p = canditer_next(ci) - seqb;
     814       18121 :                                 const char *s = BUNtvar(bi, p);
     815       18121 :                                 if (strNil(s)) {
     816          15 :                                         if (!skip_nils) {
     817             :                                                 nils = 1;
     818             :                                                 break;
     819             :                                         }
     820             :                                 } else {
     821       18106 :                                         single_length += strlen(s);
     822       18106 :                                         if (!empty)
     823       18065 :                                                 single_length += separator_length;
     824             :                                         empty = false;
     825             :                                 }
     826             :                         }
     827             :                 } else { /* sep case */
     828          19 :                         assert(sep != NULL);
     829         354 :                         TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
     830         297 :                                 p = canditer_next(ci) - seqb;
     831         297 :                                 const char *s = BUNtvar(bi, p);
     832         297 :                                 const char *sl = BUNtvar(bis, p);
     833         297 :                                 if (strNil(s)) {
     834           4 :                                         if (!skip_nils) {
     835             :                                                 nils = 1;
     836             :                                                 break;
     837             :                                         }
     838             :                                 } else {
     839         293 :                                         single_length += strlen(s);
     840         293 :                                         if (!empty) {
     841         274 :                                                 if (strNil(sl)) {
     842          23 :                                                         if (!skip_nils) {
     843             :                                                                 nils = 1;
     844             :                                                                 break;
     845             :                                                         }
     846             :                                                 } else
     847         251 :                                                         single_length += strlen(sl);
     848             :                                         }
     849             :                                         empty = false;
     850             :                                 }
     851             :                         }
     852             :                 }
     853          62 :                 canditer_reset(ci);
     854          62 :                 TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
     855             : 
     856          62 :                 if (nils == 0 && !empty) {
     857          60 :                         char *single_str = NULL;
     858             : 
     859          60 :                         if ((single_str = GDKmalloc(single_length + 1)) == NULL) {
     860           0 :                                 bat_iterator_end(&bi);
     861           0 :                                 bat_iterator_end(&bis);
     862           0 :                                 BBPreclaim(bn);
     863           0 :                                 return GDK_FAIL;
     864             :                         }
     865          60 :                         empty = true;
     866          60 :                         if (separator) {
     867       18232 :                                 TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
     868       18108 :                                         p = canditer_next(ci) - seqb;
     869       18108 :                                         const char *s = BUNtvar(bi, p);
     870       18108 :                                         if (strNil(s))
     871           2 :                                                 continue;
     872       18106 :                                         if (!empty) {
     873       18065 :                                                 memcpy(single_str + offset, separator, separator_length);
     874       18065 :                                                 offset += separator_length;
     875             :                                         }
     876       18106 :                                         next_length = strlen(s);
     877       18106 :                                         memcpy(single_str + offset, s, next_length);
     878       18106 :                                         offset += next_length;
     879       18106 :                                         empty = false;
     880             :                                 }
     881             :                         } else { /* sep case */
     882          19 :                                 assert(sep != NULL);
     883         354 :                                 TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
     884         297 :                                         p = canditer_next(ci) - seqb;
     885         297 :                                         const char *s = BUNtvar(bi, p);
     886         297 :                                         const char *sl = BUNtvar(bis, p);
     887         297 :                                         if (strNil(s))
     888           4 :                                                 continue;
     889         567 :                                         if (!empty && !strNil(sl)) {
     890         251 :                                                 next_length = strlen(sl);
     891         251 :                                                 memcpy(single_str + offset, sl, next_length);
     892         251 :                                                 offset += next_length;
     893             :                                         }
     894         293 :                                         next_length = strlen(s);
     895         293 :                                         memcpy(single_str + offset, s, next_length);
     896         293 :                                         offset += next_length;
     897         293 :                                         empty = false;
     898             :                                 }
     899             :                         }
     900             : 
     901          60 :                         single_str[offset] = '\0';
     902          60 :                         TIMEOUT_CHECK(qry_ctx, do { GDKfree(single_str); GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx); } while (0));
     903          60 :                         if (bn) {
     904           7 :                                 if (BUNappend(bn, single_str, false) != GDK_SUCCEED) {
     905           0 :                                         GDKfree(single_str);
     906           0 :                                         bat_iterator_end(&bi);
     907           0 :                                         bat_iterator_end(&bis);
     908           0 :                                         BBPreclaim(bn);
     909           0 :                                         return GDK_FAIL;
     910             :                                 }
     911             :                         } else {
     912          53 :                                 pt->len = offset + 1;
     913          53 :                                 pt->val.sval = single_str;
     914          53 :                                 single_str = NULL;      /* don't free */
     915             :                         }
     916          67 :                         GDKfree(single_str);
     917           2 :                 } else if (bn) {
     918           0 :                         if (BUNappend(bn, str_nil, false) != GDK_SUCCEED) {
     919           0 :                                 bat_iterator_end(&bi);
     920           0 :                                 bat_iterator_end(&bis);
     921           0 :                                 BBPreclaim(bn);
     922           0 :                                 return GDK_FAIL;
     923             :                         }
     924             :                 } else {
     925           2 :                         if (VALinit(pt, TYPE_str, str_nil) == NULL) {
     926           0 :                                 bat_iterator_end(&bi);
     927           0 :                                 bat_iterator_end(&bis);
     928           0 :                                 return GDK_FAIL;
     929             :                         }
     930             :                 }
     931          62 :                 bat_iterator_end(&bi);
     932          62 :                 bat_iterator_end(&bis);
     933          62 :                 return GDK_SUCCEED;
     934             :         } else {
     935             :                 /* first used to calculated the total length of
     936             :                  * each group, then the the total offset */
     937          49 :                 lengths = GDKzalloc(ngrp * sizeof(*lengths));
     938          49 :                 astrings = GDKmalloc(ngrp * sizeof(str));
     939          49 :                 if (lengths == NULL || astrings == NULL) {
     940           0 :                         goto finish;
     941             :                 }
     942             :                 /* at first, set astrings[i] to str_nil, then for each
     943             :                  * non-empty group (even if all strings in the group
     944             :                  * are empty), set to NULL */
     945       29014 :                 for (i = 0; i < ngrp; i++)
     946       28965 :                         astrings[i] = (char *) str_nil;
     947             : 
     948          49 :                 if (separator) {
     949         208 :                         TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
     950         163 :                                 i = canditer_next(ci) - seqb;
     951         163 :                                 if (gids[i] >= min && gids[i] <= max) {
     952         163 :                                         gid = gids[i] - min;
     953         163 :                                         if (lengths[gid] == (size_t) -1)
     954           0 :                                                 continue;
     955         163 :                                         const char *s = BUNtvar(bi, i);
     956         326 :                                         if (!strNil(s)) {
     957         155 :                                                 lengths[gid] += strlen(s) + separator_length;
     958         155 :                                                 astrings[gid] = NULL;
     959           8 :                                         } else if (!skip_nils) {
     960           0 :                                                 nils++;
     961           0 :                                                 lengths[gid] = (size_t) -1;
     962           0 :                                                 astrings[gid] = (char *) str_nil;
     963             :                                         }
     964             :                                 }
     965             :                         }
     966             :                 } else { /* sep case */
     967          34 :                         assert(sep != NULL);
     968     1064660 :                         TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
     969     1064498 :                                 i = canditer_next(ci) - seqb;
     970     1064498 :                                 if (gids[i] >= min && gids[i] <= max) {
     971     1064498 :                                         gid = gids[i] - min;
     972     1064498 :                                         if (lengths[gid] == (size_t) -1)
     973           0 :                                                 continue;
     974     1064498 :                                         const char *s = BUNtvar(bi, i);
     975     1064498 :                                         const char *sl = BUNtvar(bis, i);
     976     2128996 :                                         if (!strNil(s)) {
     977     1064175 :                                                 lengths[gid] += strlen(s);
     978     2128350 :                                                 if (!strNil(sl)) {
     979     1064044 :                                                         next_length = strlen(sl);
     980     1064044 :                                                         lengths[gid] += next_length;
     981             :                                                 }
     982     1064175 :                                                 astrings[gid] = NULL;
     983         323 :                                         } else if (!skip_nils) {
     984           0 :                                                 nils++;
     985           0 :                                                 lengths[gid] = (size_t) -1;
     986           0 :                                                 astrings[gid] = (char *) str_nil;
     987             :                                         }
     988             :                                 }
     989             :                         }
     990             :                 }
     991          49 :                 TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(finish, qry_ctx));
     992             : 
     993          49 :                 if (separator) {
     994          69 :                         for (i = 0; i < ngrp; i++) {
     995          54 :                                 if (astrings[i] == NULL) {
     996          52 :                                         if ((astrings[i] = GDKmalloc(lengths[i] + 1)) == NULL) {
     997           0 :                                                 goto finish;
     998             :                                         }
     999          52 :                                         astrings[i][0] = 0;
    1000          52 :                                         lengths[i] = 0;
    1001             :                                 } else
    1002           2 :                                         astrings[i] = NULL;
    1003             :                         }
    1004             :                 } else { /* sep case */
    1005          34 :                         assert(sep != NULL);
    1006       28945 :                         for (i = 0; i < ngrp; i++) {
    1007       28911 :                                 if (astrings[i] == NULL) {
    1008       28909 :                                         if ((astrings[i] = GDKmalloc(lengths[i] + 1)) == NULL) {
    1009           0 :                                                 goto finish;
    1010             :                                         }
    1011       28909 :                                         astrings[i][0] = 0;
    1012       28909 :                                         lengths[i] = 0;
    1013             :                                 } else
    1014           2 :                                         astrings[i] = NULL;
    1015             :                         }
    1016             :                 }
    1017          49 :                 canditer_reset(ci);
    1018             : 
    1019          49 :                 if (separator) {
    1020         193 :                         TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
    1021         163 :                                 i = canditer_next(ci) - seqb;
    1022         163 :                                 if (gids[i] >= min && gids[i] <= max) {
    1023         163 :                                         gid = gids[i] - min;
    1024         163 :                                         if (astrings[gid]) {
    1025         160 :                                                 const char *s = BUNtvar(bi, i);
    1026         160 :                                                 if (strNil(s))
    1027           5 :                                                         continue;
    1028         155 :                                                 if (astrings[gid][lengths[gid]]) {
    1029         103 :                                                         memcpy(astrings[gid] + lengths[gid], separator, separator_length);
    1030         103 :                                                         lengths[gid] += separator_length;
    1031             :                                                 }
    1032         155 :                                                 next_length = strlen(s);
    1033         155 :                                                 memcpy(astrings[gid] + lengths[gid], s, next_length);
    1034         155 :                                                 lengths[gid] += next_length;
    1035         155 :                                                 astrings[gid][lengths[gid]] = 1;
    1036             :                                         }
    1037             :                                 }
    1038             :                         }
    1039             :                 } else { /* sep case */
    1040          34 :                         assert(sep != NULL);
    1041     1064626 :                         TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
    1042     1064498 :                                 i = canditer_next(ci) - seqb;
    1043     1064498 :                                 if (gids[i] >= min && gids[i] <= max) {
    1044     1064498 :                                         gid = gids[i] - min;
    1045     1064498 :                                         if (astrings[gid]) {
    1046     1064177 :                                                 const char *s = BUNtvar(bi, i);
    1047     1064177 :                                                 const char *sl = BUNtvar(bis, i);
    1048     1064177 :                                                 if (strNil(s))
    1049           2 :                                                         continue;
    1050     2099441 :                                                 if (astrings[gid][lengths[gid]] && !strNil(sl)) {
    1051     1035140 :                                                         next_length = strlen(sl);
    1052     1035140 :                                                         memcpy(astrings[gid] + lengths[gid], sl, next_length);
    1053     1035140 :                                                         lengths[gid] += next_length;
    1054             :                                                 }
    1055     1064175 :                                                 next_length = strlen(s);
    1056     1064175 :                                                 memcpy(astrings[gid] + lengths[gid], s, next_length);
    1057     1064175 :                                                 lengths[gid] += next_length;
    1058     1064175 :                                                 astrings[gid][lengths[gid]] = 1;
    1059             :                                         }
    1060             :                                 }
    1061             :                         }
    1062             :                 }
    1063          49 :                 TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(finish, qry_ctx));
    1064             : 
    1065       28992 :                 for (i = 0; i < ngrp; i++) {
    1066       28943 :                         if (astrings[i]) {
    1067       28939 :                                 astrings[i][lengths[i]] = '\0';
    1068       28939 :                                 if (BUNappend(bn, astrings[i], false) != GDK_SUCCEED) {
    1069           0 :                                         goto finish;
    1070             :                                 }
    1071           4 :                         } else if (BUNappend(bn, str_nil, false) != GDK_SUCCEED) {
    1072           0 :                                 goto finish;
    1073             :                         }
    1074             :                 }
    1075             :                 rres = GDK_SUCCEED;
    1076             :         }
    1077             : 
    1078          49 :   finish:
    1079          49 :         bat_iterator_end(&bi);
    1080          49 :         bat_iterator_end(&bis);
    1081          49 :         if (has_nils)
    1082          49 :                 *has_nils = nils;
    1083          49 :         GDKfree(lengths);
    1084          49 :         if (astrings) {
    1085       29014 :                 for (i = 0; i < ngrp; i++) {
    1086       28965 :                         if (astrings[i] != str_nil)
    1087       28965 :                                 GDKfree(astrings[i]);
    1088             :                 }
    1089          49 :                 GDKfree(astrings);
    1090             :         }
    1091          49 :         if (rres != GDK_SUCCEED)
    1092           0 :                 BBPreclaim(bn);
    1093             : 
    1094             :         return rres;
    1095             : 
    1096           0 :   bailout:
    1097           0 :         bat_iterator_end(&bi);
    1098           0 :         bat_iterator_end(&bis);
    1099           0 :         BBPreclaim(bn);
    1100             :         return GDK_FAIL;
    1101             : }
    1102             : 
    1103             : gdk_return
    1104          56 : BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils,
    1105             :                     bool nil_if_empty, const char *restrict separator)
    1106             : {
    1107          56 :         struct canditer ci;
    1108          56 :         gdk_return r = GDK_SUCCEED;
    1109          56 :         bool free_nseparator = false;
    1110          56 :         char *nseparator = (char *)separator;
    1111             : 
    1112          56 :         assert((nseparator && !sep) || (!nseparator && sep)); /* only one of them must be set */
    1113          56 :         *res = (ValRecord) {.vtype = TYPE_str};
    1114             : 
    1115          56 :         canditer_init(&ci, b, s);
    1116             : 
    1117          56 :         if (sep && BATcount(sep) == 1) { /* Only one element in sep */
    1118           0 :                 BATiter bi = bat_iterator(sep);
    1119           0 :                 nseparator = GDKstrdup(BUNtvar(bi, 0));
    1120           0 :                 bat_iterator_end(&bi);
    1121           0 :                 if (!nseparator)
    1122           0 :                         return GDK_FAIL;
    1123           0 :                 free_nseparator = true;
    1124           0 :                 sep = NULL;
    1125             :         }
    1126             : 
    1127          56 :         if (ci.ncand == 0 || (nseparator && strNil(nseparator))) {
    1128           1 :                 if (VALinit(res, TYPE_str, nil_if_empty ? str_nil : "") == NULL)
    1129           0 :                         r = GDK_FAIL;
    1130           1 :                 if (free_nseparator)
    1131           0 :                         GDKfree(nseparator);
    1132           1 :                 return r;
    1133             :         }
    1134             : 
    1135          55 :         r = concat_strings(NULL, res, b, b->hseqbase, 1, &ci, NULL, 0, 0,
    1136             :                               skip_nils, sep, nseparator, NULL);
    1137          55 :         if (free_nseparator)
    1138           0 :                 GDKfree(nseparator);
    1139             :         return r;
    1140             : }
    1141             : 
    1142             : BAT *
    1143          76 : BATgroupstr_group_concat(BAT *b, BAT *g, BAT *e, BAT *s, BAT *sep, bool skip_nils,
    1144             :                          const char *restrict separator)
    1145             : {
    1146          76 :         BAT *bn = NULL;
    1147          76 :         oid min, max;
    1148          76 :         BUN ngrp, nils = 0;
    1149          76 :         struct canditer ci;
    1150          76 :         const char *err;
    1151          76 :         gdk_return res;
    1152          76 :         bool free_nseparator = false;
    1153          76 :         char *nseparator = (char *)separator;
    1154             : 
    1155          76 :         assert((nseparator && !sep) || (!nseparator && sep)); /* only one of them must be set */
    1156          76 :         (void) skip_nils;
    1157             : 
    1158          76 :         if ((err = BATgroupaggrinit(b, g, e, s, &min, &max, &ngrp,
    1159             :                                     &ci)) != NULL) {
    1160           0 :                 GDKerror("%s\n", err);
    1161           0 :                 return NULL;
    1162             :         }
    1163          76 :         if (g == NULL) {
    1164           0 :                 GDKerror("b and g must be aligned\n");
    1165           0 :                 return NULL;
    1166             :         }
    1167             : 
    1168          76 :         if (sep && BATcount(sep) == 1) { /* Only one element in sep */
    1169           0 :                 BATiter bi = bat_iterator(sep);
    1170           0 :                 nseparator = GDKstrdup(BUNtvar(bi, 0));
    1171           0 :                 bat_iterator_end(&bi);
    1172           0 :                 if (!nseparator)
    1173           0 :                         return NULL;
    1174           0 :                 free_nseparator = true;
    1175           0 :                 sep = NULL;
    1176             :         }
    1177             : 
    1178          76 :         if (ci.ncand == 0 || ngrp == 0 || (nseparator && strNil(nseparator))) {
    1179             :                 /* trivial: no strings to concat, so return bat
    1180             :                  * aligned with g with nil in the tail */
    1181           5 :                 bn = BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, ngrp, TRANSIENT);
    1182           5 :                 goto done;
    1183             :         }
    1184             : 
    1185          71 :         if (BATtdense(g) || (g->tkey && g->tnonil)) {
    1186             :                 /* trivial: singleton groups, so all results are equal
    1187             :                  * to the inputs (but possibly a different type) */
    1188          15 :                 bn = BATconvert(b, s, TYPE_str, 0, 0, 0);
    1189          15 :                 goto done;
    1190             :         }
    1191             : 
    1192         112 :         res = concat_strings(&bn, NULL, b, b->hseqbase, ngrp, &ci,
    1193          56 :                              (const oid *) Tloc(g, 0), min, max, skip_nils, sep,
    1194             :                              nseparator, &nils);
    1195          56 :         if (res != GDK_SUCCEED)
    1196           0 :                 bn = NULL;
    1197             : 
    1198          56 : done:
    1199          76 :         if (free_nseparator)
    1200           0 :                 GDKfree(nseparator);
    1201          76 :         return bn;
    1202             : }
    1203             : 
    1204             : #define compute_next_single_str(START, END)                             \
    1205             :         do {                                                            \
    1206             :                 for (oid m = START; m < END; m++) {                  \
    1207             :                         const char *sb = BUNtvar(bi, m);                \
    1208             :                                                                         \
    1209             :                         if (separator) {                                \
    1210             :                                 if (!strNil(sb)) {                      \
    1211             :                                         next_group_length += strlen(sb); \
    1212             :                                         if (!empty)                     \
    1213             :                                                 next_group_length += separator_length; \
    1214             :                                         empty = false;                  \
    1215             :                                 }                                       \
    1216             :                         } else { /* sep case */                         \
    1217             :                                 assert(sep != NULL);                    \
    1218             :                                 const char *sl = BUNtvar(sepi, m);      \
    1219             :                                                                         \
    1220             :                                 if (!strNil(sb)) {                      \
    1221             :                                         next_group_length += strlen(sb); \
    1222             :                                         if (!empty && !strNil(sl))      \
    1223             :                                                 next_group_length += strlen(sl); \
    1224             :                                         empty = false;                  \
    1225             :                                 }                                       \
    1226             :                         }                                               \
    1227             :                 }                                                       \
    1228             :                 if (empty) {                                            \
    1229             :                         if (single_str == NULL) { /* reuse the same buffer, resize it when needed */ \
    1230             :                                 max_group_length = 1;                   \
    1231             :                                 if ((single_str = GDKmalloc(max_group_length + 1)) == NULL) \
    1232             :                                         goto allocation_error;          \
    1233             :                         } else if (1 > max_group_length) {           \
    1234             :                                 max_group_length = 1;                   \
    1235             :                                 if ((next_single_str = GDKrealloc(single_str, max_group_length + 1)) == NULL) \
    1236             :                                         goto allocation_error;          \
    1237             :                                 single_str = next_single_str;           \
    1238             :                         }                                               \
    1239             :                         strcpy(single_str, str_nil);                    \
    1240             :                         has_nils = true;                                \
    1241             :                 } else {                                                \
    1242             :                         empty = true;                                   \
    1243             :                         if (single_str == NULL) { /* reuse the same buffer, resize it when needed */ \
    1244             :                                 max_group_length = next_group_length;   \
    1245             :                                 if ((single_str = GDKmalloc(max_group_length + 1)) == NULL) \
    1246             :                                         goto allocation_error;          \
    1247             :                         } else if (next_group_length > max_group_length) { \
    1248             :                                 max_group_length = next_group_length;   \
    1249             :                                 if ((next_single_str = GDKrealloc(single_str, max_group_length + 1)) == NULL) \
    1250             :                                         goto allocation_error;          \
    1251             :                                 single_str = next_single_str;           \
    1252             :                         }                                               \
    1253             :                                                                         \
    1254             :                         for (oid m = START; m < END; m++) {          \
    1255             :                                 const char *sb = BUNtvar(bi, m);        \
    1256             :                                                                         \
    1257             :                                 if (separator) {                        \
    1258             :                                         if (strNil(sb))                 \
    1259             :                                                 continue;               \
    1260             :                                         if (!empty) {                   \
    1261             :                                                 memcpy(single_str + offset, separator, separator_length); \
    1262             :                                                 offset += separator_length; \
    1263             :                                         }                               \
    1264             :                                         next_length = strlen(sb);       \
    1265             :                                         memcpy(single_str + offset, sb, next_length); \
    1266             :                                         offset += next_length;          \
    1267             :                                         empty = false;                  \
    1268             :                                 } else { /* sep case */                 \
    1269             :                                         assert(sep != NULL);            \
    1270             :                                         const char *sl = BUNtvar(sepi, m); \
    1271             :                                                                         \
    1272             :                                         if (strNil(sb))                 \
    1273             :                                                 continue;               \
    1274             :                                         if (!empty && !strNil(sl)) {    \
    1275             :                                                 next_length = strlen(sl); \
    1276             :                                                 memcpy(single_str + offset, sl, next_length); \
    1277             :                                                 offset += next_length;  \
    1278             :                                         }                               \
    1279             :                                         next_length = strlen(sb);       \
    1280             :                                         memcpy(single_str + offset, sb, next_length); \
    1281             :                                         offset += next_length;          \
    1282             :                                         empty = false;                  \
    1283             :                                 }                                       \
    1284             :                         }                                               \
    1285             :                                                                         \
    1286             :                         single_str[offset] = '\0';                      \
    1287             :                 }                                                       \
    1288             : } while (0)
    1289             : 
    1290             : #define ANALYTICAL_STR_GROUP_CONCAT_UNBOUNDED_TILL_CURRENT_ROW          \
    1291             :         do {                                                            \
    1292             :                 size_t slice_length = 0;                                \
    1293             :                 next_group_length = next_length = offset = 0;           \
    1294             :                 empty = true;                                           \
    1295             :                 compute_next_single_str(k, i); /* compute the entire string then slice it starting from the beginning */ \
    1296             :                 empty = true;                                           \
    1297             :                 for (; k < i;) {                                     \
    1298             :                         const char *nsep;                               \
    1299             :                         oid m = k;                                      \
    1300             :                         j = k;                                          \
    1301             :                         do {                                            \
    1302             :                                 k++;                                    \
    1303             :                         } while (k < i && !op[k]);                   \
    1304             :                         for (; j < k; j++) {                         \
    1305             :                                 const char *nstr = BUNtvar(bi, j);      \
    1306             :                                 if (!strNil(nstr)) {                    \
    1307             :                                         slice_length += strlen(nstr);   \
    1308             :                                         if (!empty) {                   \
    1309             :                                                 if (separator) {        \
    1310             :                                                         nsep = (const char *) separator; \
    1311             :                                                 } else { /* sep case */ \
    1312             :                                                         assert(sep != NULL); \
    1313             :                                                         nsep = BUNtvar(sepi, j); \
    1314             :                                                 }                       \
    1315             :                                                 if (!strNil(nsep))      \
    1316             :                                                         slice_length += strlen(nsep); \
    1317             :                                         }                               \
    1318             :                                         empty = false;                  \
    1319             :                                 }                                       \
    1320             :                         }                                               \
    1321             :                         if (empty) {                                    \
    1322             :                                 for (j = m; j < k; j++)                      \
    1323             :                                         if (tfastins_nocheckVAR(r, j, str_nil) != GDK_SUCCEED) \
    1324             :                                                 goto allocation_error;  \
    1325             :                                 has_nils = true;                        \
    1326             :                         } else {                                        \
    1327             :                                 char save = single_str[slice_length];   \
    1328             :                                 single_str[slice_length] = '\0';        \
    1329             :                                 for (j = m; j < k; j++)                      \
    1330             :                                         if (tfastins_nocheckVAR(r, j, single_str) != GDK_SUCCEED) \
    1331             :                                                 goto allocation_error;  \
    1332             :                                 single_str[slice_length] = save;        \
    1333             :                         }                                               \
    1334             :                 }                                                       \
    1335             :         } while (0)
    1336             : 
    1337             : #define ANALYTICAL_STR_GROUP_CONCAT_ALL_ROWS                            \
    1338             :         do {                                                            \
    1339             :                 next_group_length = next_length = offset = 0;           \
    1340             :                 empty = true;                                           \
    1341             :                 compute_next_single_str(k, i);                          \
    1342             :                 for (; k < i; k++)                                   \
    1343             :                         if (tfastins_nocheckVAR(r, k, single_str) != GDK_SUCCEED) \
    1344             :                                 goto allocation_error;                  \
    1345             :         } while (0)
    1346             : 
    1347             : #define ANALYTICAL_STR_GROUP_CONCAT_CURRENT_ROW                         \
    1348             :         do {                                                            \
    1349             :                 for (; k < i; k++) {                                 \
    1350             :                         const char *next = BUNtvar(bi, k);              \
    1351             :                         if (tfastins_nocheckVAR(r, k, next) != GDK_SUCCEED) \
    1352             :                                 goto allocation_error;                  \
    1353             :                         has_nils |= strNil(next);                       \
    1354             :                 }                                                       \
    1355             :         } while (0)
    1356             : 
    1357             : #define ANALYTICAL_STR_GROUP_CONCAT_OTHERS                              \
    1358             :         do {                                                            \
    1359             :                 for (; k < i; k++) {                                 \
    1360             :                         next_group_length = next_length = offset = 0;   \
    1361             :                         empty = true;                                   \
    1362             :                         compute_next_single_str(start[k], end[k]);      \
    1363             :                         if (tfastins_nocheckVAR(r, k, single_str) != GDK_SUCCEED) \
    1364             :                                 goto allocation_error;                  \
    1365             :                 }                                                       \
    1366             :         } while (0)
    1367             : 
    1368             : #define ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(IMP)     \
    1369             :         do {                                            \
    1370             :                 if (p) {                                \
    1371             :                         for (; i < cnt; i++) {               \
    1372             :                                 if (np[i])              \
    1373             :                                         IMP;            \
    1374             :                         }                               \
    1375             :                 }                                       \
    1376             :                 i = cnt;                                \
    1377             :                 IMP;                                    \
    1378             :         } while (0)
    1379             : 
    1380             : gdk_return
    1381          45 : GDKanalytical_str_group_concat(BAT *r, BAT *p, BAT *o, BAT *b, BAT *sep, BAT *s, BAT *e, const char *restrict separator, int frame_type)
    1382             : {
    1383          45 :         bool has_nils = false, empty;
    1384          45 :         BATiter pi = bat_iterator(p);
    1385          44 :         BATiter oi = bat_iterator(o);
    1386          45 :         BATiter bi = bat_iterator(b);
    1387          45 :         BATiter sepi = bat_iterator(sep);
    1388          45 :         BATiter si = bat_iterator(s);
    1389          45 :         BATiter ei = bat_iterator(e);
    1390          45 :         oid i = 0, j = 0, k = 0, cnt = bi.count, *restrict start = si.base, *restrict end = ei.base;
    1391          45 :         bit *np = pi.base, *op = oi.base;
    1392          45 :         str single_str = NULL, next_single_str;
    1393          45 :         size_t separator_length = 0, next_group_length, max_group_length = 0, next_length, offset;
    1394             : 
    1395          45 :         assert((sep && !separator && bi.count == sepi.count) || (!sep && separator));
    1396          45 :         if (b->ttype != TYPE_str || r->ttype != TYPE_str || (sep && sep->ttype != TYPE_str)) {
    1397           1 :                 GDKerror("only string type is supported\n");
    1398           0 :                 bat_iterator_end(&pi);
    1399           0 :                 bat_iterator_end(&oi);
    1400           0 :                 bat_iterator_end(&bi);
    1401           0 :                 bat_iterator_end(&sepi);
    1402           0 :                 bat_iterator_end(&si);
    1403           0 :                 bat_iterator_end(&ei);
    1404           0 :                 return GDK_FAIL;
    1405             :         }
    1406          30 :         if (sep && sepi.count == 1) { /* Only one element in sep */
    1407           0 :                 separator = BUNtvar(sepi, 0);
    1408           0 :                 sep = NULL;
    1409             :         }
    1410             : 
    1411          44 :         if (sep == NULL)
    1412          15 :                 separator_length = strlen(separator);
    1413             : 
    1414          44 :         if (cnt > 0) {
    1415          43 :                 switch (frame_type) {
    1416          21 :                 case 3: /* unbounded until current row */
    1417       31624 :                         ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_UNBOUNDED_TILL_CURRENT_ROW);
    1418             :                         break;
    1419           0 :                 case 4: /* current row until unbounded */
    1420           0 :                         goto notimplemented;
    1421          22 :                 case 5: /* all rows */
    1422         844 :                         ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_ALL_ROWS);
    1423             :                         break;
    1424           0 :                 case 6: /* current row */
    1425           0 :                         ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_CURRENT_ROW);
    1426             :                         break;
    1427           0 :                 default:
    1428           0 :                         ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_OTHERS);
    1429             :                         break;
    1430             :                 }
    1431             :         }
    1432             : 
    1433          45 :         bat_iterator_end(&pi);
    1434          45 :         bat_iterator_end(&oi);
    1435          45 :         bat_iterator_end(&bi);
    1436          45 :         bat_iterator_end(&sepi);
    1437          45 :         bat_iterator_end(&si);
    1438          45 :         bat_iterator_end(&ei);
    1439          45 :         GDKfree(single_str);
    1440          45 :         BATsetcount(r, cnt);
    1441          45 :         r->tnonil = !has_nils;
    1442          45 :         r->tnil = has_nils;
    1443          45 :         return GDK_SUCCEED;
    1444           0 :   allocation_error:
    1445           0 :         bat_iterator_end(&pi);
    1446           0 :         bat_iterator_end(&oi);
    1447           0 :         bat_iterator_end(&bi);
    1448           0 :         bat_iterator_end(&sepi);
    1449           0 :         bat_iterator_end(&si);
    1450           0 :         bat_iterator_end(&ei);
    1451           0 :         GDKfree(single_str);
    1452           0 :         return GDK_FAIL;
    1453           0 :   notimplemented:
    1454           0 :         bat_iterator_end(&pi);
    1455           0 :         bat_iterator_end(&oi);
    1456           0 :         bat_iterator_end(&bi);
    1457           0 :         bat_iterator_end(&sepi);
    1458           0 :         bat_iterator_end(&si);
    1459           0 :         bat_iterator_end(&ei);
    1460           0 :         GDKerror("str_group_concat not yet implemented for current row until unbounded case\n");
    1461           0 :         return GDK_FAIL;
    1462             : }
    1463             : 
    1464             : /* The three case conversion tables are specially crafted from the
    1465             :  * UnicodeData.txt file for efficient lookup.
    1466             :  *
    1467             :  * The lowercase and uppercase tables are derived from the
    1468             :  * UnicodeData.txt file (the respective columns from that file), the
    1469             :  * casefold table is derived from the CaseFold.txt file.
    1470             :  *
    1471             :  * For the first byte of a UTF-8 encoding, use the value as index into
    1472             :  * the table.  If the value is zero, there are no conversions for any
    1473             :  * UTF-8 string starting with this byte (this includes both multi-byte
    1474             :  * sequences and single-byte sequences, though note that for single-byte
    1475             :  * sequences (ASCII-compatible) the table is filled in completely at no
    1476             :  * extra cost).  For a single-byte sequence, if the value is not zero,
    1477             :  * it is the converted codepoint.  For a multi-byte sequence, if the
    1478             :  * value is not zero, it is an offset into the same table.  The next
    1479             :  * byte is added to the offset and again used as index into the table
    1480             :  * (including the top two bits which are always 1 and 0 respectively).
    1481             :  * The process then repeats: if zero, no conversions for any sequence
    1482             :  * starting with the bytes looked up so far, if non-zero, if this is the
    1483             :  * last byte of a sequence, it is the converted codepoint, and otherwise
    1484             :  * a (new) offset into the same table.
    1485             :  * Only for the casefold table, if the converted codepoint is negative,
    1486             :  * it is actually an escape into the specialcase table.  The absolute
    1487             :  * value is the index. */
    1488             : 
    1489             : /* These tables were created using the code in unicaseconvtabs.py */
    1490             : static const char *const specialcase[] = {
    1491             :         NULL,
    1492             :         [1] = "ss",
    1493             :         [2] = "i\xCC\x87",
    1494             :         [3] = "\xCA\xBCn",
    1495             :         [4] = "j\xCC\x8C",
    1496             :         [5] = "\xCE\xB9\xCC\x88\xCC\x81",
    1497             :         [6] = "\xCF\x85\xCC\x88\xCC\x81",
    1498             :         [7] = "\xD5\xA5\xD6\x82",
    1499             :         [8] = "h\xCC\xB1",
    1500             :         [9] = "t\xCC\x88",
    1501             :         [10] = "w\xCC\x8A",
    1502             :         [11] = "y\xCC\x8A",
    1503             :         [12] = "a\xCA\xBE",
    1504             :         [13] = "\xCF\x85\xCC\x93",
    1505             :         [14] = "\xCF\x85\xCC\x93\xCC\x80",
    1506             :         [15] = "\xCF\x85\xCC\x93\xCC\x81",
    1507             :         [16] = "\xCF\x85\xCC\x93\xCD\x82",
    1508             :         [17] = "\xE1\xBC\x80\xCE\xB9",
    1509             :         [18] = "\xE1\xBC\x81\xCE\xB9",
    1510             :         [19] = "\xE1\xBC\x82\xCE\xB9",
    1511             :         [20] = "\xE1\xBC\x83\xCE\xB9",
    1512             :         [21] = "\xE1\xBC\x84\xCE\xB9",
    1513             :         [22] = "\xE1\xBC\x85\xCE\xB9",
    1514             :         [23] = "\xE1\xBC\x86\xCE\xB9",
    1515             :         [24] = "\xE1\xBC\x87\xCE\xB9",
    1516             :         [25] = "\xE1\xBC\xA0\xCE\xB9",
    1517             :         [26] = "\xE1\xBC\xA1\xCE\xB9",
    1518             :         [27] = "\xE1\xBC\xA2\xCE\xB9",
    1519             :         [28] = "\xE1\xBC\xA3\xCE\xB9",
    1520             :         [29] = "\xE1\xBC\xA4\xCE\xB9",
    1521             :         [30] = "\xE1\xBC\xA5\xCE\xB9",
    1522             :         [31] = "\xE1\xBC\xA6\xCE\xB9",
    1523             :         [32] = "\xE1\xBC\xA7\xCE\xB9",
    1524             :         [33] = "\xE1\xBD\xA0\xCE\xB9",
    1525             :         [34] = "\xE1\xBD\xA1\xCE\xB9",
    1526             :         [35] = "\xE1\xBD\xA2\xCE\xB9",
    1527             :         [36] = "\xE1\xBD\xA3\xCE\xB9",
    1528             :         [37] = "\xE1\xBD\xA4\xCE\xB9",
    1529             :         [38] = "\xE1\xBD\xA5\xCE\xB9",
    1530             :         [39] = "\xE1\xBD\xA6\xCE\xB9",
    1531             :         [40] = "\xE1\xBD\xA7\xCE\xB9",
    1532             :         [41] = "\xE1\xBD\xB0\xCE\xB9",
    1533             :         [42] = "\xCE\xB1\xCE\xB9",
    1534             :         [43] = "\xCE\xAC\xCE\xB9",
    1535             :         [44] = "\xCE\xB1\xCD\x82",
    1536             :         [45] = "\xCE\xB1\xCD\x82\xCE\xB9",
    1537             :         [46] = "\xE1\xBD\xB4\xCE\xB9",
    1538             :         [47] = "\xCE\xB7\xCE\xB9",
    1539             :         [48] = "\xCE\xAE\xCE\xB9",
    1540             :         [49] = "\xCE\xB7\xCD\x82",
    1541             :         [50] = "\xCE\xB7\xCD\x82\xCE\xB9",
    1542             :         [51] = "\xCE\xB9\xCC\x88\xCC\x80",
    1543             :         [52] = "\xCE\xB9\xCD\x82",
    1544             :         [53] = "\xCE\xB9\xCC\x88\xCD\x82",
    1545             :         [54] = "\xCF\x85\xCC\x88\xCC\x80",
    1546             :         [55] = "\xCF\x81\xCC\x93",
    1547             :         [56] = "\xCF\x85\xCD\x82",
    1548             :         [57] = "\xCF\x85\xCC\x88\xCD\x82",
    1549             :         [58] = "\xE1\xBD\xBC\xCE\xB9",
    1550             :         [59] = "\xCF\x89\xCE\xB9",
    1551             :         [60] = "\xCF\x8E\xCE\xB9",
    1552             :         [61] = "\xCF\x89\xCD\x82",
    1553             :         [62] = "\xCF\x89\xCD\x82\xCE\xB9",
    1554             :         [63] = "ff",
    1555             :         [64] = "fi",
    1556             :         [65] = "fl",
    1557             :         [66] = "ffi",
    1558             :         [67] = "ffl",
    1559             :         [68] = "st",
    1560             :         [69] = "\xD5\xB4\xD5\xB6",
    1561             :         [70] = "\xD5\xB4\xD5\xA5",
    1562             :         [71] = "\xD5\xB4\xD5\xAB",
    1563             :         [72] = "\xD5\xBE\xD5\xB6",
    1564             :         [73] = "\xD5\xB4\xD5\xAD",
    1565             :         [74] = "SS",
    1566             :         [75] = "FF",
    1567             :         [76] = "FI",
    1568             :         [77] = "FL",
    1569             :         [78] = "FFI",
    1570             :         [79] = "FFL",
    1571             :         [80] = "ST",
    1572             :         [81] = "\xD4\xB5\xD5\x92",
    1573             :         [82] = "\xD5\x84\xD5\x86",
    1574             :         [83] = "\xD5\x84\xD4\xB5",
    1575             :         [84] = "\xD5\x84\xD4\xBB",
    1576             :         [85] = "\xD5\x8E\xD5\x86",
    1577             :         [86] = "\xD5\x84\xD4\xBD",
    1578             :         [87] = "\xCA\xBCN",
    1579             :         [88] = "\xCE\x99\xCC\x88\xCC\x81",
    1580             :         [89] = "\xCE\xA5\xCC\x88\xCC\x81",
    1581             :         [90] = "J\xCC\x8C",
    1582             :         [91] = "H\xCC\xB1",
    1583             :         [92] = "T\xCC\x88",
    1584             :         [93] = "W\xCC\x8A",
    1585             :         [94] = "Y\xCC\x8A",
    1586             :         [95] = "A\xCA\xBE",
    1587             :         [96] = "\xCE\xA5\xCC\x93",
    1588             :         [97] = "\xCE\xA5\xCC\x93\xCC\x80",
    1589             :         [98] = "\xCE\xA5\xCC\x93\xCC\x81",
    1590             :         [99] = "\xCE\xA5\xCC\x93\xCD\x82",
    1591             :         [100] = "\xCE\x91\xCD\x82",
    1592             :         [101] = "\xCE\x97\xCD\x82",
    1593             :         [102] = "\xCE\x99\xCC\x88\xCC\x80",
    1594             :         [103] = "\xCE\x99\xCD\x82",
    1595             :         [104] = "\xCE\x99\xCC\x88\xCD\x82",
    1596             :         [105] = "\xCE\xA5\xCC\x88\xCC\x80",
    1597             :         [106] = "\xCE\xA1\xCC\x93",
    1598             :         [107] = "\xCE\xA5\xCD\x82",
    1599             :         [108] = "\xCE\xA5\xCC\x88\xCD\x82",
    1600             :         [109] = "\xCE\xA9\xCD\x82",
    1601             :         [110] = "\xE1\xBC\x88\xCE\x99",
    1602             :         [111] = "\xE1\xBC\x89\xCE\x99",
    1603             :         [112] = "\xE1\xBC\x8A\xCE\x99",
    1604             :         [113] = "\xE1\xBC\x8B\xCE\x99",
    1605             :         [114] = "\xE1\xBC\x8C\xCE\x99",
    1606             :         [115] = "\xE1\xBC\x8D\xCE\x99",
    1607             :         [116] = "\xE1\xBC\x8E\xCE\x99",
    1608             :         [117] = "\xE1\xBC\x8F\xCE\x99",
    1609             :         [118] = "\xE1\xBC\xA8\xCE\x99",
    1610             :         [119] = "\xE1\xBC\xA9\xCE\x99",
    1611             :         [120] = "\xE1\xBC\xAA\xCE\x99",
    1612             :         [121] = "\xE1\xBC\xAB\xCE\x99",
    1613             :         [122] = "\xE1\xBC\xAC\xCE\x99",
    1614             :         [123] = "\xE1\xBC\xAD\xCE\x99",
    1615             :         [124] = "\xE1\xBC\xAE\xCE\x99",
    1616             :         [125] = "\xE1\xBC\xAF\xCE\x99",
    1617             :         [126] = "\xE1\xBD\xA8\xCE\x99",
    1618             :         [127] = "\xE1\xBD\xA9\xCE\x99",
    1619             :         [128] = "\xE1\xBD\xAA\xCE\x99",
    1620             :         [129] = "\xE1\xBD\xAB\xCE\x99",
    1621             :         [130] = "\xE1\xBD\xAC\xCE\x99",
    1622             :         [131] = "\xE1\xBD\xAD\xCE\x99",
    1623             :         [132] = "\xE1\xBD\xAE\xCE\x99",
    1624             :         [133] = "\xE1\xBD\xAF\xCE\x99",
    1625             :         [134] = "\xCE\x91\xCE\x99",
    1626             :         [135] = "\xCE\x97\xCE\x99",
    1627             :         [136] = "\xCE\xA9\xCE\x99",
    1628             :         [137] = "\xE1\xBE\xBA\xCE\x99",
    1629             :         [138] = "\xCE\x86\xCE\x99",
    1630             :         [139] = "\xE1\xBF\x8A\xCE\x99",
    1631             :         [140] = "\xCE\x89\xCE\x99",
    1632             :         [141] = "\xE1\xBF\xBA\xCE\x99",
    1633             :         [142] = "\xCE\x8F\xCE\x99",
    1634             :         [143] = "\xCE\x91\xCD\x82\xCE\x99",
    1635             :         [144] = "\xCE\x97\xCD\x82\xCE\x99",
    1636             :         [145] = "\xCE\xA9\xCD\x82\xCE\x99",
    1637             : };
    1638             : static const int lowercase[4288] = {
    1639             :         [0x00] = 0x0000,        /* U+0000: <control> */
    1640             :         [0x01] = 0x0001,        /* U+0001: <control> */
    1641             :         [0x02] = 0x0002,        /* U+0002: <control> */
    1642             :         [0x03] = 0x0003,        /* U+0003: <control> */
    1643             :         [0x04] = 0x0004,        /* U+0004: <control> */
    1644             :         [0x05] = 0x0005,        /* U+0005: <control> */
    1645             :         [0x06] = 0x0006,        /* U+0006: <control> */
    1646             :         [0x07] = 0x0007,        /* U+0007: <control> */
    1647             :         [0x08] = 0x0008,        /* U+0008: <control> */
    1648             :         [0x09] = 0x0009,        /* U+0009: <control> */
    1649             :         [0x0A] = 0x000A,        /* U+000A: <control> */
    1650             :         [0x0B] = 0x000B,        /* U+000B: <control> */
    1651             :         [0x0C] = 0x000C,        /* U+000C: <control> */
    1652             :         [0x0D] = 0x000D,        /* U+000D: <control> */
    1653             :         [0x0E] = 0x000E,        /* U+000E: <control> */
    1654             :         [0x0F] = 0x000F,        /* U+000F: <control> */
    1655             :         [0x10] = 0x0010,        /* U+0010: <control> */
    1656             :         [0x11] = 0x0011,        /* U+0011: <control> */
    1657             :         [0x12] = 0x0012,        /* U+0012: <control> */
    1658             :         [0x13] = 0x0013,        /* U+0013: <control> */
    1659             :         [0x14] = 0x0014,        /* U+0014: <control> */
    1660             :         [0x15] = 0x0015,        /* U+0015: <control> */
    1661             :         [0x16] = 0x0016,        /* U+0016: <control> */
    1662             :         [0x17] = 0x0017,        /* U+0017: <control> */
    1663             :         [0x18] = 0x0018,        /* U+0018: <control> */
    1664             :         [0x19] = 0x0019,        /* U+0019: <control> */
    1665             :         [0x1A] = 0x001A,        /* U+001A: <control> */
    1666             :         [0x1B] = 0x001B,        /* U+001B: <control> */
    1667             :         [0x1C] = 0x001C,        /* U+001C: <control> */
    1668             :         [0x1D] = 0x001D,        /* U+001D: <control> */
    1669             :         [0x1E] = 0x001E,        /* U+001E: <control> */
    1670             :         [0x1F] = 0x001F,        /* U+001F: <control> */
    1671             :         [0x20] = 0x0020,        /* U+0020: SPACE */
    1672             :         [0x21] = 0x0021,        /* U+0021: EXCLAMATION MARK */
    1673             :         [0x22] = 0x0022,        /* U+0022: QUOTATION MARK */
    1674             :         [0x23] = 0x0023,        /* U+0023: NUMBER SIGN */
    1675             :         [0x24] = 0x0024,        /* U+0024: DOLLAR SIGN */
    1676             :         [0x25] = 0x0025,        /* U+0025: PERCENT SIGN */
    1677             :         [0x26] = 0x0026,        /* U+0026: AMPERSAND */
    1678             :         [0x27] = 0x0027,        /* U+0027: APOSTROPHE */
    1679             :         [0x28] = 0x0028,        /* U+0028: LEFT PARENTHESIS */
    1680             :         [0x29] = 0x0029,        /* U+0029: RIGHT PARENTHESIS */
    1681             :         [0x2A] = 0x002A,        /* U+002A: ASTERISK */
    1682             :         [0x2B] = 0x002B,        /* U+002B: PLUS SIGN */
    1683             :         [0x2C] = 0x002C,        /* U+002C: COMMA */
    1684             :         [0x2D] = 0x002D,        /* U+002D: HYPHEN-MINUS */
    1685             :         [0x2E] = 0x002E,        /* U+002E: FULL STOP */
    1686             :         [0x2F] = 0x002F,        /* U+002F: SOLIDUS */
    1687             :         [0x30] = 0x0030,        /* U+0030: DIGIT ZERO */
    1688             :         [0x31] = 0x0031,        /* U+0031: DIGIT ONE */
    1689             :         [0x32] = 0x0032,        /* U+0032: DIGIT TWO */
    1690             :         [0x33] = 0x0033,        /* U+0033: DIGIT THREE */
    1691             :         [0x34] = 0x0034,        /* U+0034: DIGIT FOUR */
    1692             :         [0x35] = 0x0035,        /* U+0035: DIGIT FIVE */
    1693             :         [0x36] = 0x0036,        /* U+0036: DIGIT SIX */
    1694             :         [0x37] = 0x0037,        /* U+0037: DIGIT SEVEN */
    1695             :         [0x38] = 0x0038,        /* U+0038: DIGIT EIGHT */
    1696             :         [0x39] = 0x0039,        /* U+0039: DIGIT NINE */
    1697             :         [0x3A] = 0x003A,        /* U+003A: COLON */
    1698             :         [0x3B] = 0x003B,        /* U+003B: SEMICOLON */
    1699             :         [0x3C] = 0x003C,        /* U+003C: LESS-THAN SIGN */
    1700             :         [0x3D] = 0x003D,        /* U+003D: EQUALS SIGN */
    1701             :         [0x3E] = 0x003E,        /* U+003E: GREATER-THAN SIGN */
    1702             :         [0x3F] = 0x003F,        /* U+003F: QUESTION MARK */
    1703             :         [0x40] = 0x0040,        /* U+0040: COMMERCIAL AT */
    1704             :         [0x41] = 0x0061,        /* U+0041: LATIN CAPITAL LETTER A */
    1705             :         [0x42] = 0x0062,        /* U+0042: LATIN CAPITAL LETTER B */
    1706             :         [0x43] = 0x0063,        /* U+0043: LATIN CAPITAL LETTER C */
    1707             :         [0x44] = 0x0064,        /* U+0044: LATIN CAPITAL LETTER D */
    1708             :         [0x45] = 0x0065,        /* U+0045: LATIN CAPITAL LETTER E */
    1709             :         [0x46] = 0x0066,        /* U+0046: LATIN CAPITAL LETTER F */
    1710             :         [0x47] = 0x0067,        /* U+0047: LATIN CAPITAL LETTER G */
    1711             :         [0x48] = 0x0068,        /* U+0048: LATIN CAPITAL LETTER H */
    1712             :         [0x49] = 0x0069,        /* U+0049: LATIN CAPITAL LETTER I */
    1713             :         [0x4A] = 0x006A,        /* U+004A: LATIN CAPITAL LETTER J */
    1714             :         [0x4B] = 0x006B,        /* U+004B: LATIN CAPITAL LETTER K */
    1715             :         [0x4C] = 0x006C,        /* U+004C: LATIN CAPITAL LETTER L */
    1716             :         [0x4D] = 0x006D,        /* U+004D: LATIN CAPITAL LETTER M */
    1717             :         [0x4E] = 0x006E,        /* U+004E: LATIN CAPITAL LETTER N */
    1718             :         [0x4F] = 0x006F,        /* U+004F: LATIN CAPITAL LETTER O */
    1719             :         [0x50] = 0x0070,        /* U+0050: LATIN CAPITAL LETTER P */
    1720             :         [0x51] = 0x0071,        /* U+0051: LATIN CAPITAL LETTER Q */
    1721             :         [0x52] = 0x0072,        /* U+0052: LATIN CAPITAL LETTER R */
    1722             :         [0x53] = 0x0073,        /* U+0053: LATIN CAPITAL LETTER S */
    1723             :         [0x54] = 0x0074,        /* U+0054: LATIN CAPITAL LETTER T */
    1724             :         [0x55] = 0x0075,        /* U+0055: LATIN CAPITAL LETTER U */
    1725             :         [0x56] = 0x0076,        /* U+0056: LATIN CAPITAL LETTER V */
    1726             :         [0x57] = 0x0077,        /* U+0057: LATIN CAPITAL LETTER W */
    1727             :         [0x58] = 0x0078,        /* U+0058: LATIN CAPITAL LETTER X */
    1728             :         [0x59] = 0x0079,        /* U+0059: LATIN CAPITAL LETTER Y */
    1729             :         [0x5A] = 0x007A,        /* U+005A: LATIN CAPITAL LETTER Z */
    1730             :         [0x5B] = 0x005B,        /* U+005B: LEFT SQUARE BRACKET */
    1731             :         [0x5C] = 0x005C,        /* U+005C: REVERSE SOLIDUS */
    1732             :         [0x5D] = 0x005D,        /* U+005D: RIGHT SQUARE BRACKET */
    1733             :         [0x5E] = 0x005E,        /* U+005E: CIRCUMFLEX ACCENT */
    1734             :         [0x5F] = 0x005F,        /* U+005F: LOW LINE */
    1735             :         [0x60] = 0x0060,        /* U+0060: GRAVE ACCENT */
    1736             :         [0x61] = 0x0061,        /* U+0061: LATIN SMALL LETTER A */
    1737             :         [0x62] = 0x0062,        /* U+0062: LATIN SMALL LETTER B */
    1738             :         [0x63] = 0x0063,        /* U+0063: LATIN SMALL LETTER C */
    1739             :         [0x64] = 0x0064,        /* U+0064: LATIN SMALL LETTER D */
    1740             :         [0x65] = 0x0065,        /* U+0065: LATIN SMALL LETTER E */
    1741             :         [0x66] = 0x0066,        /* U+0066: LATIN SMALL LETTER F */
    1742             :         [0x67] = 0x0067,        /* U+0067: LATIN SMALL LETTER G */
    1743             :         [0x68] = 0x0068,        /* U+0068: LATIN SMALL LETTER H */
    1744             :         [0x69] = 0x0069,        /* U+0069: LATIN SMALL LETTER I */
    1745             :         [0x6A] = 0x006A,        /* U+006A: LATIN SMALL LETTER J */
    1746             :         [0x6B] = 0x006B,        /* U+006B: LATIN SMALL LETTER K */
    1747             :         [0x6C] = 0x006C,        /* U+006C: LATIN SMALL LETTER L */
    1748             :         [0x6D] = 0x006D,        /* U+006D: LATIN SMALL LETTER M */
    1749             :         [0x6E] = 0x006E,        /* U+006E: LATIN SMALL LETTER N */
    1750             :         [0x6F] = 0x006F,        /* U+006F: LATIN SMALL LETTER O */
    1751             :         [0x70] = 0x0070,        /* U+0070: LATIN SMALL LETTER P */
    1752             :         [0x71] = 0x0071,        /* U+0071: LATIN SMALL LETTER Q */
    1753             :         [0x72] = 0x0072,        /* U+0072: LATIN SMALL LETTER R */
    1754             :         [0x73] = 0x0073,        /* U+0073: LATIN SMALL LETTER S */
    1755             :         [0x74] = 0x0074,        /* U+0074: LATIN SMALL LETTER T */
    1756             :         [0x75] = 0x0075,        /* U+0075: LATIN SMALL LETTER U */
    1757             :         [0x76] = 0x0076,        /* U+0076: LATIN SMALL LETTER V */
    1758             :         [0x77] = 0x0077,        /* U+0077: LATIN SMALL LETTER W */
    1759             :         [0x78] = 0x0078,        /* U+0078: LATIN SMALL LETTER X */
    1760             :         [0x79] = 0x0079,        /* U+0079: LATIN SMALL LETTER Y */
    1761             :         [0x7A] = 0x007A,        /* U+007A: LATIN SMALL LETTER Z */
    1762             :         [0x7B] = 0x007B,        /* U+007B: LEFT CURLY BRACKET */
    1763             :         [0x7C] = 0x007C,        /* U+007C: VERTICAL LINE */
    1764             :         [0x7D] = 0x007D,        /* U+007D: RIGHT CURLY BRACKET */
    1765             :         [0x7E] = 0x007E,        /* U+007E: TILDE */
    1766             :         [0x7F] = 0x007F,        /* U+007F: <control> */
    1767             :         [0xC3] = 256 - 0x80,    /* 303 ... */
    1768             :         [256+0x00] = 0x00E0,    /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
    1769             :         [256+0x01] = 0x00E1,    /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
    1770             :         [256+0x02] = 0x00E2,    /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
    1771             :         [256+0x03] = 0x00E3,    /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
    1772             :         [256+0x04] = 0x00E4,    /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
    1773             :         [256+0x05] = 0x00E5,    /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
    1774             :         [256+0x06] = 0x00E6,    /* U+00C6: LATIN CAPITAL LETTER AE */
    1775             :         [256+0x07] = 0x00E7,    /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
    1776             :         [256+0x08] = 0x00E8,    /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
    1777             :         [256+0x09] = 0x00E9,    /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
    1778             :         [256+0x0A] = 0x00EA,    /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
    1779             :         [256+0x0B] = 0x00EB,    /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
    1780             :         [256+0x0C] = 0x00EC,    /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
    1781             :         [256+0x0D] = 0x00ED,    /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
    1782             :         [256+0x0E] = 0x00EE,    /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
    1783             :         [256+0x0F] = 0x00EF,    /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
    1784             :         [256+0x10] = 0x00F0,    /* U+00D0: LATIN CAPITAL LETTER ETH */
    1785             :         [256+0x11] = 0x00F1,    /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
    1786             :         [256+0x12] = 0x00F2,    /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
    1787             :         [256+0x13] = 0x00F3,    /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
    1788             :         [256+0x14] = 0x00F4,    /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
    1789             :         [256+0x15] = 0x00F5,    /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
    1790             :         [256+0x16] = 0x00F6,    /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
    1791             :         [256+0x18] = 0x00F8,    /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
    1792             :         [256+0x19] = 0x00F9,    /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
    1793             :         [256+0x1A] = 0x00FA,    /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
    1794             :         [256+0x1B] = 0x00FB,    /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
    1795             :         [256+0x1C] = 0x00FC,    /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
    1796             :         [256+0x1D] = 0x00FD,    /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
    1797             :         [256+0x1E] = 0x00FE,    /* U+00DE: LATIN CAPITAL LETTER THORN */
    1798             :         [0xC4] = 320 - 0x80,    /* 304 ... */
    1799             :         [320+0x00] = 0x0101,    /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
    1800             :         [320+0x02] = 0x0103,    /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
    1801             :         [320+0x04] = 0x0105,    /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
    1802             :         [320+0x06] = 0x0107,    /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
    1803             :         [320+0x08] = 0x0109,    /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
    1804             :         [320+0x0A] = 0x010B,    /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
    1805             :         [320+0x0C] = 0x010D,    /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
    1806             :         [320+0x0E] = 0x010F,    /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
    1807             :         [320+0x10] = 0x0111,    /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
    1808             :         [320+0x12] = 0x0113,    /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
    1809             :         [320+0x14] = 0x0115,    /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
    1810             :         [320+0x16] = 0x0117,    /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
    1811             :         [320+0x18] = 0x0119,    /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
    1812             :         [320+0x1A] = 0x011B,    /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
    1813             :         [320+0x1C] = 0x011D,    /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
    1814             :         [320+0x1E] = 0x011F,    /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
    1815             :         [320+0x20] = 0x0121,    /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
    1816             :         [320+0x22] = 0x0123,    /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
    1817             :         [320+0x24] = 0x0125,    /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
    1818             :         [320+0x26] = 0x0127,    /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
    1819             :         [320+0x28] = 0x0129,    /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
    1820             :         [320+0x2A] = 0x012B,    /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
    1821             :         [320+0x2C] = 0x012D,    /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
    1822             :         [320+0x2E] = 0x012F,    /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
    1823             :         [320+0x30] = 0x0069,    /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
    1824             :         [320+0x32] = 0x0133,    /* U+0132: LATIN CAPITAL LIGATURE IJ */
    1825             :         [320+0x34] = 0x0135,    /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
    1826             :         [320+0x36] = 0x0137,    /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
    1827             :         [320+0x39] = 0x013A,    /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
    1828             :         [320+0x3B] = 0x013C,    /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
    1829             :         [320+0x3D] = 0x013E,    /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
    1830             :         [320+0x3F] = 0x0140,    /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
    1831             :         [0xC5] = 384 - 0x80,    /* 305 ... */
    1832             :         [384+0x01] = 0x0142,    /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
    1833             :         [384+0x03] = 0x0144,    /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
    1834             :         [384+0x05] = 0x0146,    /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
    1835             :         [384+0x07] = 0x0148,    /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
    1836             :         [384+0x0A] = 0x014B,    /* U+014A: LATIN CAPITAL LETTER ENG */
    1837             :         [384+0x0C] = 0x014D,    /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
    1838             :         [384+0x0E] = 0x014F,    /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
    1839             :         [384+0x10] = 0x0151,    /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
    1840             :         [384+0x12] = 0x0153,    /* U+0152: LATIN CAPITAL LIGATURE OE */
    1841             :         [384+0x14] = 0x0155,    /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
    1842             :         [384+0x16] = 0x0157,    /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
    1843             :         [384+0x18] = 0x0159,    /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
    1844             :         [384+0x1A] = 0x015B,    /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
    1845             :         [384+0x1C] = 0x015D,    /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
    1846             :         [384+0x1E] = 0x015F,    /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
    1847             :         [384+0x20] = 0x0161,    /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
    1848             :         [384+0x22] = 0x0163,    /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
    1849             :         [384+0x24] = 0x0165,    /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
    1850             :         [384+0x26] = 0x0167,    /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
    1851             :         [384+0x28] = 0x0169,    /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
    1852             :         [384+0x2A] = 0x016B,    /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
    1853             :         [384+0x2C] = 0x016D,    /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
    1854             :         [384+0x2E] = 0x016F,    /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
    1855             :         [384+0x30] = 0x0171,    /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
    1856             :         [384+0x32] = 0x0173,    /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
    1857             :         [384+0x34] = 0x0175,    /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
    1858             :         [384+0x36] = 0x0177,    /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
    1859             :         [384+0x38] = 0x00FF,    /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
    1860             :         [384+0x39] = 0x017A,    /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
    1861             :         [384+0x3B] = 0x017C,    /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
    1862             :         [384+0x3D] = 0x017E,    /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
    1863             :         [0xC6] = 448 - 0x80,    /* 306 ... */
    1864             :         [448+0x01] = 0x0253,    /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
    1865             :         [448+0x02] = 0x0183,    /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
    1866             :         [448+0x04] = 0x0185,    /* U+0184: LATIN CAPITAL LETTER TONE SIX */
    1867             :         [448+0x06] = 0x0254,    /* U+0186: LATIN CAPITAL LETTER OPEN O */
    1868             :         [448+0x07] = 0x0188,    /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
    1869             :         [448+0x09] = 0x0256,    /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
    1870             :         [448+0x0A] = 0x0257,    /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
    1871             :         [448+0x0B] = 0x018C,    /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
    1872             :         [448+0x0E] = 0x01DD,    /* U+018E: LATIN CAPITAL LETTER REVERSED E */
    1873             :         [448+0x0F] = 0x0259,    /* U+018F: LATIN CAPITAL LETTER SCHWA */
    1874             :         [448+0x10] = 0x025B,    /* U+0190: LATIN CAPITAL LETTER OPEN E */
    1875             :         [448+0x11] = 0x0192,    /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
    1876             :         [448+0x13] = 0x0260,    /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
    1877             :         [448+0x14] = 0x0263,    /* U+0194: LATIN CAPITAL LETTER GAMMA */
    1878             :         [448+0x16] = 0x0269,    /* U+0196: LATIN CAPITAL LETTER IOTA */
    1879             :         [448+0x17] = 0x0268,    /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
    1880             :         [448+0x18] = 0x0199,    /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
    1881             :         [448+0x1C] = 0x026F,    /* U+019C: LATIN CAPITAL LETTER TURNED M */
    1882             :         [448+0x1D] = 0x0272,    /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
    1883             :         [448+0x1F] = 0x0275,    /* U+019F: LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
    1884             :         [448+0x20] = 0x01A1,    /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
    1885             :         [448+0x22] = 0x01A3,    /* U+01A2: LATIN CAPITAL LETTER OI */
    1886             :         [448+0x24] = 0x01A5,    /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
    1887             :         [448+0x26] = 0x0280,    /* U+01A6: LATIN LETTER YR */
    1888             :         [448+0x27] = 0x01A8,    /* U+01A7: LATIN CAPITAL LETTER TONE TWO */
    1889             :         [448+0x29] = 0x0283,    /* U+01A9: LATIN CAPITAL LETTER ESH */
    1890             :         [448+0x2C] = 0x01AD,    /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
    1891             :         [448+0x2E] = 0x0288,    /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
    1892             :         [448+0x2F] = 0x01B0,    /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
    1893             :         [448+0x31] = 0x028A,    /* U+01B1: LATIN CAPITAL LETTER UPSILON */
    1894             :         [448+0x32] = 0x028B,    /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
    1895             :         [448+0x33] = 0x01B4,    /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
    1896             :         [448+0x35] = 0x01B6,    /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
    1897             :         [448+0x37] = 0x0292,    /* U+01B7: LATIN CAPITAL LETTER EZH */
    1898             :         [448+0x38] = 0x01B9,    /* U+01B8: LATIN CAPITAL LETTER EZH REVERSED */
    1899             :         [448+0x3C] = 0x01BD,    /* U+01BC: LATIN CAPITAL LETTER TONE FIVE */
    1900             :         [0xC7] = 512 - 0x80,    /* 307 ... */
    1901             :         [512+0x04] = 0x01C6,    /* U+01C4: LATIN CAPITAL LETTER DZ WITH CARON */
    1902             :         [512+0x05] = 0x01C6,    /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
    1903             :         [512+0x07] = 0x01C9,    /* U+01C7: LATIN CAPITAL LETTER LJ */
    1904             :         [512+0x08] = 0x01C9,    /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
    1905             :         [512+0x0A] = 0x01CC,    /* U+01CA: LATIN CAPITAL LETTER NJ */
    1906             :         [512+0x0B] = 0x01CC,    /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
    1907             :         [512+0x0D] = 0x01CE,    /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
    1908             :         [512+0x0F] = 0x01D0,    /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
    1909             :         [512+0x11] = 0x01D2,    /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
    1910             :         [512+0x13] = 0x01D4,    /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
    1911             :         [512+0x15] = 0x01D6,    /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
    1912             :         [512+0x17] = 0x01D8,    /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
    1913             :         [512+0x19] = 0x01DA,    /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
    1914             :         [512+0x1B] = 0x01DC,    /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
    1915             :         [512+0x1E] = 0x01DF,    /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
    1916             :         [512+0x20] = 0x01E1,    /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
    1917             :         [512+0x22] = 0x01E3,    /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
    1918             :         [512+0x24] = 0x01E5,    /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
    1919             :         [512+0x26] = 0x01E7,    /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
    1920             :         [512+0x28] = 0x01E9,    /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
    1921             :         [512+0x2A] = 0x01EB,    /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
    1922             :         [512+0x2C] = 0x01ED,    /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
    1923             :         [512+0x2E] = 0x01EF,    /* U+01EE: LATIN CAPITAL LETTER EZH WITH CARON */
    1924             :         [512+0x31] = 0x01F3,    /* U+01F1: LATIN CAPITAL LETTER DZ */
    1925             :         [512+0x32] = 0x01F3,    /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
    1926             :         [512+0x34] = 0x01F5,    /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
    1927             :         [512+0x36] = 0x0195,    /* U+01F6: LATIN CAPITAL LETTER HWAIR */
    1928             :         [512+0x37] = 0x01BF,    /* U+01F7: LATIN CAPITAL LETTER WYNN */
    1929             :         [512+0x38] = 0x01F9,    /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
    1930             :         [512+0x3A] = 0x01FB,    /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
    1931             :         [512+0x3C] = 0x01FD,    /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
    1932             :         [512+0x3E] = 0x01FF,    /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
    1933             :         [0xC8] = 576 - 0x80,    /* 310 ... */
    1934             :         [576+0x00] = 0x0201,    /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
    1935             :         [576+0x02] = 0x0203,    /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
    1936             :         [576+0x04] = 0x0205,    /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
    1937             :         [576+0x06] = 0x0207,    /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
    1938             :         [576+0x08] = 0x0209,    /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
    1939             :         [576+0x0A] = 0x020B,    /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
    1940             :         [576+0x0C] = 0x020D,    /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
    1941             :         [576+0x0E] = 0x020F,    /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
    1942             :         [576+0x10] = 0x0211,    /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
    1943             :         [576+0x12] = 0x0213,    /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
    1944             :         [576+0x14] = 0x0215,    /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
    1945             :         [576+0x16] = 0x0217,    /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
    1946             :         [576+0x18] = 0x0219,    /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
    1947             :         [576+0x1A] = 0x021B,    /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
    1948             :         [576+0x1C] = 0x021D,    /* U+021C: LATIN CAPITAL LETTER YOGH */
    1949             :         [576+0x1E] = 0x021F,    /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
    1950             :         [576+0x20] = 0x019E,    /* U+0220: LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */
    1951             :         [576+0x22] = 0x0223,    /* U+0222: LATIN CAPITAL LETTER OU */
    1952             :         [576+0x24] = 0x0225,    /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
    1953             :         [576+0x26] = 0x0227,    /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
    1954             :         [576+0x28] = 0x0229,    /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
    1955             :         [576+0x2A] = 0x022B,    /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
    1956             :         [576+0x2C] = 0x022D,    /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
    1957             :         [576+0x2E] = 0x022F,    /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
    1958             :         [576+0x30] = 0x0231,    /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
    1959             :         [576+0x32] = 0x0233,    /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
    1960             :         [576+0x3A] = 0x2C65,    /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
    1961             :         [576+0x3B] = 0x023C,    /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
    1962             :         [576+0x3D] = 0x019A,    /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
    1963             :         [576+0x3E] = 0x2C66,    /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
    1964             :         [0xC9] = 640 - 0x80,    /* 311 ... */
    1965             :         [640+0x01] = 0x0242,    /* U+0241: LATIN CAPITAL LETTER GLOTTAL STOP */
    1966             :         [640+0x03] = 0x0180,    /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
    1967             :         [640+0x04] = 0x0289,    /* U+0244: LATIN CAPITAL LETTER U BAR */
    1968             :         [640+0x05] = 0x028C,    /* U+0245: LATIN CAPITAL LETTER TURNED V */
    1969             :         [640+0x06] = 0x0247,    /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
    1970             :         [640+0x08] = 0x0249,    /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
    1971             :         [640+0x0A] = 0x024B,    /* U+024A: LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */
    1972             :         [640+0x0C] = 0x024D,    /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
    1973             :         [640+0x0E] = 0x024F,    /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
    1974             :         [0xCD] = 704 - 0x80,    /* 315 ... */
    1975             :         [704+0x30] = 0x0371,    /* U+0370: GREEK CAPITAL LETTER HETA */
    1976             :         [704+0x32] = 0x0373,    /* U+0372: GREEK CAPITAL LETTER ARCHAIC SAMPI */
    1977             :         [704+0x36] = 0x0377,    /* U+0376: GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */
    1978             :         [704+0x3F] = 0x03F3,    /* U+037F: GREEK CAPITAL LETTER YOT */
    1979             :         [0xCE] = 768 - 0x80,    /* 316 ... */
    1980             :         [768+0x06] = 0x03AC,    /* U+0386: GREEK CAPITAL LETTER ALPHA WITH TONOS */
    1981             :         [768+0x08] = 0x03AD,    /* U+0388: GREEK CAPITAL LETTER EPSILON WITH TONOS */
    1982             :         [768+0x09] = 0x03AE,    /* U+0389: GREEK CAPITAL LETTER ETA WITH TONOS */
    1983             :         [768+0x0A] = 0x03AF,    /* U+038A: GREEK CAPITAL LETTER IOTA WITH TONOS */
    1984             :         [768+0x0C] = 0x03CC,    /* U+038C: GREEK CAPITAL LETTER OMICRON WITH TONOS */
    1985             :         [768+0x0E] = 0x03CD,    /* U+038E: GREEK CAPITAL LETTER UPSILON WITH TONOS */
    1986             :         [768+0x0F] = 0x03CE,    /* U+038F: GREEK CAPITAL LETTER OMEGA WITH TONOS */
    1987             :         [768+0x11] = 0x03B1,    /* U+0391: GREEK CAPITAL LETTER ALPHA */
    1988             :         [768+0x12] = 0x03B2,    /* U+0392: GREEK CAPITAL LETTER BETA */
    1989             :         [768+0x13] = 0x03B3,    /* U+0393: GREEK CAPITAL LETTER GAMMA */
    1990             :         [768+0x14] = 0x03B4,    /* U+0394: GREEK CAPITAL LETTER DELTA */
    1991             :         [768+0x15] = 0x03B5,    /* U+0395: GREEK CAPITAL LETTER EPSILON */
    1992             :         [768+0x16] = 0x03B6,    /* U+0396: GREEK CAPITAL LETTER ZETA */
    1993             :         [768+0x17] = 0x03B7,    /* U+0397: GREEK CAPITAL LETTER ETA */
    1994             :         [768+0x18] = 0x03B8,    /* U+0398: GREEK CAPITAL LETTER THETA */
    1995             :         [768+0x19] = 0x03B9,    /* U+0399: GREEK CAPITAL LETTER IOTA */
    1996             :         [768+0x1A] = 0x03BA,    /* U+039A: GREEK CAPITAL LETTER KAPPA */
    1997             :         [768+0x1B] = 0x03BB,    /* U+039B: GREEK CAPITAL LETTER LAMDA */
    1998             :         [768+0x1C] = 0x03BC,    /* U+039C: GREEK CAPITAL LETTER MU */
    1999             :         [768+0x1D] = 0x03BD,    /* U+039D: GREEK CAPITAL LETTER NU */
    2000             :         [768+0x1E] = 0x03BE,    /* U+039E: GREEK CAPITAL LETTER XI */
    2001             :         [768+0x1F] = 0x03BF,    /* U+039F: GREEK CAPITAL LETTER OMICRON */
    2002             :         [768+0x20] = 0x03C0,    /* U+03A0: GREEK CAPITAL LETTER PI */
    2003             :         [768+0x21] = 0x03C1,    /* U+03A1: GREEK CAPITAL LETTER RHO */
    2004             :         [768+0x23] = 0x03C3,    /* U+03A3: GREEK CAPITAL LETTER SIGMA */
    2005             :         [768+0x24] = 0x03C4,    /* U+03A4: GREEK CAPITAL LETTER TAU */
    2006             :         [768+0x25] = 0x03C5,    /* U+03A5: GREEK CAPITAL LETTER UPSILON */
    2007             :         [768+0x26] = 0x03C6,    /* U+03A6: GREEK CAPITAL LETTER PHI */
    2008             :         [768+0x27] = 0x03C7,    /* U+03A7: GREEK CAPITAL LETTER CHI */
    2009             :         [768+0x28] = 0x03C8,    /* U+03A8: GREEK CAPITAL LETTER PSI */
    2010             :         [768+0x29] = 0x03C9,    /* U+03A9: GREEK CAPITAL LETTER OMEGA */
    2011             :         [768+0x2A] = 0x03CA,    /* U+03AA: GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
    2012             :         [768+0x2B] = 0x03CB,    /* U+03AB: GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
    2013             :         [0xCF] = 832 - 0x80,    /* 317 ... */
    2014             :         [832+0x0F] = 0x03D7,    /* U+03CF: GREEK CAPITAL KAI SYMBOL */
    2015             :         [832+0x18] = 0x03D9,    /* U+03D8: GREEK LETTER ARCHAIC KOPPA */
    2016             :         [832+0x1A] = 0x03DB,    /* U+03DA: GREEK LETTER STIGMA */
    2017             :         [832+0x1C] = 0x03DD,    /* U+03DC: GREEK LETTER DIGAMMA */
    2018             :         [832+0x1E] = 0x03DF,    /* U+03DE: GREEK LETTER KOPPA */
    2019             :         [832+0x20] = 0x03E1,    /* U+03E0: GREEK LETTER SAMPI */
    2020             :         [832+0x22] = 0x03E3,    /* U+03E2: COPTIC CAPITAL LETTER SHEI */
    2021             :         [832+0x24] = 0x03E5,    /* U+03E4: COPTIC CAPITAL LETTER FEI */
    2022             :         [832+0x26] = 0x03E7,    /* U+03E6: COPTIC CAPITAL LETTER KHEI */
    2023             :         [832+0x28] = 0x03E9,    /* U+03E8: COPTIC CAPITAL LETTER HORI */
    2024             :         [832+0x2A] = 0x03EB,    /* U+03EA: COPTIC CAPITAL LETTER GANGIA */
    2025             :         [832+0x2C] = 0x03ED,    /* U+03EC: COPTIC CAPITAL LETTER SHIMA */
    2026             :         [832+0x2E] = 0x03EF,    /* U+03EE: COPTIC CAPITAL LETTER DEI */
    2027             :         [832+0x34] = 0x03B8,    /* U+03F4: GREEK CAPITAL THETA SYMBOL */
    2028             :         [832+0x37] = 0x03F8,    /* U+03F7: GREEK CAPITAL LETTER SHO */
    2029             :         [832+0x39] = 0x03F2,    /* U+03F9: GREEK CAPITAL LUNATE SIGMA SYMBOL */
    2030             :         [832+0x3A] = 0x03FB,    /* U+03FA: GREEK CAPITAL LETTER SAN */
    2031             :         [832+0x3D] = 0x037B,    /* U+03FD: GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */
    2032             :         [832+0x3E] = 0x037C,    /* U+03FE: GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */
    2033             :         [832+0x3F] = 0x037D,    /* U+03FF: GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */
    2034             :         [0xD0] = 896 - 0x80,    /* 320 ... */
    2035             :         [896+0x00] = 0x0450,    /* U+0400: CYRILLIC CAPITAL LETTER IE WITH GRAVE */
    2036             :         [896+0x01] = 0x0451,    /* U+0401: CYRILLIC CAPITAL LETTER IO */
    2037             :         [896+0x02] = 0x0452,    /* U+0402: CYRILLIC CAPITAL LETTER DJE */
    2038             :         [896+0x03] = 0x0453,    /* U+0403: CYRILLIC CAPITAL LETTER GJE */
    2039             :         [896+0x04] = 0x0454,    /* U+0404: CYRILLIC CAPITAL LETTER UKRAINIAN IE */
    2040             :         [896+0x05] = 0x0455,    /* U+0405: CYRILLIC CAPITAL LETTER DZE */
    2041             :         [896+0x06] = 0x0456,    /* U+0406: CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
    2042             :         [896+0x07] = 0x0457,    /* U+0407: CYRILLIC CAPITAL LETTER YI */
    2043             :         [896+0x08] = 0x0458,    /* U+0408: CYRILLIC CAPITAL LETTER JE */
    2044             :         [896+0x09] = 0x0459,    /* U+0409: CYRILLIC CAPITAL LETTER LJE */
    2045             :         [896+0x0A] = 0x045A,    /* U+040A: CYRILLIC CAPITAL LETTER NJE */
    2046             :         [896+0x0B] = 0x045B,    /* U+040B: CYRILLIC CAPITAL LETTER TSHE */
    2047             :         [896+0x0C] = 0x045C,    /* U+040C: CYRILLIC CAPITAL LETTER KJE */
    2048             :         [896+0x0D] = 0x045D,    /* U+040D: CYRILLIC CAPITAL LETTER I WITH GRAVE */
    2049             :         [896+0x0E] = 0x045E,    /* U+040E: CYRILLIC CAPITAL LETTER SHORT U */
    2050             :         [896+0x0F] = 0x045F,    /* U+040F: CYRILLIC CAPITAL LETTER DZHE */
    2051             :         [896+0x10] = 0x0430,    /* U+0410: CYRILLIC CAPITAL LETTER A */
    2052             :         [896+0x11] = 0x0431,    /* U+0411: CYRILLIC CAPITAL LETTER BE */
    2053             :         [896+0x12] = 0x0432,    /* U+0412: CYRILLIC CAPITAL LETTER VE */
    2054             :         [896+0x13] = 0x0433,    /* U+0413: CYRILLIC CAPITAL LETTER GHE */
    2055             :         [896+0x14] = 0x0434,    /* U+0414: CYRILLIC CAPITAL LETTER DE */
    2056             :         [896+0x15] = 0x0435,    /* U+0415: CYRILLIC CAPITAL LETTER IE */
    2057             :         [896+0x16] = 0x0436,    /* U+0416: CYRILLIC CAPITAL LETTER ZHE */
    2058             :         [896+0x17] = 0x0437,    /* U+0417: CYRILLIC CAPITAL LETTER ZE */
    2059             :         [896+0x18] = 0x0438,    /* U+0418: CYRILLIC CAPITAL LETTER I */
    2060             :         [896+0x19] = 0x0439,    /* U+0419: CYRILLIC CAPITAL LETTER SHORT I */
    2061             :         [896+0x1A] = 0x043A,    /* U+041A: CYRILLIC CAPITAL LETTER KA */
    2062             :         [896+0x1B] = 0x043B,    /* U+041B: CYRILLIC CAPITAL LETTER EL */
    2063             :         [896+0x1C] = 0x043C,    /* U+041C: CYRILLIC CAPITAL LETTER EM */
    2064             :         [896+0x1D] = 0x043D,    /* U+041D: CYRILLIC CAPITAL LETTER EN */
    2065             :         [896+0x1E] = 0x043E,    /* U+041E: CYRILLIC CAPITAL LETTER O */
    2066             :         [896+0x1F] = 0x043F,    /* U+041F: CYRILLIC CAPITAL LETTER PE */
    2067             :         [896+0x20] = 0x0440,    /* U+0420: CYRILLIC CAPITAL LETTER ER */
    2068             :         [896+0x21] = 0x0441,    /* U+0421: CYRILLIC CAPITAL LETTER ES */
    2069             :         [896+0x22] = 0x0442,    /* U+0422: CYRILLIC CAPITAL LETTER TE */
    2070             :         [896+0x23] = 0x0443,    /* U+0423: CYRILLIC CAPITAL LETTER U */
    2071             :         [896+0x24] = 0x0444,    /* U+0424: CYRILLIC CAPITAL LETTER EF */
    2072             :         [896+0x25] = 0x0445,    /* U+0425: CYRILLIC CAPITAL LETTER HA */
    2073             :         [896+0x26] = 0x0446,    /* U+0426: CYRILLIC CAPITAL LETTER TSE */
    2074             :         [896+0x27] = 0x0447,    /* U+0427: CYRILLIC CAPITAL LETTER CHE */
    2075             :         [896+0x28] = 0x0448,    /* U+0428: CYRILLIC CAPITAL LETTER SHA */
    2076             :         [896+0x29] = 0x0449,    /* U+0429: CYRILLIC CAPITAL LETTER SHCHA */
    2077             :         [896+0x2A] = 0x044A,    /* U+042A: CYRILLIC CAPITAL LETTER HARD SIGN */
    2078             :         [896+0x2B] = 0x044B,    /* U+042B: CYRILLIC CAPITAL LETTER YERU */
    2079             :         [896+0x2C] = 0x044C,    /* U+042C: CYRILLIC CAPITAL LETTER SOFT SIGN */
    2080             :         [896+0x2D] = 0x044D,    /* U+042D: CYRILLIC CAPITAL LETTER E */
    2081             :         [896+0x2E] = 0x044E,    /* U+042E: CYRILLIC CAPITAL LETTER YU */
    2082             :         [896+0x2F] = 0x044F,    /* U+042F: CYRILLIC CAPITAL LETTER YA */
    2083             :         [0xD1] = 960 - 0x80,    /* 321 ... */
    2084             :         [960+0x20] = 0x0461,    /* U+0460: CYRILLIC CAPITAL LETTER OMEGA */
    2085             :         [960+0x22] = 0x0463,    /* U+0462: CYRILLIC CAPITAL LETTER YAT */
    2086             :         [960+0x24] = 0x0465,    /* U+0464: CYRILLIC CAPITAL LETTER IOTIFIED E */
    2087             :         [960+0x26] = 0x0467,    /* U+0466: CYRILLIC CAPITAL LETTER LITTLE YUS */
    2088             :         [960+0x28] = 0x0469,    /* U+0468: CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */
    2089             :         [960+0x2A] = 0x046B,    /* U+046A: CYRILLIC CAPITAL LETTER BIG YUS */
    2090             :         [960+0x2C] = 0x046D,    /* U+046C: CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */
    2091             :         [960+0x2E] = 0x046F,    /* U+046E: CYRILLIC CAPITAL LETTER KSI */
    2092             :         [960+0x30] = 0x0471,    /* U+0470: CYRILLIC CAPITAL LETTER PSI */
    2093             :         [960+0x32] = 0x0473,    /* U+0472: CYRILLIC CAPITAL LETTER FITA */
    2094             :         [960+0x34] = 0x0475,    /* U+0474: CYRILLIC CAPITAL LETTER IZHITSA */
    2095             :         [960+0x36] = 0x0477,    /* U+0476: CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
    2096             :         [960+0x38] = 0x0479,    /* U+0478: CYRILLIC CAPITAL LETTER UK */
    2097             :         [960+0x3A] = 0x047B,    /* U+047A: CYRILLIC CAPITAL LETTER ROUND OMEGA */
    2098             :         [960+0x3C] = 0x047D,    /* U+047C: CYRILLIC CAPITAL LETTER OMEGA WITH TITLO */
    2099             :         [960+0x3E] = 0x047F,    /* U+047E: CYRILLIC CAPITAL LETTER OT */
    2100             :         [0xD2] = 1024 - 0x80,   /* 322 ... */
    2101             :         [1024+0x00] = 0x0481,   /* U+0480: CYRILLIC CAPITAL LETTER KOPPA */
    2102             :         [1024+0x0A] = 0x048B,   /* U+048A: CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */
    2103             :         [1024+0x0C] = 0x048D,   /* U+048C: CYRILLIC CAPITAL LETTER SEMISOFT SIGN */
    2104             :         [1024+0x0E] = 0x048F,   /* U+048E: CYRILLIC CAPITAL LETTER ER WITH TICK */
    2105             :         [1024+0x10] = 0x0491,   /* U+0490: CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
    2106             :         [1024+0x12] = 0x0493,   /* U+0492: CYRILLIC CAPITAL LETTER GHE WITH STROKE */
    2107             :         [1024+0x14] = 0x0495,   /* U+0494: CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK */
    2108             :         [1024+0x16] = 0x0497,   /* U+0496: CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
    2109             :         [1024+0x18] = 0x0499,   /* U+0498: CYRILLIC CAPITAL LETTER ZE WITH DESCENDER */
    2110             :         [1024+0x1A] = 0x049B,   /* U+049A: CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
    2111             :         [1024+0x1C] = 0x049D,   /* U+049C: CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
    2112             :         [1024+0x1E] = 0x049F,   /* U+049E: CYRILLIC CAPITAL LETTER KA WITH STROKE */
    2113             :         [1024+0x20] = 0x04A1,   /* U+04A0: CYRILLIC CAPITAL LETTER BASHKIR KA */
    2114             :         [1024+0x22] = 0x04A3,   /* U+04A2: CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
    2115             :         [1024+0x24] = 0x04A5,   /* U+04A4: CYRILLIC CAPITAL LIGATURE EN GHE */
    2116             :         [1024+0x26] = 0x04A7,   /* U+04A6: CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK */
    2117             :         [1024+0x28] = 0x04A9,   /* U+04A8: CYRILLIC CAPITAL LETTER ABKHASIAN HA */
    2118             :         [1024+0x2A] = 0x04AB,   /* U+04AA: CYRILLIC CAPITAL LETTER ES WITH DESCENDER */
    2119             :         [1024+0x2C] = 0x04AD,   /* U+04AC: CYRILLIC CAPITAL LETTER TE WITH DESCENDER */
    2120             :         [1024+0x2E] = 0x04AF,   /* U+04AE: CYRILLIC CAPITAL LETTER STRAIGHT U */
    2121             :         [1024+0x30] = 0x04B1,   /* U+04B0: CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
    2122             :         [1024+0x32] = 0x04B3,   /* U+04B2: CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
    2123             :         [1024+0x34] = 0x04B5,   /* U+04B4: CYRILLIC CAPITAL LIGATURE TE TSE */
    2124             :         [1024+0x36] = 0x04B7,   /* U+04B6: CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
    2125             :         [1024+0x38] = 0x04B9,   /* U+04B8: CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
    2126             :         [1024+0x3A] = 0x04BB,   /* U+04BA: CYRILLIC CAPITAL LETTER SHHA */
    2127             :         [1024+0x3C] = 0x04BD,   /* U+04BC: CYRILLIC CAPITAL LETTER ABKHASIAN CHE */
    2128             :         [1024+0x3E] = 0x04BF,   /* U+04BE: CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER */
    2129             :         [0xD3] = 1088 - 0x80,   /* 323 ... */
    2130             :         [1088+0x00] = 0x04CF,   /* U+04C0: CYRILLIC LETTER PALOCHKA */
    2131             :         [1088+0x01] = 0x04C2,   /* U+04C1: CYRILLIC CAPITAL LETTER ZHE WITH BREVE */
    2132             :         [1088+0x03] = 0x04C4,   /* U+04C3: CYRILLIC CAPITAL LETTER KA WITH HOOK */
    2133             :         [1088+0x05] = 0x04C6,   /* U+04C5: CYRILLIC CAPITAL LETTER EL WITH TAIL */
    2134             :         [1088+0x07] = 0x04C8,   /* U+04C7: CYRILLIC CAPITAL LETTER EN WITH HOOK */
    2135             :         [1088+0x09] = 0x04CA,   /* U+04C9: CYRILLIC CAPITAL LETTER EN WITH TAIL */
    2136             :         [1088+0x0B] = 0x04CC,   /* U+04CB: CYRILLIC CAPITAL LETTER KHAKASSIAN CHE */
    2137             :         [1088+0x0D] = 0x04CE,   /* U+04CD: CYRILLIC CAPITAL LETTER EM WITH TAIL */
    2138             :         [1088+0x10] = 0x04D1,   /* U+04D0: CYRILLIC CAPITAL LETTER A WITH BREVE */
    2139             :         [1088+0x12] = 0x04D3,   /* U+04D2: CYRILLIC CAPITAL LETTER A WITH DIAERESIS */
    2140             :         [1088+0x14] = 0x04D5,   /* U+04D4: CYRILLIC CAPITAL LIGATURE A IE */
    2141             :         [1088+0x16] = 0x04D7,   /* U+04D6: CYRILLIC CAPITAL LETTER IE WITH BREVE */
    2142             :         [1088+0x18] = 0x04D9,   /* U+04D8: CYRILLIC CAPITAL LETTER SCHWA */
    2143             :         [1088+0x1A] = 0x04DB,   /* U+04DA: CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
    2144             :         [1088+0x1C] = 0x04DD,   /* U+04DC: CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */
    2145             :         [1088+0x1E] = 0x04DF,   /* U+04DE: CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */
    2146             :         [1088+0x20] = 0x04E1,   /* U+04E0: CYRILLIC CAPITAL LETTER ABKHASIAN DZE */
    2147             :         [1088+0x22] = 0x04E3,   /* U+04E2: CYRILLIC CAPITAL LETTER I WITH MACRON */
    2148             :         [1088+0x24] = 0x04E5,   /* U+04E4: CYRILLIC CAPITAL LETTER I WITH DIAERESIS */
    2149             :         [1088+0x26] = 0x04E7,   /* U+04E6: CYRILLIC CAPITAL LETTER O WITH DIAERESIS */
    2150             :         [1088+0x28] = 0x04E9,   /* U+04E8: CYRILLIC CAPITAL LETTER BARRED O */
    2151             :         [1088+0x2A] = 0x04EB,   /* U+04EA: CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
    2152             :         [1088+0x2C] = 0x04ED,   /* U+04EC: CYRILLIC CAPITAL LETTER E WITH DIAERESIS */
    2153             :         [1088+0x2E] = 0x04EF,   /* U+04EE: CYRILLIC CAPITAL LETTER U WITH MACRON */
    2154             :         [1088+0x30] = 0x04F1,   /* U+04F0: CYRILLIC CAPITAL LETTER U WITH DIAERESIS */
    2155             :         [1088+0x32] = 0x04F3,   /* U+04F2: CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */
    2156             :         [1088+0x34] = 0x04F5,   /* U+04F4: CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */
    2157             :         [1088+0x36] = 0x04F7,   /* U+04F6: CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */
    2158             :         [1088+0x38] = 0x04F9,   /* U+04F8: CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */
    2159             :         [1088+0x3A] = 0x04FB,   /* U+04FA: CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */
    2160             :         [1088+0x3C] = 0x04FD,   /* U+04FC: CYRILLIC CAPITAL LETTER HA WITH HOOK */
    2161             :         [1088+0x3E] = 0x04FF,   /* U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE */
    2162             :         [0xD4] = 1152 - 0x80,   /* 324 ... */
    2163             :         [1152+0x00] = 0x0501,   /* U+0500: CYRILLIC CAPITAL LETTER KOMI DE */
    2164             :         [1152+0x02] = 0x0503,   /* U+0502: CYRILLIC CAPITAL LETTER KOMI DJE */
    2165             :         [1152+0x04] = 0x0505,   /* U+0504: CYRILLIC CAPITAL LETTER KOMI ZJE */
    2166             :         [1152+0x06] = 0x0507,   /* U+0506: CYRILLIC CAPITAL LETTER KOMI DZJE */
    2167             :         [1152+0x08] = 0x0509,   /* U+0508: CYRILLIC CAPITAL LETTER KOMI LJE */
    2168             :         [1152+0x0A] = 0x050B,   /* U+050A: CYRILLIC CAPITAL LETTER KOMI NJE */
    2169             :         [1152+0x0C] = 0x050D,   /* U+050C: CYRILLIC CAPITAL LETTER KOMI SJE */
    2170             :         [1152+0x0E] = 0x050F,   /* U+050E: CYRILLIC CAPITAL LETTER KOMI TJE */
    2171             :         [1152+0x10] = 0x0511,   /* U+0510: CYRILLIC CAPITAL LETTER REVERSED ZE */
    2172             :         [1152+0x12] = 0x0513,   /* U+0512: CYRILLIC CAPITAL LETTER EL WITH HOOK */
    2173             :         [1152+0x14] = 0x0515,   /* U+0514: CYRILLIC CAPITAL LETTER LHA */
    2174             :         [1152+0x16] = 0x0517,   /* U+0516: CYRILLIC CAPITAL LETTER RHA */
    2175             :         [1152+0x18] = 0x0519,   /* U+0518: CYRILLIC CAPITAL LETTER YAE */
    2176             :         [1152+0x1A] = 0x051B,   /* U+051A: CYRILLIC CAPITAL LETTER QA */
    2177             :         [1152+0x1C] = 0x051D,   /* U+051C: CYRILLIC CAPITAL LETTER WE */
    2178             :         [1152+0x1E] = 0x051F,   /* U+051E: CYRILLIC CAPITAL LETTER ALEUT KA */
    2179             :         [1152+0x20] = 0x0521,   /* U+0520: CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */
    2180             :         [1152+0x22] = 0x0523,   /* U+0522: CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */
    2181             :         [1152+0x24] = 0x0525,   /* U+0524: CYRILLIC CAPITAL LETTER PE WITH DESCENDER */
    2182             :         [1152+0x26] = 0x0527,   /* U+0526: CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */
    2183             :         [1152+0x28] = 0x0529,   /* U+0528: CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */
    2184             :         [1152+0x2A] = 0x052B,   /* U+052A: CYRILLIC CAPITAL LETTER DZZHE */
    2185             :         [1152+0x2C] = 0x052D,   /* U+052C: CYRILLIC CAPITAL LETTER DCHE */
    2186             :         [1152+0x2E] = 0x052F,   /* U+052E: CYRILLIC CAPITAL LETTER EL WITH DESCENDER */
    2187             :         [1152+0x31] = 0x0561,   /* U+0531: ARMENIAN CAPITAL LETTER AYB */
    2188             :         [1152+0x32] = 0x0562,   /* U+0532: ARMENIAN CAPITAL LETTER BEN */
    2189             :         [1152+0x33] = 0x0563,   /* U+0533: ARMENIAN CAPITAL LETTER GIM */
    2190             :         [1152+0x34] = 0x0564,   /* U+0534: ARMENIAN CAPITAL LETTER DA */
    2191             :         [1152+0x35] = 0x0565,   /* U+0535: ARMENIAN CAPITAL LETTER ECH */
    2192             :         [1152+0x36] = 0x0566,   /* U+0536: ARMENIAN CAPITAL LETTER ZA */
    2193             :         [1152+0x37] = 0x0567,   /* U+0537: ARMENIAN CAPITAL LETTER EH */
    2194             :         [1152+0x38] = 0x0568,   /* U+0538: ARMENIAN CAPITAL LETTER ET */
    2195             :         [1152+0x39] = 0x0569,   /* U+0539: ARMENIAN CAPITAL LETTER TO */
    2196             :         [1152+0x3A] = 0x056A,   /* U+053A: ARMENIAN CAPITAL LETTER ZHE */
    2197             :         [1152+0x3B] = 0x056B,   /* U+053B: ARMENIAN CAPITAL LETTER INI */
    2198             :         [1152+0x3C] = 0x056C,   /* U+053C: ARMENIAN CAPITAL LETTER LIWN */
    2199             :         [1152+0x3D] = 0x056D,   /* U+053D: ARMENIAN CAPITAL LETTER XEH */
    2200             :         [1152+0x3E] = 0x056E,   /* U+053E: ARMENIAN CAPITAL LETTER CA */
    2201             :         [1152+0x3F] = 0x056F,   /* U+053F: ARMENIAN CAPITAL LETTER KEN */
    2202             :         [0xD5] = 1216 - 0x80,   /* 325 ... */
    2203             :         [1216+0x00] = 0x0570,   /* U+0540: ARMENIAN CAPITAL LETTER HO */
    2204             :         [1216+0x01] = 0x0571,   /* U+0541: ARMENIAN CAPITAL LETTER JA */
    2205             :         [1216+0x02] = 0x0572,   /* U+0542: ARMENIAN CAPITAL LETTER GHAD */
    2206             :         [1216+0x03] = 0x0573,   /* U+0543: ARMENIAN CAPITAL LETTER CHEH */
    2207             :         [1216+0x04] = 0x0574,   /* U+0544: ARMENIAN CAPITAL LETTER MEN */
    2208             :         [1216+0x05] = 0x0575,   /* U+0545: ARMENIAN CAPITAL LETTER YI */
    2209             :         [1216+0x06] = 0x0576,   /* U+0546: ARMENIAN CAPITAL LETTER NOW */
    2210             :         [1216+0x07] = 0x0577,   /* U+0547: ARMENIAN CAPITAL LETTER SHA */
    2211             :         [1216+0x08] = 0x0578,   /* U+0548: ARMENIAN CAPITAL LETTER VO */
    2212             :         [1216+0x09] = 0x0579,   /* U+0549: ARMENIAN CAPITAL LETTER CHA */
    2213             :         [1216+0x0A] = 0x057A,   /* U+054A: ARMENIAN CAPITAL LETTER PEH */
    2214             :         [1216+0x0B] = 0x057B,   /* U+054B: ARMENIAN CAPITAL LETTER JHEH */
    2215             :         [1216+0x0C] = 0x057C,   /* U+054C: ARMENIAN CAPITAL LETTER RA */
    2216             :         [1216+0x0D] = 0x057D,   /* U+054D: ARMENIAN CAPITAL LETTER SEH */
    2217             :         [1216+0x0E] = 0x057E,   /* U+054E: ARMENIAN CAPITAL LETTER VEW */
    2218             :         [1216+0x0F] = 0x057F,   /* U+054F: ARMENIAN CAPITAL LETTER TIWN */
    2219             :         [1216+0x10] = 0x0580,   /* U+0550: ARMENIAN CAPITAL LETTER REH */
    2220             :         [1216+0x11] = 0x0581,   /* U+0551: ARMENIAN CAPITAL LETTER CO */
    2221             :         [1216+0x12] = 0x0582,   /* U+0552: ARMENIAN CAPITAL LETTER YIWN */
    2222             :         [1216+0x13] = 0x0583,   /* U+0553: ARMENIAN CAPITAL LETTER PIWR */
    2223             :         [1216+0x14] = 0x0584,   /* U+0554: ARMENIAN CAPITAL LETTER KEH */
    2224             :         [1216+0x15] = 0x0585,   /* U+0555: ARMENIAN CAPITAL LETTER OH */
    2225             :         [1216+0x16] = 0x0586,   /* U+0556: ARMENIAN CAPITAL LETTER FEH */
    2226             :         [0xE1] = 1280 - 0x80,   /* 341 ... */
    2227             :         [1280+0x02] = 1344 - 0x80,      /* 341 202 ... */
    2228             :         [1344+0x20] = 0x2D00,   /* U+10A0: GEORGIAN CAPITAL LETTER AN */
    2229             :         [1344+0x21] = 0x2D01,   /* U+10A1: GEORGIAN CAPITAL LETTER BAN */
    2230             :         [1344+0x22] = 0x2D02,   /* U+10A2: GEORGIAN CAPITAL LETTER GAN */
    2231             :         [1344+0x23] = 0x2D03,   /* U+10A3: GEORGIAN CAPITAL LETTER DON */
    2232             :         [1344+0x24] = 0x2D04,   /* U+10A4: GEORGIAN CAPITAL LETTER EN */
    2233             :         [1344+0x25] = 0x2D05,   /* U+10A5: GEORGIAN CAPITAL LETTER VIN */
    2234             :         [1344+0x26] = 0x2D06,   /* U+10A6: GEORGIAN CAPITAL LETTER ZEN */
    2235             :         [1344+0x27] = 0x2D07,   /* U+10A7: GEORGIAN CAPITAL LETTER TAN */
    2236             :         [1344+0x28] = 0x2D08,   /* U+10A8: GEORGIAN CAPITAL LETTER IN */
    2237             :         [1344+0x29] = 0x2D09,   /* U+10A9: GEORGIAN CAPITAL LETTER KAN */
    2238             :         [1344+0x2A] = 0x2D0A,   /* U+10AA: GEORGIAN CAPITAL LETTER LAS */
    2239             :         [1344+0x2B] = 0x2D0B,   /* U+10AB: GEORGIAN CAPITAL LETTER MAN */
    2240             :         [1344+0x2C] = 0x2D0C,   /* U+10AC: GEORGIAN CAPITAL LETTER NAR */
    2241             :         [1344+0x2D] = 0x2D0D,   /* U+10AD: GEORGIAN CAPITAL LETTER ON */
    2242             :         [1344+0x2E] = 0x2D0E,   /* U+10AE: GEORGIAN CAPITAL LETTER PAR */
    2243             :         [1344+0x2F] = 0x2D0F,   /* U+10AF: GEORGIAN CAPITAL LETTER ZHAR */
    2244             :         [1344+0x30] = 0x2D10,   /* U+10B0: GEORGIAN CAPITAL LETTER RAE */
    2245             :         [1344+0x31] = 0x2D11,   /* U+10B1: GEORGIAN CAPITAL LETTER SAN */
    2246             :         [1344+0x32] = 0x2D12,   /* U+10B2: GEORGIAN CAPITAL LETTER TAR */
    2247             :         [1344+0x33] = 0x2D13,   /* U+10B3: GEORGIAN CAPITAL LETTER UN */
    2248             :         [1344+0x34] = 0x2D14,   /* U+10B4: GEORGIAN CAPITAL LETTER PHAR */
    2249             :         [1344+0x35] = 0x2D15,   /* U+10B5: GEORGIAN CAPITAL LETTER KHAR */
    2250             :         [1344+0x36] = 0x2D16,   /* U+10B6: GEORGIAN CAPITAL LETTER GHAN */
    2251             :         [1344+0x37] = 0x2D17,   /* U+10B7: GEORGIAN CAPITAL LETTER QAR */
    2252             :         [1344+0x38] = 0x2D18,   /* U+10B8: GEORGIAN CAPITAL LETTER SHIN */
    2253             :         [1344+0x39] = 0x2D19,   /* U+10B9: GEORGIAN CAPITAL LETTER CHIN */
    2254             :         [1344+0x3A] = 0x2D1A,   /* U+10BA: GEORGIAN CAPITAL LETTER CAN */
    2255             :         [1344+0x3B] = 0x2D1B,   /* U+10BB: GEORGIAN CAPITAL LETTER JIL */
    2256             :         [1344+0x3C] = 0x2D1C,   /* U+10BC: GEORGIAN CAPITAL LETTER CIL */
    2257             :         [1344+0x3D] = 0x2D1D,   /* U+10BD: GEORGIAN CAPITAL LETTER CHAR */
    2258             :         [1344+0x3E] = 0x2D1E,   /* U+10BE: GEORGIAN CAPITAL LETTER XAN */
    2259             :         [1344+0x3F] = 0x2D1F,   /* U+10BF: GEORGIAN CAPITAL LETTER JHAN */
    2260             :         [1280+0x03] = 1408 - 0x80,      /* 341 203 ... */
    2261             :         [1408+0x00] = 0x2D20,   /* U+10C0: GEORGIAN CAPITAL LETTER HAE */
    2262             :         [1408+0x01] = 0x2D21,   /* U+10C1: GEORGIAN CAPITAL LETTER HE */
    2263             :         [1408+0x02] = 0x2D22,   /* U+10C2: GEORGIAN CAPITAL LETTER HIE */
    2264             :         [1408+0x03] = 0x2D23,   /* U+10C3: GEORGIAN CAPITAL LETTER WE */
    2265             :         [1408+0x04] = 0x2D24,   /* U+10C4: GEORGIAN CAPITAL LETTER HAR */
    2266             :         [1408+0x05] = 0x2D25,   /* U+10C5: GEORGIAN CAPITAL LETTER HOE */
    2267             :         [1408+0x07] = 0x2D27,   /* U+10C7: GEORGIAN CAPITAL LETTER YN */
    2268             :         [1408+0x0D] = 0x2D2D,   /* U+10CD: GEORGIAN CAPITAL LETTER AEN */
    2269             :         [1280+0x0E] = 1472 - 0x80,      /* 341 216 ... */
    2270             :         [1472+0x20] = 0xAB70,   /* U+13A0: CHEROKEE LETTER A */
    2271             :         [1472+0x21] = 0xAB71,   /* U+13A1: CHEROKEE LETTER E */
    2272             :         [1472+0x22] = 0xAB72,   /* U+13A2: CHEROKEE LETTER I */
    2273             :         [1472+0x23] = 0xAB73,   /* U+13A3: CHEROKEE LETTER O */
    2274             :         [1472+0x24] = 0xAB74,   /* U+13A4: CHEROKEE LETTER U */
    2275             :         [1472+0x25] = 0xAB75,   /* U+13A5: CHEROKEE LETTER V */
    2276             :         [1472+0x26] = 0xAB76,   /* U+13A6: CHEROKEE LETTER GA */
    2277             :         [1472+0x27] = 0xAB77,   /* U+13A7: CHEROKEE LETTER KA */
    2278             :         [1472+0x28] = 0xAB78,   /* U+13A8: CHEROKEE LETTER GE */
    2279             :         [1472+0x29] = 0xAB79,   /* U+13A9: CHEROKEE LETTER GI */
    2280             :         [1472+0x2A] = 0xAB7A,   /* U+13AA: CHEROKEE LETTER GO */
    2281             :         [1472+0x2B] = 0xAB7B,   /* U+13AB: CHEROKEE LETTER GU */
    2282             :         [1472+0x2C] = 0xAB7C,   /* U+13AC: CHEROKEE LETTER GV */
    2283             :         [1472+0x2D] = 0xAB7D,   /* U+13AD: CHEROKEE LETTER HA */
    2284             :         [1472+0x2E] = 0xAB7E,   /* U+13AE: CHEROKEE LETTER HE */
    2285             :         [1472+0x2F] = 0xAB7F,   /* U+13AF: CHEROKEE LETTER HI */
    2286             :         [1472+0x30] = 0xAB80,   /* U+13B0: CHEROKEE LETTER HO */
    2287             :         [1472+0x31] = 0xAB81,   /* U+13B1: CHEROKEE LETTER HU */
    2288             :         [1472+0x32] = 0xAB82,   /* U+13B2: CHEROKEE LETTER HV */
    2289             :         [1472+0x33] = 0xAB83,   /* U+13B3: CHEROKEE LETTER LA */
    2290             :         [1472+0x34] = 0xAB84,   /* U+13B4: CHEROKEE LETTER LE */
    2291             :         [1472+0x35] = 0xAB85,   /* U+13B5: CHEROKEE LETTER LI */
    2292             :         [1472+0x36] = 0xAB86,   /* U+13B6: CHEROKEE LETTER LO */
    2293             :         [1472+0x37] = 0xAB87,   /* U+13B7: CHEROKEE LETTER LU */
    2294             :         [1472+0x38] = 0xAB88,   /* U+13B8: CHEROKEE LETTER LV */
    2295             :         [1472+0x39] = 0xAB89,   /* U+13B9: CHEROKEE LETTER MA */
    2296             :         [1472+0x3A] = 0xAB8A,   /* U+13BA: CHEROKEE LETTER ME */
    2297             :         [1472+0x3B] = 0xAB8B,   /* U+13BB: CHEROKEE LETTER MI */
    2298             :         [1472+0x3C] = 0xAB8C,   /* U+13BC: CHEROKEE LETTER MO */
    2299             :         [1472+0x3D] = 0xAB8D,   /* U+13BD: CHEROKEE LETTER MU */
    2300             :         [1472+0x3E] = 0xAB8E,   /* U+13BE: CHEROKEE LETTER NA */
    2301             :         [1472+0x3F] = 0xAB8F,   /* U+13BF: CHEROKEE LETTER HNA */
    2302             :         [1280+0x0F] = 1536 - 0x80,      /* 341 217 ... */
    2303             :         [1536+0x00] = 0xAB90,   /* U+13C0: CHEROKEE LETTER NAH */
    2304             :         [1536+0x01] = 0xAB91,   /* U+13C1: CHEROKEE LETTER NE */
    2305             :         [1536+0x02] = 0xAB92,   /* U+13C2: CHEROKEE LETTER NI */
    2306             :         [1536+0x03] = 0xAB93,   /* U+13C3: CHEROKEE LETTER NO */
    2307             :         [1536+0x04] = 0xAB94,   /* U+13C4: CHEROKEE LETTER NU */
    2308             :         [1536+0x05] = 0xAB95,   /* U+13C5: CHEROKEE LETTER NV */
    2309             :         [1536+0x06] = 0xAB96,   /* U+13C6: CHEROKEE LETTER QUA */
    2310             :         [1536+0x07] = 0xAB97,   /* U+13C7: CHEROKEE LETTER QUE */
    2311             :         [1536+0x08] = 0xAB98,   /* U+13C8: CHEROKEE LETTER QUI */
    2312             :         [1536+0x09] = 0xAB99,   /* U+13C9: CHEROKEE LETTER QUO */
    2313             :         [1536+0x0A] = 0xAB9A,   /* U+13CA: CHEROKEE LETTER QUU */
    2314             :         [1536+0x0B] = 0xAB9B,   /* U+13CB: CHEROKEE LETTER QUV */
    2315             :         [1536+0x0C] = 0xAB9C,   /* U+13CC: CHEROKEE LETTER SA */
    2316             :         [1536+0x0D] = 0xAB9D,   /* U+13CD: CHEROKEE LETTER S */
    2317             :         [1536+0x0E] = 0xAB9E,   /* U+13CE: CHEROKEE LETTER SE */
    2318             :         [1536+0x0F] = 0xAB9F,   /* U+13CF: CHEROKEE LETTER SI */
    2319             :         [1536+0x10] = 0xABA0,   /* U+13D0: CHEROKEE LETTER SO */
    2320             :         [1536+0x11] = 0xABA1,   /* U+13D1: CHEROKEE LETTER SU */
    2321             :         [1536+0x12] = 0xABA2,   /* U+13D2: CHEROKEE LETTER SV */
    2322             :         [1536+0x13] = 0xABA3,   /* U+13D3: CHEROKEE LETTER DA */
    2323             :         [1536+0x14] = 0xABA4,   /* U+13D4: CHEROKEE LETTER TA */
    2324             :         [1536+0x15] = 0xABA5,   /* U+13D5: CHEROKEE LETTER DE */
    2325             :         [1536+0x16] = 0xABA6,   /* U+13D6: CHEROKEE LETTER TE */
    2326             :         [1536+0x17] = 0xABA7,   /* U+13D7: CHEROKEE LETTER DI */
    2327             :         [1536+0x18] = 0xABA8,   /* U+13D8: CHEROKEE LETTER TI */
    2328             :         [1536+0x19] = 0xABA9,   /* U+13D9: CHEROKEE LETTER DO */
    2329             :         [1536+0x1A] = 0xABAA,   /* U+13DA: CHEROKEE LETTER DU */
    2330             :         [1536+0x1B] = 0xABAB,   /* U+13DB: CHEROKEE LETTER DV */
    2331             :         [1536+0x1C] = 0xABAC,   /* U+13DC: CHEROKEE LETTER DLA */
    2332             :         [1536+0x1D] = 0xABAD,   /* U+13DD: CHEROKEE LETTER TLA */
    2333             :         [1536+0x1E] = 0xABAE,   /* U+13DE: CHEROKEE LETTER TLE */
    2334             :         [1536+0x1F] = 0xABAF,   /* U+13DF: CHEROKEE LETTER TLI */
    2335             :         [1536+0x20] = 0xABB0,   /* U+13E0: CHEROKEE LETTER TLO */
    2336             :         [1536+0x21] = 0xABB1,   /* U+13E1: CHEROKEE LETTER TLU */
    2337             :         [1536+0x22] = 0xABB2,   /* U+13E2: CHEROKEE LETTER TLV */
    2338             :         [1536+0x23] = 0xABB3,   /* U+13E3: CHEROKEE LETTER TSA */
    2339             :         [1536+0x24] = 0xABB4,   /* U+13E4: CHEROKEE LETTER TSE */
    2340             :         [1536+0x25] = 0xABB5,   /* U+13E5: CHEROKEE LETTER TSI */
    2341             :         [1536+0x26] = 0xABB6,   /* U+13E6: CHEROKEE LETTER TSO */
    2342             :         [1536+0x27] = 0xABB7,   /* U+13E7: CHEROKEE LETTER TSU */
    2343             :         [1536+0x28] = 0xABB8,   /* U+13E8: CHEROKEE LETTER TSV */
    2344             :         [1536+0x29] = 0xABB9,   /* U+13E9: CHEROKEE LETTER WA */
    2345             :         [1536+0x2A] = 0xABBA,   /* U+13EA: CHEROKEE LETTER WE */
    2346             :         [1536+0x2B] = 0xABBB,   /* U+13EB: CHEROKEE LETTER WI */
    2347             :         [1536+0x2C] = 0xABBC,   /* U+13EC: CHEROKEE LETTER WO */
    2348             :         [1536+0x2D] = 0xABBD,   /* U+13ED: CHEROKEE LETTER WU */
    2349             :         [1536+0x2E] = 0xABBE,   /* U+13EE: CHEROKEE LETTER WV */
    2350             :         [1536+0x2F] = 0xABBF,   /* U+13EF: CHEROKEE LETTER YA */
    2351             :         [1536+0x30] = 0x13F8,   /* U+13F0: CHEROKEE LETTER YE */
    2352             :         [1536+0x31] = 0x13F9,   /* U+13F1: CHEROKEE LETTER YI */
    2353             :         [1536+0x32] = 0x13FA,   /* U+13F2: CHEROKEE LETTER YO */
    2354             :         [1536+0x33] = 0x13FB,   /* U+13F3: CHEROKEE LETTER YU */
    2355             :         [1536+0x34] = 0x13FC,   /* U+13F4: CHEROKEE LETTER YV */
    2356             :         [1536+0x35] = 0x13FD,   /* U+13F5: CHEROKEE LETTER MV */
    2357             :         [1280+0x32] = 1600 - 0x80,      /* 341 262 ... */
    2358             :         [1600+0x10] = 0x10D0,   /* U+1C90: GEORGIAN MTAVRULI CAPITAL LETTER AN */
    2359             :         [1600+0x11] = 0x10D1,   /* U+1C91: GEORGIAN MTAVRULI CAPITAL LETTER BAN */
    2360             :         [1600+0x12] = 0x10D2,   /* U+1C92: GEORGIAN MTAVRULI CAPITAL LETTER GAN */
    2361             :         [1600+0x13] = 0x10D3,   /* U+1C93: GEORGIAN MTAVRULI CAPITAL LETTER DON */
    2362             :         [1600+0x14] = 0x10D4,   /* U+1C94: GEORGIAN MTAVRULI CAPITAL LETTER EN */
    2363             :         [1600+0x15] = 0x10D5,   /* U+1C95: GEORGIAN MTAVRULI CAPITAL LETTER VIN */
    2364             :         [1600+0x16] = 0x10D6,   /* U+1C96: GEORGIAN MTAVRULI CAPITAL LETTER ZEN */
    2365             :         [1600+0x17] = 0x10D7,   /* U+1C97: GEORGIAN MTAVRULI CAPITAL LETTER TAN */
    2366             :         [1600+0x18] = 0x10D8,   /* U+1C98: GEORGIAN MTAVRULI CAPITAL LETTER IN */
    2367             :         [1600+0x19] = 0x10D9,   /* U+1C99: GEORGIAN MTAVRULI CAPITAL LETTER KAN */
    2368             :         [1600+0x1A] = 0x10DA,   /* U+1C9A: GEORGIAN MTAVRULI CAPITAL LETTER LAS */
    2369             :         [1600+0x1B] = 0x10DB,   /* U+1C9B: GEORGIAN MTAVRULI CAPITAL LETTER MAN */
    2370             :         [1600+0x1C] = 0x10DC,   /* U+1C9C: GEORGIAN MTAVRULI CAPITAL LETTER NAR */
    2371             :         [1600+0x1D] = 0x10DD,   /* U+1C9D: GEORGIAN MTAVRULI CAPITAL LETTER ON */
    2372             :         [1600+0x1E] = 0x10DE,   /* U+1C9E: GEORGIAN MTAVRULI CAPITAL LETTER PAR */
    2373             :         [1600+0x1F] = 0x10DF,   /* U+1C9F: GEORGIAN MTAVRULI CAPITAL LETTER ZHAR */
    2374             :         [1600+0x20] = 0x10E0,   /* U+1CA0: GEORGIAN MTAVRULI CAPITAL LETTER RAE */
    2375             :         [1600+0x21] = 0x10E1,   /* U+1CA1: GEORGIAN MTAVRULI CAPITAL LETTER SAN */
    2376             :         [1600+0x22] = 0x10E2,   /* U+1CA2: GEORGIAN MTAVRULI CAPITAL LETTER TAR */
    2377             :         [1600+0x23] = 0x10E3,   /* U+1CA3: GEORGIAN MTAVRULI CAPITAL LETTER UN */
    2378             :         [1600+0x24] = 0x10E4,   /* U+1CA4: GEORGIAN MTAVRULI CAPITAL LETTER PHAR */
    2379             :         [1600+0x25] = 0x10E5,   /* U+1CA5: GEORGIAN MTAVRULI CAPITAL LETTER KHAR */
    2380             :         [1600+0x26] = 0x10E6,   /* U+1CA6: GEORGIAN MTAVRULI CAPITAL LETTER GHAN */
    2381             :         [1600+0x27] = 0x10E7,   /* U+1CA7: GEORGIAN MTAVRULI CAPITAL LETTER QAR */
    2382             :         [1600+0x28] = 0x10E8,   /* U+1CA8: GEORGIAN MTAVRULI CAPITAL LETTER SHIN */
    2383             :         [1600+0x29] = 0x10E9,   /* U+1CA9: GEORGIAN MTAVRULI CAPITAL LETTER CHIN */
    2384             :         [1600+0x2A] = 0x10EA,   /* U+1CAA: GEORGIAN MTAVRULI CAPITAL LETTER CAN */
    2385             :         [1600+0x2B] = 0x10EB,   /* U+1CAB: GEORGIAN MTAVRULI CAPITAL LETTER JIL */
    2386             :         [1600+0x2C] = 0x10EC,   /* U+1CAC: GEORGIAN MTAVRULI CAPITAL LETTER CIL */
    2387             :         [1600+0x2D] = 0x10ED,   /* U+1CAD: GEORGIAN MTAVRULI CAPITAL LETTER CHAR */
    2388             :         [1600+0x2E] = 0x10EE,   /* U+1CAE: GEORGIAN MTAVRULI CAPITAL LETTER XAN */
    2389             :         [1600+0x2F] = 0x10EF,   /* U+1CAF: GEORGIAN MTAVRULI CAPITAL LETTER JHAN */
    2390             :         [1600+0x30] = 0x10F0,   /* U+1CB0: GEORGIAN MTAVRULI CAPITAL LETTER HAE */
    2391             :         [1600+0x31] = 0x10F1,   /* U+1CB1: GEORGIAN MTAVRULI CAPITAL LETTER HE */
    2392             :         [1600+0x32] = 0x10F2,   /* U+1CB2: GEORGIAN MTAVRULI CAPITAL LETTER HIE */
    2393             :         [1600+0x33] = 0x10F3,   /* U+1CB3: GEORGIAN MTAVRULI CAPITAL LETTER WE */
    2394             :         [1600+0x34] = 0x10F4,   /* U+1CB4: GEORGIAN MTAVRULI CAPITAL LETTER HAR */
    2395             :         [1600+0x35] = 0x10F5,   /* U+1CB5: GEORGIAN MTAVRULI CAPITAL LETTER HOE */
    2396             :         [1600+0x36] = 0x10F6,   /* U+1CB6: GEORGIAN MTAVRULI CAPITAL LETTER FI */
    2397             :         [1600+0x37] = 0x10F7,   /* U+1CB7: GEORGIAN MTAVRULI CAPITAL LETTER YN */
    2398             :         [1600+0x38] = 0x10F8,   /* U+1CB8: GEORGIAN MTAVRULI CAPITAL LETTER ELIFI */
    2399             :         [1600+0x39] = 0x10F9,   /* U+1CB9: GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN */
    2400             :         [1600+0x3A] = 0x10FA,   /* U+1CBA: GEORGIAN MTAVRULI CAPITAL LETTER AIN */
    2401             :         [1600+0x3D] = 0x10FD,   /* U+1CBD: GEORGIAN MTAVRULI CAPITAL LETTER AEN */
    2402             :         [1600+0x3E] = 0x10FE,   /* U+1CBE: GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN */
    2403             :         [1600+0x3F] = 0x10FF,   /* U+1CBF: GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */
    2404             :         [1280+0x38] = 1664 - 0x80,      /* 341 270 ... */
    2405             :         [1664+0x00] = 0x1E01,   /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
    2406             :         [1664+0x02] = 0x1E03,   /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
    2407             :         [1664+0x04] = 0x1E05,   /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
    2408             :         [1664+0x06] = 0x1E07,   /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
    2409             :         [1664+0x08] = 0x1E09,   /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
    2410             :         [1664+0x0A] = 0x1E0B,   /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
    2411             :         [1664+0x0C] = 0x1E0D,   /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
    2412             :         [1664+0x0E] = 0x1E0F,   /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
    2413             :         [1664+0x10] = 0x1E11,   /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
    2414             :         [1664+0x12] = 0x1E13,   /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
    2415             :         [1664+0x14] = 0x1E15,   /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
    2416             :         [1664+0x16] = 0x1E17,   /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
    2417             :         [1664+0x18] = 0x1E19,   /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
    2418             :         [1664+0x1A] = 0x1E1B,   /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
    2419             :         [1664+0x1C] = 0x1E1D,   /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
    2420             :         [1664+0x1E] = 0x1E1F,   /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
    2421             :         [1664+0x20] = 0x1E21,   /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
    2422             :         [1664+0x22] = 0x1E23,   /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
    2423             :         [1664+0x24] = 0x1E25,   /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
    2424             :         [1664+0x26] = 0x1E27,   /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
    2425             :         [1664+0x28] = 0x1E29,   /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
    2426             :         [1664+0x2A] = 0x1E2B,   /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
    2427             :         [1664+0x2C] = 0x1E2D,   /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
    2428             :         [1664+0x2E] = 0x1E2F,   /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
    2429             :         [1664+0x30] = 0x1E31,   /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
    2430             :         [1664+0x32] = 0x1E33,   /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
    2431             :         [1664+0x34] = 0x1E35,   /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
    2432             :         [1664+0x36] = 0x1E37,   /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
    2433             :         [1664+0x38] = 0x1E39,   /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
    2434             :         [1664+0x3A] = 0x1E3B,   /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
    2435             :         [1664+0x3C] = 0x1E3D,   /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
    2436             :         [1664+0x3E] = 0x1E3F,   /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
    2437             :         [1280+0x39] = 1728 - 0x80,      /* 341 271 ... */
    2438             :         [1728+0x00] = 0x1E41,   /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
    2439             :         [1728+0x02] = 0x1E43,   /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
    2440             :         [1728+0x04] = 0x1E45,   /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
    2441             :         [1728+0x06] = 0x1E47,   /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
    2442             :         [1728+0x08] = 0x1E49,   /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
    2443             :         [1728+0x0A] = 0x1E4B,   /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
    2444             :         [1728+0x0C] = 0x1E4D,   /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
    2445             :         [1728+0x0E] = 0x1E4F,   /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
    2446             :         [1728+0x10] = 0x1E51,   /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
    2447             :         [1728+0x12] = 0x1E53,   /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
    2448             :         [1728+0x14] = 0x1E55,   /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
    2449             :         [1728+0x16] = 0x1E57,   /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
    2450             :         [1728+0x18] = 0x1E59,   /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
    2451             :         [1728+0x1A] = 0x1E5B,   /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
    2452             :         [1728+0x1C] = 0x1E5D,   /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
    2453             :         [1728+0x1E] = 0x1E5F,   /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
    2454             :         [1728+0x20] = 0x1E61,   /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
    2455             :         [1728+0x22] = 0x1E63,   /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
    2456             :         [1728+0x24] = 0x1E65,   /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
    2457             :         [1728+0x26] = 0x1E67,   /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
    2458             :         [1728+0x28] = 0x1E69,   /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
    2459             :         [1728+0x2A] = 0x1E6B,   /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
    2460             :         [1728+0x2C] = 0x1E6D,   /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
    2461             :         [1728+0x2E] = 0x1E6F,   /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
    2462             :         [1728+0x30] = 0x1E71,   /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
    2463             :         [1728+0x32] = 0x1E73,   /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
    2464             :         [1728+0x34] = 0x1E75,   /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
    2465             :         [1728+0x36] = 0x1E77,   /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
    2466             :         [1728+0x38] = 0x1E79,   /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
    2467             :         [1728+0x3A] = 0x1E7B,   /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
    2468             :         [1728+0x3C] = 0x1E7D,   /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
    2469             :         [1728+0x3E] = 0x1E7F,   /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
    2470             :         [1280+0x3A] = 1792 - 0x80,      /* 341 272 ... */
    2471             :         [1792+0x00] = 0x1E81,   /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
    2472             :         [1792+0x02] = 0x1E83,   /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
    2473             :         [1792+0x04] = 0x1E85,   /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
    2474             :         [1792+0x06] = 0x1E87,   /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
    2475             :         [1792+0x08] = 0x1E89,   /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
    2476             :         [1792+0x0A] = 0x1E8B,   /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
    2477             :         [1792+0x0C] = 0x1E8D,   /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
    2478             :         [1792+0x0E] = 0x1E8F,   /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
    2479             :         [1792+0x10] = 0x1E91,   /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
    2480             :         [1792+0x12] = 0x1E93,   /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
    2481             :         [1792+0x14] = 0x1E95,   /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
    2482             :         [1792+0x1E] = 0x00DF,   /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
    2483             :         [1792+0x20] = 0x1EA1,   /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
    2484             :         [1792+0x22] = 0x1EA3,   /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
    2485             :         [1792+0x24] = 0x1EA5,   /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
    2486             :         [1792+0x26] = 0x1EA7,   /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
    2487             :         [1792+0x28] = 0x1EA9,   /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
    2488             :         [1792+0x2A] = 0x1EAB,   /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
    2489             :         [1792+0x2C] = 0x1EAD,   /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
    2490             :         [1792+0x2E] = 0x1EAF,   /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
    2491             :         [1792+0x30] = 0x1EB1,   /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
    2492             :         [1792+0x32] = 0x1EB3,   /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
    2493             :         [1792+0x34] = 0x1EB5,   /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
    2494             :         [1792+0x36] = 0x1EB7,   /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
    2495             :         [1792+0x38] = 0x1EB9,   /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
    2496             :         [1792+0x3A] = 0x1EBB,   /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
    2497             :         [1792+0x3C] = 0x1EBD,   /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
    2498             :         [1792+0x3E] = 0x1EBF,   /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
    2499             :         [1280+0x3B] = 1856 - 0x80,      /* 341 273 ... */
    2500             :         [1856+0x00] = 0x1EC1,   /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
    2501             :         [1856+0x02] = 0x1EC3,   /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
    2502             :         [1856+0x04] = 0x1EC5,   /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
    2503             :         [1856+0x06] = 0x1EC7,   /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
    2504             :         [1856+0x08] = 0x1EC9,   /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
    2505             :         [1856+0x0A] = 0x1ECB,   /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
    2506             :         [1856+0x0C] = 0x1ECD,   /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
    2507             :         [1856+0x0E] = 0x1ECF,   /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
    2508             :         [1856+0x10] = 0x1ED1,   /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
    2509             :         [1856+0x12] = 0x1ED3,   /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
    2510             :         [1856+0x14] = 0x1ED5,   /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
    2511             :         [1856+0x16] = 0x1ED7,   /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
    2512             :         [1856+0x18] = 0x1ED9,   /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
    2513             :         [1856+0x1A] = 0x1EDB,   /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
    2514             :         [1856+0x1C] = 0x1EDD,   /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
    2515             :         [1856+0x1E] = 0x1EDF,   /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
    2516             :         [1856+0x20] = 0x1EE1,   /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
    2517             :         [1856+0x22] = 0x1EE3,   /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
    2518             :         [1856+0x24] = 0x1EE5,   /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
    2519             :         [1856+0x26] = 0x1EE7,   /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
    2520             :         [1856+0x28] = 0x1EE9,   /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
    2521             :         [1856+0x2A] = 0x1EEB,   /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
    2522             :         [1856+0x2C] = 0x1EED,   /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
    2523             :         [1856+0x2E] = 0x1EEF,   /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
    2524             :         [1856+0x30] = 0x1EF1,   /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
    2525             :         [1856+0x32] = 0x1EF3,   /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
    2526             :         [1856+0x34] = 0x1EF5,   /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
    2527             :         [1856+0x36] = 0x1EF7,   /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
    2528             :         [1856+0x38] = 0x1EF9,   /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
    2529             :         [1856+0x3A] = 0x1EFB,   /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
    2530             :         [1856+0x3C] = 0x1EFD,   /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
    2531             :         [1856+0x3E] = 0x1EFF,   /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
    2532             :         [1280+0x3C] = 1920 - 0x80,      /* 341 274 ... */
    2533             :         [1920+0x08] = 0x1F00,   /* U+1F08: GREEK CAPITAL LETTER ALPHA WITH PSILI */
    2534             :         [1920+0x09] = 0x1F01,   /* U+1F09: GREEK CAPITAL LETTER ALPHA WITH DASIA */
    2535             :         [1920+0x0A] = 0x1F02,   /* U+1F0A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
    2536             :         [1920+0x0B] = 0x1F03,   /* U+1F0B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
    2537             :         [1920+0x0C] = 0x1F04,   /* U+1F0C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
    2538             :         [1920+0x0D] = 0x1F05,   /* U+1F0D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
    2539             :         [1920+0x0E] = 0x1F06,   /* U+1F0E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
    2540             :         [1920+0x0F] = 0x1F07,   /* U+1F0F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
    2541             :         [1920+0x18] = 0x1F10,   /* U+1F18: GREEK CAPITAL LETTER EPSILON WITH PSILI */
    2542             :         [1920+0x19] = 0x1F11,   /* U+1F19: GREEK CAPITAL LETTER EPSILON WITH DASIA */
    2543             :         [1920+0x1A] = 0x1F12,   /* U+1F1A: GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
    2544             :         [1920+0x1B] = 0x1F13,   /* U+1F1B: GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
    2545             :         [1920+0x1C] = 0x1F14,   /* U+1F1C: GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
    2546             :         [1920+0x1D] = 0x1F15,   /* U+1F1D: GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
    2547             :         [1920+0x28] = 0x1F20,   /* U+1F28: GREEK CAPITAL LETTER ETA WITH PSILI */
    2548             :         [1920+0x29] = 0x1F21,   /* U+1F29: GREEK CAPITAL LETTER ETA WITH DASIA */
    2549             :         [1920+0x2A] = 0x1F22,   /* U+1F2A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
    2550             :         [1920+0x2B] = 0x1F23,   /* U+1F2B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
    2551             :         [1920+0x2C] = 0x1F24,   /* U+1F2C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
    2552             :         [1920+0x2D] = 0x1F25,   /* U+1F2D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
    2553             :         [1920+0x2E] = 0x1F26,   /* U+1F2E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
    2554             :         [1920+0x2F] = 0x1F27,   /* U+1F2F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
    2555             :         [1920+0x38] = 0x1F30,   /* U+1F38: GREEK CAPITAL LETTER IOTA WITH PSILI */
    2556             :         [1920+0x39] = 0x1F31,   /* U+1F39: GREEK CAPITAL LETTER IOTA WITH DASIA */
    2557             :         [1920+0x3A] = 0x1F32,   /* U+1F3A: GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
    2558             :         [1920+0x3B] = 0x1F33,   /* U+1F3B: GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
    2559             :         [1920+0x3C] = 0x1F34,   /* U+1F3C: GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
    2560             :         [1920+0x3D] = 0x1F35,   /* U+1F3D: GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
    2561             :         [1920+0x3E] = 0x1F36,   /* U+1F3E: GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
    2562             :         [1920+0x3F] = 0x1F37,   /* U+1F3F: GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
    2563             :         [1280+0x3D] = 1984 - 0x80,      /* 341 275 ... */
    2564             :         [1984+0x08] = 0x1F40,   /* U+1F48: GREEK CAPITAL LETTER OMICRON WITH PSILI */
    2565             :         [1984+0x09] = 0x1F41,   /* U+1F49: GREEK CAPITAL LETTER OMICRON WITH DASIA */
    2566             :         [1984+0x0A] = 0x1F42,   /* U+1F4A: GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
    2567             :         [1984+0x0B] = 0x1F43,   /* U+1F4B: GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
    2568             :         [1984+0x0C] = 0x1F44,   /* U+1F4C: GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
    2569             :         [1984+0x0D] = 0x1F45,   /* U+1F4D: GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
    2570             :         [1984+0x19] = 0x1F51,   /* U+1F59: GREEK CAPITAL LETTER UPSILON WITH DASIA */
    2571             :         [1984+0x1B] = 0x1F53,   /* U+1F5B: GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
    2572             :         [1984+0x1D] = 0x1F55,   /* U+1F5D: GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
    2573             :         [1984+0x1F] = 0x1F57,   /* U+1F5F: GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
    2574             :         [1984+0x28] = 0x1F60,   /* U+1F68: GREEK CAPITAL LETTER OMEGA WITH PSILI */
    2575             :         [1984+0x29] = 0x1F61,   /* U+1F69: GREEK CAPITAL LETTER OMEGA WITH DASIA */
    2576             :         [1984+0x2A] = 0x1F62,   /* U+1F6A: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
    2577             :         [1984+0x2B] = 0x1F63,   /* U+1F6B: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
    2578             :         [1984+0x2C] = 0x1F64,   /* U+1F6C: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
    2579             :         [1984+0x2D] = 0x1F65,   /* U+1F6D: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
    2580             :         [1984+0x2E] = 0x1F66,   /* U+1F6E: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
    2581             :         [1984+0x2F] = 0x1F67,   /* U+1F6F: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
    2582             :         [1280+0x3E] = 2048 - 0x80,      /* 341 276 ... */
    2583             :         [2048+0x08] = 0x1F80,   /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
    2584             :         [2048+0x09] = 0x1F81,   /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
    2585             :         [2048+0x0A] = 0x1F82,   /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    2586             :         [2048+0x0B] = 0x1F83,   /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    2587             :         [2048+0x0C] = 0x1F84,   /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    2588             :         [2048+0x0D] = 0x1F85,   /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    2589             :         [2048+0x0E] = 0x1F86,   /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    2590             :         [2048+0x0F] = 0x1F87,   /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    2591             :         [2048+0x18] = 0x1F90,   /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
    2592             :         [2048+0x19] = 0x1F91,   /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
    2593             :         [2048+0x1A] = 0x1F92,   /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    2594             :         [2048+0x1B] = 0x1F93,   /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    2595             :         [2048+0x1C] = 0x1F94,   /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    2596             :         [2048+0x1D] = 0x1F95,   /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    2597             :         [2048+0x1E] = 0x1F96,   /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    2598             :         [2048+0x1F] = 0x1F97,   /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    2599             :         [2048+0x28] = 0x1FA0,   /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
    2600             :         [2048+0x29] = 0x1FA1,   /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
    2601             :         [2048+0x2A] = 0x1FA2,   /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    2602             :         [2048+0x2B] = 0x1FA3,   /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    2603             :         [2048+0x2C] = 0x1FA4,   /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    2604             :         [2048+0x2D] = 0x1FA5,   /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    2605             :         [2048+0x2E] = 0x1FA6,   /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    2606             :         [2048+0x2F] = 0x1FA7,   /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    2607             :         [2048+0x38] = 0x1FB0,   /* U+1FB8: GREEK CAPITAL LETTER ALPHA WITH VRACHY */
    2608             :         [2048+0x39] = 0x1FB1,   /* U+1FB9: GREEK CAPITAL LETTER ALPHA WITH MACRON */
    2609             :         [2048+0x3A] = 0x1F70,   /* U+1FBA: GREEK CAPITAL LETTER ALPHA WITH VARIA */
    2610             :         [2048+0x3B] = 0x1F71,   /* U+1FBB: GREEK CAPITAL LETTER ALPHA WITH OXIA */
    2611             :         [2048+0x3C] = 0x1FB3,   /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
    2612             :         [1280+0x3F] = 2112 - 0x80,      /* 341 277 ... */
    2613             :         [2112+0x08] = 0x1F72,   /* U+1FC8: GREEK CAPITAL LETTER EPSILON WITH VARIA */
    2614             :         [2112+0x09] = 0x1F73,   /* U+1FC9: GREEK CAPITAL LETTER EPSILON WITH OXIA */
    2615             :         [2112+0x0A] = 0x1F74,   /* U+1FCA: GREEK CAPITAL LETTER ETA WITH VARIA */
    2616             :         [2112+0x0B] = 0x1F75,   /* U+1FCB: GREEK CAPITAL LETTER ETA WITH OXIA */
    2617             :         [2112+0x0C] = 0x1FC3,   /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
    2618             :         [2112+0x18] = 0x1FD0,   /* U+1FD8: GREEK CAPITAL LETTER IOTA WITH VRACHY */
    2619             :         [2112+0x19] = 0x1FD1,   /* U+1FD9: GREEK CAPITAL LETTER IOTA WITH MACRON */
    2620             :         [2112+0x1A] = 0x1F76,   /* U+1FDA: GREEK CAPITAL LETTER IOTA WITH VARIA */
    2621             :         [2112+0x1B] = 0x1F77,   /* U+1FDB: GREEK CAPITAL LETTER IOTA WITH OXIA */
    2622             :         [2112+0x28] = 0x1FE0,   /* U+1FE8: GREEK CAPITAL LETTER UPSILON WITH VRACHY */
    2623             :         [2112+0x29] = 0x1FE1,   /* U+1FE9: GREEK CAPITAL LETTER UPSILON WITH MACRON */
    2624             :         [2112+0x2A] = 0x1F7A,   /* U+1FEA: GREEK CAPITAL LETTER UPSILON WITH VARIA */
    2625             :         [2112+0x2B] = 0x1F7B,   /* U+1FEB: GREEK CAPITAL LETTER UPSILON WITH OXIA */
    2626             :         [2112+0x2C] = 0x1FE5,   /* U+1FEC: GREEK CAPITAL LETTER RHO WITH DASIA */
    2627             :         [2112+0x38] = 0x1F78,   /* U+1FF8: GREEK CAPITAL LETTER OMICRON WITH VARIA */
    2628             :         [2112+0x39] = 0x1F79,   /* U+1FF9: GREEK CAPITAL LETTER OMICRON WITH OXIA */
    2629             :         [2112+0x3A] = 0x1F7C,   /* U+1FFA: GREEK CAPITAL LETTER OMEGA WITH VARIA */
    2630             :         [2112+0x3B] = 0x1F7D,   /* U+1FFB: GREEK CAPITAL LETTER OMEGA WITH OXIA */
    2631             :         [2112+0x3C] = 0x1FF3,   /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
    2632             :         [0xE2] = 2176 - 0x80,   /* 342 ... */
    2633             :         [2176+0x04] = 2240 - 0x80,      /* 342 204 ... */
    2634             :         [2240+0x26] = 0x03C9,   /* U+2126: OHM SIGN */
    2635             :         [2240+0x2A] = 0x006B,   /* U+212A: KELVIN SIGN */
    2636             :         [2240+0x2B] = 0x00E5,   /* U+212B: ANGSTROM SIGN */
    2637             :         [2240+0x32] = 0x214E,   /* U+2132: TURNED CAPITAL F */
    2638             :         [2176+0x05] = 2304 - 0x80,      /* 342 205 ... */
    2639             :         [2304+0x20] = 0x2170,   /* U+2160: ROMAN NUMERAL ONE */
    2640             :         [2304+0x21] = 0x2171,   /* U+2161: ROMAN NUMERAL TWO */
    2641             :         [2304+0x22] = 0x2172,   /* U+2162: ROMAN NUMERAL THREE */
    2642             :         [2304+0x23] = 0x2173,   /* U+2163: ROMAN NUMERAL FOUR */
    2643             :         [2304+0x24] = 0x2174,   /* U+2164: ROMAN NUMERAL FIVE */
    2644             :         [2304+0x25] = 0x2175,   /* U+2165: ROMAN NUMERAL SIX */
    2645             :         [2304+0x26] = 0x2176,   /* U+2166: ROMAN NUMERAL SEVEN */
    2646             :         [2304+0x27] = 0x2177,   /* U+2167: ROMAN NUMERAL EIGHT */
    2647             :         [2304+0x28] = 0x2178,   /* U+2168: ROMAN NUMERAL NINE */
    2648             :         [2304+0x29] = 0x2179,   /* U+2169: ROMAN NUMERAL TEN */
    2649             :         [2304+0x2A] = 0x217A,   /* U+216A: ROMAN NUMERAL ELEVEN */
    2650             :         [2304+0x2B] = 0x217B,   /* U+216B: ROMAN NUMERAL TWELVE */
    2651             :         [2304+0x2C] = 0x217C,   /* U+216C: ROMAN NUMERAL FIFTY */
    2652             :         [2304+0x2D] = 0x217D,   /* U+216D: ROMAN NUMERAL ONE HUNDRED */
    2653             :         [2304+0x2E] = 0x217E,   /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
    2654             :         [2304+0x2F] = 0x217F,   /* U+216F: ROMAN NUMERAL ONE THOUSAND */
    2655             :         [2176+0x06] = 2368 - 0x80,      /* 342 206 ... */
    2656             :         [2368+0x03] = 0x2184,   /* U+2183: ROMAN NUMERAL REVERSED ONE HUNDRED */
    2657             :         [2176+0x12] = 2432 - 0x80,      /* 342 222 ... */
    2658             :         [2432+0x36] = 0x24D0,   /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
    2659             :         [2432+0x37] = 0x24D1,   /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
    2660             :         [2432+0x38] = 0x24D2,   /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
    2661             :         [2432+0x39] = 0x24D3,   /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
    2662             :         [2432+0x3A] = 0x24D4,   /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
    2663             :         [2432+0x3B] = 0x24D5,   /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
    2664             :         [2432+0x3C] = 0x24D6,   /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
    2665             :         [2432+0x3D] = 0x24D7,   /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
    2666             :         [2432+0x3E] = 0x24D8,   /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
    2667             :         [2432+0x3F] = 0x24D9,   /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
    2668             :         [2176+0x13] = 2496 - 0x80,      /* 342 223 ... */
    2669             :         [2496+0x00] = 0x24DA,   /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
    2670             :         [2496+0x01] = 0x24DB,   /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
    2671             :         [2496+0x02] = 0x24DC,   /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
    2672             :         [2496+0x03] = 0x24DD,   /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
    2673             :         [2496+0x04] = 0x24DE,   /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
    2674             :         [2496+0x05] = 0x24DF,   /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
    2675             :         [2496+0x06] = 0x24E0,   /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
    2676             :         [2496+0x07] = 0x24E1,   /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
    2677             :         [2496+0x08] = 0x24E2,   /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
    2678             :         [2496+0x09] = 0x24E3,   /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
    2679             :         [2496+0x0A] = 0x24E4,   /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
    2680             :         [2496+0x0B] = 0x24E5,   /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
    2681             :         [2496+0x0C] = 0x24E6,   /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
    2682             :         [2496+0x0D] = 0x24E7,   /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
    2683             :         [2496+0x0E] = 0x24E8,   /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
    2684             :         [2496+0x0F] = 0x24E9,   /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
    2685             :         [2176+0x30] = 2560 - 0x80,      /* 342 260 ... */
    2686             :         [2560+0x00] = 0x2C30,   /* U+2C00: GLAGOLITIC CAPITAL LETTER AZU */
    2687             :         [2560+0x01] = 0x2C31,   /* U+2C01: GLAGOLITIC CAPITAL LETTER BUKY */
    2688             :         [2560+0x02] = 0x2C32,   /* U+2C02: GLAGOLITIC CAPITAL LETTER VEDE */
    2689             :         [2560+0x03] = 0x2C33,   /* U+2C03: GLAGOLITIC CAPITAL LETTER GLAGOLI */
    2690             :         [2560+0x04] = 0x2C34,   /* U+2C04: GLAGOLITIC CAPITAL LETTER DOBRO */
    2691             :         [2560+0x05] = 0x2C35,   /* U+2C05: GLAGOLITIC CAPITAL LETTER YESTU */
    2692             :         [2560+0x06] = 0x2C36,   /* U+2C06: GLAGOLITIC CAPITAL LETTER ZHIVETE */
    2693             :         [2560+0x07] = 0x2C37,   /* U+2C07: GLAGOLITIC CAPITAL LETTER DZELO */
    2694             :         [2560+0x08] = 0x2C38,   /* U+2C08: GLAGOLITIC CAPITAL LETTER ZEMLJA */
    2695             :         [2560+0x09] = 0x2C39,   /* U+2C09: GLAGOLITIC CAPITAL LETTER IZHE */
    2696             :         [2560+0x0A] = 0x2C3A,   /* U+2C0A: GLAGOLITIC CAPITAL LETTER INITIAL IZHE */
    2697             :         [2560+0x0B] = 0x2C3B,   /* U+2C0B: GLAGOLITIC CAPITAL LETTER I */
    2698             :         [2560+0x0C] = 0x2C3C,   /* U+2C0C: GLAGOLITIC CAPITAL LETTER DJERVI */
    2699             :         [2560+0x0D] = 0x2C3D,   /* U+2C0D: GLAGOLITIC CAPITAL LETTER KAKO */
    2700             :         [2560+0x0E] = 0x2C3E,   /* U+2C0E: GLAGOLITIC CAPITAL LETTER LJUDIJE */
    2701             :         [2560+0x0F] = 0x2C3F,   /* U+2C0F: GLAGOLITIC CAPITAL LETTER MYSLITE */
    2702             :         [2560+0x10] = 0x2C40,   /* U+2C10: GLAGOLITIC CAPITAL LETTER NASHI */
    2703             :         [2560+0x11] = 0x2C41,   /* U+2C11: GLAGOLITIC CAPITAL LETTER ONU */
    2704             :         [2560+0x12] = 0x2C42,   /* U+2C12: GLAGOLITIC CAPITAL LETTER POKOJI */
    2705             :         [2560+0x13] = 0x2C43,   /* U+2C13: GLAGOLITIC CAPITAL LETTER RITSI */
    2706             :         [2560+0x14] = 0x2C44,   /* U+2C14: GLAGOLITIC CAPITAL LETTER SLOVO */
    2707             :         [2560+0x15] = 0x2C45,   /* U+2C15: GLAGOLITIC CAPITAL LETTER TVRIDO */
    2708             :         [2560+0x16] = 0x2C46,   /* U+2C16: GLAGOLITIC CAPITAL LETTER UKU */
    2709             :         [2560+0x17] = 0x2C47,   /* U+2C17: GLAGOLITIC CAPITAL LETTER FRITU */
    2710             :         [2560+0x18] = 0x2C48,   /* U+2C18: GLAGOLITIC CAPITAL LETTER HERU */
    2711             :         [2560+0x19] = 0x2C49,   /* U+2C19: GLAGOLITIC CAPITAL LETTER OTU */
    2712             :         [2560+0x1A] = 0x2C4A,   /* U+2C1A: GLAGOLITIC CAPITAL LETTER PE */
    2713             :         [2560+0x1B] = 0x2C4B,   /* U+2C1B: GLAGOLITIC CAPITAL LETTER SHTA */
    2714             :         [2560+0x1C] = 0x2C4C,   /* U+2C1C: GLAGOLITIC CAPITAL LETTER TSI */
    2715             :         [2560+0x1D] = 0x2C4D,   /* U+2C1D: GLAGOLITIC CAPITAL LETTER CHRIVI */
    2716             :         [2560+0x1E] = 0x2C4E,   /* U+2C1E: GLAGOLITIC CAPITAL LETTER SHA */
    2717             :         [2560+0x1F] = 0x2C4F,   /* U+2C1F: GLAGOLITIC CAPITAL LETTER YERU */
    2718             :         [2560+0x20] = 0x2C50,   /* U+2C20: GLAGOLITIC CAPITAL LETTER YERI */
    2719             :         [2560+0x21] = 0x2C51,   /* U+2C21: GLAGOLITIC CAPITAL LETTER YATI */
    2720             :         [2560+0x22] = 0x2C52,   /* U+2C22: GLAGOLITIC CAPITAL LETTER SPIDERY HA */
    2721             :         [2560+0x23] = 0x2C53,   /* U+2C23: GLAGOLITIC CAPITAL LETTER YU */
    2722             :         [2560+0x24] = 0x2C54,   /* U+2C24: GLAGOLITIC CAPITAL LETTER SMALL YUS */
    2723             :         [2560+0x25] = 0x2C55,   /* U+2C25: GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */
    2724             :         [2560+0x26] = 0x2C56,   /* U+2C26: GLAGOLITIC CAPITAL LETTER YO */
    2725             :         [2560+0x27] = 0x2C57,   /* U+2C27: GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */
    2726             :         [2560+0x28] = 0x2C58,   /* U+2C28: GLAGOLITIC CAPITAL LETTER BIG YUS */
    2727             :         [2560+0x29] = 0x2C59,   /* U+2C29: GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */
    2728             :         [2560+0x2A] = 0x2C5A,   /* U+2C2A: GLAGOLITIC CAPITAL LETTER FITA */
    2729             :         [2560+0x2B] = 0x2C5B,   /* U+2C2B: GLAGOLITIC CAPITAL LETTER IZHITSA */
    2730             :         [2560+0x2C] = 0x2C5C,   /* U+2C2C: GLAGOLITIC CAPITAL LETTER SHTAPIC */
    2731             :         [2560+0x2D] = 0x2C5D,   /* U+2C2D: GLAGOLITIC CAPITAL LETTER TROKUTASTI A */
    2732             :         [2560+0x2E] = 0x2C5E,   /* U+2C2E: GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */
    2733             :         [2560+0x2F] = 0x2C5F,   /* U+2C2F: GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */
    2734             :         [2176+0x31] = 2624 - 0x80,      /* 342 261 ... */
    2735             :         [2624+0x20] = 0x2C61,   /* U+2C60: LATIN CAPITAL LETTER L WITH DOUBLE BAR */
    2736             :         [2624+0x22] = 0x026B,   /* U+2C62: LATIN CAPITAL LETTER L WITH MIDDLE TILDE */
    2737             :         [2624+0x23] = 0x1D7D,   /* U+2C63: LATIN CAPITAL LETTER P WITH STROKE */
    2738             :         [2624+0x24] = 0x027D,   /* U+2C64: LATIN CAPITAL LETTER R WITH TAIL */
    2739             :         [2624+0x27] = 0x2C68,   /* U+2C67: LATIN CAPITAL LETTER H WITH DESCENDER */
    2740             :         [2624+0x29] = 0x2C6A,   /* U+2C69: LATIN CAPITAL LETTER K WITH DESCENDER */
    2741             :         [2624+0x2B] = 0x2C6C,   /* U+2C6B: LATIN CAPITAL LETTER Z WITH DESCENDER */
    2742             :         [2624+0x2D] = 0x0251,   /* U+2C6D: LATIN CAPITAL LETTER ALPHA */
    2743             :         [2624+0x2E] = 0x0271,   /* U+2C6E: LATIN CAPITAL LETTER M WITH HOOK */
    2744             :         [2624+0x2F] = 0x0250,   /* U+2C6F: LATIN CAPITAL LETTER TURNED A */
    2745             :         [2624+0x30] = 0x0252,   /* U+2C70: LATIN CAPITAL LETTER TURNED ALPHA */
    2746             :         [2624+0x32] = 0x2C73,   /* U+2C72: LATIN CAPITAL LETTER W WITH HOOK */
    2747             :         [2624+0x35] = 0x2C76,   /* U+2C75: LATIN CAPITAL LETTER HALF H */
    2748             :         [2624+0x3E] = 0x023F,   /* U+2C7E: LATIN CAPITAL LETTER S WITH SWASH TAIL */
    2749             :         [2624+0x3F] = 0x0240,   /* U+2C7F: LATIN CAPITAL LETTER Z WITH SWASH TAIL */
    2750             :         [2176+0x32] = 2688 - 0x80,      /* 342 262 ... */
    2751             :         [2688+0x00] = 0x2C81,   /* U+2C80: COPTIC CAPITAL LETTER ALFA */
    2752             :         [2688+0x02] = 0x2C83,   /* U+2C82: COPTIC CAPITAL LETTER VIDA */
    2753             :         [2688+0x04] = 0x2C85,   /* U+2C84: COPTIC CAPITAL LETTER GAMMA */
    2754             :         [2688+0x06] = 0x2C87,   /* U+2C86: COPTIC CAPITAL LETTER DALDA */
    2755             :         [2688+0x08] = 0x2C89,   /* U+2C88: COPTIC CAPITAL LETTER EIE */
    2756             :         [2688+0x0A] = 0x2C8B,   /* U+2C8A: COPTIC CAPITAL LETTER SOU */
    2757             :         [2688+0x0C] = 0x2C8D,   /* U+2C8C: COPTIC CAPITAL LETTER ZATA */
    2758             :         [2688+0x0E] = 0x2C8F,   /* U+2C8E: COPTIC CAPITAL LETTER HATE */
    2759             :         [2688+0x10] = 0x2C91,   /* U+2C90: COPTIC CAPITAL LETTER THETHE */
    2760             :         [2688+0x12] = 0x2C93,   /* U+2C92: COPTIC CAPITAL LETTER IAUDA */
    2761             :         [2688+0x14] = 0x2C95,   /* U+2C94: COPTIC CAPITAL LETTER KAPA */
    2762             :         [2688+0x16] = 0x2C97,   /* U+2C96: COPTIC CAPITAL LETTER LAULA */
    2763             :         [2688+0x18] = 0x2C99,   /* U+2C98: COPTIC CAPITAL LETTER MI */
    2764             :         [2688+0x1A] = 0x2C9B,   /* U+2C9A: COPTIC CAPITAL LETTER NI */
    2765             :         [2688+0x1C] = 0x2C9D,   /* U+2C9C: COPTIC CAPITAL LETTER KSI */
    2766             :         [2688+0x1E] = 0x2C9F,   /* U+2C9E: COPTIC CAPITAL LETTER O */
    2767             :         [2688+0x20] = 0x2CA1,   /* U+2CA0: COPTIC CAPITAL LETTER PI */
    2768             :         [2688+0x22] = 0x2CA3,   /* U+2CA2: COPTIC CAPITAL LETTER RO */
    2769             :         [2688+0x24] = 0x2CA5,   /* U+2CA4: COPTIC CAPITAL LETTER SIMA */
    2770             :         [2688+0x26] = 0x2CA7,   /* U+2CA6: COPTIC CAPITAL LETTER TAU */
    2771             :         [2688+0x28] = 0x2CA9,   /* U+2CA8: COPTIC CAPITAL LETTER UA */
    2772             :         [2688+0x2A] = 0x2CAB,   /* U+2CAA: COPTIC CAPITAL LETTER FI */
    2773             :         [2688+0x2C] = 0x2CAD,   /* U+2CAC: COPTIC CAPITAL LETTER KHI */
    2774             :         [2688+0x2E] = 0x2CAF,   /* U+2CAE: COPTIC CAPITAL LETTER PSI */
    2775             :         [2688+0x30] = 0x2CB1,   /* U+2CB0: COPTIC CAPITAL LETTER OOU */
    2776             :         [2688+0x32] = 0x2CB3,   /* U+2CB2: COPTIC CAPITAL LETTER DIALECT-P ALEF */
    2777             :         [2688+0x34] = 0x2CB5,   /* U+2CB4: COPTIC CAPITAL LETTER OLD COPTIC AIN */
    2778             :         [2688+0x36] = 0x2CB7,   /* U+2CB6: COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */
    2779             :         [2688+0x38] = 0x2CB9,   /* U+2CB8: COPTIC CAPITAL LETTER DIALECT-P KAPA */
    2780             :         [2688+0x3A] = 0x2CBB,   /* U+2CBA: COPTIC CAPITAL LETTER DIALECT-P NI */
    2781             :         [2688+0x3C] = 0x2CBD,   /* U+2CBC: COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */
    2782             :         [2688+0x3E] = 0x2CBF,   /* U+2CBE: COPTIC CAPITAL LETTER OLD COPTIC OOU */
    2783             :         [2176+0x33] = 2752 - 0x80,      /* 342 263 ... */
    2784             :         [2752+0x00] = 0x2CC1,   /* U+2CC0: COPTIC CAPITAL LETTER SAMPI */
    2785             :         [2752+0x02] = 0x2CC3,   /* U+2CC2: COPTIC CAPITAL LETTER CROSSED SHEI */
    2786             :         [2752+0x04] = 0x2CC5,   /* U+2CC4: COPTIC CAPITAL LETTER OLD COPTIC SHEI */
    2787             :         [2752+0x06] = 0x2CC7,   /* U+2CC6: COPTIC CAPITAL LETTER OLD COPTIC ESH */
    2788             :         [2752+0x08] = 0x2CC9,   /* U+2CC8: COPTIC CAPITAL LETTER AKHMIMIC KHEI */
    2789             :         [2752+0x0A] = 0x2CCB,   /* U+2CCA: COPTIC CAPITAL LETTER DIALECT-P HORI */
    2790             :         [2752+0x0C] = 0x2CCD,   /* U+2CCC: COPTIC CAPITAL LETTER OLD COPTIC HORI */
    2791             :         [2752+0x0E] = 0x2CCF,   /* U+2CCE: COPTIC CAPITAL LETTER OLD COPTIC HA */
    2792             :         [2752+0x10] = 0x2CD1,   /* U+2CD0: COPTIC CAPITAL LETTER L-SHAPED HA */
    2793             :         [2752+0x12] = 0x2CD3,   /* U+2CD2: COPTIC CAPITAL LETTER OLD COPTIC HEI */
    2794             :         [2752+0x14] = 0x2CD5,   /* U+2CD4: COPTIC CAPITAL LETTER OLD COPTIC HAT */
    2795             :         [2752+0x16] = 0x2CD7,   /* U+2CD6: COPTIC CAPITAL LETTER OLD COPTIC GANGIA */
    2796             :         [2752+0x18] = 0x2CD9,   /* U+2CD8: COPTIC CAPITAL LETTER OLD COPTIC DJA */
    2797             :         [2752+0x1A] = 0x2CDB,   /* U+2CDA: COPTIC CAPITAL LETTER OLD COPTIC SHIMA */
    2798             :         [2752+0x1C] = 0x2CDD,   /* U+2CDC: COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */
    2799             :         [2752+0x1E] = 0x2CDF,   /* U+2CDE: COPTIC CAPITAL LETTER OLD NUBIAN NGI */
    2800             :         [2752+0x20] = 0x2CE1,   /* U+2CE0: COPTIC CAPITAL LETTER OLD NUBIAN NYI */
    2801             :         [2752+0x22] = 0x2CE3,   /* U+2CE2: COPTIC CAPITAL LETTER OLD NUBIAN WAU */
    2802             :         [2752+0x2B] = 0x2CEC,   /* U+2CEB: COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */
    2803             :         [2752+0x2D] = 0x2CEE,   /* U+2CED: COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */
    2804             :         [2752+0x32] = 0x2CF3,   /* U+2CF2: COPTIC CAPITAL LETTER BOHAIRIC KHEI */
    2805             :         [0xEA] = 2816 - 0x80,   /* 352 ... */
    2806             :         [2816+0x19] = 2880 - 0x80,      /* 352 231 ... */
    2807             :         [2880+0x00] = 0xA641,   /* U+A640: CYRILLIC CAPITAL LETTER ZEMLYA */
    2808             :         [2880+0x02] = 0xA643,   /* U+A642: CYRILLIC CAPITAL LETTER DZELO */
    2809             :         [2880+0x04] = 0xA645,   /* U+A644: CYRILLIC CAPITAL LETTER REVERSED DZE */
    2810             :         [2880+0x06] = 0xA647,   /* U+A646: CYRILLIC CAPITAL LETTER IOTA */
    2811             :         [2880+0x08] = 0xA649,   /* U+A648: CYRILLIC CAPITAL LETTER DJERV */
    2812             :         [2880+0x0A] = 0xA64B,   /* U+A64A: CYRILLIC CAPITAL LETTER MONOGRAPH UK */
    2813             :         [2880+0x0C] = 0xA64D,   /* U+A64C: CYRILLIC CAPITAL LETTER BROAD OMEGA */
    2814             :         [2880+0x0E] = 0xA64F,   /* U+A64E: CYRILLIC CAPITAL LETTER NEUTRAL YER */
    2815             :         [2880+0x10] = 0xA651,   /* U+A650: CYRILLIC CAPITAL LETTER YERU WITH BACK YER */
    2816             :         [2880+0x12] = 0xA653,   /* U+A652: CYRILLIC CAPITAL LETTER IOTIFIED YAT */
    2817             :         [2880+0x14] = 0xA655,   /* U+A654: CYRILLIC CAPITAL LETTER REVERSED YU */
    2818             :         [2880+0x16] = 0xA657,   /* U+A656: CYRILLIC CAPITAL LETTER IOTIFIED A */
    2819             :         [2880+0x18] = 0xA659,   /* U+A658: CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */
    2820             :         [2880+0x1A] = 0xA65B,   /* U+A65A: CYRILLIC CAPITAL LETTER BLENDED YUS */
    2821             :         [2880+0x1C] = 0xA65D,   /* U+A65C: CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */
    2822             :         [2880+0x1E] = 0xA65F,   /* U+A65E: CYRILLIC CAPITAL LETTER YN */
    2823             :         [2880+0x20] = 0xA661,   /* U+A660: CYRILLIC CAPITAL LETTER REVERSED TSE */
    2824             :         [2880+0x22] = 0xA663,   /* U+A662: CYRILLIC CAPITAL LETTER SOFT DE */
    2825             :         [2880+0x24] = 0xA665,   /* U+A664: CYRILLIC CAPITAL LETTER SOFT EL */
    2826             :         [2880+0x26] = 0xA667,   /* U+A666: CYRILLIC CAPITAL LETTER SOFT EM */
    2827             :         [2880+0x28] = 0xA669,   /* U+A668: CYRILLIC CAPITAL LETTER MONOCULAR O */
    2828             :         [2880+0x2A] = 0xA66B,   /* U+A66A: CYRILLIC CAPITAL LETTER BINOCULAR O */
    2829             :         [2880+0x2C] = 0xA66D,   /* U+A66C: CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */
    2830             :         [2816+0x1A] = 2944 - 0x80,      /* 352 232 ... */
    2831             :         [2944+0x00] = 0xA681,   /* U+A680: CYRILLIC CAPITAL LETTER DWE */
    2832             :         [2944+0x02] = 0xA683,   /* U+A682: CYRILLIC CAPITAL LETTER DZWE */
    2833             :         [2944+0x04] = 0xA685,   /* U+A684: CYRILLIC CAPITAL LETTER ZHWE */
    2834             :         [2944+0x06] = 0xA687,   /* U+A686: CYRILLIC CAPITAL LETTER CCHE */
    2835             :         [2944+0x08] = 0xA689,   /* U+A688: CYRILLIC CAPITAL LETTER DZZE */
    2836             :         [2944+0x0A] = 0xA68B,   /* U+A68A: CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */
    2837             :         [2944+0x0C] = 0xA68D,   /* U+A68C: CYRILLIC CAPITAL LETTER TWE */
    2838             :         [2944+0x0E] = 0xA68F,   /* U+A68E: CYRILLIC CAPITAL LETTER TSWE */
    2839             :         [2944+0x10] = 0xA691,   /* U+A690: CYRILLIC CAPITAL LETTER TSSE */
    2840             :         [2944+0x12] = 0xA693,   /* U+A692: CYRILLIC CAPITAL LETTER TCHE */
    2841             :         [2944+0x14] = 0xA695,   /* U+A694: CYRILLIC CAPITAL LETTER HWE */
    2842             :         [2944+0x16] = 0xA697,   /* U+A696: CYRILLIC CAPITAL LETTER SHWE */
    2843             :         [2944+0x18] = 0xA699,   /* U+A698: CYRILLIC CAPITAL LETTER DOUBLE O */
    2844             :         [2944+0x1A] = 0xA69B,   /* U+A69A: CYRILLIC CAPITAL LETTER CROSSED O */
    2845             :         [2816+0x1C] = 3008 - 0x80,      /* 352 234 ... */
    2846             :         [3008+0x22] = 0xA723,   /* U+A722: LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */
    2847             :         [3008+0x24] = 0xA725,   /* U+A724: LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */
    2848             :         [3008+0x26] = 0xA727,   /* U+A726: LATIN CAPITAL LETTER HENG */
    2849             :         [3008+0x28] = 0xA729,   /* U+A728: LATIN CAPITAL LETTER TZ */
    2850             :         [3008+0x2A] = 0xA72B,   /* U+A72A: LATIN CAPITAL LETTER TRESILLO */
    2851             :         [3008+0x2C] = 0xA72D,   /* U+A72C: LATIN CAPITAL LETTER CUATRILLO */
    2852             :         [3008+0x2E] = 0xA72F,   /* U+A72E: LATIN CAPITAL LETTER CUATRILLO WITH COMMA */
    2853             :         [3008+0x32] = 0xA733,   /* U+A732: LATIN CAPITAL LETTER AA */
    2854             :         [3008+0x34] = 0xA735,   /* U+A734: LATIN CAPITAL LETTER AO */
    2855             :         [3008+0x36] = 0xA737,   /* U+A736: LATIN CAPITAL LETTER AU */
    2856             :         [3008+0x38] = 0xA739,   /* U+A738: LATIN CAPITAL LETTER AV */
    2857             :         [3008+0x3A] = 0xA73B,   /* U+A73A: LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */
    2858             :         [3008+0x3C] = 0xA73D,   /* U+A73C: LATIN CAPITAL LETTER AY */
    2859             :         [3008+0x3E] = 0xA73F,   /* U+A73E: LATIN CAPITAL LETTER REVERSED C WITH DOT */
    2860             :         [2816+0x1D] = 3072 - 0x80,      /* 352 235 ... */
    2861             :         [3072+0x00] = 0xA741,   /* U+A740: LATIN CAPITAL LETTER K WITH STROKE */
    2862             :         [3072+0x02] = 0xA743,   /* U+A742: LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */
    2863             :         [3072+0x04] = 0xA745,   /* U+A744: LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */
    2864             :         [3072+0x06] = 0xA747,   /* U+A746: LATIN CAPITAL LETTER BROKEN L */
    2865             :         [3072+0x08] = 0xA749,   /* U+A748: LATIN CAPITAL LETTER L WITH HIGH STROKE */
    2866             :         [3072+0x0A] = 0xA74B,   /* U+A74A: LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */
    2867             :         [3072+0x0C] = 0xA74D,   /* U+A74C: LATIN CAPITAL LETTER O WITH LOOP */
    2868             :         [3072+0x0E] = 0xA74F,   /* U+A74E: LATIN CAPITAL LETTER OO */
    2869             :         [3072+0x10] = 0xA751,   /* U+A750: LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */
    2870             :         [3072+0x12] = 0xA753,   /* U+A752: LATIN CAPITAL LETTER P WITH FLOURISH */
    2871             :         [3072+0x14] = 0xA755,   /* U+A754: LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */
    2872             :         [3072+0x16] = 0xA757,   /* U+A756: LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */
    2873             :         [3072+0x18] = 0xA759,   /* U+A758: LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */
    2874             :         [3072+0x1A] = 0xA75B,   /* U+A75A: LATIN CAPITAL LETTER R ROTUNDA */
    2875             :         [3072+0x1C] = 0xA75D,   /* U+A75C: LATIN CAPITAL LETTER RUM ROTUNDA */
    2876             :         [3072+0x1E] = 0xA75F,   /* U+A75E: LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */
    2877             :         [3072+0x20] = 0xA761,   /* U+A760: LATIN CAPITAL LETTER VY */
    2878             :         [3072+0x22] = 0xA763,   /* U+A762: LATIN CAPITAL LETTER VISIGOTHIC Z */
    2879             :         [3072+0x24] = 0xA765,   /* U+A764: LATIN CAPITAL LETTER THORN WITH STROKE */
    2880             :         [3072+0x26] = 0xA767,   /* U+A766: LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */
    2881             :         [3072+0x28] = 0xA769,   /* U+A768: LATIN CAPITAL LETTER VEND */
    2882             :         [3072+0x2A] = 0xA76B,   /* U+A76A: LATIN CAPITAL LETTER ET */
    2883             :         [3072+0x2C] = 0xA76D,   /* U+A76C: LATIN CAPITAL LETTER IS */
    2884             :         [3072+0x2E] = 0xA76F,   /* U+A76E: LATIN CAPITAL LETTER CON */
    2885             :         [3072+0x39] = 0xA77A,   /* U+A779: LATIN CAPITAL LETTER INSULAR D */
    2886             :         [3072+0x3B] = 0xA77C,   /* U+A77B: LATIN CAPITAL LETTER INSULAR F */
    2887             :         [3072+0x3D] = 0x1D79,   /* U+A77D: LATIN CAPITAL LETTER INSULAR G */
    2888             :         [3072+0x3E] = 0xA77F,   /* U+A77E: LATIN CAPITAL LETTER TURNED INSULAR G */
    2889             :         [2816+0x1E] = 3136 - 0x80,      /* 352 236 ... */
    2890             :         [3136+0x00] = 0xA781,   /* U+A780: LATIN CAPITAL LETTER TURNED L */
    2891             :         [3136+0x02] = 0xA783,   /* U+A782: LATIN CAPITAL LETTER INSULAR R */
    2892             :         [3136+0x04] = 0xA785,   /* U+A784: LATIN CAPITAL LETTER INSULAR S */
    2893             :         [3136+0x06] = 0xA787,   /* U+A786: LATIN CAPITAL LETTER INSULAR T */
    2894             :         [3136+0x0B] = 0xA78C,   /* U+A78B: LATIN CAPITAL LETTER SALTILLO */
    2895             :         [3136+0x0D] = 0x0265,   /* U+A78D: LATIN CAPITAL LETTER TURNED H */
    2896             :         [3136+0x10] = 0xA791,   /* U+A790: LATIN CAPITAL LETTER N WITH DESCENDER */
    2897             :         [3136+0x12] = 0xA793,   /* U+A792: LATIN CAPITAL LETTER C WITH BAR */
    2898             :         [3136+0x16] = 0xA797,   /* U+A796: LATIN CAPITAL LETTER B WITH FLOURISH */
    2899             :         [3136+0x18] = 0xA799,   /* U+A798: LATIN CAPITAL LETTER F WITH STROKE */
    2900             :         [3136+0x1A] = 0xA79B,   /* U+A79A: LATIN CAPITAL LETTER VOLAPUK AE */
    2901             :         [3136+0x1C] = 0xA79D,   /* U+A79C: LATIN CAPITAL LETTER VOLAPUK OE */
    2902             :         [3136+0x1E] = 0xA79F,   /* U+A79E: LATIN CAPITAL LETTER VOLAPUK UE */
    2903             :         [3136+0x20] = 0xA7A1,   /* U+A7A0: LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */
    2904             :         [3136+0x22] = 0xA7A3,   /* U+A7A2: LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */
    2905             :         [3136+0x24] = 0xA7A5,   /* U+A7A4: LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */
    2906             :         [3136+0x26] = 0xA7A7,   /* U+A7A6: LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */
    2907             :         [3136+0x28] = 0xA7A9,   /* U+A7A8: LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */
    2908             :         [3136+0x2A] = 0x0266,   /* U+A7AA: LATIN CAPITAL LETTER H WITH HOOK */
    2909             :         [3136+0x2B] = 0x025C,   /* U+A7AB: LATIN CAPITAL LETTER REVERSED OPEN E */
    2910             :         [3136+0x2C] = 0x0261,   /* U+A7AC: LATIN CAPITAL LETTER SCRIPT G */
    2911             :         [3136+0x2D] = 0x026C,   /* U+A7AD: LATIN CAPITAL LETTER L WITH BELT */
    2912             :         [3136+0x2E] = 0x026A,   /* U+A7AE: LATIN CAPITAL LETTER SMALL CAPITAL I */
    2913             :         [3136+0x30] = 0x029E,   /* U+A7B0: LATIN CAPITAL LETTER TURNED K */
    2914             :         [3136+0x31] = 0x0287,   /* U+A7B1: LATIN CAPITAL LETTER TURNED T */
    2915             :         [3136+0x32] = 0x029D,   /* U+A7B2: LATIN CAPITAL LETTER J WITH CROSSED-TAIL */
    2916             :         [3136+0x33] = 0xAB53,   /* U+A7B3: LATIN CAPITAL LETTER CHI */
    2917             :         [3136+0x34] = 0xA7B5,   /* U+A7B4: LATIN CAPITAL LETTER BETA */
    2918             :         [3136+0x36] = 0xA7B7,   /* U+A7B6: LATIN CAPITAL LETTER OMEGA */
    2919             :         [3136+0x38] = 0xA7B9,   /* U+A7B8: LATIN CAPITAL LETTER U WITH STROKE */
    2920             :         [3136+0x3A] = 0xA7BB,   /* U+A7BA: LATIN CAPITAL LETTER GLOTTAL A */
    2921             :         [3136+0x3C] = 0xA7BD,   /* U+A7BC: LATIN CAPITAL LETTER GLOTTAL I */
    2922             :         [3136+0x3E] = 0xA7BF,   /* U+A7BE: LATIN CAPITAL LETTER GLOTTAL U */
    2923             :         [2816+0x1F] = 3200 - 0x80,      /* 352 237 ... */
    2924             :         [3200+0x00] = 0xA7C1,   /* U+A7C0: LATIN CAPITAL LETTER OLD POLISH O */
    2925             :         [3200+0x02] = 0xA7C3,   /* U+A7C2: LATIN CAPITAL LETTER ANGLICANA W */
    2926             :         [3200+0x04] = 0xA794,   /* U+A7C4: LATIN CAPITAL LETTER C WITH PALATAL HOOK */
    2927             :         [3200+0x05] = 0x0282,   /* U+A7C5: LATIN CAPITAL LETTER S WITH HOOK */
    2928             :         [3200+0x06] = 0x1D8E,   /* U+A7C6: LATIN CAPITAL LETTER Z WITH PALATAL HOOK */
    2929             :         [3200+0x07] = 0xA7C8,   /* U+A7C7: LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */
    2930             :         [3200+0x09] = 0xA7CA,   /* U+A7C9: LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */
    2931             :         [3200+0x10] = 0xA7D1,   /* U+A7D0: LATIN CAPITAL LETTER CLOSED INSULAR G */
    2932             :         [3200+0x16] = 0xA7D7,   /* U+A7D6: LATIN CAPITAL LETTER MIDDLE SCOTS S */
    2933             :         [3200+0x18] = 0xA7D9,   /* U+A7D8: LATIN CAPITAL LETTER SIGMOID S */
    2934             :         [3200+0x35] = 0xA7F6,   /* U+A7F5: LATIN CAPITAL LETTER REVERSED HALF H */
    2935             :         [0xEF] = 3264 - 0x80,   /* 357 ... */
    2936             :         [3264+0x3C] = 3328 - 0x80,      /* 357 274 ... */
    2937             :         [3328+0x21] = 0xFF41,   /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
    2938             :         [3328+0x22] = 0xFF42,   /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
    2939             :         [3328+0x23] = 0xFF43,   /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
    2940             :         [3328+0x24] = 0xFF44,   /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
    2941             :         [3328+0x25] = 0xFF45,   /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
    2942             :         [3328+0x26] = 0xFF46,   /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
    2943             :         [3328+0x27] = 0xFF47,   /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
    2944             :         [3328+0x28] = 0xFF48,   /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
    2945             :         [3328+0x29] = 0xFF49,   /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
    2946             :         [3328+0x2A] = 0xFF4A,   /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
    2947             :         [3328+0x2B] = 0xFF4B,   /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
    2948             :         [3328+0x2C] = 0xFF4C,   /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
    2949             :         [3328+0x2D] = 0xFF4D,   /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
    2950             :         [3328+0x2E] = 0xFF4E,   /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
    2951             :         [3328+0x2F] = 0xFF4F,   /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
    2952             :         [3328+0x30] = 0xFF50,   /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
    2953             :         [3328+0x31] = 0xFF51,   /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
    2954             :         [3328+0x32] = 0xFF52,   /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
    2955             :         [3328+0x33] = 0xFF53,   /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
    2956             :         [3328+0x34] = 0xFF54,   /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
    2957             :         [3328+0x35] = 0xFF55,   /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
    2958             :         [3328+0x36] = 0xFF56,   /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
    2959             :         [3328+0x37] = 0xFF57,   /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
    2960             :         [3328+0x38] = 0xFF58,   /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
    2961             :         [3328+0x39] = 0xFF59,   /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
    2962             :         [3328+0x3A] = 0xFF5A,   /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
    2963             :         [0xF0] = 3392 - 0x80,   /* 360 ... */
    2964             :         [3392+0x10] = 3456 - 0x80,      /* 360 220 ... */
    2965             :         [3456+0x10] = 3520 - 0x80,      /* 360 220 220 ... */
    2966             :         [3520+0x00] = 0x10428,  /* U+10400: DESERET CAPITAL LETTER LONG I */
    2967             :         [3520+0x01] = 0x10429,  /* U+10401: DESERET CAPITAL LETTER LONG E */
    2968             :         [3520+0x02] = 0x1042A,  /* U+10402: DESERET CAPITAL LETTER LONG A */
    2969             :         [3520+0x03] = 0x1042B,  /* U+10403: DESERET CAPITAL LETTER LONG AH */
    2970             :         [3520+0x04] = 0x1042C,  /* U+10404: DESERET CAPITAL LETTER LONG O */
    2971             :         [3520+0x05] = 0x1042D,  /* U+10405: DESERET CAPITAL LETTER LONG OO */
    2972             :         [3520+0x06] = 0x1042E,  /* U+10406: DESERET CAPITAL LETTER SHORT I */
    2973             :         [3520+0x07] = 0x1042F,  /* U+10407: DESERET CAPITAL LETTER SHORT E */
    2974             :         [3520+0x08] = 0x10430,  /* U+10408: DESERET CAPITAL LETTER SHORT A */
    2975             :         [3520+0x09] = 0x10431,  /* U+10409: DESERET CAPITAL LETTER SHORT AH */
    2976             :         [3520+0x0A] = 0x10432,  /* U+1040A: DESERET CAPITAL LETTER SHORT O */
    2977             :         [3520+0x0B] = 0x10433,  /* U+1040B: DESERET CAPITAL LETTER SHORT OO */
    2978             :         [3520+0x0C] = 0x10434,  /* U+1040C: DESERET CAPITAL LETTER AY */
    2979             :         [3520+0x0D] = 0x10435,  /* U+1040D: DESERET CAPITAL LETTER OW */
    2980             :         [3520+0x0E] = 0x10436,  /* U+1040E: DESERET CAPITAL LETTER WU */
    2981             :         [3520+0x0F] = 0x10437,  /* U+1040F: DESERET CAPITAL LETTER YEE */
    2982             :         [3520+0x10] = 0x10438,  /* U+10410: DESERET CAPITAL LETTER H */
    2983             :         [3520+0x11] = 0x10439,  /* U+10411: DESERET CAPITAL LETTER PEE */
    2984             :         [3520+0x12] = 0x1043A,  /* U+10412: DESERET CAPITAL LETTER BEE */
    2985             :         [3520+0x13] = 0x1043B,  /* U+10413: DESERET CAPITAL LETTER TEE */
    2986             :         [3520+0x14] = 0x1043C,  /* U+10414: DESERET CAPITAL LETTER DEE */
    2987             :         [3520+0x15] = 0x1043D,  /* U+10415: DESERET CAPITAL LETTER CHEE */
    2988             :         [3520+0x16] = 0x1043E,  /* U+10416: DESERET CAPITAL LETTER JEE */
    2989             :         [3520+0x17] = 0x1043F,  /* U+10417: DESERET CAPITAL LETTER KAY */
    2990             :         [3520+0x18] = 0x10440,  /* U+10418: DESERET CAPITAL LETTER GAY */
    2991             :         [3520+0x19] = 0x10441,  /* U+10419: DESERET CAPITAL LETTER EF */
    2992             :         [3520+0x1A] = 0x10442,  /* U+1041A: DESERET CAPITAL LETTER VEE */
    2993             :         [3520+0x1B] = 0x10443,  /* U+1041B: DESERET CAPITAL LETTER ETH */
    2994             :         [3520+0x1C] = 0x10444,  /* U+1041C: DESERET CAPITAL LETTER THEE */
    2995             :         [3520+0x1D] = 0x10445,  /* U+1041D: DESERET CAPITAL LETTER ES */
    2996             :         [3520+0x1E] = 0x10446,  /* U+1041E: DESERET CAPITAL LETTER ZEE */
    2997             :         [3520+0x1F] = 0x10447,  /* U+1041F: DESERET CAPITAL LETTER ESH */
    2998             :         [3520+0x20] = 0x10448,  /* U+10420: DESERET CAPITAL LETTER ZHEE */
    2999             :         [3520+0x21] = 0x10449,  /* U+10421: DESERET CAPITAL LETTER ER */
    3000             :         [3520+0x22] = 0x1044A,  /* U+10422: DESERET CAPITAL LETTER EL */
    3001             :         [3520+0x23] = 0x1044B,  /* U+10423: DESERET CAPITAL LETTER EM */
    3002             :         [3520+0x24] = 0x1044C,  /* U+10424: DESERET CAPITAL LETTER EN */
    3003             :         [3520+0x25] = 0x1044D,  /* U+10425: DESERET CAPITAL LETTER ENG */
    3004             :         [3520+0x26] = 0x1044E,  /* U+10426: DESERET CAPITAL LETTER OI */
    3005             :         [3520+0x27] = 0x1044F,  /* U+10427: DESERET CAPITAL LETTER EW */
    3006             :         [3456+0x12] = 3584 - 0x80,      /* 360 220 222 ... */
    3007             :         [3584+0x30] = 0x104D8,  /* U+104B0: OSAGE CAPITAL LETTER A */
    3008             :         [3584+0x31] = 0x104D9,  /* U+104B1: OSAGE CAPITAL LETTER AI */
    3009             :         [3584+0x32] = 0x104DA,  /* U+104B2: OSAGE CAPITAL LETTER AIN */
    3010             :         [3584+0x33] = 0x104DB,  /* U+104B3: OSAGE CAPITAL LETTER AH */
    3011             :         [3584+0x34] = 0x104DC,  /* U+104B4: OSAGE CAPITAL LETTER BRA */
    3012             :         [3584+0x35] = 0x104DD,  /* U+104B5: OSAGE CAPITAL LETTER CHA */
    3013             :         [3584+0x36] = 0x104DE,  /* U+104B6: OSAGE CAPITAL LETTER EHCHA */
    3014             :         [3584+0x37] = 0x104DF,  /* U+104B7: OSAGE CAPITAL LETTER E */
    3015             :         [3584+0x38] = 0x104E0,  /* U+104B8: OSAGE CAPITAL LETTER EIN */
    3016             :         [3584+0x39] = 0x104E1,  /* U+104B9: OSAGE CAPITAL LETTER HA */
    3017             :         [3584+0x3A] = 0x104E2,  /* U+104BA: OSAGE CAPITAL LETTER HYA */
    3018             :         [3584+0x3B] = 0x104E3,  /* U+104BB: OSAGE CAPITAL LETTER I */
    3019             :         [3584+0x3C] = 0x104E4,  /* U+104BC: OSAGE CAPITAL LETTER KA */
    3020             :         [3584+0x3D] = 0x104E5,  /* U+104BD: OSAGE CAPITAL LETTER EHKA */
    3021             :         [3584+0x3E] = 0x104E6,  /* U+104BE: OSAGE CAPITAL LETTER KYA */
    3022             :         [3584+0x3F] = 0x104E7,  /* U+104BF: OSAGE CAPITAL LETTER LA */
    3023             :         [3456+0x13] = 3648 - 0x80,      /* 360 220 223 ... */
    3024             :         [3648+0x00] = 0x104E8,  /* U+104C0: OSAGE CAPITAL LETTER MA */
    3025             :         [3648+0x01] = 0x104E9,  /* U+104C1: OSAGE CAPITAL LETTER NA */
    3026             :         [3648+0x02] = 0x104EA,  /* U+104C2: OSAGE CAPITAL LETTER O */
    3027             :         [3648+0x03] = 0x104EB,  /* U+104C3: OSAGE CAPITAL LETTER OIN */
    3028             :         [3648+0x04] = 0x104EC,  /* U+104C4: OSAGE CAPITAL LETTER PA */
    3029             :         [3648+0x05] = 0x104ED,  /* U+104C5: OSAGE CAPITAL LETTER EHPA */
    3030             :         [3648+0x06] = 0x104EE,  /* U+104C6: OSAGE CAPITAL LETTER SA */
    3031             :         [3648+0x07] = 0x104EF,  /* U+104C7: OSAGE CAPITAL LETTER SHA */
    3032             :         [3648+0x08] = 0x104F0,  /* U+104C8: OSAGE CAPITAL LETTER TA */
    3033             :         [3648+0x09] = 0x104F1,  /* U+104C9: OSAGE CAPITAL LETTER EHTA */
    3034             :         [3648+0x0A] = 0x104F2,  /* U+104CA: OSAGE CAPITAL LETTER TSA */
    3035             :         [3648+0x0B] = 0x104F3,  /* U+104CB: OSAGE CAPITAL LETTER EHTSA */
    3036             :         [3648+0x0C] = 0x104F4,  /* U+104CC: OSAGE CAPITAL LETTER TSHA */
    3037             :         [3648+0x0D] = 0x104F5,  /* U+104CD: OSAGE CAPITAL LETTER DHA */
    3038             :         [3648+0x0E] = 0x104F6,  /* U+104CE: OSAGE CAPITAL LETTER U */
    3039             :         [3648+0x0F] = 0x104F7,  /* U+104CF: OSAGE CAPITAL LETTER WA */
    3040             :         [3648+0x10] = 0x104F8,  /* U+104D0: OSAGE CAPITAL LETTER KHA */
    3041             :         [3648+0x11] = 0x104F9,  /* U+104D1: OSAGE CAPITAL LETTER GHA */
    3042             :         [3648+0x12] = 0x104FA,  /* U+104D2: OSAGE CAPITAL LETTER ZA */
    3043             :         [3648+0x13] = 0x104FB,  /* U+104D3: OSAGE CAPITAL LETTER ZHA */
    3044             :         [3456+0x15] = 3712 - 0x80,      /* 360 220 225 ... */
    3045             :         [3712+0x30] = 0x10597,  /* U+10570: VITHKUQI CAPITAL LETTER A */
    3046             :         [3712+0x31] = 0x10598,  /* U+10571: VITHKUQI CAPITAL LETTER BBE */
    3047             :         [3712+0x32] = 0x10599,  /* U+10572: VITHKUQI CAPITAL LETTER BE */
    3048             :         [3712+0x33] = 0x1059A,  /* U+10573: VITHKUQI CAPITAL LETTER CE */
    3049             :         [3712+0x34] = 0x1059B,  /* U+10574: VITHKUQI CAPITAL LETTER CHE */
    3050             :         [3712+0x35] = 0x1059C,  /* U+10575: VITHKUQI CAPITAL LETTER DE */
    3051             :         [3712+0x36] = 0x1059D,  /* U+10576: VITHKUQI CAPITAL LETTER DHE */
    3052             :         [3712+0x37] = 0x1059E,  /* U+10577: VITHKUQI CAPITAL LETTER EI */
    3053             :         [3712+0x38] = 0x1059F,  /* U+10578: VITHKUQI CAPITAL LETTER E */
    3054             :         [3712+0x39] = 0x105A0,  /* U+10579: VITHKUQI CAPITAL LETTER FE */
    3055             :         [3712+0x3A] = 0x105A1,  /* U+1057A: VITHKUQI CAPITAL LETTER GA */
    3056             :         [3712+0x3C] = 0x105A3,  /* U+1057C: VITHKUQI CAPITAL LETTER HA */
    3057             :         [3712+0x3D] = 0x105A4,  /* U+1057D: VITHKUQI CAPITAL LETTER HHA */
    3058             :         [3712+0x3E] = 0x105A5,  /* U+1057E: VITHKUQI CAPITAL LETTER I */
    3059             :         [3712+0x3F] = 0x105A6,  /* U+1057F: VITHKUQI CAPITAL LETTER IJE */
    3060             :         [3456+0x16] = 3776 - 0x80,      /* 360 220 226 ... */
    3061             :         [3776+0x00] = 0x105A7,  /* U+10580: VITHKUQI CAPITAL LETTER JE */
    3062             :         [3776+0x01] = 0x105A8,  /* U+10581: VITHKUQI CAPITAL LETTER KA */
    3063             :         [3776+0x02] = 0x105A9,  /* U+10582: VITHKUQI CAPITAL LETTER LA */
    3064             :         [3776+0x03] = 0x105AA,  /* U+10583: VITHKUQI CAPITAL LETTER LLA */
    3065             :         [3776+0x04] = 0x105AB,  /* U+10584: VITHKUQI CAPITAL LETTER ME */
    3066             :         [3776+0x05] = 0x105AC,  /* U+10585: VITHKUQI CAPITAL LETTER NE */
    3067             :         [3776+0x06] = 0x105AD,  /* U+10586: VITHKUQI CAPITAL LETTER NJE */
    3068             :         [3776+0x07] = 0x105AE,  /* U+10587: VITHKUQI CAPITAL LETTER O */
    3069             :         [3776+0x08] = 0x105AF,  /* U+10588: VITHKUQI CAPITAL LETTER PE */
    3070             :         [3776+0x09] = 0x105B0,  /* U+10589: VITHKUQI CAPITAL LETTER QA */
    3071             :         [3776+0x0A] = 0x105B1,  /* U+1058A: VITHKUQI CAPITAL LETTER RE */
    3072             :         [3776+0x0C] = 0x105B3,  /* U+1058C: VITHKUQI CAPITAL LETTER SE */
    3073             :         [3776+0x0D] = 0x105B4,  /* U+1058D: VITHKUQI CAPITAL LETTER SHE */
    3074             :         [3776+0x0E] = 0x105B5,  /* U+1058E: VITHKUQI CAPITAL LETTER TE */
    3075             :         [3776+0x0F] = 0x105B6,  /* U+1058F: VITHKUQI CAPITAL LETTER THE */
    3076             :         [3776+0x10] = 0x105B7,  /* U+10590: VITHKUQI CAPITAL LETTER U */
    3077             :         [3776+0x11] = 0x105B8,  /* U+10591: VITHKUQI CAPITAL LETTER VE */
    3078             :         [3776+0x12] = 0x105B9,  /* U+10592: VITHKUQI CAPITAL LETTER XE */
    3079             :         [3776+0x14] = 0x105BB,  /* U+10594: VITHKUQI CAPITAL LETTER Y */
    3080             :         [3776+0x15] = 0x105BC,  /* U+10595: VITHKUQI CAPITAL LETTER ZE */
    3081             :         [3456+0x32] = 3840 - 0x80,      /* 360 220 262 ... */
    3082             :         [3840+0x00] = 0x10CC0,  /* U+10C80: OLD HUNGARIAN CAPITAL LETTER A */
    3083             :         [3840+0x01] = 0x10CC1,  /* U+10C81: OLD HUNGARIAN CAPITAL LETTER AA */
    3084             :         [3840+0x02] = 0x10CC2,  /* U+10C82: OLD HUNGARIAN CAPITAL LETTER EB */
    3085             :         [3840+0x03] = 0x10CC3,  /* U+10C83: OLD HUNGARIAN CAPITAL LETTER AMB */
    3086             :         [3840+0x04] = 0x10CC4,  /* U+10C84: OLD HUNGARIAN CAPITAL LETTER EC */
    3087             :         [3840+0x05] = 0x10CC5,  /* U+10C85: OLD HUNGARIAN CAPITAL LETTER ENC */
    3088             :         [3840+0x06] = 0x10CC6,  /* U+10C86: OLD HUNGARIAN CAPITAL LETTER ECS */
    3089             :         [3840+0x07] = 0x10CC7,  /* U+10C87: OLD HUNGARIAN CAPITAL LETTER ED */
    3090             :         [3840+0x08] = 0x10CC8,  /* U+10C88: OLD HUNGARIAN CAPITAL LETTER AND */
    3091             :         [3840+0x09] = 0x10CC9,  /* U+10C89: OLD HUNGARIAN CAPITAL LETTER E */
    3092             :         [3840+0x0A] = 0x10CCA,  /* U+10C8A: OLD HUNGARIAN CAPITAL LETTER CLOSE E */
    3093             :         [3840+0x0B] = 0x10CCB,  /* U+10C8B: OLD HUNGARIAN CAPITAL LETTER EE */
    3094             :         [3840+0x0C] = 0x10CCC,  /* U+10C8C: OLD HUNGARIAN CAPITAL LETTER EF */
    3095             :         [3840+0x0D] = 0x10CCD,  /* U+10C8D: OLD HUNGARIAN CAPITAL LETTER EG */
    3096             :         [3840+0x0E] = 0x10CCE,  /* U+10C8E: OLD HUNGARIAN CAPITAL LETTER EGY */
    3097             :         [3840+0x0F] = 0x10CCF,  /* U+10C8F: OLD HUNGARIAN CAPITAL LETTER EH */
    3098             :         [3840+0x10] = 0x10CD0,  /* U+10C90: OLD HUNGARIAN CAPITAL LETTER I */
    3099             :         [3840+0x11] = 0x10CD1,  /* U+10C91: OLD HUNGARIAN CAPITAL LETTER II */
    3100             :         [3840+0x12] = 0x10CD2,  /* U+10C92: OLD HUNGARIAN CAPITAL LETTER EJ */
    3101             :         [3840+0x13] = 0x10CD3,  /* U+10C93: OLD HUNGARIAN CAPITAL LETTER EK */
    3102             :         [3840+0x14] = 0x10CD4,  /* U+10C94: OLD HUNGARIAN CAPITAL LETTER AK */
    3103             :         [3840+0x15] = 0x10CD5,  /* U+10C95: OLD HUNGARIAN CAPITAL LETTER UNK */
    3104             :         [3840+0x16] = 0x10CD6,  /* U+10C96: OLD HUNGARIAN CAPITAL LETTER EL */
    3105             :         [3840+0x17] = 0x10CD7,  /* U+10C97: OLD HUNGARIAN CAPITAL LETTER ELY */
    3106             :         [3840+0x18] = 0x10CD8,  /* U+10C98: OLD HUNGARIAN CAPITAL LETTER EM */
    3107             :         [3840+0x19] = 0x10CD9,  /* U+10C99: OLD HUNGARIAN CAPITAL LETTER EN */
    3108             :         [3840+0x1A] = 0x10CDA,  /* U+10C9A: OLD HUNGARIAN CAPITAL LETTER ENY */
    3109             :         [3840+0x1B] = 0x10CDB,  /* U+10C9B: OLD HUNGARIAN CAPITAL LETTER O */
    3110             :         [3840+0x1C] = 0x10CDC,  /* U+10C9C: OLD HUNGARIAN CAPITAL LETTER OO */
    3111             :         [3840+0x1D] = 0x10CDD,  /* U+10C9D: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE */
    3112             :         [3840+0x1E] = 0x10CDE,  /* U+10C9E: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE */
    3113             :         [3840+0x1F] = 0x10CDF,  /* U+10C9F: OLD HUNGARIAN CAPITAL LETTER OEE */
    3114             :         [3840+0x20] = 0x10CE0,  /* U+10CA0: OLD HUNGARIAN CAPITAL LETTER EP */
    3115             :         [3840+0x21] = 0x10CE1,  /* U+10CA1: OLD HUNGARIAN CAPITAL LETTER EMP */
    3116             :         [3840+0x22] = 0x10CE2,  /* U+10CA2: OLD HUNGARIAN CAPITAL LETTER ER */
    3117             :         [3840+0x23] = 0x10CE3,  /* U+10CA3: OLD HUNGARIAN CAPITAL LETTER SHORT ER */
    3118             :         [3840+0x24] = 0x10CE4,  /* U+10CA4: OLD HUNGARIAN CAPITAL LETTER ES */
    3119             :         [3840+0x25] = 0x10CE5,  /* U+10CA5: OLD HUNGARIAN CAPITAL LETTER ESZ */
    3120             :         [3840+0x26] = 0x10CE6,  /* U+10CA6: OLD HUNGARIAN CAPITAL LETTER ET */
    3121             :         [3840+0x27] = 0x10CE7,  /* U+10CA7: OLD HUNGARIAN CAPITAL LETTER ENT */
    3122             :         [3840+0x28] = 0x10CE8,  /* U+10CA8: OLD HUNGARIAN CAPITAL LETTER ETY */
    3123             :         [3840+0x29] = 0x10CE9,  /* U+10CA9: OLD HUNGARIAN CAPITAL LETTER ECH */
    3124             :         [3840+0x2A] = 0x10CEA,  /* U+10CAA: OLD HUNGARIAN CAPITAL LETTER U */
    3125             :         [3840+0x2B] = 0x10CEB,  /* U+10CAB: OLD HUNGARIAN CAPITAL LETTER UU */
    3126             :         [3840+0x2C] = 0x10CEC,  /* U+10CAC: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE */
    3127             :         [3840+0x2D] = 0x10CED,  /* U+10CAD: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE */
    3128             :         [3840+0x2E] = 0x10CEE,  /* U+10CAE: OLD HUNGARIAN CAPITAL LETTER EV */
    3129             :         [3840+0x2F] = 0x10CEF,  /* U+10CAF: OLD HUNGARIAN CAPITAL LETTER EZ */
    3130             :         [3840+0x30] = 0x10CF0,  /* U+10CB0: OLD HUNGARIAN CAPITAL LETTER EZS */
    3131             :         [3840+0x31] = 0x10CF1,  /* U+10CB1: OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN */
    3132             :         [3840+0x32] = 0x10CF2,  /* U+10CB2: OLD HUNGARIAN CAPITAL LETTER US */
    3133             :         [3392+0x11] = 3904 - 0x80,      /* 360 221 ... */
    3134             :         [3904+0x22] = 3968 - 0x80,      /* 360 221 242 ... */
    3135             :         [3968+0x20] = 0x118C0,  /* U+118A0: WARANG CITI CAPITAL LETTER NGAA */
    3136             :         [3968+0x21] = 0x118C1,  /* U+118A1: WARANG CITI CAPITAL LETTER A */
    3137             :         [3968+0x22] = 0x118C2,  /* U+118A2: WARANG CITI CAPITAL LETTER WI */
    3138             :         [3968+0x23] = 0x118C3,  /* U+118A3: WARANG CITI CAPITAL LETTER YU */
    3139             :         [3968+0x24] = 0x118C4,  /* U+118A4: WARANG CITI CAPITAL LETTER YA */
    3140             :         [3968+0x25] = 0x118C5,  /* U+118A5: WARANG CITI CAPITAL LETTER YO */
    3141             :         [3968+0x26] = 0x118C6,  /* U+118A6: WARANG CITI CAPITAL LETTER II */
    3142             :         [3968+0x27] = 0x118C7,  /* U+118A7: WARANG CITI CAPITAL LETTER UU */
    3143             :         [3968+0x28] = 0x118C8,  /* U+118A8: WARANG CITI CAPITAL LETTER E */
    3144             :         [3968+0x29] = 0x118C9,  /* U+118A9: WARANG CITI CAPITAL LETTER O */
    3145             :         [3968+0x2A] = 0x118CA,  /* U+118AA: WARANG CITI CAPITAL LETTER ANG */
    3146             :         [3968+0x2B] = 0x118CB,  /* U+118AB: WARANG CITI CAPITAL LETTER GA */
    3147             :         [3968+0x2C] = 0x118CC,  /* U+118AC: WARANG CITI CAPITAL LETTER KO */
    3148             :         [3968+0x2D] = 0x118CD,  /* U+118AD: WARANG CITI CAPITAL LETTER ENY */
    3149             :         [3968+0x2E] = 0x118CE,  /* U+118AE: WARANG CITI CAPITAL LETTER YUJ */
    3150             :         [3968+0x2F] = 0x118CF,  /* U+118AF: WARANG CITI CAPITAL LETTER UC */
    3151             :         [3968+0x30] = 0x118D0,  /* U+118B0: WARANG CITI CAPITAL LETTER ENN */
    3152             :         [3968+0x31] = 0x118D1,  /* U+118B1: WARANG CITI CAPITAL LETTER ODD */
    3153             :         [3968+0x32] = 0x118D2,  /* U+118B2: WARANG CITI CAPITAL LETTER TTE */
    3154             :         [3968+0x33] = 0x118D3,  /* U+118B3: WARANG CITI CAPITAL LETTER NUNG */
    3155             :         [3968+0x34] = 0x118D4,  /* U+118B4: WARANG CITI CAPITAL LETTER DA */
    3156             :         [3968+0x35] = 0x118D5,  /* U+118B5: WARANG CITI CAPITAL LETTER AT */
    3157             :         [3968+0x36] = 0x118D6,  /* U+118B6: WARANG CITI CAPITAL LETTER AM */
    3158             :         [3968+0x37] = 0x118D7,  /* U+118B7: WARANG CITI CAPITAL LETTER BU */
    3159             :         [3968+0x38] = 0x118D8,  /* U+118B8: WARANG CITI CAPITAL LETTER PU */
    3160             :         [3968+0x39] = 0x118D9,  /* U+118B9: WARANG CITI CAPITAL LETTER HIYO */
    3161             :         [3968+0x3A] = 0x118DA,  /* U+118BA: WARANG CITI CAPITAL LETTER HOLO */
    3162             :         [3968+0x3B] = 0x118DB,  /* U+118BB: WARANG CITI CAPITAL LETTER HORR */
    3163             :         [3968+0x3C] = 0x118DC,  /* U+118BC: WARANG CITI CAPITAL LETTER HAR */
    3164             :         [3968+0x3D] = 0x118DD,  /* U+118BD: WARANG CITI CAPITAL LETTER SSUU */
    3165             :         [3968+0x3E] = 0x118DE,  /* U+118BE: WARANG CITI CAPITAL LETTER SII */
    3166             :         [3968+0x3F] = 0x118DF,  /* U+118BF: WARANG CITI CAPITAL LETTER VIYO */
    3167             :         [3392+0x16] = 4032 - 0x80,      /* 360 226 ... */
    3168             :         [4032+0x39] = 4096 - 0x80,      /* 360 226 271 ... */
    3169             :         [4096+0x00] = 0x16E60,  /* U+16E40: MEDEFAIDRIN CAPITAL LETTER M */
    3170             :         [4096+0x01] = 0x16E61,  /* U+16E41: MEDEFAIDRIN CAPITAL LETTER S */
    3171             :         [4096+0x02] = 0x16E62,  /* U+16E42: MEDEFAIDRIN CAPITAL LETTER V */
    3172             :         [4096+0x03] = 0x16E63,  /* U+16E43: MEDEFAIDRIN CAPITAL LETTER W */
    3173             :         [4096+0x04] = 0x16E64,  /* U+16E44: MEDEFAIDRIN CAPITAL LETTER ATIU */
    3174             :         [4096+0x05] = 0x16E65,  /* U+16E45: MEDEFAIDRIN CAPITAL LETTER Z */
    3175             :         [4096+0x06] = 0x16E66,  /* U+16E46: MEDEFAIDRIN CAPITAL LETTER KP */
    3176             :         [4096+0x07] = 0x16E67,  /* U+16E47: MEDEFAIDRIN CAPITAL LETTER P */
    3177             :         [4096+0x08] = 0x16E68,  /* U+16E48: MEDEFAIDRIN CAPITAL LETTER T */
    3178             :         [4096+0x09] = 0x16E69,  /* U+16E49: MEDEFAIDRIN CAPITAL LETTER G */
    3179             :         [4096+0x0A] = 0x16E6A,  /* U+16E4A: MEDEFAIDRIN CAPITAL LETTER F */
    3180             :         [4096+0x0B] = 0x16E6B,  /* U+16E4B: MEDEFAIDRIN CAPITAL LETTER I */
    3181             :         [4096+0x0C] = 0x16E6C,  /* U+16E4C: MEDEFAIDRIN CAPITAL LETTER K */
    3182             :         [4096+0x0D] = 0x16E6D,  /* U+16E4D: MEDEFAIDRIN CAPITAL LETTER A */
    3183             :         [4096+0x0E] = 0x16E6E,  /* U+16E4E: MEDEFAIDRIN CAPITAL LETTER J */
    3184             :         [4096+0x0F] = 0x16E6F,  /* U+16E4F: MEDEFAIDRIN CAPITAL LETTER E */
    3185             :         [4096+0x10] = 0x16E70,  /* U+16E50: MEDEFAIDRIN CAPITAL LETTER B */
    3186             :         [4096+0x11] = 0x16E71,  /* U+16E51: MEDEFAIDRIN CAPITAL LETTER C */
    3187             :         [4096+0x12] = 0x16E72,  /* U+16E52: MEDEFAIDRIN CAPITAL LETTER U */
    3188             :         [4096+0x13] = 0x16E73,  /* U+16E53: MEDEFAIDRIN CAPITAL LETTER YU */
    3189             :         [4096+0x14] = 0x16E74,  /* U+16E54: MEDEFAIDRIN CAPITAL LETTER L */
    3190             :         [4096+0x15] = 0x16E75,  /* U+16E55: MEDEFAIDRIN CAPITAL LETTER Q */
    3191             :         [4096+0x16] = 0x16E76,  /* U+16E56: MEDEFAIDRIN CAPITAL LETTER HP */
    3192             :         [4096+0x17] = 0x16E77,  /* U+16E57: MEDEFAIDRIN CAPITAL LETTER NY */
    3193             :         [4096+0x18] = 0x16E78,  /* U+16E58: MEDEFAIDRIN CAPITAL LETTER X */
    3194             :         [4096+0x19] = 0x16E79,  /* U+16E59: MEDEFAIDRIN CAPITAL LETTER D */
    3195             :         [4096+0x1A] = 0x16E7A,  /* U+16E5A: MEDEFAIDRIN CAPITAL LETTER OE */
    3196             :         [4096+0x1B] = 0x16E7B,  /* U+16E5B: MEDEFAIDRIN CAPITAL LETTER N */
    3197             :         [4096+0x1C] = 0x16E7C,  /* U+16E5C: MEDEFAIDRIN CAPITAL LETTER R */
    3198             :         [4096+0x1D] = 0x16E7D,  /* U+16E5D: MEDEFAIDRIN CAPITAL LETTER O */
    3199             :         [4096+0x1E] = 0x16E7E,  /* U+16E5E: MEDEFAIDRIN CAPITAL LETTER AI */
    3200             :         [4096+0x1F] = 0x16E7F,  /* U+16E5F: MEDEFAIDRIN CAPITAL LETTER Y */
    3201             :         [3392+0x1E] = 4160 - 0x80,      /* 360 236 ... */
    3202             :         [4160+0x24] = 4224 - 0x80,      /* 360 236 244 ... */
    3203             :         [4224+0x00] = 0x1E922,  /* U+1E900: ADLAM CAPITAL LETTER ALIF */
    3204             :         [4224+0x01] = 0x1E923,  /* U+1E901: ADLAM CAPITAL LETTER DAALI */
    3205             :         [4224+0x02] = 0x1E924,  /* U+1E902: ADLAM CAPITAL LETTER LAAM */
    3206             :         [4224+0x03] = 0x1E925,  /* U+1E903: ADLAM CAPITAL LETTER MIIM */
    3207             :         [4224+0x04] = 0x1E926,  /* U+1E904: ADLAM CAPITAL LETTER BA */
    3208             :         [4224+0x05] = 0x1E927,  /* U+1E905: ADLAM CAPITAL LETTER SINNYIIYHE */
    3209             :         [4224+0x06] = 0x1E928,  /* U+1E906: ADLAM CAPITAL LETTER PE */
    3210             :         [4224+0x07] = 0x1E929,  /* U+1E907: ADLAM CAPITAL LETTER BHE */
    3211             :         [4224+0x08] = 0x1E92A,  /* U+1E908: ADLAM CAPITAL LETTER RA */
    3212             :         [4224+0x09] = 0x1E92B,  /* U+1E909: ADLAM CAPITAL LETTER E */
    3213             :         [4224+0x0A] = 0x1E92C,  /* U+1E90A: ADLAM CAPITAL LETTER FA */
    3214             :         [4224+0x0B] = 0x1E92D,  /* U+1E90B: ADLAM CAPITAL LETTER I */
    3215             :         [4224+0x0C] = 0x1E92E,  /* U+1E90C: ADLAM CAPITAL LETTER O */
    3216             :         [4224+0x0D] = 0x1E92F,  /* U+1E90D: ADLAM CAPITAL LETTER DHA */
    3217             :         [4224+0x0E] = 0x1E930,  /* U+1E90E: ADLAM CAPITAL LETTER YHE */
    3218             :         [4224+0x0F] = 0x1E931,  /* U+1E90F: ADLAM CAPITAL LETTER WAW */
    3219             :         [4224+0x10] = 0x1E932,  /* U+1E910: ADLAM CAPITAL LETTER NUN */
    3220             :         [4224+0x11] = 0x1E933,  /* U+1E911: ADLAM CAPITAL LETTER KAF */
    3221             :         [4224+0x12] = 0x1E934,  /* U+1E912: ADLAM CAPITAL LETTER YA */
    3222             :         [4224+0x13] = 0x1E935,  /* U+1E913: ADLAM CAPITAL LETTER U */
    3223             :         [4224+0x14] = 0x1E936,  /* U+1E914: ADLAM CAPITAL LETTER JIIM */
    3224             :         [4224+0x15] = 0x1E937,  /* U+1E915: ADLAM CAPITAL LETTER CHI */
    3225             :         [4224+0x16] = 0x1E938,  /* U+1E916: ADLAM CAPITAL LETTER HA */
    3226             :         [4224+0x17] = 0x1E939,  /* U+1E917: ADLAM CAPITAL LETTER QAAF */
    3227             :         [4224+0x18] = 0x1E93A,  /* U+1E918: ADLAM CAPITAL LETTER GA */
    3228             :         [4224+0x19] = 0x1E93B,  /* U+1E919: ADLAM CAPITAL LETTER NYA */
    3229             :         [4224+0x1A] = 0x1E93C,  /* U+1E91A: ADLAM CAPITAL LETTER TU */
    3230             :         [4224+0x1B] = 0x1E93D,  /* U+1E91B: ADLAM CAPITAL LETTER NHA */
    3231             :         [4224+0x1C] = 0x1E93E,  /* U+1E91C: ADLAM CAPITAL LETTER VA */
    3232             :         [4224+0x1D] = 0x1E93F,  /* U+1E91D: ADLAM CAPITAL LETTER KHA */
    3233             :         [4224+0x1E] = 0x1E940,  /* U+1E91E: ADLAM CAPITAL LETTER GBE */
    3234             :         [4224+0x1F] = 0x1E941,  /* U+1E91F: ADLAM CAPITAL LETTER ZAL */
    3235             :         [4224+0x20] = 0x1E942,  /* U+1E920: ADLAM CAPITAL LETTER KPO */
    3236             :         [4224+0x21] = 0x1E943,  /* U+1E921: ADLAM CAPITAL LETTER SHA */
    3237             : };
    3238             : static const int uppercase[4608] = {
    3239             :         [0x00] = 0x0000,        /* U+0000: <control> */
    3240             :         [0x01] = 0x0001,        /* U+0001: <control> */
    3241             :         [0x02] = 0x0002,        /* U+0002: <control> */
    3242             :         [0x03] = 0x0003,        /* U+0003: <control> */
    3243             :         [0x04] = 0x0004,        /* U+0004: <control> */
    3244             :         [0x05] = 0x0005,        /* U+0005: <control> */
    3245             :         [0x06] = 0x0006,        /* U+0006: <control> */
    3246             :         [0x07] = 0x0007,        /* U+0007: <control> */
    3247             :         [0x08] = 0x0008,        /* U+0008: <control> */
    3248             :         [0x09] = 0x0009,        /* U+0009: <control> */
    3249             :         [0x0A] = 0x000A,        /* U+000A: <control> */
    3250             :         [0x0B] = 0x000B,        /* U+000B: <control> */
    3251             :         [0x0C] = 0x000C,        /* U+000C: <control> */
    3252             :         [0x0D] = 0x000D,        /* U+000D: <control> */
    3253             :         [0x0E] = 0x000E,        /* U+000E: <control> */
    3254             :         [0x0F] = 0x000F,        /* U+000F: <control> */
    3255             :         [0x10] = 0x0010,        /* U+0010: <control> */
    3256             :         [0x11] = 0x0011,        /* U+0011: <control> */
    3257             :         [0x12] = 0x0012,        /* U+0012: <control> */
    3258             :         [0x13] = 0x0013,        /* U+0013: <control> */
    3259             :         [0x14] = 0x0014,        /* U+0014: <control> */
    3260             :         [0x15] = 0x0015,        /* U+0015: <control> */
    3261             :         [0x16] = 0x0016,        /* U+0016: <control> */
    3262             :         [0x17] = 0x0017,        /* U+0017: <control> */
    3263             :         [0x18] = 0x0018,        /* U+0018: <control> */
    3264             :         [0x19] = 0x0019,        /* U+0019: <control> */
    3265             :         [0x1A] = 0x001A,        /* U+001A: <control> */
    3266             :         [0x1B] = 0x001B,        /* U+001B: <control> */
    3267             :         [0x1C] = 0x001C,        /* U+001C: <control> */
    3268             :         [0x1D] = 0x001D,        /* U+001D: <control> */
    3269             :         [0x1E] = 0x001E,        /* U+001E: <control> */
    3270             :         [0x1F] = 0x001F,        /* U+001F: <control> */
    3271             :         [0x20] = 0x0020,        /* U+0020: SPACE */
    3272             :         [0x21] = 0x0021,        /* U+0021: EXCLAMATION MARK */
    3273             :         [0x22] = 0x0022,        /* U+0022: QUOTATION MARK */
    3274             :         [0x23] = 0x0023,        /* U+0023: NUMBER SIGN */
    3275             :         [0x24] = 0x0024,        /* U+0024: DOLLAR SIGN */
    3276             :         [0x25] = 0x0025,        /* U+0025: PERCENT SIGN */
    3277             :         [0x26] = 0x0026,        /* U+0026: AMPERSAND */
    3278             :         [0x27] = 0x0027,        /* U+0027: APOSTROPHE */
    3279             :         [0x28] = 0x0028,        /* U+0028: LEFT PARENTHESIS */
    3280             :         [0x29] = 0x0029,        /* U+0029: RIGHT PARENTHESIS */
    3281             :         [0x2A] = 0x002A,        /* U+002A: ASTERISK */
    3282             :         [0x2B] = 0x002B,        /* U+002B: PLUS SIGN */
    3283             :         [0x2C] = 0x002C,        /* U+002C: COMMA */
    3284             :         [0x2D] = 0x002D,        /* U+002D: HYPHEN-MINUS */
    3285             :         [0x2E] = 0x002E,        /* U+002E: FULL STOP */
    3286             :         [0x2F] = 0x002F,        /* U+002F: SOLIDUS */
    3287             :         [0x30] = 0x0030,        /* U+0030: DIGIT ZERO */
    3288             :         [0x31] = 0x0031,        /* U+0031: DIGIT ONE */
    3289             :         [0x32] = 0x0032,        /* U+0032: DIGIT TWO */
    3290             :         [0x33] = 0x0033,        /* U+0033: DIGIT THREE */
    3291             :         [0x34] = 0x0034,        /* U+0034: DIGIT FOUR */
    3292             :         [0x35] = 0x0035,        /* U+0035: DIGIT FIVE */
    3293             :         [0x36] = 0x0036,        /* U+0036: DIGIT SIX */
    3294             :         [0x37] = 0x0037,        /* U+0037: DIGIT SEVEN */
    3295             :         [0x38] = 0x0038,        /* U+0038: DIGIT EIGHT */
    3296             :         [0x39] = 0x0039,        /* U+0039: DIGIT NINE */
    3297             :         [0x3A] = 0x003A,        /* U+003A: COLON */
    3298             :         [0x3B] = 0x003B,        /* U+003B: SEMICOLON */
    3299             :         [0x3C] = 0x003C,        /* U+003C: LESS-THAN SIGN */
    3300             :         [0x3D] = 0x003D,        /* U+003D: EQUALS SIGN */
    3301             :         [0x3E] = 0x003E,        /* U+003E: GREATER-THAN SIGN */
    3302             :         [0x3F] = 0x003F,        /* U+003F: QUESTION MARK */
    3303             :         [0x40] = 0x0040,        /* U+0040: COMMERCIAL AT */
    3304             :         [0x41] = 0x0041,        /* U+0041: LATIN CAPITAL LETTER A */
    3305             :         [0x42] = 0x0042,        /* U+0042: LATIN CAPITAL LETTER B */
    3306             :         [0x43] = 0x0043,        /* U+0043: LATIN CAPITAL LETTER C */
    3307             :         [0x44] = 0x0044,        /* U+0044: LATIN CAPITAL LETTER D */
    3308             :         [0x45] = 0x0045,        /* U+0045: LATIN CAPITAL LETTER E */
    3309             :         [0x46] = 0x0046,        /* U+0046: LATIN CAPITAL LETTER F */
    3310             :         [0x47] = 0x0047,        /* U+0047: LATIN CAPITAL LETTER G */
    3311             :         [0x48] = 0x0048,        /* U+0048: LATIN CAPITAL LETTER H */
    3312             :         [0x49] = 0x0049,        /* U+0049: LATIN CAPITAL LETTER I */
    3313             :         [0x4A] = 0x004A,        /* U+004A: LATIN CAPITAL LETTER J */
    3314             :         [0x4B] = 0x004B,        /* U+004B: LATIN CAPITAL LETTER K */
    3315             :         [0x4C] = 0x004C,        /* U+004C: LATIN CAPITAL LETTER L */
    3316             :         [0x4D] = 0x004D,        /* U+004D: LATIN CAPITAL LETTER M */
    3317             :         [0x4E] = 0x004E,        /* U+004E: LATIN CAPITAL LETTER N */
    3318             :         [0x4F] = 0x004F,        /* U+004F: LATIN CAPITAL LETTER O */
    3319             :         [0x50] = 0x0050,        /* U+0050: LATIN CAPITAL LETTER P */
    3320             :         [0x51] = 0x0051,        /* U+0051: LATIN CAPITAL LETTER Q */
    3321             :         [0x52] = 0x0052,        /* U+0052: LATIN CAPITAL LETTER R */
    3322             :         [0x53] = 0x0053,        /* U+0053: LATIN CAPITAL LETTER S */
    3323             :         [0x54] = 0x0054,        /* U+0054: LATIN CAPITAL LETTER T */
    3324             :         [0x55] = 0x0055,        /* U+0055: LATIN CAPITAL LETTER U */
    3325             :         [0x56] = 0x0056,        /* U+0056: LATIN CAPITAL LETTER V */
    3326             :         [0x57] = 0x0057,        /* U+0057: LATIN CAPITAL LETTER W */
    3327             :         [0x58] = 0x0058,        /* U+0058: LATIN CAPITAL LETTER X */
    3328             :         [0x59] = 0x0059,        /* U+0059: LATIN CAPITAL LETTER Y */
    3329             :         [0x5A] = 0x005A,        /* U+005A: LATIN CAPITAL LETTER Z */
    3330             :         [0x5B] = 0x005B,        /* U+005B: LEFT SQUARE BRACKET */
    3331             :         [0x5C] = 0x005C,        /* U+005C: REVERSE SOLIDUS */
    3332             :         [0x5D] = 0x005D,        /* U+005D: RIGHT SQUARE BRACKET */
    3333             :         [0x5E] = 0x005E,        /* U+005E: CIRCUMFLEX ACCENT */
    3334             :         [0x5F] = 0x005F,        /* U+005F: LOW LINE */
    3335             :         [0x60] = 0x0060,        /* U+0060: GRAVE ACCENT */
    3336             :         [0x61] = 0x0041,        /* U+0061: LATIN SMALL LETTER A */
    3337             :         [0x62] = 0x0042,        /* U+0062: LATIN SMALL LETTER B */
    3338             :         [0x63] = 0x0043,        /* U+0063: LATIN SMALL LETTER C */
    3339             :         [0x64] = 0x0044,        /* U+0064: LATIN SMALL LETTER D */
    3340             :         [0x65] = 0x0045,        /* U+0065: LATIN SMALL LETTER E */
    3341             :         [0x66] = 0x0046,        /* U+0066: LATIN SMALL LETTER F */
    3342             :         [0x67] = 0x0047,        /* U+0067: LATIN SMALL LETTER G */
    3343             :         [0x68] = 0x0048,        /* U+0068: LATIN SMALL LETTER H */
    3344             :         [0x69] = 0x0049,        /* U+0069: LATIN SMALL LETTER I */
    3345             :         [0x6A] = 0x004A,        /* U+006A: LATIN SMALL LETTER J */
    3346             :         [0x6B] = 0x004B,        /* U+006B: LATIN SMALL LETTER K */
    3347             :         [0x6C] = 0x004C,        /* U+006C: LATIN SMALL LETTER L */
    3348             :         [0x6D] = 0x004D,        /* U+006D: LATIN SMALL LETTER M */
    3349             :         [0x6E] = 0x004E,        /* U+006E: LATIN SMALL LETTER N */
    3350             :         [0x6F] = 0x004F,        /* U+006F: LATIN SMALL LETTER O */
    3351             :         [0x70] = 0x0050,        /* U+0070: LATIN SMALL LETTER P */
    3352             :         [0x71] = 0x0051,        /* U+0071: LATIN SMALL LETTER Q */
    3353             :         [0x72] = 0x0052,        /* U+0072: LATIN SMALL LETTER R */
    3354             :         [0x73] = 0x0053,        /* U+0073: LATIN SMALL LETTER S */
    3355             :         [0x74] = 0x0054,        /* U+0074: LATIN SMALL LETTER T */
    3356             :         [0x75] = 0x0055,        /* U+0075: LATIN SMALL LETTER U */
    3357             :         [0x76] = 0x0056,        /* U+0076: LATIN SMALL LETTER V */
    3358             :         [0x77] = 0x0057,        /* U+0077: LATIN SMALL LETTER W */
    3359             :         [0x78] = 0x0058,        /* U+0078: LATIN SMALL LETTER X */
    3360             :         [0x79] = 0x0059,        /* U+0079: LATIN SMALL LETTER Y */
    3361             :         [0x7A] = 0x005A,        /* U+007A: LATIN SMALL LETTER Z */
    3362             :         [0x7B] = 0x007B,        /* U+007B: LEFT CURLY BRACKET */
    3363             :         [0x7C] = 0x007C,        /* U+007C: VERTICAL LINE */
    3364             :         [0x7D] = 0x007D,        /* U+007D: RIGHT CURLY BRACKET */
    3365             :         [0x7E] = 0x007E,        /* U+007E: TILDE */
    3366             :         [0x7F] = 0x007F,        /* U+007F: <control> */
    3367             :         [0xC2] = 256 - 0x80,    /* 302 ... */
    3368             :         [256+0x35] = 0x039C,    /* U+00B5: MICRO SIGN */
    3369             :         [0xC3] = 320 - 0x80,    /* 303 ... */
    3370             :         [320+0x1F] = -74,       /* U+00DF: LATIN SMALL LETTER SHARP S */
    3371             :         [320+0x20] = 0x00C0,    /* U+00E0: LATIN SMALL LETTER A WITH GRAVE */
    3372             :         [320+0x21] = 0x00C1,    /* U+00E1: LATIN SMALL LETTER A WITH ACUTE */
    3373             :         [320+0x22] = 0x00C2,    /* U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX */
    3374             :         [320+0x23] = 0x00C3,    /* U+00E3: LATIN SMALL LETTER A WITH TILDE */
    3375             :         [320+0x24] = 0x00C4,    /* U+00E4: LATIN SMALL LETTER A WITH DIAERESIS */
    3376             :         [320+0x25] = 0x00C5,    /* U+00E5: LATIN SMALL LETTER A WITH RING ABOVE */
    3377             :         [320+0x26] = 0x00C6,    /* U+00E6: LATIN SMALL LETTER AE */
    3378             :         [320+0x27] = 0x00C7,    /* U+00E7: LATIN SMALL LETTER C WITH CEDILLA */
    3379             :         [320+0x28] = 0x00C8,    /* U+00E8: LATIN SMALL LETTER E WITH GRAVE */
    3380             :         [320+0x29] = 0x00C9,    /* U+00E9: LATIN SMALL LETTER E WITH ACUTE */
    3381             :         [320+0x2A] = 0x00CA,    /* U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX */
    3382             :         [320+0x2B] = 0x00CB,    /* U+00EB: LATIN SMALL LETTER E WITH DIAERESIS */
    3383             :         [320+0x2C] = 0x00CC,    /* U+00EC: LATIN SMALL LETTER I WITH GRAVE */
    3384             :         [320+0x2D] = 0x00CD,    /* U+00ED: LATIN SMALL LETTER I WITH ACUTE */
    3385             :         [320+0x2E] = 0x00CE,    /* U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX */
    3386             :         [320+0x2F] = 0x00CF,    /* U+00EF: LATIN SMALL LETTER I WITH DIAERESIS */
    3387             :         [320+0x30] = 0x00D0,    /* U+00F0: LATIN SMALL LETTER ETH */
    3388             :         [320+0x31] = 0x00D1,    /* U+00F1: LATIN SMALL LETTER N WITH TILDE */
    3389             :         [320+0x32] = 0x00D2,    /* U+00F2: LATIN SMALL LETTER O WITH GRAVE */
    3390             :         [320+0x33] = 0x00D3,    /* U+00F3: LATIN SMALL LETTER O WITH ACUTE */
    3391             :         [320+0x34] = 0x00D4,    /* U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX */
    3392             :         [320+0x35] = 0x00D5,    /* U+00F5: LATIN SMALL LETTER O WITH TILDE */
    3393             :         [320+0x36] = 0x00D6,    /* U+00F6: LATIN SMALL LETTER O WITH DIAERESIS */
    3394             :         [320+0x38] = 0x00D8,    /* U+00F8: LATIN SMALL LETTER O WITH STROKE */
    3395             :         [320+0x39] = 0x00D9,    /* U+00F9: LATIN SMALL LETTER U WITH GRAVE */
    3396             :         [320+0x3A] = 0x00DA,    /* U+00FA: LATIN SMALL LETTER U WITH ACUTE */
    3397             :         [320+0x3B] = 0x00DB,    /* U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX */
    3398             :         [320+0x3C] = 0x00DC,    /* U+00FC: LATIN SMALL LETTER U WITH DIAERESIS */
    3399             :         [320+0x3D] = 0x00DD,    /* U+00FD: LATIN SMALL LETTER Y WITH ACUTE */
    3400             :         [320+0x3E] = 0x00DE,    /* U+00FE: LATIN SMALL LETTER THORN */
    3401             :         [320+0x3F] = 0x0178,    /* U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS */
    3402             :         [0xC4] = 384 - 0x80,    /* 304 ... */
    3403             :         [384+0x01] = 0x0100,    /* U+0101: LATIN SMALL LETTER A WITH MACRON */
    3404             :         [384+0x03] = 0x0102,    /* U+0103: LATIN SMALL LETTER A WITH BREVE */
    3405             :         [384+0x05] = 0x0104,    /* U+0105: LATIN SMALL LETTER A WITH OGONEK */
    3406             :         [384+0x07] = 0x0106,    /* U+0107: LATIN SMALL LETTER C WITH ACUTE */
    3407             :         [384+0x09] = 0x0108,    /* U+0109: LATIN SMALL LETTER C WITH CIRCUMFLEX */
    3408             :         [384+0x0B] = 0x010A,    /* U+010B: LATIN SMALL LETTER C WITH DOT ABOVE */
    3409             :         [384+0x0D] = 0x010C,    /* U+010D: LATIN SMALL LETTER C WITH CARON */
    3410             :         [384+0x0F] = 0x010E,    /* U+010F: LATIN SMALL LETTER D WITH CARON */
    3411             :         [384+0x11] = 0x0110,    /* U+0111: LATIN SMALL LETTER D WITH STROKE */
    3412             :         [384+0x13] = 0x0112,    /* U+0113: LATIN SMALL LETTER E WITH MACRON */
    3413             :         [384+0x15] = 0x0114,    /* U+0115: LATIN SMALL LETTER E WITH BREVE */
    3414             :         [384+0x17] = 0x0116,    /* U+0117: LATIN SMALL LETTER E WITH DOT ABOVE */
    3415             :         [384+0x19] = 0x0118,    /* U+0119: LATIN SMALL LETTER E WITH OGONEK */
    3416             :         [384+0x1B] = 0x011A,    /* U+011B: LATIN SMALL LETTER E WITH CARON */
    3417             :         [384+0x1D] = 0x011C,    /* U+011D: LATIN SMALL LETTER G WITH CIRCUMFLEX */
    3418             :         [384+0x1F] = 0x011E,    /* U+011F: LATIN SMALL LETTER G WITH BREVE */
    3419             :         [384+0x21] = 0x0120,    /* U+0121: LATIN SMALL LETTER G WITH DOT ABOVE */
    3420             :         [384+0x23] = 0x0122,    /* U+0123: LATIN SMALL LETTER G WITH CEDILLA */
    3421             :         [384+0x25] = 0x0124,    /* U+0125: LATIN SMALL LETTER H WITH CIRCUMFLEX */
    3422             :         [384+0x27] = 0x0126,    /* U+0127: LATIN SMALL LETTER H WITH STROKE */
    3423             :         [384+0x29] = 0x0128,    /* U+0129: LATIN SMALL LETTER I WITH TILDE */
    3424             :         [384+0x2B] = 0x012A,    /* U+012B: LATIN SMALL LETTER I WITH MACRON */
    3425             :         [384+0x2D] = 0x012C,    /* U+012D: LATIN SMALL LETTER I WITH BREVE */
    3426             :         [384+0x2F] = 0x012E,    /* U+012F: LATIN SMALL LETTER I WITH OGONEK */
    3427             :         [384+0x31] = 0x0049,    /* U+0131: LATIN SMALL LETTER DOTLESS I */
    3428             :         [384+0x33] = 0x0132,    /* U+0133: LATIN SMALL LIGATURE IJ */
    3429             :         [384+0x35] = 0x0134,    /* U+0135: LATIN SMALL LETTER J WITH CIRCUMFLEX */
    3430             :         [384+0x37] = 0x0136,    /* U+0137: LATIN SMALL LETTER K WITH CEDILLA */
    3431             :         [384+0x3A] = 0x0139,    /* U+013A: LATIN SMALL LETTER L WITH ACUTE */
    3432             :         [384+0x3C] = 0x013B,    /* U+013C: LATIN SMALL LETTER L WITH CEDILLA */
    3433             :         [384+0x3E] = 0x013D,    /* U+013E: LATIN SMALL LETTER L WITH CARON */
    3434             :         [0xC5] = 448 - 0x80,    /* 305 ... */
    3435             :         [448+0x00] = 0x013F,    /* U+0140: LATIN SMALL LETTER L WITH MIDDLE DOT */
    3436             :         [448+0x02] = 0x0141,    /* U+0142: LATIN SMALL LETTER L WITH STROKE */
    3437             :         [448+0x04] = 0x0143,    /* U+0144: LATIN SMALL LETTER N WITH ACUTE */
    3438             :         [448+0x06] = 0x0145,    /* U+0146: LATIN SMALL LETTER N WITH CEDILLA */
    3439             :         [448+0x08] = 0x0147,    /* U+0148: LATIN SMALL LETTER N WITH CARON */
    3440             :         [448+0x09] = -87,       /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
    3441             :         [448+0x0B] = 0x014A,    /* U+014B: LATIN SMALL LETTER ENG */
    3442             :         [448+0x0D] = 0x014C,    /* U+014D: LATIN SMALL LETTER O WITH MACRON */
    3443             :         [448+0x0F] = 0x014E,    /* U+014F: LATIN SMALL LETTER O WITH BREVE */
    3444             :         [448+0x11] = 0x0150,    /* U+0151: LATIN SMALL LETTER O WITH DOUBLE ACUTE */
    3445             :         [448+0x13] = 0x0152,    /* U+0153: LATIN SMALL LIGATURE OE */
    3446             :         [448+0x15] = 0x0154,    /* U+0155: LATIN SMALL LETTER R WITH ACUTE */
    3447             :         [448+0x17] = 0x0156,    /* U+0157: LATIN SMALL LETTER R WITH CEDILLA */
    3448             :         [448+0x19] = 0x0158,    /* U+0159: LATIN SMALL LETTER R WITH CARON */
    3449             :         [448+0x1B] = 0x015A,    /* U+015B: LATIN SMALL LETTER S WITH ACUTE */
    3450             :         [448+0x1D] = 0x015C,    /* U+015D: LATIN SMALL LETTER S WITH CIRCUMFLEX */
    3451             :         [448+0x1F] = 0x015E,    /* U+015F: LATIN SMALL LETTER S WITH CEDILLA */
    3452             :         [448+0x21] = 0x0160,    /* U+0161: LATIN SMALL LETTER S WITH CARON */
    3453             :         [448+0x23] = 0x0162,    /* U+0163: LATIN SMALL LETTER T WITH CEDILLA */
    3454             :         [448+0x25] = 0x0164,    /* U+0165: LATIN SMALL LETTER T WITH CARON */
    3455             :         [448+0x27] = 0x0166,    /* U+0167: LATIN SMALL LETTER T WITH STROKE */
    3456             :         [448+0x29] = 0x0168,    /* U+0169: LATIN SMALL LETTER U WITH TILDE */
    3457             :         [448+0x2B] = 0x016A,    /* U+016B: LATIN SMALL LETTER U WITH MACRON */
    3458             :         [448+0x2D] = 0x016C,    /* U+016D: LATIN SMALL LETTER U WITH BREVE */
    3459             :         [448+0x2F] = 0x016E,    /* U+016F: LATIN SMALL LETTER U WITH RING ABOVE */
    3460             :         [448+0x31] = 0x0170,    /* U+0171: LATIN SMALL LETTER U WITH DOUBLE ACUTE */
    3461             :         [448+0x33] = 0x0172,    /* U+0173: LATIN SMALL LETTER U WITH OGONEK */
    3462             :         [448+0x35] = 0x0174,    /* U+0175: LATIN SMALL LETTER W WITH CIRCUMFLEX */
    3463             :         [448+0x37] = 0x0176,    /* U+0177: LATIN SMALL LETTER Y WITH CIRCUMFLEX */
    3464             :         [448+0x3A] = 0x0179,    /* U+017A: LATIN SMALL LETTER Z WITH ACUTE */
    3465             :         [448+0x3C] = 0x017B,    /* U+017C: LATIN SMALL LETTER Z WITH DOT ABOVE */
    3466             :         [448+0x3E] = 0x017D,    /* U+017E: LATIN SMALL LETTER Z WITH CARON */
    3467             :         [448+0x3F] = 0x0053,    /* U+017F: LATIN SMALL LETTER LONG S */
    3468             :         [0xC6] = 512 - 0x80,    /* 306 ... */
    3469             :         [512+0x00] = 0x0243,    /* U+0180: LATIN SMALL LETTER B WITH STROKE */
    3470             :         [512+0x03] = 0x0182,    /* U+0183: LATIN SMALL LETTER B WITH TOPBAR */
    3471             :         [512+0x05] = 0x0184,    /* U+0185: LATIN SMALL LETTER TONE SIX */
    3472             :         [512+0x08] = 0x0187,    /* U+0188: LATIN SMALL LETTER C WITH HOOK */
    3473             :         [512+0x0C] = 0x018B,    /* U+018C: LATIN SMALL LETTER D WITH TOPBAR */
    3474             :         [512+0x12] = 0x0191,    /* U+0192: LATIN SMALL LETTER F WITH HOOK */
    3475             :         [512+0x15] = 0x01F6,    /* U+0195: LATIN SMALL LETTER HV */
    3476             :         [512+0x19] = 0x0198,    /* U+0199: LATIN SMALL LETTER K WITH HOOK */
    3477             :         [512+0x1A] = 0x023D,    /* U+019A: LATIN SMALL LETTER L WITH BAR */
    3478             :         [512+0x1E] = 0x0220,    /* U+019E: LATIN SMALL LETTER N WITH LONG RIGHT LEG */
    3479             :         [512+0x21] = 0x01A0,    /* U+01A1: LATIN SMALL LETTER O WITH HORN */
    3480             :         [512+0x23] = 0x01A2,    /* U+01A3: LATIN SMALL LETTER OI */
    3481             :         [512+0x25] = 0x01A4,    /* U+01A5: LATIN SMALL LETTER P WITH HOOK */
    3482             :         [512+0x28] = 0x01A7,    /* U+01A8: LATIN SMALL LETTER TONE TWO */
    3483             :         [512+0x2D] = 0x01AC,    /* U+01AD: LATIN SMALL LETTER T WITH HOOK */
    3484             :         [512+0x30] = 0x01AF,    /* U+01B0: LATIN SMALL LETTER U WITH HORN */
    3485             :         [512+0x34] = 0x01B3,    /* U+01B4: LATIN SMALL LETTER Y WITH HOOK */
    3486             :         [512+0x36] = 0x01B5,    /* U+01B6: LATIN SMALL LETTER Z WITH STROKE */
    3487             :         [512+0x39] = 0x01B8,    /* U+01B9: LATIN SMALL LETTER EZH REVERSED */
    3488             :         [512+0x3D] = 0x01BC,    /* U+01BD: LATIN SMALL LETTER TONE FIVE */
    3489             :         [512+0x3F] = 0x01F7,    /* U+01BF: LATIN LETTER WYNN */
    3490             :         [0xC7] = 576 - 0x80,    /* 307 ... */
    3491             :         [576+0x05] = 0x01C4,    /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
    3492             :         [576+0x06] = 0x01C4,    /* U+01C6: LATIN SMALL LETTER DZ WITH CARON */
    3493             :         [576+0x08] = 0x01C7,    /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
    3494             :         [576+0x09] = 0x01C7,    /* U+01C9: LATIN SMALL LETTER LJ */
    3495             :         [576+0x0B] = 0x01CA,    /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
    3496             :         [576+0x0C] = 0x01CA,    /* U+01CC: LATIN SMALL LETTER NJ */
    3497             :         [576+0x0E] = 0x01CD,    /* U+01CE: LATIN SMALL LETTER A WITH CARON */
    3498             :         [576+0x10] = 0x01CF,    /* U+01D0: LATIN SMALL LETTER I WITH CARON */
    3499             :         [576+0x12] = 0x01D1,    /* U+01D2: LATIN SMALL LETTER O WITH CARON */
    3500             :         [576+0x14] = 0x01D3,    /* U+01D4: LATIN SMALL LETTER U WITH CARON */
    3501             :         [576+0x16] = 0x01D5,    /* U+01D6: LATIN SMALL LETTER U WITH DIAERESIS AND MACRON */
    3502             :         [576+0x18] = 0x01D7,    /* U+01D8: LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE */
    3503             :         [576+0x1A] = 0x01D9,    /* U+01DA: LATIN SMALL LETTER U WITH DIAERESIS AND CARON */
    3504             :         [576+0x1C] = 0x01DB,    /* U+01DC: LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE */
    3505             :         [576+0x1D] = 0x018E,    /* U+01DD: LATIN SMALL LETTER TURNED E */
    3506             :         [576+0x1F] = 0x01DE,    /* U+01DF: LATIN SMALL LETTER A WITH DIAERESIS AND MACRON */
    3507             :         [576+0x21] = 0x01E0,    /* U+01E1: LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON */
    3508             :         [576+0x23] = 0x01E2,    /* U+01E3: LATIN SMALL LETTER AE WITH MACRON */
    3509             :         [576+0x25] = 0x01E4,    /* U+01E5: LATIN SMALL LETTER G WITH STROKE */
    3510             :         [576+0x27] = 0x01E6,    /* U+01E7: LATIN SMALL LETTER G WITH CARON */
    3511             :         [576+0x29] = 0x01E8,    /* U+01E9: LATIN SMALL LETTER K WITH CARON */
    3512             :         [576+0x2B] = 0x01EA,    /* U+01EB: LATIN SMALL LETTER O WITH OGONEK */
    3513             :         [576+0x2D] = 0x01EC,    /* U+01ED: LATIN SMALL LETTER O WITH OGONEK AND MACRON */
    3514             :         [576+0x2F] = 0x01EE,    /* U+01EF: LATIN SMALL LETTER EZH WITH CARON */
    3515             :         [576+0x30] = -90,       /* U+01F0: LATIN SMALL LETTER J WITH CARON */
    3516             :         [576+0x32] = 0x01F1,    /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
    3517             :         [576+0x33] = 0x01F1,    /* U+01F3: LATIN SMALL LETTER DZ */
    3518             :         [576+0x35] = 0x01F4,    /* U+01F5: LATIN SMALL LETTER G WITH ACUTE */
    3519             :         [576+0x39] = 0x01F8,    /* U+01F9: LATIN SMALL LETTER N WITH GRAVE */
    3520             :         [576+0x3B] = 0x01FA,    /* U+01FB: LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */
    3521             :         [576+0x3D] = 0x01FC,    /* U+01FD: LATIN SMALL LETTER AE WITH ACUTE */
    3522             :         [576+0x3F] = 0x01FE,    /* U+01FF: LATIN SMALL LETTER O WITH STROKE AND ACUTE */
    3523             :         [0xC8] = 640 - 0x80,    /* 310 ... */
    3524             :         [640+0x01] = 0x0200,    /* U+0201: LATIN SMALL LETTER A WITH DOUBLE GRAVE */
    3525             :         [640+0x03] = 0x0202,    /* U+0203: LATIN SMALL LETTER A WITH INVERTED BREVE */
    3526             :         [640+0x05] = 0x0204,    /* U+0205: LATIN SMALL LETTER E WITH DOUBLE GRAVE */
    3527             :         [640+0x07] = 0x0206,    /* U+0207: LATIN SMALL LETTER E WITH INVERTED BREVE */
    3528             :         [640+0x09] = 0x0208,    /* U+0209: LATIN SMALL LETTER I WITH DOUBLE GRAVE */
    3529             :         [640+0x0B] = 0x020A,    /* U+020B: LATIN SMALL LETTER I WITH INVERTED BREVE */
    3530             :         [640+0x0D] = 0x020C,    /* U+020D: LATIN SMALL LETTER O WITH DOUBLE GRAVE */
    3531             :         [640+0x0F] = 0x020E,    /* U+020F: LATIN SMALL LETTER O WITH INVERTED BREVE */
    3532             :         [640+0x11] = 0x0210,    /* U+0211: LATIN SMALL LETTER R WITH DOUBLE GRAVE */
    3533             :         [640+0x13] = 0x0212,    /* U+0213: LATIN SMALL LETTER R WITH INVERTED BREVE */
    3534             :         [640+0x15] = 0x0214,    /* U+0215: LATIN SMALL LETTER U WITH DOUBLE GRAVE */
    3535             :         [640+0x17] = 0x0216,    /* U+0217: LATIN SMALL LETTER U WITH INVERTED BREVE */
    3536             :         [640+0x19] = 0x0218,    /* U+0219: LATIN SMALL LETTER S WITH COMMA BELOW */
    3537             :         [640+0x1B] = 0x021A,    /* U+021B: LATIN SMALL LETTER T WITH COMMA BELOW */
    3538             :         [640+0x1D] = 0x021C,    /* U+021D: LATIN SMALL LETTER YOGH */
    3539             :         [640+0x1F] = 0x021E,    /* U+021F: LATIN SMALL LETTER H WITH CARON */
    3540             :         [640+0x23] = 0x0222,    /* U+0223: LATIN SMALL LETTER OU */
    3541             :         [640+0x25] = 0x0224,    /* U+0225: LATIN SMALL LETTER Z WITH HOOK */
    3542             :         [640+0x27] = 0x0226,    /* U+0227: LATIN SMALL LETTER A WITH DOT ABOVE */
    3543             :         [640+0x29] = 0x0228,    /* U+0229: LATIN SMALL LETTER E WITH CEDILLA */
    3544             :         [640+0x2B] = 0x022A,    /* U+022B: LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */
    3545             :         [640+0x2D] = 0x022C,    /* U+022D: LATIN SMALL LETTER O WITH TILDE AND MACRON */
    3546             :         [640+0x2F] = 0x022E,    /* U+022F: LATIN SMALL LETTER O WITH DOT ABOVE */
    3547             :         [640+0x31] = 0x0230,    /* U+0231: LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
    3548             :         [640+0x33] = 0x0232,    /* U+0233: LATIN SMALL LETTER Y WITH MACRON */
    3549             :         [640+0x3C] = 0x023B,    /* U+023C: LATIN SMALL LETTER C WITH STROKE */
    3550             :         [640+0x3F] = 0x2C7E,    /* U+023F: LATIN SMALL LETTER S WITH SWASH TAIL */
    3551             :         [0xC9] = 704 - 0x80,    /* 311 ... */
    3552             :         [704+0x00] = 0x2C7F,    /* U+0240: LATIN SMALL LETTER Z WITH SWASH TAIL */
    3553             :         [704+0x02] = 0x0241,    /* U+0242: LATIN SMALL LETTER GLOTTAL STOP */
    3554             :         [704+0x07] = 0x0246,    /* U+0247: LATIN SMALL LETTER E WITH STROKE */
    3555             :         [704+0x09] = 0x0248,    /* U+0249: LATIN SMALL LETTER J WITH STROKE */
    3556             :         [704+0x0B] = 0x024A,    /* U+024B: LATIN SMALL LETTER Q WITH HOOK TAIL */
    3557             :         [704+0x0D] = 0x024C,    /* U+024D: LATIN SMALL LETTER R WITH STROKE */
    3558             :         [704+0x0F] = 0x024E,    /* U+024F: LATIN SMALL LETTER Y WITH STROKE */
    3559             :         [704+0x10] = 0x2C6F,    /* U+0250: LATIN SMALL LETTER TURNED A */
    3560             :         [704+0x11] = 0x2C6D,    /* U+0251: LATIN SMALL LETTER ALPHA */
    3561             :         [704+0x12] = 0x2C70,    /* U+0252: LATIN SMALL LETTER TURNED ALPHA */
    3562             :         [704+0x13] = 0x0181,    /* U+0253: LATIN SMALL LETTER B WITH HOOK */
    3563             :         [704+0x14] = 0x0186,    /* U+0254: LATIN SMALL LETTER OPEN O */
    3564             :         [704+0x16] = 0x0189,    /* U+0256: LATIN SMALL LETTER D WITH TAIL */
    3565             :         [704+0x17] = 0x018A,    /* U+0257: LATIN SMALL LETTER D WITH HOOK */
    3566             :         [704+0x19] = 0x018F,    /* U+0259: LATIN SMALL LETTER SCHWA */
    3567             :         [704+0x1B] = 0x0190,    /* U+025B: LATIN SMALL LETTER OPEN E */
    3568             :         [704+0x1C] = 0xA7AB,    /* U+025C: LATIN SMALL LETTER REVERSED OPEN E */
    3569             :         [704+0x20] = 0x0193,    /* U+0260: LATIN SMALL LETTER G WITH HOOK */
    3570             :         [704+0x21] = 0xA7AC,    /* U+0261: LATIN SMALL LETTER SCRIPT G */
    3571             :         [704+0x23] = 0x0194,    /* U+0263: LATIN SMALL LETTER GAMMA */
    3572             :         [704+0x25] = 0xA78D,    /* U+0265: LATIN SMALL LETTER TURNED H */
    3573             :         [704+0x26] = 0xA7AA,    /* U+0266: LATIN SMALL LETTER H WITH HOOK */
    3574             :         [704+0x28] = 0x0197,    /* U+0268: LATIN SMALL LETTER I WITH STROKE */
    3575             :         [704+0x29] = 0x0196,    /* U+0269: LATIN SMALL LETTER IOTA */
    3576             :         [704+0x2A] = 0xA7AE,    /* U+026A: LATIN LETTER SMALL CAPITAL I */
    3577             :         [704+0x2B] = 0x2C62,    /* U+026B: LATIN SMALL LETTER L WITH MIDDLE TILDE */
    3578             :         [704+0x2C] = 0xA7AD,    /* U+026C: LATIN SMALL LETTER L WITH BELT */
    3579             :         [704+0x2F] = 0x019C,    /* U+026F: LATIN SMALL LETTER TURNED M */
    3580             :         [704+0x31] = 0x2C6E,    /* U+0271: LATIN SMALL LETTER M WITH HOOK */
    3581             :         [704+0x32] = 0x019D,    /* U+0272: LATIN SMALL LETTER N WITH LEFT HOOK */
    3582             :         [704+0x35] = 0x019F,    /* U+0275: LATIN SMALL LETTER BARRED O */
    3583             :         [704+0x3D] = 0x2C64,    /* U+027D: LATIN SMALL LETTER R WITH TAIL */
    3584             :         [0xCA] = 768 - 0x80,    /* 312 ... */
    3585             :         [768+0x00] = 0x01A6,    /* U+0280: LATIN LETTER SMALL CAPITAL R */
    3586             :         [768+0x02] = 0xA7C5,    /* U+0282: LATIN SMALL LETTER S WITH HOOK */
    3587             :         [768+0x03] = 0x01A9,    /* U+0283: LATIN SMALL LETTER ESH */
    3588             :         [768+0x07] = 0xA7B1,    /* U+0287: LATIN SMALL LETTER TURNED T */
    3589             :         [768+0x08] = 0x01AE,    /* U+0288: LATIN SMALL LETTER T WITH RETROFLEX HOOK */
    3590             :         [768+0x09] = 0x0244,    /* U+0289: LATIN SMALL LETTER U BAR */
    3591             :         [768+0x0A] = 0x01B1,    /* U+028A: LATIN SMALL LETTER UPSILON */
    3592             :         [768+0x0B] = 0x01B2,    /* U+028B: LATIN SMALL LETTER V WITH HOOK */
    3593             :         [768+0x0C] = 0x0245,    /* U+028C: LATIN SMALL LETTER TURNED V */
    3594             :         [768+0x12] = 0x01B7,    /* U+0292: LATIN SMALL LETTER EZH */
    3595             :         [768+0x1D] = 0xA7B2,    /* U+029D: LATIN SMALL LETTER J WITH CROSSED-TAIL */
    3596             :         [768+0x1E] = 0xA7B0,    /* U+029E: LATIN SMALL LETTER TURNED K */
    3597             :         [0xCD] = 832 - 0x80,    /* 315 ... */
    3598             :         [832+0x05] = 0x0399,    /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
    3599             :         [832+0x31] = 0x0370,    /* U+0371: GREEK SMALL LETTER HETA */
    3600             :         [832+0x33] = 0x0372,    /* U+0373: GREEK SMALL LETTER ARCHAIC SAMPI */
    3601             :         [832+0x37] = 0x0376,    /* U+0377: GREEK SMALL LETTER PAMPHYLIAN DIGAMMA */
    3602             :         [832+0x3B] = 0x03FD,    /* U+037B: GREEK SMALL REVERSED LUNATE SIGMA SYMBOL */
    3603             :         [832+0x3C] = 0x03FE,    /* U+037C: GREEK SMALL DOTTED LUNATE SIGMA SYMBOL */
    3604             :         [832+0x3D] = 0x03FF,    /* U+037D: GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL */
    3605             :         [0xCE] = 896 - 0x80,    /* 316 ... */
    3606             :         [896+0x10] = -88,       /* U+0390: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
    3607             :         [896+0x2C] = 0x0386,    /* U+03AC: GREEK SMALL LETTER ALPHA WITH TONOS */
    3608             :         [896+0x2D] = 0x0388,    /* U+03AD: GREEK SMALL LETTER EPSILON WITH TONOS */
    3609             :         [896+0x2E] = 0x0389,    /* U+03AE: GREEK SMALL LETTER ETA WITH TONOS */
    3610             :         [896+0x2F] = 0x038A,    /* U+03AF: GREEK SMALL LETTER IOTA WITH TONOS */
    3611             :         [896+0x30] = -89,       /* U+03B0: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
    3612             :         [896+0x31] = 0x0391,    /* U+03B1: GREEK SMALL LETTER ALPHA */
    3613             :         [896+0x32] = 0x0392,    /* U+03B2: GREEK SMALL LETTER BETA */
    3614             :         [896+0x33] = 0x0393,    /* U+03B3: GREEK SMALL LETTER GAMMA */
    3615             :         [896+0x34] = 0x0394,    /* U+03B4: GREEK SMALL LETTER DELTA */
    3616             :         [896+0x35] = 0x0395,    /* U+03B5: GREEK SMALL LETTER EPSILON */
    3617             :         [896+0x36] = 0x0396,    /* U+03B6: GREEK SMALL LETTER ZETA */
    3618             :         [896+0x37] = 0x0397,    /* U+03B7: GREEK SMALL LETTER ETA */
    3619             :         [896+0x38] = 0x0398,    /* U+03B8: GREEK SMALL LETTER THETA */
    3620             :         [896+0x39] = 0x0399,    /* U+03B9: GREEK SMALL LETTER IOTA */
    3621             :         [896+0x3A] = 0x039A,    /* U+03BA: GREEK SMALL LETTER KAPPA */
    3622             :         [896+0x3B] = 0x039B,    /* U+03BB: GREEK SMALL LETTER LAMDA */
    3623             :         [896+0x3C] = 0x039C,    /* U+03BC: GREEK SMALL LETTER MU */
    3624             :         [896+0x3D] = 0x039D,    /* U+03BD: GREEK SMALL LETTER NU */
    3625             :         [896+0x3E] = 0x039E,    /* U+03BE: GREEK SMALL LETTER XI */
    3626             :         [896+0x3F] = 0x039F,    /* U+03BF: GREEK SMALL LETTER OMICRON */
    3627             :         [0xCF] = 960 - 0x80,    /* 317 ... */
    3628             :         [960+0x00] = 0x03A0,    /* U+03C0: GREEK SMALL LETTER PI */
    3629             :         [960+0x01] = 0x03A1,    /* U+03C1: GREEK SMALL LETTER RHO */
    3630             :         [960+0x02] = 0x03A3,    /* U+03C2: GREEK SMALL LETTER FINAL SIGMA */
    3631             :         [960+0x03] = 0x03A3,    /* U+03C3: GREEK SMALL LETTER SIGMA */
    3632             :         [960+0x04] = 0x03A4,    /* U+03C4: GREEK SMALL LETTER TAU */
    3633             :         [960+0x05] = 0x03A5,    /* U+03C5: GREEK SMALL LETTER UPSILON */
    3634             :         [960+0x06] = 0x03A6,    /* U+03C6: GREEK SMALL LETTER PHI */
    3635             :         [960+0x07] = 0x03A7,    /* U+03C7: GREEK SMALL LETTER CHI */
    3636             :         [960+0x08] = 0x03A8,    /* U+03C8: GREEK SMALL LETTER PSI */
    3637             :         [960+0x09] = 0x03A9,    /* U+03C9: GREEK SMALL LETTER OMEGA */
    3638             :         [960+0x0A] = 0x03AA,    /* U+03CA: GREEK SMALL LETTER IOTA WITH DIALYTIKA */
    3639             :         [960+0x0B] = 0x03AB,    /* U+03CB: GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
    3640             :         [960+0x0C] = 0x038C,    /* U+03CC: GREEK SMALL LETTER OMICRON WITH TONOS */
    3641             :         [960+0x0D] = 0x038E,    /* U+03CD: GREEK SMALL LETTER UPSILON WITH TONOS */
    3642             :         [960+0x0E] = 0x038F,    /* U+03CE: GREEK SMALL LETTER OMEGA WITH TONOS */
    3643             :         [960+0x10] = 0x0392,    /* U+03D0: GREEK BETA SYMBOL */
    3644             :         [960+0x11] = 0x0398,    /* U+03D1: GREEK THETA SYMBOL */
    3645             :         [960+0x15] = 0x03A6,    /* U+03D5: GREEK PHI SYMBOL */
    3646             :         [960+0x16] = 0x03A0,    /* U+03D6: GREEK PI SYMBOL */
    3647             :         [960+0x17] = 0x03CF,    /* U+03D7: GREEK KAI SYMBOL */
    3648             :         [960+0x19] = 0x03D8,    /* U+03D9: GREEK SMALL LETTER ARCHAIC KOPPA */
    3649             :         [960+0x1B] = 0x03DA,    /* U+03DB: GREEK SMALL LETTER STIGMA */
    3650             :         [960+0x1D] = 0x03DC,    /* U+03DD: GREEK SMALL LETTER DIGAMMA */
    3651             :         [960+0x1F] = 0x03DE,    /* U+03DF: GREEK SMALL LETTER KOPPA */
    3652             :         [960+0x21] = 0x03E0,    /* U+03E1: GREEK SMALL LETTER SAMPI */
    3653             :         [960+0x23] = 0x03E2,    /* U+03E3: COPTIC SMALL LETTER SHEI */
    3654             :         [960+0x25] = 0x03E4,    /* U+03E5: COPTIC SMALL LETTER FEI */
    3655             :         [960+0x27] = 0x03E6,    /* U+03E7: COPTIC SMALL LETTER KHEI */
    3656             :         [960+0x29] = 0x03E8,    /* U+03E9: COPTIC SMALL LETTER HORI */
    3657             :         [960+0x2B] = 0x03EA,    /* U+03EB: COPTIC SMALL LETTER GANGIA */
    3658             :         [960+0x2D] = 0x03EC,    /* U+03ED: COPTIC SMALL LETTER SHIMA */
    3659             :         [960+0x2F] = 0x03EE,    /* U+03EF: COPTIC SMALL LETTER DEI */
    3660             :         [960+0x30] = 0x039A,    /* U+03F0: GREEK KAPPA SYMBOL */
    3661             :         [960+0x31] = 0x03A1,    /* U+03F1: GREEK RHO SYMBOL */
    3662             :         [960+0x32] = 0x03F9,    /* U+03F2: GREEK LUNATE SIGMA SYMBOL */
    3663             :         [960+0x33] = 0x037F,    /* U+03F3: GREEK LETTER YOT */
    3664             :         [960+0x35] = 0x0395,    /* U+03F5: GREEK LUNATE EPSILON SYMBOL */
    3665             :         [960+0x38] = 0x03F7,    /* U+03F8: GREEK SMALL LETTER SHO */
    3666             :         [960+0x3B] = 0x03FA,    /* U+03FB: GREEK SMALL LETTER SAN */
    3667             :         [0xD0] = 1024 - 0x80,   /* 320 ... */
    3668             :         [1024+0x30] = 0x0410,   /* U+0430: CYRILLIC SMALL LETTER A */
    3669             :         [1024+0x31] = 0x0411,   /* U+0431: CYRILLIC SMALL LETTER BE */
    3670             :         [1024+0x32] = 0x0412,   /* U+0432: CYRILLIC SMALL LETTER VE */
    3671             :         [1024+0x33] = 0x0413,   /* U+0433: CYRILLIC SMALL LETTER GHE */
    3672             :         [1024+0x34] = 0x0414,   /* U+0434: CYRILLIC SMALL LETTER DE */
    3673             :         [1024+0x35] = 0x0415,   /* U+0435: CYRILLIC SMALL LETTER IE */
    3674             :         [1024+0x36] = 0x0416,   /* U+0436: CYRILLIC SMALL LETTER ZHE */
    3675             :         [1024+0x37] = 0x0417,   /* U+0437: CYRILLIC SMALL LETTER ZE */
    3676             :         [1024+0x38] = 0x0418,   /* U+0438: CYRILLIC SMALL LETTER I */
    3677             :         [1024+0x39] = 0x0419,   /* U+0439: CYRILLIC SMALL LETTER SHORT I */
    3678             :         [1024+0x3A] = 0x041A,   /* U+043A: CYRILLIC SMALL LETTER KA */
    3679             :         [1024+0x3B] = 0x041B,   /* U+043B: CYRILLIC SMALL LETTER EL */
    3680             :         [1024+0x3C] = 0x041C,   /* U+043C: CYRILLIC SMALL LETTER EM */
    3681             :         [1024+0x3D] = 0x041D,   /* U+043D: CYRILLIC SMALL LETTER EN */
    3682             :         [1024+0x3E] = 0x041E,   /* U+043E: CYRILLIC SMALL LETTER O */
    3683             :         [1024+0x3F] = 0x041F,   /* U+043F: CYRILLIC SMALL LETTER PE */
    3684             :         [0xD1] = 1088 - 0x80,   /* 321 ... */
    3685             :         [1088+0x00] = 0x0420,   /* U+0440: CYRILLIC SMALL LETTER ER */
    3686             :         [1088+0x01] = 0x0421,   /* U+0441: CYRILLIC SMALL LETTER ES */
    3687             :         [1088+0x02] = 0x0422,   /* U+0442: CYRILLIC SMALL LETTER TE */
    3688             :         [1088+0x03] = 0x0423,   /* U+0443: CYRILLIC SMALL LETTER U */
    3689             :         [1088+0x04] = 0x0424,   /* U+0444: CYRILLIC SMALL LETTER EF */
    3690             :         [1088+0x05] = 0x0425,   /* U+0445: CYRILLIC SMALL LETTER HA */
    3691             :         [1088+0x06] = 0x0426,   /* U+0446: CYRILLIC SMALL LETTER TSE */
    3692             :         [1088+0x07] = 0x0427,   /* U+0447: CYRILLIC SMALL LETTER CHE */
    3693             :         [1088+0x08] = 0x0428,   /* U+0448: CYRILLIC SMALL LETTER SHA */
    3694             :         [1088+0x09] = 0x0429,   /* U+0449: CYRILLIC SMALL LETTER SHCHA */
    3695             :         [1088+0x0A] = 0x042A,   /* U+044A: CYRILLIC SMALL LETTER HARD SIGN */
    3696             :         [1088+0x0B] = 0x042B,   /* U+044B: CYRILLIC SMALL LETTER YERU */
    3697             :         [1088+0x0C] = 0x042C,   /* U+044C: CYRILLIC SMALL LETTER SOFT SIGN */
    3698             :         [1088+0x0D] = 0x042D,   /* U+044D: CYRILLIC SMALL LETTER E */
    3699             :         [1088+0x0E] = 0x042E,   /* U+044E: CYRILLIC SMALL LETTER YU */
    3700             :         [1088+0x0F] = 0x042F,   /* U+044F: CYRILLIC SMALL LETTER YA */
    3701             :         [1088+0x10] = 0x0400,   /* U+0450: CYRILLIC SMALL LETTER IE WITH GRAVE */
    3702             :         [1088+0x11] = 0x0401,   /* U+0451: CYRILLIC SMALL LETTER IO */
    3703             :         [1088+0x12] = 0x0402,   /* U+0452: CYRILLIC SMALL LETTER DJE */
    3704             :         [1088+0x13] = 0x0403,   /* U+0453: CYRILLIC SMALL LETTER GJE */
    3705             :         [1088+0x14] = 0x0404,   /* U+0454: CYRILLIC SMALL LETTER UKRAINIAN IE */
    3706             :         [1088+0x15] = 0x0405,   /* U+0455: CYRILLIC SMALL LETTER DZE */
    3707             :         [1088+0x16] = 0x0406,   /* U+0456: CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
    3708             :         [1088+0x17] = 0x0407,   /* U+0457: CYRILLIC SMALL LETTER YI */
    3709             :         [1088+0x18] = 0x0408,   /* U+0458: CYRILLIC SMALL LETTER JE */
    3710             :         [1088+0x19] = 0x0409,   /* U+0459: CYRILLIC SMALL LETTER LJE */
    3711             :         [1088+0x1A] = 0x040A,   /* U+045A: CYRILLIC SMALL LETTER NJE */
    3712             :         [1088+0x1B] = 0x040B,   /* U+045B: CYRILLIC SMALL LETTER TSHE */
    3713             :         [1088+0x1C] = 0x040C,   /* U+045C: CYRILLIC SMALL LETTER KJE */
    3714             :         [1088+0x1D] = 0x040D,   /* U+045D: CYRILLIC SMALL LETTER I WITH GRAVE */
    3715             :         [1088+0x1E] = 0x040E,   /* U+045E: CYRILLIC SMALL LETTER SHORT U */
    3716             :         [1088+0x1F] = 0x040F,   /* U+045F: CYRILLIC SMALL LETTER DZHE */
    3717             :         [1088+0x21] = 0x0460,   /* U+0461: CYRILLIC SMALL LETTER OMEGA */
    3718             :         [1088+0x23] = 0x0462,   /* U+0463: CYRILLIC SMALL LETTER YAT */
    3719             :         [1088+0x25] = 0x0464,   /* U+0465: CYRILLIC SMALL LETTER IOTIFIED E */
    3720             :         [1088+0x27] = 0x0466,   /* U+0467: CYRILLIC SMALL LETTER LITTLE YUS */
    3721             :         [1088+0x29] = 0x0468,   /* U+0469: CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS */
    3722             :         [1088+0x2B] = 0x046A,   /* U+046B: CYRILLIC SMALL LETTER BIG YUS */
    3723             :         [1088+0x2D] = 0x046C,   /* U+046D: CYRILLIC SMALL LETTER IOTIFIED BIG YUS */
    3724             :         [1088+0x2F] = 0x046E,   /* U+046F: CYRILLIC SMALL LETTER KSI */
    3725             :         [1088+0x31] = 0x0470,   /* U+0471: CYRILLIC SMALL LETTER PSI */
    3726             :         [1088+0x33] = 0x0472,   /* U+0473: CYRILLIC SMALL LETTER FITA */
    3727             :         [1088+0x35] = 0x0474,   /* U+0475: CYRILLIC SMALL LETTER IZHITSA */
    3728             :         [1088+0x37] = 0x0476,   /* U+0477: CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
    3729             :         [1088+0x39] = 0x0478,   /* U+0479: CYRILLIC SMALL LETTER UK */
    3730             :         [1088+0x3B] = 0x047A,   /* U+047B: CYRILLIC SMALL LETTER ROUND OMEGA */
    3731             :         [1088+0x3D] = 0x047C,   /* U+047D: CYRILLIC SMALL LETTER OMEGA WITH TITLO */
    3732             :         [1088+0x3F] = 0x047E,   /* U+047F: CYRILLIC SMALL LETTER OT */
    3733             :         [0xD2] = 1152 - 0x80,   /* 322 ... */
    3734             :         [1152+0x01] = 0x0480,   /* U+0481: CYRILLIC SMALL LETTER KOPPA */
    3735             :         [1152+0x0B] = 0x048A,   /* U+048B: CYRILLIC SMALL LETTER SHORT I WITH TAIL */
    3736             :         [1152+0x0D] = 0x048C,   /* U+048D: CYRILLIC SMALL LETTER SEMISOFT SIGN */
    3737             :         [1152+0x0F] = 0x048E,   /* U+048F: CYRILLIC SMALL LETTER ER WITH TICK */
    3738             :         [1152+0x11] = 0x0490,   /* U+0491: CYRILLIC SMALL LETTER GHE WITH UPTURN */
    3739             :         [1152+0x13] = 0x0492,   /* U+0493: CYRILLIC SMALL LETTER GHE WITH STROKE */
    3740             :         [1152+0x15] = 0x0494,   /* U+0495: CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK */
    3741             :         [1152+0x17] = 0x0496,   /* U+0497: CYRILLIC SMALL LETTER ZHE WITH DESCENDER */
    3742             :         [1152+0x19] = 0x0498,   /* U+0499: CYRILLIC SMALL LETTER ZE WITH DESCENDER */
    3743             :         [1152+0x1B] = 0x049A,   /* U+049B: CYRILLIC SMALL LETTER KA WITH DESCENDER */
    3744             :         [1152+0x1D] = 0x049C,   /* U+049D: CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */
    3745             :         [1152+0x1F] = 0x049E,   /* U+049F: CYRILLIC SMALL LETTER KA WITH STROKE */
    3746             :         [1152+0x21] = 0x04A0,   /* U+04A1: CYRILLIC SMALL LETTER BASHKIR KA */
    3747             :         [1152+0x23] = 0x04A2,   /* U+04A3: CYRILLIC SMALL LETTER EN WITH DESCENDER */
    3748             :         [1152+0x25] = 0x04A4,   /* U+04A5: CYRILLIC SMALL LIGATURE EN GHE */
    3749             :         [1152+0x27] = 0x04A6,   /* U+04A7: CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK */
    3750             :         [1152+0x29] = 0x04A8,   /* U+04A9: CYRILLIC SMALL LETTER ABKHASIAN HA */
    3751             :         [1152+0x2B] = 0x04AA,   /* U+04AB: CYRILLIC SMALL LETTER ES WITH DESCENDER */
    3752             :         [1152+0x2D] = 0x04AC,   /* U+04AD: CYRILLIC SMALL LETTER TE WITH DESCENDER */
    3753             :         [1152+0x2F] = 0x04AE,   /* U+04AF: CYRILLIC SMALL LETTER STRAIGHT U */
    3754             :         [1152+0x31] = 0x04B0,   /* U+04B1: CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */
    3755             :         [1152+0x33] = 0x04B2,   /* U+04B3: CYRILLIC SMALL LETTER HA WITH DESCENDER */
    3756             :         [1152+0x35] = 0x04B4,   /* U+04B5: CYRILLIC SMALL LIGATURE TE TSE */
    3757             :         [1152+0x37] = 0x04B6,   /* U+04B7: CYRILLIC SMALL LETTER CHE WITH DESCENDER */
    3758             :         [1152+0x39] = 0x04B8,   /* U+04B9: CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */
    3759             :         [1152+0x3B] = 0x04BA,   /* U+04BB: CYRILLIC SMALL LETTER SHHA */
    3760             :         [1152+0x3D] = 0x04BC,   /* U+04BD: CYRILLIC SMALL LETTER ABKHASIAN CHE */
    3761             :         [1152+0x3F] = 0x04BE,   /* U+04BF: CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER */
    3762             :         [0xD3] = 1216 - 0x80,   /* 323 ... */
    3763             :         [1216+0x02] = 0x04C1,   /* U+04C2: CYRILLIC SMALL LETTER ZHE WITH BREVE */
    3764             :         [1216+0x04] = 0x04C3,   /* U+04C4: CYRILLIC SMALL LETTER KA WITH HOOK */
    3765             :         [1216+0x06] = 0x04C5,   /* U+04C6: CYRILLIC SMALL LETTER EL WITH TAIL */
    3766             :         [1216+0x08] = 0x04C7,   /* U+04C8: CYRILLIC SMALL LETTER EN WITH HOOK */
    3767             :         [1216+0x0A] = 0x04C9,   /* U+04CA: CYRILLIC SMALL LETTER EN WITH TAIL */
    3768             :         [1216+0x0C] = 0x04CB,   /* U+04CC: CYRILLIC SMALL LETTER KHAKASSIAN CHE */
    3769             :         [1216+0x0E] = 0x04CD,   /* U+04CE: CYRILLIC SMALL LETTER EM WITH TAIL */
    3770             :         [1216+0x0F] = 0x04C0,   /* U+04CF: CYRILLIC SMALL LETTER PALOCHKA */
    3771             :         [1216+0x11] = 0x04D0,   /* U+04D1: CYRILLIC SMALL LETTER A WITH BREVE */
    3772             :         [1216+0x13] = 0x04D2,   /* U+04D3: CYRILLIC SMALL LETTER A WITH DIAERESIS */
    3773             :         [1216+0x15] = 0x04D4,   /* U+04D5: CYRILLIC SMALL LIGATURE A IE */
    3774             :         [1216+0x17] = 0x04D6,   /* U+04D7: CYRILLIC SMALL LETTER IE WITH BREVE */
    3775             :         [1216+0x19] = 0x04D8,   /* U+04D9: CYRILLIC SMALL LETTER SCHWA */
    3776             :         [1216+0x1B] = 0x04DA,   /* U+04DB: CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */
    3777             :         [1216+0x1D] = 0x04DC,   /* U+04DD: CYRILLIC SMALL LETTER ZHE WITH DIAERESIS */
    3778             :         [1216+0x1F] = 0x04DE,   /* U+04DF: CYRILLIC SMALL LETTER ZE WITH DIAERESIS */
    3779             :         [1216+0x21] = 0x04E0,   /* U+04E1: CYRILLIC SMALL LETTER ABKHASIAN DZE */
    3780             :         [1216+0x23] = 0x04E2,   /* U+04E3: CYRILLIC SMALL LETTER I WITH MACRON */
    3781             :         [1216+0x25] = 0x04E4,   /* U+04E5: CYRILLIC SMALL LETTER I WITH DIAERESIS */
    3782             :         [1216+0x27] = 0x04E6,   /* U+04E7: CYRILLIC SMALL LETTER O WITH DIAERESIS */
    3783             :         [1216+0x29] = 0x04E8,   /* U+04E9: CYRILLIC SMALL LETTER BARRED O */
    3784             :         [1216+0x2B] = 0x04EA,   /* U+04EB: CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */
    3785             :         [1216+0x2D] = 0x04EC,   /* U+04ED: CYRILLIC SMALL LETTER E WITH DIAERESIS */
    3786             :         [1216+0x2F] = 0x04EE,   /* U+04EF: CYRILLIC SMALL LETTER U WITH MACRON */
    3787             :         [1216+0x31] = 0x04F0,   /* U+04F1: CYRILLIC SMALL LETTER U WITH DIAERESIS */
    3788             :         [1216+0x33] = 0x04F2,   /* U+04F3: CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE */
    3789             :         [1216+0x35] = 0x04F4,   /* U+04F5: CYRILLIC SMALL LETTER CHE WITH DIAERESIS */
    3790             :         [1216+0x37] = 0x04F6,   /* U+04F7: CYRILLIC SMALL LETTER GHE WITH DESCENDER */
    3791             :         [1216+0x39] = 0x04F8,   /* U+04F9: CYRILLIC SMALL LETTER YERU WITH DIAERESIS */
    3792             :         [1216+0x3B] = 0x04FA,   /* U+04FB: CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK */
    3793             :         [1216+0x3D] = 0x04FC,   /* U+04FD: CYRILLIC SMALL LETTER HA WITH HOOK */
    3794             :         [1216+0x3F] = 0x04FE,   /* U+04FF: CYRILLIC SMALL LETTER HA WITH STROKE */
    3795             :         [0xD4] = 1280 - 0x80,   /* 324 ... */
    3796             :         [1280+0x01] = 0x0500,   /* U+0501: CYRILLIC SMALL LETTER KOMI DE */
    3797             :         [1280+0x03] = 0x0502,   /* U+0503: CYRILLIC SMALL LETTER KOMI DJE */
    3798             :         [1280+0x05] = 0x0504,   /* U+0505: CYRILLIC SMALL LETTER KOMI ZJE */
    3799             :         [1280+0x07] = 0x0506,   /* U+0507: CYRILLIC SMALL LETTER KOMI DZJE */
    3800             :         [1280+0x09] = 0x0508,   /* U+0509: CYRILLIC SMALL LETTER KOMI LJE */
    3801             :         [1280+0x0B] = 0x050A,   /* U+050B: CYRILLIC SMALL LETTER KOMI NJE */
    3802             :         [1280+0x0D] = 0x050C,   /* U+050D: CYRILLIC SMALL LETTER KOMI SJE */
    3803             :         [1280+0x0F] = 0x050E,   /* U+050F: CYRILLIC SMALL LETTER KOMI TJE */
    3804             :         [1280+0x11] = 0x0510,   /* U+0511: CYRILLIC SMALL LETTER REVERSED ZE */
    3805             :         [1280+0x13] = 0x0512,   /* U+0513: CYRILLIC SMALL LETTER EL WITH HOOK */
    3806             :         [1280+0x15] = 0x0514,   /* U+0515: CYRILLIC SMALL LETTER LHA */
    3807             :         [1280+0x17] = 0x0516,   /* U+0517: CYRILLIC SMALL LETTER RHA */
    3808             :         [1280+0x19] = 0x0518,   /* U+0519: CYRILLIC SMALL LETTER YAE */
    3809             :         [1280+0x1B] = 0x051A,   /* U+051B: CYRILLIC SMALL LETTER QA */
    3810             :         [1280+0x1D] = 0x051C,   /* U+051D: CYRILLIC SMALL LETTER WE */
    3811             :         [1280+0x1F] = 0x051E,   /* U+051F: CYRILLIC SMALL LETTER ALEUT KA */
    3812             :         [1280+0x21] = 0x0520,   /* U+0521: CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK */
    3813             :         [1280+0x23] = 0x0522,   /* U+0523: CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK */
    3814             :         [1280+0x25] = 0x0524,   /* U+0525: CYRILLIC SMALL LETTER PE WITH DESCENDER */
    3815             :         [1280+0x27] = 0x0526,   /* U+0527: CYRILLIC SMALL LETTER SHHA WITH DESCENDER */
    3816             :         [1280+0x29] = 0x0528,   /* U+0529: CYRILLIC SMALL LETTER EN WITH LEFT HOOK */
    3817             :         [1280+0x2B] = 0x052A,   /* U+052B: CYRILLIC SMALL LETTER DZZHE */
    3818             :         [1280+0x2D] = 0x052C,   /* U+052D: CYRILLIC SMALL LETTER DCHE */
    3819             :         [1280+0x2F] = 0x052E,   /* U+052F: CYRILLIC SMALL LETTER EL WITH DESCENDER */
    3820             :         [0xD5] = 1344 - 0x80,   /* 325 ... */
    3821             :         [1344+0x21] = 0x0531,   /* U+0561: ARMENIAN SMALL LETTER AYB */
    3822             :         [1344+0x22] = 0x0532,   /* U+0562: ARMENIAN SMALL LETTER BEN */
    3823             :         [1344+0x23] = 0x0533,   /* U+0563: ARMENIAN SMALL LETTER GIM */
    3824             :         [1344+0x24] = 0x0534,   /* U+0564: ARMENIAN SMALL LETTER DA */
    3825             :         [1344+0x25] = 0x0535,   /* U+0565: ARMENIAN SMALL LETTER ECH */
    3826             :         [1344+0x26] = 0x0536,   /* U+0566: ARMENIAN SMALL LETTER ZA */
    3827             :         [1344+0x27] = 0x0537,   /* U+0567: ARMENIAN SMALL LETTER EH */
    3828             :         [1344+0x28] = 0x0538,   /* U+0568: ARMENIAN SMALL LETTER ET */
    3829             :         [1344+0x29] = 0x0539,   /* U+0569: ARMENIAN SMALL LETTER TO */
    3830             :         [1344+0x2A] = 0x053A,   /* U+056A: ARMENIAN SMALL LETTER ZHE */
    3831             :         [1344+0x2B] = 0x053B,   /* U+056B: ARMENIAN SMALL LETTER INI */
    3832             :         [1344+0x2C] = 0x053C,   /* U+056C: ARMENIAN SMALL LETTER LIWN */
    3833             :         [1344+0x2D] = 0x053D,   /* U+056D: ARMENIAN SMALL LETTER XEH */
    3834             :         [1344+0x2E] = 0x053E,   /* U+056E: ARMENIAN SMALL LETTER CA */
    3835             :         [1344+0x2F] = 0x053F,   /* U+056F: ARMENIAN SMALL LETTER KEN */
    3836             :         [1344+0x30] = 0x0540,   /* U+0570: ARMENIAN SMALL LETTER HO */
    3837             :         [1344+0x31] = 0x0541,   /* U+0571: ARMENIAN SMALL LETTER JA */
    3838             :         [1344+0x32] = 0x0542,   /* U+0572: ARMENIAN SMALL LETTER GHAD */
    3839             :         [1344+0x33] = 0x0543,   /* U+0573: ARMENIAN SMALL LETTER CHEH */
    3840             :         [1344+0x34] = 0x0544,   /* U+0574: ARMENIAN SMALL LETTER MEN */
    3841             :         [1344+0x35] = 0x0545,   /* U+0575: ARMENIAN SMALL LETTER YI */
    3842             :         [1344+0x36] = 0x0546,   /* U+0576: ARMENIAN SMALL LETTER NOW */
    3843             :         [1344+0x37] = 0x0547,   /* U+0577: ARMENIAN SMALL LETTER SHA */
    3844             :         [1344+0x38] = 0x0548,   /* U+0578: ARMENIAN SMALL LETTER VO */
    3845             :         [1344+0x39] = 0x0549,   /* U+0579: ARMENIAN SMALL LETTER CHA */
    3846             :         [1344+0x3A] = 0x054A,   /* U+057A: ARMENIAN SMALL LETTER PEH */
    3847             :         [1344+0x3B] = 0x054B,   /* U+057B: ARMENIAN SMALL LETTER JHEH */
    3848             :         [1344+0x3C] = 0x054C,   /* U+057C: ARMENIAN SMALL LETTER RA */
    3849             :         [1344+0x3D] = 0x054D,   /* U+057D: ARMENIAN SMALL LETTER SEH */
    3850             :         [1344+0x3E] = 0x054E,   /* U+057E: ARMENIAN SMALL LETTER VEW */
    3851             :         [1344+0x3F] = 0x054F,   /* U+057F: ARMENIAN SMALL LETTER TIWN */
    3852             :         [0xD6] = 1408 - 0x80,   /* 326 ... */
    3853             :         [1408+0x00] = 0x0550,   /* U+0580: ARMENIAN SMALL LETTER REH */
    3854             :         [1408+0x01] = 0x0551,   /* U+0581: ARMENIAN SMALL LETTER CO */
    3855             :         [1408+0x02] = 0x0552,   /* U+0582: ARMENIAN SMALL LETTER YIWN */
    3856             :         [1408+0x03] = 0x0553,   /* U+0583: ARMENIAN SMALL LETTER PIWR */
    3857             :         [1408+0x04] = 0x0554,   /* U+0584: ARMENIAN SMALL LETTER KEH */
    3858             :         [1408+0x05] = 0x0555,   /* U+0585: ARMENIAN SMALL LETTER OH */
    3859             :         [1408+0x06] = 0x0556,   /* U+0586: ARMENIAN SMALL LETTER FEH */
    3860             :         [1408+0x07] = -81,      /* U+0587: ARMENIAN SMALL LIGATURE ECH YIWN */
    3861             :         [0xE1] = 1472 - 0x80,   /* 341 ... */
    3862             :         [1472+0x03] = 1536 - 0x80,      /* 341 203 ... */
    3863             :         [1536+0x10] = 0x1C90,   /* U+10D0: GEORGIAN LETTER AN */
    3864             :         [1536+0x11] = 0x1C91,   /* U+10D1: GEORGIAN LETTER BAN */
    3865             :         [1536+0x12] = 0x1C92,   /* U+10D2: GEORGIAN LETTER GAN */
    3866             :         [1536+0x13] = 0x1C93,   /* U+10D3: GEORGIAN LETTER DON */
    3867             :         [1536+0x14] = 0x1C94,   /* U+10D4: GEORGIAN LETTER EN */
    3868             :         [1536+0x15] = 0x1C95,   /* U+10D5: GEORGIAN LETTER VIN */
    3869             :         [1536+0x16] = 0x1C96,   /* U+10D6: GEORGIAN LETTER ZEN */
    3870             :         [1536+0x17] = 0x1C97,   /* U+10D7: GEORGIAN LETTER TAN */
    3871             :         [1536+0x18] = 0x1C98,   /* U+10D8: GEORGIAN LETTER IN */
    3872             :         [1536+0x19] = 0x1C99,   /* U+10D9: GEORGIAN LETTER KAN */
    3873             :         [1536+0x1A] = 0x1C9A,   /* U+10DA: GEORGIAN LETTER LAS */
    3874             :         [1536+0x1B] = 0x1C9B,   /* U+10DB: GEORGIAN LETTER MAN */
    3875             :         [1536+0x1C] = 0x1C9C,   /* U+10DC: GEORGIAN LETTER NAR */
    3876             :         [1536+0x1D] = 0x1C9D,   /* U+10DD: GEORGIAN LETTER ON */
    3877             :         [1536+0x1E] = 0x1C9E,   /* U+10DE: GEORGIAN LETTER PAR */
    3878             :         [1536+0x1F] = 0x1C9F,   /* U+10DF: GEORGIAN LETTER ZHAR */
    3879             :         [1536+0x20] = 0x1CA0,   /* U+10E0: GEORGIAN LETTER RAE */
    3880             :         [1536+0x21] = 0x1CA1,   /* U+10E1: GEORGIAN LETTER SAN */
    3881             :         [1536+0x22] = 0x1CA2,   /* U+10E2: GEORGIAN LETTER TAR */
    3882             :         [1536+0x23] = 0x1CA3,   /* U+10E3: GEORGIAN LETTER UN */
    3883             :         [1536+0x24] = 0x1CA4,   /* U+10E4: GEORGIAN LETTER PHAR */
    3884             :         [1536+0x25] = 0x1CA5,   /* U+10E5: GEORGIAN LETTER KHAR */
    3885             :         [1536+0x26] = 0x1CA6,   /* U+10E6: GEORGIAN LETTER GHAN */
    3886             :         [1536+0x27] = 0x1CA7,   /* U+10E7: GEORGIAN LETTER QAR */
    3887             :         [1536+0x28] = 0x1CA8,   /* U+10E8: GEORGIAN LETTER SHIN */
    3888             :         [1536+0x29] = 0x1CA9,   /* U+10E9: GEORGIAN LETTER CHIN */
    3889             :         [1536+0x2A] = 0x1CAA,   /* U+10EA: GEORGIAN LETTER CAN */
    3890             :         [1536+0x2B] = 0x1CAB,   /* U+10EB: GEORGIAN LETTER JIL */
    3891             :         [1536+0x2C] = 0x1CAC,   /* U+10EC: GEORGIAN LETTER CIL */
    3892             :         [1536+0x2D] = 0x1CAD,   /* U+10ED: GEORGIAN LETTER CHAR */
    3893             :         [1536+0x2E] = 0x1CAE,   /* U+10EE: GEORGIAN LETTER XAN */
    3894             :         [1536+0x2F] = 0x1CAF,   /* U+10EF: GEORGIAN LETTER JHAN */
    3895             :         [1536+0x30] = 0x1CB0,   /* U+10F0: GEORGIAN LETTER HAE */
    3896             :         [1536+0x31] = 0x1CB1,   /* U+10F1: GEORGIAN LETTER HE */
    3897             :         [1536+0x32] = 0x1CB2,   /* U+10F2: GEORGIAN LETTER HIE */
    3898             :         [1536+0x33] = 0x1CB3,   /* U+10F3: GEORGIAN LETTER WE */
    3899             :         [1536+0x34] = 0x1CB4,   /* U+10F4: GEORGIAN LETTER HAR */
    3900             :         [1536+0x35] = 0x1CB5,   /* U+10F5: GEORGIAN LETTER HOE */
    3901             :         [1536+0x36] = 0x1CB6,   /* U+10F6: GEORGIAN LETTER FI */
    3902             :         [1536+0x37] = 0x1CB7,   /* U+10F7: GEORGIAN LETTER YN */
    3903             :         [1536+0x38] = 0x1CB8,   /* U+10F8: GEORGIAN LETTER ELIFI */
    3904             :         [1536+0x39] = 0x1CB9,   /* U+10F9: GEORGIAN LETTER TURNED GAN */
    3905             :         [1536+0x3A] = 0x1CBA,   /* U+10FA: GEORGIAN LETTER AIN */
    3906             :         [1536+0x3D] = 0x1CBD,   /* U+10FD: GEORGIAN LETTER AEN */
    3907             :         [1536+0x3E] = 0x1CBE,   /* U+10FE: GEORGIAN LETTER HARD SIGN */
    3908             :         [1536+0x3F] = 0x1CBF,   /* U+10FF: GEORGIAN LETTER LABIAL SIGN */
    3909             :         [1472+0x0F] = 1600 - 0x80,      /* 341 217 ... */
    3910             :         [1600+0x38] = 0x13F0,   /* U+13F8: CHEROKEE SMALL LETTER YE */
    3911             :         [1600+0x39] = 0x13F1,   /* U+13F9: CHEROKEE SMALL LETTER YI */
    3912             :         [1600+0x3A] = 0x13F2,   /* U+13FA: CHEROKEE SMALL LETTER YO */
    3913             :         [1600+0x3B] = 0x13F3,   /* U+13FB: CHEROKEE SMALL LETTER YU */
    3914             :         [1600+0x3C] = 0x13F4,   /* U+13FC: CHEROKEE SMALL LETTER YV */
    3915             :         [1600+0x3D] = 0x13F5,   /* U+13FD: CHEROKEE SMALL LETTER MV */
    3916             :         [1472+0x32] = 1664 - 0x80,      /* 341 262 ... */
    3917             :         [1664+0x00] = 0x0412,   /* U+1C80: CYRILLIC SMALL LETTER ROUNDED VE */
    3918             :         [1664+0x01] = 0x0414,   /* U+1C81: CYRILLIC SMALL LETTER LONG-LEGGED DE */
    3919             :         [1664+0x02] = 0x041E,   /* U+1C82: CYRILLIC SMALL LETTER NARROW O */
    3920             :         [1664+0x03] = 0x0421,   /* U+1C83: CYRILLIC SMALL LETTER WIDE ES */
    3921             :         [1664+0x04] = 0x0422,   /* U+1C84: CYRILLIC SMALL LETTER TALL TE */
    3922             :         [1664+0x05] = 0x0422,   /* U+1C85: CYRILLIC SMALL LETTER THREE-LEGGED TE */
    3923             :         [1664+0x06] = 0x042A,   /* U+1C86: CYRILLIC SMALL LETTER TALL HARD SIGN */
    3924             :         [1664+0x07] = 0x0462,   /* U+1C87: CYRILLIC SMALL LETTER TALL YAT */
    3925             :         [1664+0x08] = 0xA64A,   /* U+1C88: CYRILLIC SMALL LETTER UNBLENDED UK */
    3926             :         [1472+0x35] = 1728 - 0x80,      /* 341 265 ... */
    3927             :         [1728+0x39] = 0xA77D,   /* U+1D79: LATIN SMALL LETTER INSULAR G */
    3928             :         [1728+0x3D] = 0x2C63,   /* U+1D7D: LATIN SMALL LETTER P WITH STROKE */
    3929             :         [1472+0x36] = 1792 - 0x80,      /* 341 266 ... */
    3930             :         [1792+0x0E] = 0xA7C6,   /* U+1D8E: LATIN SMALL LETTER Z WITH PALATAL HOOK */
    3931             :         [1472+0x38] = 1856 - 0x80,      /* 341 270 ... */
    3932             :         [1856+0x01] = 0x1E00,   /* U+1E01: LATIN SMALL LETTER A WITH RING BELOW */
    3933             :         [1856+0x03] = 0x1E02,   /* U+1E03: LATIN SMALL LETTER B WITH DOT ABOVE */
    3934             :         [1856+0x05] = 0x1E04,   /* U+1E05: LATIN SMALL LETTER B WITH DOT BELOW */
    3935             :         [1856+0x07] = 0x1E06,   /* U+1E07: LATIN SMALL LETTER B WITH LINE BELOW */
    3936             :         [1856+0x09] = 0x1E08,   /* U+1E09: LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */
    3937             :         [1856+0x0B] = 0x1E0A,   /* U+1E0B: LATIN SMALL LETTER D WITH DOT ABOVE */
    3938             :         [1856+0x0D] = 0x1E0C,   /* U+1E0D: LATIN SMALL LETTER D WITH DOT BELOW */
    3939             :         [1856+0x0F] = 0x1E0E,   /* U+1E0F: LATIN SMALL LETTER D WITH LINE BELOW */
    3940             :         [1856+0x11] = 0x1E10,   /* U+1E11: LATIN SMALL LETTER D WITH CEDILLA */
    3941             :         [1856+0x13] = 0x1E12,   /* U+1E13: LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
    3942             :         [1856+0x15] = 0x1E14,   /* U+1E15: LATIN SMALL LETTER E WITH MACRON AND GRAVE */
    3943             :         [1856+0x17] = 0x1E16,   /* U+1E17: LATIN SMALL LETTER E WITH MACRON AND ACUTE */
    3944             :         [1856+0x19] = 0x1E18,   /* U+1E19: LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
    3945             :         [1856+0x1B] = 0x1E1A,   /* U+1E1B: LATIN SMALL LETTER E WITH TILDE BELOW */
    3946             :         [1856+0x1D] = 0x1E1C,   /* U+1E1D: LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
    3947             :         [1856+0x1F] = 0x1E1E,   /* U+1E1F: LATIN SMALL LETTER F WITH DOT ABOVE */
    3948             :         [1856+0x21] = 0x1E20,   /* U+1E21: LATIN SMALL LETTER G WITH MACRON */
    3949             :         [1856+0x23] = 0x1E22,   /* U+1E23: LATIN SMALL LETTER H WITH DOT ABOVE */
    3950             :         [1856+0x25] = 0x1E24,   /* U+1E25: LATIN SMALL LETTER H WITH DOT BELOW */
    3951             :         [1856+0x27] = 0x1E26,   /* U+1E27: LATIN SMALL LETTER H WITH DIAERESIS */
    3952             :         [1856+0x29] = 0x1E28,   /* U+1E29: LATIN SMALL LETTER H WITH CEDILLA */
    3953             :         [1856+0x2B] = 0x1E2A,   /* U+1E2B: LATIN SMALL LETTER H WITH BREVE BELOW */
    3954             :         [1856+0x2D] = 0x1E2C,   /* U+1E2D: LATIN SMALL LETTER I WITH TILDE BELOW */
    3955             :         [1856+0x2F] = 0x1E2E,   /* U+1E2F: LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */
    3956             :         [1856+0x31] = 0x1E30,   /* U+1E31: LATIN SMALL LETTER K WITH ACUTE */
    3957             :         [1856+0x33] = 0x1E32,   /* U+1E33: LATIN SMALL LETTER K WITH DOT BELOW */
    3958             :         [1856+0x35] = 0x1E34,   /* U+1E35: LATIN SMALL LETTER K WITH LINE BELOW */
    3959             :         [1856+0x37] = 0x1E36,   /* U+1E37: LATIN SMALL LETTER L WITH DOT BELOW */
    3960             :         [1856+0x39] = 0x1E38,   /* U+1E39: LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
    3961             :         [1856+0x3B] = 0x1E3A,   /* U+1E3B: LATIN SMALL LETTER L WITH LINE BELOW */
    3962             :         [1856+0x3D] = 0x1E3C,   /* U+1E3D: LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
    3963             :         [1856+0x3F] = 0x1E3E,   /* U+1E3F: LATIN SMALL LETTER M WITH ACUTE */
    3964             :         [1472+0x39] = 1920 - 0x80,      /* 341 271 ... */
    3965             :         [1920+0x01] = 0x1E40,   /* U+1E41: LATIN SMALL LETTER M WITH DOT ABOVE */
    3966             :         [1920+0x03] = 0x1E42,   /* U+1E43: LATIN SMALL LETTER M WITH DOT BELOW */
    3967             :         [1920+0x05] = 0x1E44,   /* U+1E45: LATIN SMALL LETTER N WITH DOT ABOVE */
    3968             :         [1920+0x07] = 0x1E46,   /* U+1E47: LATIN SMALL LETTER N WITH DOT BELOW */
    3969             :         [1920+0x09] = 0x1E48,   /* U+1E49: LATIN SMALL LETTER N WITH LINE BELOW */
    3970             :         [1920+0x0B] = 0x1E4A,   /* U+1E4B: LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
    3971             :         [1920+0x0D] = 0x1E4C,   /* U+1E4D: LATIN SMALL LETTER O WITH TILDE AND ACUTE */
    3972             :         [1920+0x0F] = 0x1E4E,   /* U+1E4F: LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */
    3973             :         [1920+0x11] = 0x1E50,   /* U+1E51: LATIN SMALL LETTER O WITH MACRON AND GRAVE */
    3974             :         [1920+0x13] = 0x1E52,   /* U+1E53: LATIN SMALL LETTER O WITH MACRON AND ACUTE */
    3975             :         [1920+0x15] = 0x1E54,   /* U+1E55: LATIN SMALL LETTER P WITH ACUTE */
    3976             :         [1920+0x17] = 0x1E56,   /* U+1E57: LATIN SMALL LETTER P WITH DOT ABOVE */
    3977             :         [1920+0x19] = 0x1E58,   /* U+1E59: LATIN SMALL LETTER R WITH DOT ABOVE */
    3978             :         [1920+0x1B] = 0x1E5A,   /* U+1E5B: LATIN SMALL LETTER R WITH DOT BELOW */
    3979             :         [1920+0x1D] = 0x1E5C,   /* U+1E5D: LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
    3980             :         [1920+0x1F] = 0x1E5E,   /* U+1E5F: LATIN SMALL LETTER R WITH LINE BELOW */
    3981             :         [1920+0x21] = 0x1E60,   /* U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE */
    3982             :         [1920+0x23] = 0x1E62,   /* U+1E63: LATIN SMALL LETTER S WITH DOT BELOW */
    3983             :         [1920+0x25] = 0x1E64,   /* U+1E65: LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */
    3984             :         [1920+0x27] = 0x1E66,   /* U+1E67: LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */
    3985             :         [1920+0x29] = 0x1E68,   /* U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
    3986             :         [1920+0x2B] = 0x1E6A,   /* U+1E6B: LATIN SMALL LETTER T WITH DOT ABOVE */
    3987             :         [1920+0x2D] = 0x1E6C,   /* U+1E6D: LATIN SMALL LETTER T WITH DOT BELOW */
    3988             :         [1920+0x2F] = 0x1E6E,   /* U+1E6F: LATIN SMALL LETTER T WITH LINE BELOW */
    3989             :         [1920+0x31] = 0x1E70,   /* U+1E71: LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
    3990             :         [1920+0x33] = 0x1E72,   /* U+1E73: LATIN SMALL LETTER U WITH DIAERESIS BELOW */
    3991             :         [1920+0x35] = 0x1E74,   /* U+1E75: LATIN SMALL LETTER U WITH TILDE BELOW */
    3992             :         [1920+0x37] = 0x1E76,   /* U+1E77: LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
    3993             :         [1920+0x39] = 0x1E78,   /* U+1E79: LATIN SMALL LETTER U WITH TILDE AND ACUTE */
    3994             :         [1920+0x3B] = 0x1E7A,   /* U+1E7B: LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
    3995             :         [1920+0x3D] = 0x1E7C,   /* U+1E7D: LATIN SMALL LETTER V WITH TILDE */
    3996             :         [1920+0x3F] = 0x1E7E,   /* U+1E7F: LATIN SMALL LETTER V WITH DOT BELOW */
    3997             :         [1472+0x3A] = 1984 - 0x80,      /* 341 272 ... */
    3998             :         [1984+0x01] = 0x1E80,   /* U+1E81: LATIN SMALL LETTER W WITH GRAVE */
    3999             :         [1984+0x03] = 0x1E82,   /* U+1E83: LATIN SMALL LETTER W WITH ACUTE */
    4000             :         [1984+0x05] = 0x1E84,   /* U+1E85: LATIN SMALL LETTER W WITH DIAERESIS */
    4001             :         [1984+0x07] = 0x1E86,   /* U+1E87: LATIN SMALL LETTER W WITH DOT ABOVE */
    4002             :         [1984+0x09] = 0x1E88,   /* U+1E89: LATIN SMALL LETTER W WITH DOT BELOW */
    4003             :         [1984+0x0B] = 0x1E8A,   /* U+1E8B: LATIN SMALL LETTER X WITH DOT ABOVE */
    4004             :         [1984+0x0D] = 0x1E8C,   /* U+1E8D: LATIN SMALL LETTER X WITH DIAERESIS */
    4005             :         [1984+0x0F] = 0x1E8E,   /* U+1E8F: LATIN SMALL LETTER Y WITH DOT ABOVE */
    4006             :         [1984+0x11] = 0x1E90,   /* U+1E91: LATIN SMALL LETTER Z WITH CIRCUMFLEX */
    4007             :         [1984+0x13] = 0x1E92,   /* U+1E93: LATIN SMALL LETTER Z WITH DOT BELOW */
    4008             :         [1984+0x15] = 0x1E94,   /* U+1E95: LATIN SMALL LETTER Z WITH LINE BELOW */
    4009             :         [1984+0x16] = -91,      /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
    4010             :         [1984+0x17] = -92,      /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
    4011             :         [1984+0x18] = -93,      /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
    4012             :         [1984+0x19] = -94,      /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
    4013             :         [1984+0x1A] = -95,      /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
    4014             :         [1984+0x1B] = 0x1E60,   /* U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE */
    4015             :         [1984+0x21] = 0x1EA0,   /* U+1EA1: LATIN SMALL LETTER A WITH DOT BELOW */
    4016             :         [1984+0x23] = 0x1EA2,   /* U+1EA3: LATIN SMALL LETTER A WITH HOOK ABOVE */
    4017             :         [1984+0x25] = 0x1EA4,   /* U+1EA5: LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
    4018             :         [1984+0x27] = 0x1EA6,   /* U+1EA7: LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
    4019             :         [1984+0x29] = 0x1EA8,   /* U+1EA9: LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
    4020             :         [1984+0x2B] = 0x1EAA,   /* U+1EAB: LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
    4021             :         [1984+0x2D] = 0x1EAC,   /* U+1EAD: LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
    4022             :         [1984+0x2F] = 0x1EAE,   /* U+1EAF: LATIN SMALL LETTER A WITH BREVE AND ACUTE */
    4023             :         [1984+0x31] = 0x1EB0,   /* U+1EB1: LATIN SMALL LETTER A WITH BREVE AND GRAVE */
    4024             :         [1984+0x33] = 0x1EB2,   /* U+1EB3: LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
    4025             :         [1984+0x35] = 0x1EB4,   /* U+1EB5: LATIN SMALL LETTER A WITH BREVE AND TILDE */
    4026             :         [1984+0x37] = 0x1EB6,   /* U+1EB7: LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
    4027             :         [1984+0x39] = 0x1EB8,   /* U+1EB9: LATIN SMALL LETTER E WITH DOT BELOW */
    4028             :         [1984+0x3B] = 0x1EBA,   /* U+1EBB: LATIN SMALL LETTER E WITH HOOK ABOVE */
    4029             :         [1984+0x3D] = 0x1EBC,   /* U+1EBD: LATIN SMALL LETTER E WITH TILDE */
    4030             :         [1984+0x3F] = 0x1EBE,   /* U+1EBF: LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
    4031             :         [1472+0x3B] = 2048 - 0x80,      /* 341 273 ... */
    4032             :         [2048+0x01] = 0x1EC0,   /* U+1EC1: LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
    4033             :         [2048+0x03] = 0x1EC2,   /* U+1EC3: LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
    4034             :         [2048+0x05] = 0x1EC4,   /* U+1EC5: LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
    4035             :         [2048+0x07] = 0x1EC6,   /* U+1EC7: LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
    4036             :         [2048+0x09] = 0x1EC8,   /* U+1EC9: LATIN SMALL LETTER I WITH HOOK ABOVE */
    4037             :         [2048+0x0B] = 0x1ECA,   /* U+1ECB: LATIN SMALL LETTER I WITH DOT BELOW */
    4038             :         [2048+0x0D] = 0x1ECC,   /* U+1ECD: LATIN SMALL LETTER O WITH DOT BELOW */
    4039             :         [2048+0x0F] = 0x1ECE,   /* U+1ECF: LATIN SMALL LETTER O WITH HOOK ABOVE */
    4040             :         [2048+0x11] = 0x1ED0,   /* U+1ED1: LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
    4041             :         [2048+0x13] = 0x1ED2,   /* U+1ED3: LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
    4042             :         [2048+0x15] = 0x1ED4,   /* U+1ED5: LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
    4043             :         [2048+0x17] = 0x1ED6,   /* U+1ED7: LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
    4044             :         [2048+0x19] = 0x1ED8,   /* U+1ED9: LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
    4045             :         [2048+0x1B] = 0x1EDA,   /* U+1EDB: LATIN SMALL LETTER O WITH HORN AND ACUTE */
    4046             :         [2048+0x1D] = 0x1EDC,   /* U+1EDD: LATIN SMALL LETTER O WITH HORN AND GRAVE */
    4047             :         [2048+0x1F] = 0x1EDE,   /* U+1EDF: LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
    4048             :         [2048+0x21] = 0x1EE0,   /* U+1EE1: LATIN SMALL LETTER O WITH HORN AND TILDE */
    4049             :         [2048+0x23] = 0x1EE2,   /* U+1EE3: LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
    4050             :         [2048+0x25] = 0x1EE4,   /* U+1EE5: LATIN SMALL LETTER U WITH DOT BELOW */
    4051             :         [2048+0x27] = 0x1EE6,   /* U+1EE7: LATIN SMALL LETTER U WITH HOOK ABOVE */
    4052             :         [2048+0x29] = 0x1EE8,   /* U+1EE9: LATIN SMALL LETTER U WITH HORN AND ACUTE */
    4053             :         [2048+0x2B] = 0x1EEA,   /* U+1EEB: LATIN SMALL LETTER U WITH HORN AND GRAVE */
    4054             :         [2048+0x2D] = 0x1EEC,   /* U+1EED: LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
    4055             :         [2048+0x2F] = 0x1EEE,   /* U+1EEF: LATIN SMALL LETTER U WITH HORN AND TILDE */
    4056             :         [2048+0x31] = 0x1EF0,   /* U+1EF1: LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
    4057             :         [2048+0x33] = 0x1EF2,   /* U+1EF3: LATIN SMALL LETTER Y WITH GRAVE */
    4058             :         [2048+0x35] = 0x1EF4,   /* U+1EF5: LATIN SMALL LETTER Y WITH DOT BELOW */
    4059             :         [2048+0x37] = 0x1EF6,   /* U+1EF7: LATIN SMALL LETTER Y WITH HOOK ABOVE */
    4060             :         [2048+0x39] = 0x1EF8,   /* U+1EF9: LATIN SMALL LETTER Y WITH TILDE */
    4061             :         [2048+0x3B] = 0x1EFA,   /* U+1EFB: LATIN SMALL LETTER MIDDLE-WELSH LL */
    4062             :         [2048+0x3D] = 0x1EFC,   /* U+1EFD: LATIN SMALL LETTER MIDDLE-WELSH V */
    4063             :         [2048+0x3F] = 0x1EFE,   /* U+1EFF: LATIN SMALL LETTER Y WITH LOOP */
    4064             :         [1472+0x3C] = 2112 - 0x80,      /* 341 274 ... */
    4065             :         [2112+0x00] = 0x1F08,   /* U+1F00: GREEK SMALL LETTER ALPHA WITH PSILI */
    4066             :         [2112+0x01] = 0x1F09,   /* U+1F01: GREEK SMALL LETTER ALPHA WITH DASIA */
    4067             :         [2112+0x02] = 0x1F0A,   /* U+1F02: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
    4068             :         [2112+0x03] = 0x1F0B,   /* U+1F03: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
    4069             :         [2112+0x04] = 0x1F0C,   /* U+1F04: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
    4070             :         [2112+0x05] = 0x1F0D,   /* U+1F05: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
    4071             :         [2112+0x06] = 0x1F0E,   /* U+1F06: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
    4072             :         [2112+0x07] = 0x1F0F,   /* U+1F07: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
    4073             :         [2112+0x10] = 0x1F18,   /* U+1F10: GREEK SMALL LETTER EPSILON WITH PSILI */
    4074             :         [2112+0x11] = 0x1F19,   /* U+1F11: GREEK SMALL LETTER EPSILON WITH DASIA */
    4075             :         [2112+0x12] = 0x1F1A,   /* U+1F12: GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
    4076             :         [2112+0x13] = 0x1F1B,   /* U+1F13: GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
    4077             :         [2112+0x14] = 0x1F1C,   /* U+1F14: GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
    4078             :         [2112+0x15] = 0x1F1D,   /* U+1F15: GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
    4079             :         [2112+0x20] = 0x1F28,   /* U+1F20: GREEK SMALL LETTER ETA WITH PSILI */
    4080             :         [2112+0x21] = 0x1F29,   /* U+1F21: GREEK SMALL LETTER ETA WITH DASIA */
    4081             :         [2112+0x22] = 0x1F2A,   /* U+1F22: GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
    4082             :         [2112+0x23] = 0x1F2B,   /* U+1F23: GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
    4083             :         [2112+0x24] = 0x1F2C,   /* U+1F24: GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
    4084             :         [2112+0x25] = 0x1F2D,   /* U+1F25: GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
    4085             :         [2112+0x26] = 0x1F2E,   /* U+1F26: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
    4086             :         [2112+0x27] = 0x1F2F,   /* U+1F27: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
    4087             :         [2112+0x30] = 0x1F38,   /* U+1F30: GREEK SMALL LETTER IOTA WITH PSILI */
    4088             :         [2112+0x31] = 0x1F39,   /* U+1F31: GREEK SMALL LETTER IOTA WITH DASIA */
    4089             :         [2112+0x32] = 0x1F3A,   /* U+1F32: GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
    4090             :         [2112+0x33] = 0x1F3B,   /* U+1F33: GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
    4091             :         [2112+0x34] = 0x1F3C,   /* U+1F34: GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
    4092             :         [2112+0x35] = 0x1F3D,   /* U+1F35: GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
    4093             :         [2112+0x36] = 0x1F3E,   /* U+1F36: GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
    4094             :         [2112+0x37] = 0x1F3F,   /* U+1F37: GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
    4095             :         [1472+0x3D] = 2176 - 0x80,      /* 341 275 ... */
    4096             :         [2176+0x00] = 0x1F48,   /* U+1F40: GREEK SMALL LETTER OMICRON WITH PSILI */
    4097             :         [2176+0x01] = 0x1F49,   /* U+1F41: GREEK SMALL LETTER OMICRON WITH DASIA */
    4098             :         [2176+0x02] = 0x1F4A,   /* U+1F42: GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
    4099             :         [2176+0x03] = 0x1F4B,   /* U+1F43: GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
    4100             :         [2176+0x04] = 0x1F4C,   /* U+1F44: GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
    4101             :         [2176+0x05] = 0x1F4D,   /* U+1F45: GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
    4102             :         [2176+0x10] = -96,      /* U+1F50: GREEK SMALL LETTER UPSILON WITH PSILI */
    4103             :         [2176+0x11] = 0x1F59,   /* U+1F51: GREEK SMALL LETTER UPSILON WITH DASIA */
    4104             :         [2176+0x12] = -97,      /* U+1F52: GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
    4105             :         [2176+0x13] = 0x1F5B,   /* U+1F53: GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
    4106             :         [2176+0x14] = -98,      /* U+1F54: GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
    4107             :         [2176+0x15] = 0x1F5D,   /* U+1F55: GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
    4108             :         [2176+0x16] = -99,      /* U+1F56: GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
    4109             :         [2176+0x17] = 0x1F5F,   /* U+1F57: GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
    4110             :         [2176+0x20] = 0x1F68,   /* U+1F60: GREEK SMALL LETTER OMEGA WITH PSILI */
    4111             :         [2176+0x21] = 0x1F69,   /* U+1F61: GREEK SMALL LETTER OMEGA WITH DASIA */
    4112             :         [2176+0x22] = 0x1F6A,   /* U+1F62: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
    4113             :         [2176+0x23] = 0x1F6B,   /* U+1F63: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
    4114             :         [2176+0x24] = 0x1F6C,   /* U+1F64: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
    4115             :         [2176+0x25] = 0x1F6D,   /* U+1F65: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
    4116             :         [2176+0x26] = 0x1F6E,   /* U+1F66: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
    4117             :         [2176+0x27] = 0x1F6F,   /* U+1F67: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
    4118             :         [2176+0x30] = 0x1FBA,   /* U+1F70: GREEK SMALL LETTER ALPHA WITH VARIA */
    4119             :         [2176+0x31] = 0x1FBB,   /* U+1F71: GREEK SMALL LETTER ALPHA WITH OXIA */
    4120             :         [2176+0x32] = 0x1FC8,   /* U+1F72: GREEK SMALL LETTER EPSILON WITH VARIA */
    4121             :         [2176+0x33] = 0x1FC9,   /* U+1F73: GREEK SMALL LETTER EPSILON WITH OXIA */
    4122             :         [2176+0x34] = 0x1FCA,   /* U+1F74: GREEK SMALL LETTER ETA WITH VARIA */
    4123             :         [2176+0x35] = 0x1FCB,   /* U+1F75: GREEK SMALL LETTER ETA WITH OXIA */
    4124             :         [2176+0x36] = 0x1FDA,   /* U+1F76: GREEK SMALL LETTER IOTA WITH VARIA */
    4125             :         [2176+0x37] = 0x1FDB,   /* U+1F77: GREEK SMALL LETTER IOTA WITH OXIA */
    4126             :         [2176+0x38] = 0x1FF8,   /* U+1F78: GREEK SMALL LETTER OMICRON WITH VARIA */
    4127             :         [2176+0x39] = 0x1FF9,   /* U+1F79: GREEK SMALL LETTER OMICRON WITH OXIA */
    4128             :         [2176+0x3A] = 0x1FEA,   /* U+1F7A: GREEK SMALL LETTER UPSILON WITH VARIA */
    4129             :         [2176+0x3B] = 0x1FEB,   /* U+1F7B: GREEK SMALL LETTER UPSILON WITH OXIA */
    4130             :         [2176+0x3C] = 0x1FFA,   /* U+1F7C: GREEK SMALL LETTER OMEGA WITH VARIA */
    4131             :         [2176+0x3D] = 0x1FFB,   /* U+1F7D: GREEK SMALL LETTER OMEGA WITH OXIA */
    4132             :         [1472+0x3E] = 2240 - 0x80,      /* 341 276 ... */
    4133             :         [2240+0x00] = 0x1F88,   /* U+1F80: GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
    4134             :         [2240+0x01] = 0x1F89,   /* U+1F81: GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
    4135             :         [2240+0x02] = 0x1F8A,   /* U+1F82: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    4136             :         [2240+0x03] = 0x1F8B,   /* U+1F83: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    4137             :         [2240+0x04] = 0x1F8C,   /* U+1F84: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    4138             :         [2240+0x05] = 0x1F8D,   /* U+1F85: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    4139             :         [2240+0x06] = 0x1F8E,   /* U+1F86: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    4140             :         [2240+0x07] = 0x1F8F,   /* U+1F87: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    4141             :         [2240+0x08] = -110,     /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
    4142             :         [2240+0x09] = -111,     /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
    4143             :         [2240+0x0A] = -112,     /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    4144             :         [2240+0x0B] = -113,     /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    4145             :         [2240+0x0C] = -114,     /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    4146             :         [2240+0x0D] = -115,     /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    4147             :         [2240+0x0E] = -116,     /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    4148             :         [2240+0x0F] = -117,     /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    4149             :         [2240+0x10] = 0x1F98,   /* U+1F90: GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
    4150             :         [2240+0x11] = 0x1F99,   /* U+1F91: GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
    4151             :         [2240+0x12] = 0x1F9A,   /* U+1F92: GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    4152             :         [2240+0x13] = 0x1F9B,   /* U+1F93: GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    4153             :         [2240+0x14] = 0x1F9C,   /* U+1F94: GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    4154             :         [2240+0x15] = 0x1F9D,   /* U+1F95: GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    4155             :         [2240+0x16] = 0x1F9E,   /* U+1F96: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    4156             :         [2240+0x17] = 0x1F9F,   /* U+1F97: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    4157             :         [2240+0x18] = -118,     /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
    4158             :         [2240+0x19] = -119,     /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
    4159             :         [2240+0x1A] = -120,     /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    4160             :         [2240+0x1B] = -121,     /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    4161             :         [2240+0x1C] = -122,     /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    4162             :         [2240+0x1D] = -123,     /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    4163             :         [2240+0x1E] = -124,     /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    4164             :         [2240+0x1F] = -125,     /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    4165             :         [2240+0x20] = 0x1FA8,   /* U+1FA0: GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
    4166             :         [2240+0x21] = 0x1FA9,   /* U+1FA1: GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
    4167             :         [2240+0x22] = 0x1FAA,   /* U+1FA2: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    4168             :         [2240+0x23] = 0x1FAB,   /* U+1FA3: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    4169             :         [2240+0x24] = 0x1FAC,   /* U+1FA4: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    4170             :         [2240+0x25] = 0x1FAD,   /* U+1FA5: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    4171             :         [2240+0x26] = 0x1FAE,   /* U+1FA6: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    4172             :         [2240+0x27] = 0x1FAF,   /* U+1FA7: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    4173             :         [2240+0x28] = -126,     /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
    4174             :         [2240+0x29] = -127,     /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
    4175             :         [2240+0x2A] = -128,     /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    4176             :         [2240+0x2B] = -129,     /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    4177             :         [2240+0x2C] = -130,     /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    4178             :         [2240+0x2D] = -131,     /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    4179             :         [2240+0x2E] = -132,     /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    4180             :         [2240+0x2F] = -133,     /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    4181             :         [2240+0x30] = 0x1FB8,   /* U+1FB0: GREEK SMALL LETTER ALPHA WITH VRACHY */
    4182             :         [2240+0x31] = 0x1FB9,   /* U+1FB1: GREEK SMALL LETTER ALPHA WITH MACRON */
    4183             :         [2240+0x32] = -137,     /* U+1FB2: GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
    4184             :         [2240+0x33] = 0x1FBC,   /* U+1FB3: GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
    4185             :         [2240+0x34] = -138,     /* U+1FB4: GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
    4186             :         [2240+0x36] = -100,     /* U+1FB6: GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
    4187             :         [2240+0x37] = -143,     /* U+1FB7: GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
    4188             :         [2240+0x3C] = -134,     /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
    4189             :         [2240+0x3E] = 0x0399,   /* U+1FBE: GREEK PROSGEGRAMMENI */
    4190             :         [1472+0x3F] = 2304 - 0x80,      /* 341 277 ... */
    4191             :         [2304+0x02] = -139,     /* U+1FC2: GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
    4192             :         [2304+0x03] = 0x1FCC,   /* U+1FC3: GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
    4193             :         [2304+0x04] = -140,     /* U+1FC4: GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
    4194             :         [2304+0x06] = -101,     /* U+1FC6: GREEK SMALL LETTER ETA WITH PERISPOMENI */
    4195             :         [2304+0x07] = -144,     /* U+1FC7: GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
    4196             :         [2304+0x0C] = -135,     /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
    4197             :         [2304+0x10] = 0x1FD8,   /* U+1FD0: GREEK SMALL LETTER IOTA WITH VRACHY */
    4198             :         [2304+0x11] = 0x1FD9,   /* U+1FD1: GREEK SMALL LETTER IOTA WITH MACRON */
    4199             :         [2304+0x12] = -102,     /* U+1FD2: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
    4200             :         [2304+0x13] = -88,      /* U+1FD3: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
    4201             :         [2304+0x16] = -103,     /* U+1FD6: GREEK SMALL LETTER IOTA WITH PERISPOMENI */
    4202             :         [2304+0x17] = -104,     /* U+1FD7: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
    4203             :         [2304+0x20] = 0x1FE8,   /* U+1FE0: GREEK SMALL LETTER UPSILON WITH VRACHY */
    4204             :         [2304+0x21] = 0x1FE9,   /* U+1FE1: GREEK SMALL LETTER UPSILON WITH MACRON */
    4205             :         [2304+0x22] = -105,     /* U+1FE2: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
    4206             :         [2304+0x23] = -89,      /* U+1FE3: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
    4207             :         [2304+0x24] = -106,     /* U+1FE4: GREEK SMALL LETTER RHO WITH PSILI */
    4208             :         [2304+0x25] = 0x1FEC,   /* U+1FE5: GREEK SMALL LETTER RHO WITH DASIA */
    4209             :         [2304+0x26] = -107,     /* U+1FE6: GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
    4210             :         [2304+0x27] = -108,     /* U+1FE7: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
    4211             :         [2304+0x32] = -141,     /* U+1FF2: GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
    4212             :         [2304+0x33] = 0x1FFC,   /* U+1FF3: GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
    4213             :         [2304+0x34] = -142,     /* U+1FF4: GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
    4214             :         [2304+0x36] = -109,     /* U+1FF6: GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
    4215             :         [2304+0x37] = -145,     /* U+1FF7: GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
    4216             :         [2304+0x3C] = -136,     /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
    4217             :         [0xE2] = 2368 - 0x80,   /* 342 ... */
    4218             :         [2368+0x05] = 2432 - 0x80,      /* 342 205 ... */
    4219             :         [2432+0x0E] = 0x2132,   /* U+214E: TURNED SMALL F */
    4220             :         [2432+0x30] = 0x2160,   /* U+2170: SMALL ROMAN NUMERAL ONE */
    4221             :         [2432+0x31] = 0x2161,   /* U+2171: SMALL ROMAN NUMERAL TWO */
    4222             :         [2432+0x32] = 0x2162,   /* U+2172: SMALL ROMAN NUMERAL THREE */
    4223             :         [2432+0x33] = 0x2163,   /* U+2173: SMALL ROMAN NUMERAL FOUR */
    4224             :         [2432+0x34] = 0x2164,   /* U+2174: SMALL ROMAN NUMERAL FIVE */
    4225             :         [2432+0x35] = 0x2165,   /* U+2175: SMALL ROMAN NUMERAL SIX */
    4226             :         [2432+0x36] = 0x2166,   /* U+2176: SMALL ROMAN NUMERAL SEVEN */
    4227             :         [2432+0x37] = 0x2167,   /* U+2177: SMALL ROMAN NUMERAL EIGHT */
    4228             :         [2432+0x38] = 0x2168,   /* U+2178: SMALL ROMAN NUMERAL NINE */
    4229             :         [2432+0x39] = 0x2169,   /* U+2179: SMALL ROMAN NUMERAL TEN */
    4230             :         [2432+0x3A] = 0x216A,   /* U+217A: SMALL ROMAN NUMERAL ELEVEN */
    4231             :         [2432+0x3B] = 0x216B,   /* U+217B: SMALL ROMAN NUMERAL TWELVE */
    4232             :         [2432+0x3C] = 0x216C,   /* U+217C: SMALL ROMAN NUMERAL FIFTY */
    4233             :         [2432+0x3D] = 0x216D,   /* U+217D: SMALL ROMAN NUMERAL ONE HUNDRED */
    4234             :         [2432+0x3E] = 0x216E,   /* U+217E: SMALL ROMAN NUMERAL FIVE HUNDRED */
    4235             :         [2432+0x3F] = 0x216F,   /* U+217F: SMALL ROMAN NUMERAL ONE THOUSAND */
    4236             :         [2368+0x06] = 2496 - 0x80,      /* 342 206 ... */
    4237             :         [2496+0x04] = 0x2183,   /* U+2184: LATIN SMALL LETTER REVERSED C */
    4238             :         [2368+0x13] = 2560 - 0x80,      /* 342 223 ... */
    4239             :         [2560+0x10] = 0x24B6,   /* U+24D0: CIRCLED LATIN SMALL LETTER A */
    4240             :         [2560+0x11] = 0x24B7,   /* U+24D1: CIRCLED LATIN SMALL LETTER B */
    4241             :         [2560+0x12] = 0x24B8,   /* U+24D2: CIRCLED LATIN SMALL LETTER C */
    4242             :         [2560+0x13] = 0x24B9,   /* U+24D3: CIRCLED LATIN SMALL LETTER D */
    4243             :         [2560+0x14] = 0x24BA,   /* U+24D4: CIRCLED LATIN SMALL LETTER E */
    4244             :         [2560+0x15] = 0x24BB,   /* U+24D5: CIRCLED LATIN SMALL LETTER F */
    4245             :         [2560+0x16] = 0x24BC,   /* U+24D6: CIRCLED LATIN SMALL LETTER G */
    4246             :         [2560+0x17] = 0x24BD,   /* U+24D7: CIRCLED LATIN SMALL LETTER H */
    4247             :         [2560+0x18] = 0x24BE,   /* U+24D8: CIRCLED LATIN SMALL LETTER I */
    4248             :         [2560+0x19] = 0x24BF,   /* U+24D9: CIRCLED LATIN SMALL LETTER J */
    4249             :         [2560+0x1A] = 0x24C0,   /* U+24DA: CIRCLED LATIN SMALL LETTER K */
    4250             :         [2560+0x1B] = 0x24C1,   /* U+24DB: CIRCLED LATIN SMALL LETTER L */
    4251             :         [2560+0x1C] = 0x24C2,   /* U+24DC: CIRCLED LATIN SMALL LETTER M */
    4252             :         [2560+0x1D] = 0x24C3,   /* U+24DD: CIRCLED LATIN SMALL LETTER N */
    4253             :         [2560+0x1E] = 0x24C4,   /* U+24DE: CIRCLED LATIN SMALL LETTER O */
    4254             :         [2560+0x1F] = 0x24C5,   /* U+24DF: CIRCLED LATIN SMALL LETTER P */
    4255             :         [2560+0x20] = 0x24C6,   /* U+24E0: CIRCLED LATIN SMALL LETTER Q */
    4256             :         [2560+0x21] = 0x24C7,   /* U+24E1: CIRCLED LATIN SMALL LETTER R */
    4257             :         [2560+0x22] = 0x24C8,   /* U+24E2: CIRCLED LATIN SMALL LETTER S */
    4258             :         [2560+0x23] = 0x24C9,   /* U+24E3: CIRCLED LATIN SMALL LETTER T */
    4259             :         [2560+0x24] = 0x24CA,   /* U+24E4: CIRCLED LATIN SMALL LETTER U */
    4260             :         [2560+0x25] = 0x24CB,   /* U+24E5: CIRCLED LATIN SMALL LETTER V */
    4261             :         [2560+0x26] = 0x24CC,   /* U+24E6: CIRCLED LATIN SMALL LETTER W */
    4262             :         [2560+0x27] = 0x24CD,   /* U+24E7: CIRCLED LATIN SMALL LETTER X */
    4263             :         [2560+0x28] = 0x24CE,   /* U+24E8: CIRCLED LATIN SMALL LETTER Y */
    4264             :         [2560+0x29] = 0x24CF,   /* U+24E9: CIRCLED LATIN SMALL LETTER Z */
    4265             :         [2368+0x30] = 2624 - 0x80,      /* 342 260 ... */
    4266             :         [2624+0x30] = 0x2C00,   /* U+2C30: GLAGOLITIC SMALL LETTER AZU */
    4267             :         [2624+0x31] = 0x2C01,   /* U+2C31: GLAGOLITIC SMALL LETTER BUKY */
    4268             :         [2624+0x32] = 0x2C02,   /* U+2C32: GLAGOLITIC SMALL LETTER VEDE */
    4269             :         [2624+0x33] = 0x2C03,   /* U+2C33: GLAGOLITIC SMALL LETTER GLAGOLI */
    4270             :         [2624+0x34] = 0x2C04,   /* U+2C34: GLAGOLITIC SMALL LETTER DOBRO */
    4271             :         [2624+0x35] = 0x2C05,   /* U+2C35: GLAGOLITIC SMALL LETTER YESTU */
    4272             :         [2624+0x36] = 0x2C06,   /* U+2C36: GLAGOLITIC SMALL LETTER ZHIVETE */
    4273             :         [2624+0x37] = 0x2C07,   /* U+2C37: GLAGOLITIC SMALL LETTER DZELO */
    4274             :         [2624+0x38] = 0x2C08,   /* U+2C38: GLAGOLITIC SMALL LETTER ZEMLJA */
    4275             :         [2624+0x39] = 0x2C09,   /* U+2C39: GLAGOLITIC SMALL LETTER IZHE */
    4276             :         [2624+0x3A] = 0x2C0A,   /* U+2C3A: GLAGOLITIC SMALL LETTER INITIAL IZHE */
    4277             :         [2624+0x3B] = 0x2C0B,   /* U+2C3B: GLAGOLITIC SMALL LETTER I */
    4278             :         [2624+0x3C] = 0x2C0C,   /* U+2C3C: GLAGOLITIC SMALL LETTER DJERVI */
    4279             :         [2624+0x3D] = 0x2C0D,   /* U+2C3D: GLAGOLITIC SMALL LETTER KAKO */
    4280             :         [2624+0x3E] = 0x2C0E,   /* U+2C3E: GLAGOLITIC SMALL LETTER LJUDIJE */
    4281             :         [2624+0x3F] = 0x2C0F,   /* U+2C3F: GLAGOLITIC SMALL LETTER MYSLITE */
    4282             :         [2368+0x31] = 2688 - 0x80,      /* 342 261 ... */
    4283             :         [2688+0x00] = 0x2C10,   /* U+2C40: GLAGOLITIC SMALL LETTER NASHI */
    4284             :         [2688+0x01] = 0x2C11,   /* U+2C41: GLAGOLITIC SMALL LETTER ONU */
    4285             :         [2688+0x02] = 0x2C12,   /* U+2C42: GLAGOLITIC SMALL LETTER POKOJI */
    4286             :         [2688+0x03] = 0x2C13,   /* U+2C43: GLAGOLITIC SMALL LETTER RITSI */
    4287             :         [2688+0x04] = 0x2C14,   /* U+2C44: GLAGOLITIC SMALL LETTER SLOVO */
    4288             :         [2688+0x05] = 0x2C15,   /* U+2C45: GLAGOLITIC SMALL LETTER TVRIDO */
    4289             :         [2688+0x06] = 0x2C16,   /* U+2C46: GLAGOLITIC SMALL LETTER UKU */
    4290             :         [2688+0x07] = 0x2C17,   /* U+2C47: GLAGOLITIC SMALL LETTER FRITU */
    4291             :         [2688+0x08] = 0x2C18,   /* U+2C48: GLAGOLITIC SMALL LETTER HERU */
    4292             :         [2688+0x09] = 0x2C19,   /* U+2C49: GLAGOLITIC SMALL LETTER OTU */
    4293             :         [2688+0x0A] = 0x2C1A,   /* U+2C4A: GLAGOLITIC SMALL LETTER PE */
    4294             :         [2688+0x0B] = 0x2C1B,   /* U+2C4B: GLAGOLITIC SMALL LETTER SHTA */
    4295             :         [2688+0x0C] = 0x2C1C,   /* U+2C4C: GLAGOLITIC SMALL LETTER TSI */
    4296             :         [2688+0x0D] = 0x2C1D,   /* U+2C4D: GLAGOLITIC SMALL LETTER CHRIVI */
    4297             :         [2688+0x0E] = 0x2C1E,   /* U+2C4E: GLAGOLITIC SMALL LETTER SHA */
    4298             :         [2688+0x0F] = 0x2C1F,   /* U+2C4F: GLAGOLITIC SMALL LETTER YERU */
    4299             :         [2688+0x10] = 0x2C20,   /* U+2C50: GLAGOLITIC SMALL LETTER YERI */
    4300             :         [2688+0x11] = 0x2C21,   /* U+2C51: GLAGOLITIC SMALL LETTER YATI */
    4301             :         [2688+0x12] = 0x2C22,   /* U+2C52: GLAGOLITIC SMALL LETTER SPIDERY HA */
    4302             :         [2688+0x13] = 0x2C23,   /* U+2C53: GLAGOLITIC SMALL LETTER YU */
    4303             :         [2688+0x14] = 0x2C24,   /* U+2C54: GLAGOLITIC SMALL LETTER SMALL YUS */
    4304             :         [2688+0x15] = 0x2C25,   /* U+2C55: GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL */
    4305             :         [2688+0x16] = 0x2C26,   /* U+2C56: GLAGOLITIC SMALL LETTER YO */
    4306             :         [2688+0x17] = 0x2C27,   /* U+2C57: GLAGOLITIC SMALL LETTER IOTATED SMALL YUS */
    4307             :         [2688+0x18] = 0x2C28,   /* U+2C58: GLAGOLITIC SMALL LETTER BIG YUS */
    4308             :         [2688+0x19] = 0x2C29,   /* U+2C59: GLAGOLITIC SMALL LETTER IOTATED BIG YUS */
    4309             :         [2688+0x1A] = 0x2C2A,   /* U+2C5A: GLAGOLITIC SMALL LETTER FITA */
    4310             :         [2688+0x1B] = 0x2C2B,   /* U+2C5B: GLAGOLITIC SMALL LETTER IZHITSA */
    4311             :         [2688+0x1C] = 0x2C2C,   /* U+2C5C: GLAGOLITIC SMALL LETTER SHTAPIC */
    4312             :         [2688+0x1D] = 0x2C2D,   /* U+2C5D: GLAGOLITIC SMALL LETTER TROKUTASTI A */
    4313             :         [2688+0x1E] = 0x2C2E,   /* U+2C5E: GLAGOLITIC SMALL LETTER LATINATE MYSLITE */
    4314             :         [2688+0x1F] = 0x2C2F,   /* U+2C5F: GLAGOLITIC SMALL LETTER CAUDATE CHRIVI */
    4315             :         [2688+0x21] = 0x2C60,   /* U+2C61: LATIN SMALL LETTER L WITH DOUBLE BAR */
    4316             :         [2688+0x25] = 0x023A,   /* U+2C65: LATIN SMALL LETTER A WITH STROKE */
    4317             :         [2688+0x26] = 0x023E,   /* U+2C66: LATIN SMALL LETTER T WITH DIAGONAL STROKE */
    4318             :         [2688+0x28] = 0x2C67,   /* U+2C68: LATIN SMALL LETTER H WITH DESCENDER */
    4319             :         [2688+0x2A] = 0x2C69,   /* U+2C6A: LATIN SMALL LETTER K WITH DESCENDER */
    4320             :         [2688+0x2C] = 0x2C6B,   /* U+2C6C: LATIN SMALL LETTER Z WITH DESCENDER */
    4321             :         [2688+0x33] = 0x2C72,   /* U+2C73: LATIN SMALL LETTER W WITH HOOK */
    4322             :         [2688+0x36] = 0x2C75,   /* U+2C76: LATIN SMALL LETTER HALF H */
    4323             :         [2368+0x32] = 2752 - 0x80,      /* 342 262 ... */
    4324             :         [2752+0x01] = 0x2C80,   /* U+2C81: COPTIC SMALL LETTER ALFA */
    4325             :         [2752+0x03] = 0x2C82,   /* U+2C83: COPTIC SMALL LETTER VIDA */
    4326             :         [2752+0x05] = 0x2C84,   /* U+2C85: COPTIC SMALL LETTER GAMMA */
    4327             :         [2752+0x07] = 0x2C86,   /* U+2C87: COPTIC SMALL LETTER DALDA */
    4328             :         [2752+0x09] = 0x2C88,   /* U+2C89: COPTIC SMALL LETTER EIE */
    4329             :         [2752+0x0B] = 0x2C8A,   /* U+2C8B: COPTIC SMALL LETTER SOU */
    4330             :         [2752+0x0D] = 0x2C8C,   /* U+2C8D: COPTIC SMALL LETTER ZATA */
    4331             :         [2752+0x0F] = 0x2C8E,   /* U+2C8F: COPTIC SMALL LETTER HATE */
    4332             :         [2752+0x11] = 0x2C90,   /* U+2C91: COPTIC SMALL LETTER THETHE */
    4333             :         [2752+0x13] = 0x2C92,   /* U+2C93: COPTIC SMALL LETTER IAUDA */
    4334             :         [2752+0x15] = 0x2C94,   /* U+2C95: COPTIC SMALL LETTER KAPA */
    4335             :         [2752+0x17] = 0x2C96,   /* U+2C97: COPTIC SMALL LETTER LAULA */
    4336             :         [2752+0x19] = 0x2C98,   /* U+2C99: COPTIC SMALL LETTER MI */
    4337             :         [2752+0x1B] = 0x2C9A,   /* U+2C9B: COPTIC SMALL LETTER NI */
    4338             :         [2752+0x1D] = 0x2C9C,   /* U+2C9D: COPTIC SMALL LETTER KSI */
    4339             :         [2752+0x1F] = 0x2C9E,   /* U+2C9F: COPTIC SMALL LETTER O */
    4340             :         [2752+0x21] = 0x2CA0,   /* U+2CA1: COPTIC SMALL LETTER PI */
    4341             :         [2752+0x23] = 0x2CA2,   /* U+2CA3: COPTIC SMALL LETTER RO */
    4342             :         [2752+0x25] = 0x2CA4,   /* U+2CA5: COPTIC SMALL LETTER SIMA */
    4343             :         [2752+0x27] = 0x2CA6,   /* U+2CA7: COPTIC SMALL LETTER TAU */
    4344             :         [2752+0x29] = 0x2CA8,   /* U+2CA9: COPTIC SMALL LETTER UA */
    4345             :         [2752+0x2B] = 0x2CAA,   /* U+2CAB: COPTIC SMALL LETTER FI */
    4346             :         [2752+0x2D] = 0x2CAC,   /* U+2CAD: COPTIC SMALL LETTER KHI */
    4347             :         [2752+0x2F] = 0x2CAE,   /* U+2CAF: COPTIC SMALL LETTER PSI */
    4348             :         [2752+0x31] = 0x2CB0,   /* U+2CB1: COPTIC SMALL LETTER OOU */
    4349             :         [2752+0x33] = 0x2CB2,   /* U+2CB3: COPTIC SMALL LETTER DIALECT-P ALEF */
    4350             :         [2752+0x35] = 0x2CB4,   /* U+2CB5: COPTIC SMALL LETTER OLD COPTIC AIN */
    4351             :         [2752+0x37] = 0x2CB6,   /* U+2CB7: COPTIC SMALL LETTER CRYPTOGRAMMIC EIE */
    4352             :         [2752+0x39] = 0x2CB8,   /* U+2CB9: COPTIC SMALL LETTER DIALECT-P KAPA */
    4353             :         [2752+0x3B] = 0x2CBA,   /* U+2CBB: COPTIC SMALL LETTER DIALECT-P NI */
    4354             :         [2752+0x3D] = 0x2CBC,   /* U+2CBD: COPTIC SMALL LETTER CRYPTOGRAMMIC NI */
    4355             :         [2752+0x3F] = 0x2CBE,   /* U+2CBF: COPTIC SMALL LETTER OLD COPTIC OOU */
    4356             :         [2368+0x33] = 2816 - 0x80,      /* 342 263 ... */
    4357             :         [2816+0x01] = 0x2CC0,   /* U+2CC1: COPTIC SMALL LETTER SAMPI */
    4358             :         [2816+0x03] = 0x2CC2,   /* U+2CC3: COPTIC SMALL LETTER CROSSED SHEI */
    4359             :         [2816+0x05] = 0x2CC4,   /* U+2CC5: COPTIC SMALL LETTER OLD COPTIC SHEI */
    4360             :         [2816+0x07] = 0x2CC6,   /* U+2CC7: COPTIC SMALL LETTER OLD COPTIC ESH */
    4361             :         [2816+0x09] = 0x2CC8,   /* U+2CC9: COPTIC SMALL LETTER AKHMIMIC KHEI */
    4362             :         [2816+0x0B] = 0x2CCA,   /* U+2CCB: COPTIC SMALL LETTER DIALECT-P HORI */
    4363             :         [2816+0x0D] = 0x2CCC,   /* U+2CCD: COPTIC SMALL LETTER OLD COPTIC HORI */
    4364             :         [2816+0x0F] = 0x2CCE,   /* U+2CCF: COPTIC SMALL LETTER OLD COPTIC HA */
    4365             :         [2816+0x11] = 0x2CD0,   /* U+2CD1: COPTIC SMALL LETTER L-SHAPED HA */
    4366             :         [2816+0x13] = 0x2CD2,   /* U+2CD3: COPTIC SMALL LETTER OLD COPTIC HEI */
    4367             :         [2816+0x15] = 0x2CD4,   /* U+2CD5: COPTIC SMALL LETTER OLD COPTIC HAT */
    4368             :         [2816+0x17] = 0x2CD6,   /* U+2CD7: COPTIC SMALL LETTER OLD COPTIC GANGIA */
    4369             :         [2816+0x19] = 0x2CD8,   /* U+2CD9: COPTIC SMALL LETTER OLD COPTIC DJA */
    4370             :         [2816+0x1B] = 0x2CDA,   /* U+2CDB: COPTIC SMALL LETTER OLD COPTIC SHIMA */
    4371             :         [2816+0x1D] = 0x2CDC,   /* U+2CDD: COPTIC SMALL LETTER OLD NUBIAN SHIMA */
    4372             :         [2816+0x1F] = 0x2CDE,   /* U+2CDF: COPTIC SMALL LETTER OLD NUBIAN NGI */
    4373             :         [2816+0x21] = 0x2CE0,   /* U+2CE1: COPTIC SMALL LETTER OLD NUBIAN NYI */
    4374             :         [2816+0x23] = 0x2CE2,   /* U+2CE3: COPTIC SMALL LETTER OLD NUBIAN WAU */
    4375             :         [2816+0x2C] = 0x2CEB,   /* U+2CEC: COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI */
    4376             :         [2816+0x2E] = 0x2CED,   /* U+2CEE: COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA */
    4377             :         [2816+0x33] = 0x2CF2,   /* U+2CF3: COPTIC SMALL LETTER BOHAIRIC KHEI */
    4378             :         [2368+0x34] = 2880 - 0x80,      /* 342 264 ... */
    4379             :         [2880+0x00] = 0x10A0,   /* U+2D00: GEORGIAN SMALL LETTER AN */
    4380             :         [2880+0x01] = 0x10A1,   /* U+2D01: GEORGIAN SMALL LETTER BAN */
    4381             :         [2880+0x02] = 0x10A2,   /* U+2D02: GEORGIAN SMALL LETTER GAN */
    4382             :         [2880+0x03] = 0x10A3,   /* U+2D03: GEORGIAN SMALL LETTER DON */
    4383             :         [2880+0x04] = 0x10A4,   /* U+2D04: GEORGIAN SMALL LETTER EN */
    4384             :         [2880+0x05] = 0x10A5,   /* U+2D05: GEORGIAN SMALL LETTER VIN */
    4385             :         [2880+0x06] = 0x10A6,   /* U+2D06: GEORGIAN SMALL LETTER ZEN */
    4386             :         [2880+0x07] = 0x10A7,   /* U+2D07: GEORGIAN SMALL LETTER TAN */
    4387             :         [2880+0x08] = 0x10A8,   /* U+2D08: GEORGIAN SMALL LETTER IN */
    4388             :         [2880+0x09] = 0x10A9,   /* U+2D09: GEORGIAN SMALL LETTER KAN */
    4389             :         [2880+0x0A] = 0x10AA,   /* U+2D0A: GEORGIAN SMALL LETTER LAS */
    4390             :         [2880+0x0B] = 0x10AB,   /* U+2D0B: GEORGIAN SMALL LETTER MAN */
    4391             :         [2880+0x0C] = 0x10AC,   /* U+2D0C: GEORGIAN SMALL LETTER NAR */
    4392             :         [2880+0x0D] = 0x10AD,   /* U+2D0D: GEORGIAN SMALL LETTER ON */
    4393             :         [2880+0x0E] = 0x10AE,   /* U+2D0E: GEORGIAN SMALL LETTER PAR */
    4394             :         [2880+0x0F] = 0x10AF,   /* U+2D0F: GEORGIAN SMALL LETTER ZHAR */
    4395             :         [2880+0x10] = 0x10B0,   /* U+2D10: GEORGIAN SMALL LETTER RAE */
    4396             :         [2880+0x11] = 0x10B1,   /* U+2D11: GEORGIAN SMALL LETTER SAN */
    4397             :         [2880+0x12] = 0x10B2,   /* U+2D12: GEORGIAN SMALL LETTER TAR */
    4398             :         [2880+0x13] = 0x10B3,   /* U+2D13: GEORGIAN SMALL LETTER UN */
    4399             :         [2880+0x14] = 0x10B4,   /* U+2D14: GEORGIAN SMALL LETTER PHAR */
    4400             :         [2880+0x15] = 0x10B5,   /* U+2D15: GEORGIAN SMALL LETTER KHAR */
    4401             :         [2880+0x16] = 0x10B6,   /* U+2D16: GEORGIAN SMALL LETTER GHAN */
    4402             :         [2880+0x17] = 0x10B7,   /* U+2D17: GEORGIAN SMALL LETTER QAR */
    4403             :         [2880+0x18] = 0x10B8,   /* U+2D18: GEORGIAN SMALL LETTER SHIN */
    4404             :         [2880+0x19] = 0x10B9,   /* U+2D19: GEORGIAN SMALL LETTER CHIN */
    4405             :         [2880+0x1A] = 0x10BA,   /* U+2D1A: GEORGIAN SMALL LETTER CAN */
    4406             :         [2880+0x1B] = 0x10BB,   /* U+2D1B: GEORGIAN SMALL LETTER JIL */
    4407             :         [2880+0x1C] = 0x10BC,   /* U+2D1C: GEORGIAN SMALL LETTER CIL */
    4408             :         [2880+0x1D] = 0x10BD,   /* U+2D1D: GEORGIAN SMALL LETTER CHAR */
    4409             :         [2880+0x1E] = 0x10BE,   /* U+2D1E: GEORGIAN SMALL LETTER XAN */
    4410             :         [2880+0x1F] = 0x10BF,   /* U+2D1F: GEORGIAN SMALL LETTER JHAN */
    4411             :         [2880+0x20] = 0x10C0,   /* U+2D20: GEORGIAN SMALL LETTER HAE */
    4412             :         [2880+0x21] = 0x10C1,   /* U+2D21: GEORGIAN SMALL LETTER HE */
    4413             :         [2880+0x22] = 0x10C2,   /* U+2D22: GEORGIAN SMALL LETTER HIE */
    4414             :         [2880+0x23] = 0x10C3,   /* U+2D23: GEORGIAN SMALL LETTER WE */
    4415             :         [2880+0x24] = 0x10C4,   /* U+2D24: GEORGIAN SMALL LETTER HAR */
    4416             :         [2880+0x25] = 0x10C5,   /* U+2D25: GEORGIAN SMALL LETTER HOE */
    4417             :         [2880+0x27] = 0x10C7,   /* U+2D27: GEORGIAN SMALL LETTER YN */
    4418             :         [2880+0x2D] = 0x10CD,   /* U+2D2D: GEORGIAN SMALL LETTER AEN */
    4419             :         [0xEA] = 2944 - 0x80,   /* 352 ... */
    4420             :         [2944+0x19] = 3008 - 0x80,      /* 352 231 ... */
    4421             :         [3008+0x01] = 0xA640,   /* U+A641: CYRILLIC SMALL LETTER ZEMLYA */
    4422             :         [3008+0x03] = 0xA642,   /* U+A643: CYRILLIC SMALL LETTER DZELO */
    4423             :         [3008+0x05] = 0xA644,   /* U+A645: CYRILLIC SMALL LETTER REVERSED DZE */
    4424             :         [3008+0x07] = 0xA646,   /* U+A647: CYRILLIC SMALL LETTER IOTA */
    4425             :         [3008+0x09] = 0xA648,   /* U+A649: CYRILLIC SMALL LETTER DJERV */
    4426             :         [3008+0x0B] = 0xA64A,   /* U+A64B: CYRILLIC SMALL LETTER MONOGRAPH UK */
    4427             :         [3008+0x0D] = 0xA64C,   /* U+A64D: CYRILLIC SMALL LETTER BROAD OMEGA */
    4428             :         [3008+0x0F] = 0xA64E,   /* U+A64F: CYRILLIC SMALL LETTER NEUTRAL YER */
    4429             :         [3008+0x11] = 0xA650,   /* U+A651: CYRILLIC SMALL LETTER YERU WITH BACK YER */
    4430             :         [3008+0x13] = 0xA652,   /* U+A653: CYRILLIC SMALL LETTER IOTIFIED YAT */
    4431             :         [3008+0x15] = 0xA654,   /* U+A655: CYRILLIC SMALL LETTER REVERSED YU */
    4432             :         [3008+0x17] = 0xA656,   /* U+A657: CYRILLIC SMALL LETTER IOTIFIED A */
    4433             :         [3008+0x19] = 0xA658,   /* U+A659: CYRILLIC SMALL LETTER CLOSED LITTLE YUS */
    4434             :         [3008+0x1B] = 0xA65A,   /* U+A65B: CYRILLIC SMALL LETTER BLENDED YUS */
    4435             :         [3008+0x1D] = 0xA65C,   /* U+A65D: CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS */
    4436             :         [3008+0x1F] = 0xA65E,   /* U+A65F: CYRILLIC SMALL LETTER YN */
    4437             :         [3008+0x21] = 0xA660,   /* U+A661: CYRILLIC SMALL LETTER REVERSED TSE */
    4438             :         [3008+0x23] = 0xA662,   /* U+A663: CYRILLIC SMALL LETTER SOFT DE */
    4439             :         [3008+0x25] = 0xA664,   /* U+A665: CYRILLIC SMALL LETTER SOFT EL */
    4440             :         [3008+0x27] = 0xA666,   /* U+A667: CYRILLIC SMALL LETTER SOFT EM */
    4441             :         [3008+0x29] = 0xA668,   /* U+A669: CYRILLIC SMALL LETTER MONOCULAR O */
    4442             :         [3008+0x2B] = 0xA66A,   /* U+A66B: CYRILLIC SMALL LETTER BINOCULAR O */
    4443             :         [3008+0x2D] = 0xA66C,   /* U+A66D: CYRILLIC SMALL LETTER DOUBLE MONOCULAR O */
    4444             :         [2944+0x1A] = 3072 - 0x80,      /* 352 232 ... */
    4445             :         [3072+0x01] = 0xA680,   /* U+A681: CYRILLIC SMALL LETTER DWE */
    4446             :         [3072+0x03] = 0xA682,   /* U+A683: CYRILLIC SMALL LETTER DZWE */
    4447             :         [3072+0x05] = 0xA684,   /* U+A685: CYRILLIC SMALL LETTER ZHWE */
    4448             :         [3072+0x07] = 0xA686,   /* U+A687: CYRILLIC SMALL LETTER CCHE */
    4449             :         [3072+0x09] = 0xA688,   /* U+A689: CYRILLIC SMALL LETTER DZZE */
    4450             :         [3072+0x0B] = 0xA68A,   /* U+A68B: CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK */
    4451             :         [3072+0x0D] = 0xA68C,   /* U+A68D: CYRILLIC SMALL LETTER TWE */
    4452             :         [3072+0x0F] = 0xA68E,   /* U+A68F: CYRILLIC SMALL LETTER TSWE */
    4453             :         [3072+0x11] = 0xA690,   /* U+A691: CYRILLIC SMALL LETTER TSSE */
    4454             :         [3072+0x13] = 0xA692,   /* U+A693: CYRILLIC SMALL LETTER TCHE */
    4455             :         [3072+0x15] = 0xA694,   /* U+A695: CYRILLIC SMALL LETTER HWE */
    4456             :         [3072+0x17] = 0xA696,   /* U+A697: CYRILLIC SMALL LETTER SHWE */
    4457             :         [3072+0x19] = 0xA698,   /* U+A699: CYRILLIC SMALL LETTER DOUBLE O */
    4458             :         [3072+0x1B] = 0xA69A,   /* U+A69B: CYRILLIC SMALL LETTER CROSSED O */
    4459             :         [2944+0x1C] = 3136 - 0x80,      /* 352 234 ... */
    4460             :         [3136+0x23] = 0xA722,   /* U+A723: LATIN SMALL LETTER EGYPTOLOGICAL ALEF */
    4461             :         [3136+0x25] = 0xA724,   /* U+A725: LATIN SMALL LETTER EGYPTOLOGICAL AIN */
    4462             :         [3136+0x27] = 0xA726,   /* U+A727: LATIN SMALL LETTER HENG */
    4463             :         [3136+0x29] = 0xA728,   /* U+A729: LATIN SMALL LETTER TZ */
    4464             :         [3136+0x2B] = 0xA72A,   /* U+A72B: LATIN SMALL LETTER TRESILLO */
    4465             :         [3136+0x2D] = 0xA72C,   /* U+A72D: LATIN SMALL LETTER CUATRILLO */
    4466             :         [3136+0x2F] = 0xA72E,   /* U+A72F: LATIN SMALL LETTER CUATRILLO WITH COMMA */
    4467             :         [3136+0x33] = 0xA732,   /* U+A733: LATIN SMALL LETTER AA */
    4468             :         [3136+0x35] = 0xA734,   /* U+A735: LATIN SMALL LETTER AO */
    4469             :         [3136+0x37] = 0xA736,   /* U+A737: LATIN SMALL LETTER AU */
    4470             :         [3136+0x39] = 0xA738,   /* U+A739: LATIN SMALL LETTER AV */
    4471             :         [3136+0x3B] = 0xA73A,   /* U+A73B: LATIN SMALL LETTER AV WITH HORIZONTAL BAR */
    4472             :         [3136+0x3D] = 0xA73C,   /* U+A73D: LATIN SMALL LETTER AY */
    4473             :         [3136+0x3F] = 0xA73E,   /* U+A73F: LATIN SMALL LETTER REVERSED C WITH DOT */
    4474             :         [2944+0x1D] = 3200 - 0x80,      /* 352 235 ... */
    4475             :         [3200+0x01] = 0xA740,   /* U+A741: LATIN SMALL LETTER K WITH STROKE */
    4476             :         [3200+0x03] = 0xA742,   /* U+A743: LATIN SMALL LETTER K WITH DIAGONAL STROKE */
    4477             :         [3200+0x05] = 0xA744,   /* U+A745: LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE */
    4478             :         [3200+0x07] = 0xA746,   /* U+A747: LATIN SMALL LETTER BROKEN L */
    4479             :         [3200+0x09] = 0xA748,   /* U+A749: LATIN SMALL LETTER L WITH HIGH STROKE */
    4480             :         [3200+0x0B] = 0xA74A,   /* U+A74B: LATIN SMALL LETTER O WITH LONG STROKE OVERLAY */
    4481             :         [3200+0x0D] = 0xA74C,   /* U+A74D: LATIN SMALL LETTER O WITH LOOP */
    4482             :         [3200+0x0F] = 0xA74E,   /* U+A74F: LATIN SMALL LETTER OO */
    4483             :         [3200+0x11] = 0xA750,   /* U+A751: LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER */
    4484             :         [3200+0x13] = 0xA752,   /* U+A753: LATIN SMALL LETTER P WITH FLOURISH */
    4485             :         [3200+0x15] = 0xA754,   /* U+A755: LATIN SMALL LETTER P WITH SQUIRREL TAIL */
    4486             :         [3200+0x17] = 0xA756,   /* U+A757: LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER */
    4487             :         [3200+0x19] = 0xA758,   /* U+A759: LATIN SMALL LETTER Q WITH DIAGONAL STROKE */
    4488             :         [3200+0x1B] = 0xA75A,   /* U+A75B: LATIN SMALL LETTER R ROTUNDA */
    4489             :         [3200+0x1D] = 0xA75C,   /* U+A75D: LATIN SMALL LETTER RUM ROTUNDA */
    4490             :         [3200+0x1F] = 0xA75E,   /* U+A75F: LATIN SMALL LETTER V WITH DIAGONAL STROKE */
    4491             :         [3200+0x21] = 0xA760,   /* U+A761: LATIN SMALL LETTER VY */
    4492             :         [3200+0x23] = 0xA762,   /* U+A763: LATIN SMALL LETTER VISIGOTHIC Z */
    4493             :         [3200+0x25] = 0xA764,   /* U+A765: LATIN SMALL LETTER THORN WITH STROKE */
    4494             :         [3200+0x27] = 0xA766,   /* U+A767: LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER */
    4495             :         [3200+0x29] = 0xA768,   /* U+A769: LATIN SMALL LETTER VEND */
    4496             :         [3200+0x2B] = 0xA76A,   /* U+A76B: LATIN SMALL LETTER ET */
    4497             :         [3200+0x2D] = 0xA76C,   /* U+A76D: LATIN SMALL LETTER IS */
    4498             :         [3200+0x2F] = 0xA76E,   /* U+A76F: LATIN SMALL LETTER CON */
    4499             :         [3200+0x3A] = 0xA779,   /* U+A77A: LATIN SMALL LETTER INSULAR D */
    4500             :         [3200+0x3C] = 0xA77B,   /* U+A77C: LATIN SMALL LETTER INSULAR F */
    4501             :         [3200+0x3F] = 0xA77E,   /* U+A77F: LATIN SMALL LETTER TURNED INSULAR G */
    4502             :         [2944+0x1E] = 3264 - 0x80,      /* 352 236 ... */
    4503             :         [3264+0x01] = 0xA780,   /* U+A781: LATIN SMALL LETTER TURNED L */
    4504             :         [3264+0x03] = 0xA782,   /* U+A783: LATIN SMALL LETTER INSULAR R */
    4505             :         [3264+0x05] = 0xA784,   /* U+A785: LATIN SMALL LETTER INSULAR S */
    4506             :         [3264+0x07] = 0xA786,   /* U+A787: LATIN SMALL LETTER INSULAR T */
    4507             :         [3264+0x0C] = 0xA78B,   /* U+A78C: LATIN SMALL LETTER SALTILLO */
    4508             :         [3264+0x11] = 0xA790,   /* U+A791: LATIN SMALL LETTER N WITH DESCENDER */
    4509             :         [3264+0x13] = 0xA792,   /* U+A793: LATIN SMALL LETTER C WITH BAR */
    4510             :         [3264+0x14] = 0xA7C4,   /* U+A794: LATIN SMALL LETTER C WITH PALATAL HOOK */
    4511             :         [3264+0x17] = 0xA796,   /* U+A797: LATIN SMALL LETTER B WITH FLOURISH */
    4512             :         [3264+0x19] = 0xA798,   /* U+A799: LATIN SMALL LETTER F WITH STROKE */
    4513             :         [3264+0x1B] = 0xA79A,   /* U+A79B: LATIN SMALL LETTER VOLAPUK AE */
    4514             :         [3264+0x1D] = 0xA79C,   /* U+A79D: LATIN SMALL LETTER VOLAPUK OE */
    4515             :         [3264+0x1F] = 0xA79E,   /* U+A79F: LATIN SMALL LETTER VOLAPUK UE */
    4516             :         [3264+0x21] = 0xA7A0,   /* U+A7A1: LATIN SMALL LETTER G WITH OBLIQUE STROKE */
    4517             :         [3264+0x23] = 0xA7A2,   /* U+A7A3: LATIN SMALL LETTER K WITH OBLIQUE STROKE */
    4518             :         [3264+0x25] = 0xA7A4,   /* U+A7A5: LATIN SMALL LETTER N WITH OBLIQUE STROKE */
    4519             :         [3264+0x27] = 0xA7A6,   /* U+A7A7: LATIN SMALL LETTER R WITH OBLIQUE STROKE */
    4520             :         [3264+0x29] = 0xA7A8,   /* U+A7A9: LATIN SMALL LETTER S WITH OBLIQUE STROKE */
    4521             :         [3264+0x35] = 0xA7B4,   /* U+A7B5: LATIN SMALL LETTER BETA */
    4522             :         [3264+0x37] = 0xA7B6,   /* U+A7B7: LATIN SMALL LETTER OMEGA */
    4523             :         [3264+0x39] = 0xA7B8,   /* U+A7B9: LATIN SMALL LETTER U WITH STROKE */
    4524             :         [3264+0x3B] = 0xA7BA,   /* U+A7BB: LATIN SMALL LETTER GLOTTAL A */
    4525             :         [3264+0x3D] = 0xA7BC,   /* U+A7BD: LATIN SMALL LETTER GLOTTAL I */
    4526             :         [3264+0x3F] = 0xA7BE,   /* U+A7BF: LATIN SMALL LETTER GLOTTAL U */
    4527             :         [2944+0x1F] = 3328 - 0x80,      /* 352 237 ... */
    4528             :         [3328+0x01] = 0xA7C0,   /* U+A7C1: LATIN SMALL LETTER OLD POLISH O */
    4529             :         [3328+0x03] = 0xA7C2,   /* U+A7C3: LATIN SMALL LETTER ANGLICANA W */
    4530             :         [3328+0x08] = 0xA7C7,   /* U+A7C8: LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY */
    4531             :         [3328+0x0A] = 0xA7C9,   /* U+A7CA: LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY */
    4532             :         [3328+0x11] = 0xA7D0,   /* U+A7D1: LATIN SMALL LETTER CLOSED INSULAR G */
    4533             :         [3328+0x17] = 0xA7D6,   /* U+A7D7: LATIN SMALL LETTER MIDDLE SCOTS S */
    4534             :         [3328+0x19] = 0xA7D8,   /* U+A7D9: LATIN SMALL LETTER SIGMOID S */
    4535             :         [3328+0x36] = 0xA7F5,   /* U+A7F6: LATIN SMALL LETTER REVERSED HALF H */
    4536             :         [2944+0x2D] = 3392 - 0x80,      /* 352 255 ... */
    4537             :         [3392+0x13] = 0xA7B3,   /* U+AB53: LATIN SMALL LETTER CHI */
    4538             :         [3392+0x30] = 0x13A0,   /* U+AB70: CHEROKEE SMALL LETTER A */
    4539             :         [3392+0x31] = 0x13A1,   /* U+AB71: CHEROKEE SMALL LETTER E */
    4540             :         [3392+0x32] = 0x13A2,   /* U+AB72: CHEROKEE SMALL LETTER I */
    4541             :         [3392+0x33] = 0x13A3,   /* U+AB73: CHEROKEE SMALL LETTER O */
    4542             :         [3392+0x34] = 0x13A4,   /* U+AB74: CHEROKEE SMALL LETTER U */
    4543             :         [3392+0x35] = 0x13A5,   /* U+AB75: CHEROKEE SMALL LETTER V */
    4544             :         [3392+0x36] = 0x13A6,   /* U+AB76: CHEROKEE SMALL LETTER GA */
    4545             :         [3392+0x37] = 0x13A7,   /* U+AB77: CHEROKEE SMALL LETTER KA */
    4546             :         [3392+0x38] = 0x13A8,   /* U+AB78: CHEROKEE SMALL LETTER GE */
    4547             :         [3392+0x39] = 0x13A9,   /* U+AB79: CHEROKEE SMALL LETTER GI */
    4548             :         [3392+0x3A] = 0x13AA,   /* U+AB7A: CHEROKEE SMALL LETTER GO */
    4549             :         [3392+0x3B] = 0x13AB,   /* U+AB7B: CHEROKEE SMALL LETTER GU */
    4550             :         [3392+0x3C] = 0x13AC,   /* U+AB7C: CHEROKEE SMALL LETTER GV */
    4551             :         [3392+0x3D] = 0x13AD,   /* U+AB7D: CHEROKEE SMALL LETTER HA */
    4552             :         [3392+0x3E] = 0x13AE,   /* U+AB7E: CHEROKEE SMALL LETTER HE */
    4553             :         [3392+0x3F] = 0x13AF,   /* U+AB7F: CHEROKEE SMALL LETTER HI */
    4554             :         [2944+0x2E] = 3456 - 0x80,      /* 352 256 ... */
    4555             :         [3456+0x00] = 0x13B0,   /* U+AB80: CHEROKEE SMALL LETTER HO */
    4556             :         [3456+0x01] = 0x13B1,   /* U+AB81: CHEROKEE SMALL LETTER HU */
    4557             :         [3456+0x02] = 0x13B2,   /* U+AB82: CHEROKEE SMALL LETTER HV */
    4558             :         [3456+0x03] = 0x13B3,   /* U+AB83: CHEROKEE SMALL LETTER LA */
    4559             :         [3456+0x04] = 0x13B4,   /* U+AB84: CHEROKEE SMALL LETTER LE */
    4560             :         [3456+0x05] = 0x13B5,   /* U+AB85: CHEROKEE SMALL LETTER LI */
    4561             :         [3456+0x06] = 0x13B6,   /* U+AB86: CHEROKEE SMALL LETTER LO */
    4562             :         [3456+0x07] = 0x13B7,   /* U+AB87: CHEROKEE SMALL LETTER LU */
    4563             :         [3456+0x08] = 0x13B8,   /* U+AB88: CHEROKEE SMALL LETTER LV */
    4564             :         [3456+0x09] = 0x13B9,   /* U+AB89: CHEROKEE SMALL LETTER MA */
    4565             :         [3456+0x0A] = 0x13BA,   /* U+AB8A: CHEROKEE SMALL LETTER ME */
    4566             :         [3456+0x0B] = 0x13BB,   /* U+AB8B: CHEROKEE SMALL LETTER MI */
    4567             :         [3456+0x0C] = 0x13BC,   /* U+AB8C: CHEROKEE SMALL LETTER MO */
    4568             :         [3456+0x0D] = 0x13BD,   /* U+AB8D: CHEROKEE SMALL LETTER MU */
    4569             :         [3456+0x0E] = 0x13BE,   /* U+AB8E: CHEROKEE SMALL LETTER NA */
    4570             :         [3456+0x0F] = 0x13BF,   /* U+AB8F: CHEROKEE SMALL LETTER HNA */
    4571             :         [3456+0x10] = 0x13C0,   /* U+AB90: CHEROKEE SMALL LETTER NAH */
    4572             :         [3456+0x11] = 0x13C1,   /* U+AB91: CHEROKEE SMALL LETTER NE */
    4573             :         [3456+0x12] = 0x13C2,   /* U+AB92: CHEROKEE SMALL LETTER NI */
    4574             :         [3456+0x13] = 0x13C3,   /* U+AB93: CHEROKEE SMALL LETTER NO */
    4575             :         [3456+0x14] = 0x13C4,   /* U+AB94: CHEROKEE SMALL LETTER NU */
    4576             :         [3456+0x15] = 0x13C5,   /* U+AB95: CHEROKEE SMALL LETTER NV */
    4577             :         [3456+0x16] = 0x13C6,   /* U+AB96: CHEROKEE SMALL LETTER QUA */
    4578             :         [3456+0x17] = 0x13C7,   /* U+AB97: CHEROKEE SMALL LETTER QUE */
    4579             :         [3456+0x18] = 0x13C8,   /* U+AB98: CHEROKEE SMALL LETTER QUI */
    4580             :         [3456+0x19] = 0x13C9,   /* U+AB99: CHEROKEE SMALL LETTER QUO */
    4581             :         [3456+0x1A] = 0x13CA,   /* U+AB9A: CHEROKEE SMALL LETTER QUU */
    4582             :         [3456+0x1B] = 0x13CB,   /* U+AB9B: CHEROKEE SMALL LETTER QUV */
    4583             :         [3456+0x1C] = 0x13CC,   /* U+AB9C: CHEROKEE SMALL LETTER SA */
    4584             :         [3456+0x1D] = 0x13CD,   /* U+AB9D: CHEROKEE SMALL LETTER S */
    4585             :         [3456+0x1E] = 0x13CE,   /* U+AB9E: CHEROKEE SMALL LETTER SE */
    4586             :         [3456+0x1F] = 0x13CF,   /* U+AB9F: CHEROKEE SMALL LETTER SI */
    4587             :         [3456+0x20] = 0x13D0,   /* U+ABA0: CHEROKEE SMALL LETTER SO */
    4588             :         [3456+0x21] = 0x13D1,   /* U+ABA1: CHEROKEE SMALL LETTER SU */
    4589             :         [3456+0x22] = 0x13D2,   /* U+ABA2: CHEROKEE SMALL LETTER SV */
    4590             :         [3456+0x23] = 0x13D3,   /* U+ABA3: CHEROKEE SMALL LETTER DA */
    4591             :         [3456+0x24] = 0x13D4,   /* U+ABA4: CHEROKEE SMALL LETTER TA */
    4592             :         [3456+0x25] = 0x13D5,   /* U+ABA5: CHEROKEE SMALL LETTER DE */
    4593             :         [3456+0x26] = 0x13D6,   /* U+ABA6: CHEROKEE SMALL LETTER TE */
    4594             :         [3456+0x27] = 0x13D7,   /* U+ABA7: CHEROKEE SMALL LETTER DI */
    4595             :         [3456+0x28] = 0x13D8,   /* U+ABA8: CHEROKEE SMALL LETTER TI */
    4596             :         [3456+0x29] = 0x13D9,   /* U+ABA9: CHEROKEE SMALL LETTER DO */
    4597             :         [3456+0x2A] = 0x13DA,   /* U+ABAA: CHEROKEE SMALL LETTER DU */
    4598             :         [3456+0x2B] = 0x13DB,   /* U+ABAB: CHEROKEE SMALL LETTER DV */
    4599             :         [3456+0x2C] = 0x13DC,   /* U+ABAC: CHEROKEE SMALL LETTER DLA */
    4600             :         [3456+0x2D] = 0x13DD,   /* U+ABAD: CHEROKEE SMALL LETTER TLA */
    4601             :         [3456+0x2E] = 0x13DE,   /* U+ABAE: CHEROKEE SMALL LETTER TLE */
    4602             :         [3456+0x2F] = 0x13DF,   /* U+ABAF: CHEROKEE SMALL LETTER TLI */
    4603             :         [3456+0x30] = 0x13E0,   /* U+ABB0: CHEROKEE SMALL LETTER TLO */
    4604             :         [3456+0x31] = 0x13E1,   /* U+ABB1: CHEROKEE SMALL LETTER TLU */
    4605             :         [3456+0x32] = 0x13E2,   /* U+ABB2: CHEROKEE SMALL LETTER TLV */
    4606             :         [3456+0x33] = 0x13E3,   /* U+ABB3: CHEROKEE SMALL LETTER TSA */
    4607             :         [3456+0x34] = 0x13E4,   /* U+ABB4: CHEROKEE SMALL LETTER TSE */
    4608             :         [3456+0x35] = 0x13E5,   /* U+ABB5: CHEROKEE SMALL LETTER TSI */
    4609             :         [3456+0x36] = 0x13E6,   /* U+ABB6: CHEROKEE SMALL LETTER TSO */
    4610             :         [3456+0x37] = 0x13E7,   /* U+ABB7: CHEROKEE SMALL LETTER TSU */
    4611             :         [3456+0x38] = 0x13E8,   /* U+ABB8: CHEROKEE SMALL LETTER TSV */
    4612             :         [3456+0x39] = 0x13E9,   /* U+ABB9: CHEROKEE SMALL LETTER WA */
    4613             :         [3456+0x3A] = 0x13EA,   /* U+ABBA: CHEROKEE SMALL LETTER WE */
    4614             :         [3456+0x3B] = 0x13EB,   /* U+ABBB: CHEROKEE SMALL LETTER WI */
    4615             :         [3456+0x3C] = 0x13EC,   /* U+ABBC: CHEROKEE SMALL LETTER WO */
    4616             :         [3456+0x3D] = 0x13ED,   /* U+ABBD: CHEROKEE SMALL LETTER WU */
    4617             :         [3456+0x3E] = 0x13EE,   /* U+ABBE: CHEROKEE SMALL LETTER WV */
    4618             :         [3456+0x3F] = 0x13EF,   /* U+ABBF: CHEROKEE SMALL LETTER YA */
    4619             :         [0xEF] = 3520 - 0x80,   /* 357 ... */
    4620             :         [3520+0x2C] = 3584 - 0x80,      /* 357 254 ... */
    4621             :         [3584+0x00] = -75,      /* U+FB00: LATIN SMALL LIGATURE FF */
    4622             :         [3584+0x01] = -76,      /* U+FB01: LATIN SMALL LIGATURE FI */
    4623             :         [3584+0x02] = -77,      /* U+FB02: LATIN SMALL LIGATURE FL */
    4624             :         [3584+0x03] = -78,      /* U+FB03: LATIN SMALL LIGATURE FFI */
    4625             :         [3584+0x04] = -79,      /* U+FB04: LATIN SMALL LIGATURE FFL */
    4626             :         [3584+0x05] = -80,      /* U+FB05: LATIN SMALL LIGATURE LONG S T */
    4627             :         [3584+0x06] = -80,      /* U+FB06: LATIN SMALL LIGATURE ST */
    4628             :         [3584+0x13] = -82,      /* U+FB13: ARMENIAN SMALL LIGATURE MEN NOW */
    4629             :         [3584+0x14] = -83,      /* U+FB14: ARMENIAN SMALL LIGATURE MEN ECH */
    4630             :         [3584+0x15] = -84,      /* U+FB15: ARMENIAN SMALL LIGATURE MEN INI */
    4631             :         [3584+0x16] = -85,      /* U+FB16: ARMENIAN SMALL LIGATURE VEW NOW */
    4632             :         [3584+0x17] = -86,      /* U+FB17: ARMENIAN SMALL LIGATURE MEN XEH */
    4633             :         [3520+0x3D] = 3648 - 0x80,      /* 357 275 ... */
    4634             :         [3648+0x01] = 0xFF21,   /* U+FF41: FULLWIDTH LATIN SMALL LETTER A */
    4635             :         [3648+0x02] = 0xFF22,   /* U+FF42: FULLWIDTH LATIN SMALL LETTER B */
    4636             :         [3648+0x03] = 0xFF23,   /* U+FF43: FULLWIDTH LATIN SMALL LETTER C */
    4637             :         [3648+0x04] = 0xFF24,   /* U+FF44: FULLWIDTH LATIN SMALL LETTER D */
    4638             :         [3648+0x05] = 0xFF25,   /* U+FF45: FULLWIDTH LATIN SMALL LETTER E */
    4639             :         [3648+0x06] = 0xFF26,   /* U+FF46: FULLWIDTH LATIN SMALL LETTER F */
    4640             :         [3648+0x07] = 0xFF27,   /* U+FF47: FULLWIDTH LATIN SMALL LETTER G */
    4641             :         [3648+0x08] = 0xFF28,   /* U+FF48: FULLWIDTH LATIN SMALL LETTER H */
    4642             :         [3648+0x09] = 0xFF29,   /* U+FF49: FULLWIDTH LATIN SMALL LETTER I */
    4643             :         [3648+0x0A] = 0xFF2A,   /* U+FF4A: FULLWIDTH LATIN SMALL LETTER J */
    4644             :         [3648+0x0B] = 0xFF2B,   /* U+FF4B: FULLWIDTH LATIN SMALL LETTER K */
    4645             :         [3648+0x0C] = 0xFF2C,   /* U+FF4C: FULLWIDTH LATIN SMALL LETTER L */
    4646             :         [3648+0x0D] = 0xFF2D,   /* U+FF4D: FULLWIDTH LATIN SMALL LETTER M */
    4647             :         [3648+0x0E] = 0xFF2E,   /* U+FF4E: FULLWIDTH LATIN SMALL LETTER N */
    4648             :         [3648+0x0F] = 0xFF2F,   /* U+FF4F: FULLWIDTH LATIN SMALL LETTER O */
    4649             :         [3648+0x10] = 0xFF30,   /* U+FF50: FULLWIDTH LATIN SMALL LETTER P */
    4650             :         [3648+0x11] = 0xFF31,   /* U+FF51: FULLWIDTH LATIN SMALL LETTER Q */
    4651             :         [3648+0x12] = 0xFF32,   /* U+FF52: FULLWIDTH LATIN SMALL LETTER R */
    4652             :         [3648+0x13] = 0xFF33,   /* U+FF53: FULLWIDTH LATIN SMALL LETTER S */
    4653             :         [3648+0x14] = 0xFF34,   /* U+FF54: FULLWIDTH LATIN SMALL LETTER T */
    4654             :         [3648+0x15] = 0xFF35,   /* U+FF55: FULLWIDTH LATIN SMALL LETTER U */
    4655             :         [3648+0x16] = 0xFF36,   /* U+FF56: FULLWIDTH LATIN SMALL LETTER V */
    4656             :         [3648+0x17] = 0xFF37,   /* U+FF57: FULLWIDTH LATIN SMALL LETTER W */
    4657             :         [3648+0x18] = 0xFF38,   /* U+FF58: FULLWIDTH LATIN SMALL LETTER X */
    4658             :         [3648+0x19] = 0xFF39,   /* U+FF59: FULLWIDTH LATIN SMALL LETTER Y */
    4659             :         [3648+0x1A] = 0xFF3A,   /* U+FF5A: FULLWIDTH LATIN SMALL LETTER Z */
    4660             :         [0xF0] = 3712 - 0x80,   /* 360 ... */
    4661             :         [3712+0x10] = 3776 - 0x80,      /* 360 220 ... */
    4662             :         [3776+0x10] = 3840 - 0x80,      /* 360 220 220 ... */
    4663             :         [3840+0x28] = 0x10400,  /* U+10428: DESERET SMALL LETTER LONG I */
    4664             :         [3840+0x29] = 0x10401,  /* U+10429: DESERET SMALL LETTER LONG E */
    4665             :         [3840+0x2A] = 0x10402,  /* U+1042A: DESERET SMALL LETTER LONG A */
    4666             :         [3840+0x2B] = 0x10403,  /* U+1042B: DESERET SMALL LETTER LONG AH */
    4667             :         [3840+0x2C] = 0x10404,  /* U+1042C: DESERET SMALL LETTER LONG O */
    4668             :         [3840+0x2D] = 0x10405,  /* U+1042D: DESERET SMALL LETTER LONG OO */
    4669             :         [3840+0x2E] = 0x10406,  /* U+1042E: DESERET SMALL LETTER SHORT I */
    4670             :         [3840+0x2F] = 0x10407,  /* U+1042F: DESERET SMALL LETTER SHORT E */
    4671             :         [3840+0x30] = 0x10408,  /* U+10430: DESERET SMALL LETTER SHORT A */
    4672             :         [3840+0x31] = 0x10409,  /* U+10431: DESERET SMALL LETTER SHORT AH */
    4673             :         [3840+0x32] = 0x1040A,  /* U+10432: DESERET SMALL LETTER SHORT O */
    4674             :         [3840+0x33] = 0x1040B,  /* U+10433: DESERET SMALL LETTER SHORT OO */
    4675             :         [3840+0x34] = 0x1040C,  /* U+10434: DESERET SMALL LETTER AY */
    4676             :         [3840+0x35] = 0x1040D,  /* U+10435: DESERET SMALL LETTER OW */
    4677             :         [3840+0x36] = 0x1040E,  /* U+10436: DESERET SMALL LETTER WU */
    4678             :         [3840+0x37] = 0x1040F,  /* U+10437: DESERET SMALL LETTER YEE */
    4679             :         [3840+0x38] = 0x10410,  /* U+10438: DESERET SMALL LETTER H */
    4680             :         [3840+0x39] = 0x10411,  /* U+10439: DESERET SMALL LETTER PEE */
    4681             :         [3840+0x3A] = 0x10412,  /* U+1043A: DESERET SMALL LETTER BEE */
    4682             :         [3840+0x3B] = 0x10413,  /* U+1043B: DESERET SMALL LETTER TEE */
    4683             :         [3840+0x3C] = 0x10414,  /* U+1043C: DESERET SMALL LETTER DEE */
    4684             :         [3840+0x3D] = 0x10415,  /* U+1043D: DESERET SMALL LETTER CHEE */
    4685             :         [3840+0x3E] = 0x10416,  /* U+1043E: DESERET SMALL LETTER JEE */
    4686             :         [3840+0x3F] = 0x10417,  /* U+1043F: DESERET SMALL LETTER KAY */
    4687             :         [3776+0x11] = 3904 - 0x80,      /* 360 220 221 ... */
    4688             :         [3904+0x00] = 0x10418,  /* U+10440: DESERET SMALL LETTER GAY */
    4689             :         [3904+0x01] = 0x10419,  /* U+10441: DESERET SMALL LETTER EF */
    4690             :         [3904+0x02] = 0x1041A,  /* U+10442: DESERET SMALL LETTER VEE */
    4691             :         [3904+0x03] = 0x1041B,  /* U+10443: DESERET SMALL LETTER ETH */
    4692             :         [3904+0x04] = 0x1041C,  /* U+10444: DESERET SMALL LETTER THEE */
    4693             :         [3904+0x05] = 0x1041D,  /* U+10445: DESERET SMALL LETTER ES */
    4694             :         [3904+0x06] = 0x1041E,  /* U+10446: DESERET SMALL LETTER ZEE */
    4695             :         [3904+0x07] = 0x1041F,  /* U+10447: DESERET SMALL LETTER ESH */
    4696             :         [3904+0x08] = 0x10420,  /* U+10448: DESERET SMALL LETTER ZHEE */
    4697             :         [3904+0x09] = 0x10421,  /* U+10449: DESERET SMALL LETTER ER */
    4698             :         [3904+0x0A] = 0x10422,  /* U+1044A: DESERET SMALL LETTER EL */
    4699             :         [3904+0x0B] = 0x10423,  /* U+1044B: DESERET SMALL LETTER EM */
    4700             :         [3904+0x0C] = 0x10424,  /* U+1044C: DESERET SMALL LETTER EN */
    4701             :         [3904+0x0D] = 0x10425,  /* U+1044D: DESERET SMALL LETTER ENG */
    4702             :         [3904+0x0E] = 0x10426,  /* U+1044E: DESERET SMALL LETTER OI */
    4703             :         [3904+0x0F] = 0x10427,  /* U+1044F: DESERET SMALL LETTER EW */
    4704             :         [3776+0x13] = 3968 - 0x80,      /* 360 220 223 ... */
    4705             :         [3968+0x18] = 0x104B0,  /* U+104D8: OSAGE SMALL LETTER A */
    4706             :         [3968+0x19] = 0x104B1,  /* U+104D9: OSAGE SMALL LETTER AI */
    4707             :         [3968+0x1A] = 0x104B2,  /* U+104DA: OSAGE SMALL LETTER AIN */
    4708             :         [3968+0x1B] = 0x104B3,  /* U+104DB: OSAGE SMALL LETTER AH */
    4709             :         [3968+0x1C] = 0x104B4,  /* U+104DC: OSAGE SMALL LETTER BRA */
    4710             :         [3968+0x1D] = 0x104B5,  /* U+104DD: OSAGE SMALL LETTER CHA */
    4711             :         [3968+0x1E] = 0x104B6,  /* U+104DE: OSAGE SMALL LETTER EHCHA */
    4712             :         [3968+0x1F] = 0x104B7,  /* U+104DF: OSAGE SMALL LETTER E */
    4713             :         [3968+0x20] = 0x104B8,  /* U+104E0: OSAGE SMALL LETTER EIN */
    4714             :         [3968+0x21] = 0x104B9,  /* U+104E1: OSAGE SMALL LETTER HA */
    4715             :         [3968+0x22] = 0x104BA,  /* U+104E2: OSAGE SMALL LETTER HYA */
    4716             :         [3968+0x23] = 0x104BB,  /* U+104E3: OSAGE SMALL LETTER I */
    4717             :         [3968+0x24] = 0x104BC,  /* U+104E4: OSAGE SMALL LETTER KA */
    4718             :         [3968+0x25] = 0x104BD,  /* U+104E5: OSAGE SMALL LETTER EHKA */
    4719             :         [3968+0x26] = 0x104BE,  /* U+104E6: OSAGE SMALL LETTER KYA */
    4720             :         [3968+0x27] = 0x104BF,  /* U+104E7: OSAGE SMALL LETTER LA */
    4721             :         [3968+0x28] = 0x104C0,  /* U+104E8: OSAGE SMALL LETTER MA */
    4722             :         [3968+0x29] = 0x104C1,  /* U+104E9: OSAGE SMALL LETTER NA */
    4723             :         [3968+0x2A] = 0x104C2,  /* U+104EA: OSAGE SMALL LETTER O */
    4724             :         [3968+0x2B] = 0x104C3,  /* U+104EB: OSAGE SMALL LETTER OIN */
    4725             :         [3968+0x2C] = 0x104C4,  /* U+104EC: OSAGE SMALL LETTER PA */
    4726             :         [3968+0x2D] = 0x104C5,  /* U+104ED: OSAGE SMALL LETTER EHPA */
    4727             :         [3968+0x2E] = 0x104C6,  /* U+104EE: OSAGE SMALL LETTER SA */
    4728             :         [3968+0x2F] = 0x104C7,  /* U+104EF: OSAGE SMALL LETTER SHA */
    4729             :         [3968+0x30] = 0x104C8,  /* U+104F0: OSAGE SMALL LETTER TA */
    4730             :         [3968+0x31] = 0x104C9,  /* U+104F1: OSAGE SMALL LETTER EHTA */
    4731             :         [3968+0x32] = 0x104CA,  /* U+104F2: OSAGE SMALL LETTER TSA */
    4732             :         [3968+0x33] = 0x104CB,  /* U+104F3: OSAGE SMALL LETTER EHTSA */
    4733             :         [3968+0x34] = 0x104CC,  /* U+104F4: OSAGE SMALL LETTER TSHA */
    4734             :         [3968+0x35] = 0x104CD,  /* U+104F5: OSAGE SMALL LETTER DHA */
    4735             :         [3968+0x36] = 0x104CE,  /* U+104F6: OSAGE SMALL LETTER U */
    4736             :         [3968+0x37] = 0x104CF,  /* U+104F7: OSAGE SMALL LETTER WA */
    4737             :         [3968+0x38] = 0x104D0,  /* U+104F8: OSAGE SMALL LETTER KHA */
    4738             :         [3968+0x39] = 0x104D1,  /* U+104F9: OSAGE SMALL LETTER GHA */
    4739             :         [3968+0x3A] = 0x104D2,  /* U+104FA: OSAGE SMALL LETTER ZA */
    4740             :         [3968+0x3B] = 0x104D3,  /* U+104FB: OSAGE SMALL LETTER ZHA */
    4741             :         [3776+0x16] = 4032 - 0x80,      /* 360 220 226 ... */
    4742             :         [4032+0x17] = 0x10570,  /* U+10597: VITHKUQI SMALL LETTER A */
    4743             :         [4032+0x18] = 0x10571,  /* U+10598: VITHKUQI SMALL LETTER BBE */
    4744             :         [4032+0x19] = 0x10572,  /* U+10599: VITHKUQI SMALL LETTER BE */
    4745             :         [4032+0x1A] = 0x10573,  /* U+1059A: VITHKUQI SMALL LETTER CE */
    4746             :         [4032+0x1B] = 0x10574,  /* U+1059B: VITHKUQI SMALL LETTER CHE */
    4747             :         [4032+0x1C] = 0x10575,  /* U+1059C: VITHKUQI SMALL LETTER DE */
    4748             :         [4032+0x1D] = 0x10576,  /* U+1059D: VITHKUQI SMALL LETTER DHE */
    4749             :         [4032+0x1E] = 0x10577,  /* U+1059E: VITHKUQI SMALL LETTER EI */
    4750             :         [4032+0x1F] = 0x10578,  /* U+1059F: VITHKUQI SMALL LETTER E */
    4751             :         [4032+0x20] = 0x10579,  /* U+105A0: VITHKUQI SMALL LETTER FE */
    4752             :         [4032+0x21] = 0x1057A,  /* U+105A1: VITHKUQI SMALL LETTER GA */
    4753             :         [4032+0x23] = 0x1057C,  /* U+105A3: VITHKUQI SMALL LETTER HA */
    4754             :         [4032+0x24] = 0x1057D,  /* U+105A4: VITHKUQI SMALL LETTER HHA */
    4755             :         [4032+0x25] = 0x1057E,  /* U+105A5: VITHKUQI SMALL LETTER I */
    4756             :         [4032+0x26] = 0x1057F,  /* U+105A6: VITHKUQI SMALL LETTER IJE */
    4757             :         [4032+0x27] = 0x10580,  /* U+105A7: VITHKUQI SMALL LETTER JE */
    4758             :         [4032+0x28] = 0x10581,  /* U+105A8: VITHKUQI SMALL LETTER KA */
    4759             :         [4032+0x29] = 0x10582,  /* U+105A9: VITHKUQI SMALL LETTER LA */
    4760             :         [4032+0x2A] = 0x10583,  /* U+105AA: VITHKUQI SMALL LETTER LLA */
    4761             :         [4032+0x2B] = 0x10584,  /* U+105AB: VITHKUQI SMALL LETTER ME */
    4762             :         [4032+0x2C] = 0x10585,  /* U+105AC: VITHKUQI SMALL LETTER NE */
    4763             :         [4032+0x2D] = 0x10586,  /* U+105AD: VITHKUQI SMALL LETTER NJE */
    4764             :         [4032+0x2E] = 0x10587,  /* U+105AE: VITHKUQI SMALL LETTER O */
    4765             :         [4032+0x2F] = 0x10588,  /* U+105AF: VITHKUQI SMALL LETTER PE */
    4766             :         [4032+0x30] = 0x10589,  /* U+105B0: VITHKUQI SMALL LETTER QA */
    4767             :         [4032+0x31] = 0x1058A,  /* U+105B1: VITHKUQI SMALL LETTER RE */
    4768             :         [4032+0x33] = 0x1058C,  /* U+105B3: VITHKUQI SMALL LETTER SE */
    4769             :         [4032+0x34] = 0x1058D,  /* U+105B4: VITHKUQI SMALL LETTER SHE */
    4770             :         [4032+0x35] = 0x1058E,  /* U+105B5: VITHKUQI SMALL LETTER TE */
    4771             :         [4032+0x36] = 0x1058F,  /* U+105B6: VITHKUQI SMALL LETTER THE */
    4772             :         [4032+0x37] = 0x10590,  /* U+105B7: VITHKUQI SMALL LETTER U */
    4773             :         [4032+0x38] = 0x10591,  /* U+105B8: VITHKUQI SMALL LETTER VE */
    4774             :         [4032+0x39] = 0x10592,  /* U+105B9: VITHKUQI SMALL LETTER XE */
    4775             :         [4032+0x3B] = 0x10594,  /* U+105BB: VITHKUQI SMALL LETTER Y */
    4776             :         [4032+0x3C] = 0x10595,  /* U+105BC: VITHKUQI SMALL LETTER ZE */
    4777             :         [3776+0x33] = 4096 - 0x80,      /* 360 220 263 ... */
    4778             :         [4096+0x00] = 0x10C80,  /* U+10CC0: OLD HUNGARIAN SMALL LETTER A */
    4779             :         [4096+0x01] = 0x10C81,  /* U+10CC1: OLD HUNGARIAN SMALL LETTER AA */
    4780             :         [4096+0x02] = 0x10C82,  /* U+10CC2: OLD HUNGARIAN SMALL LETTER EB */
    4781             :         [4096+0x03] = 0x10C83,  /* U+10CC3: OLD HUNGARIAN SMALL LETTER AMB */
    4782             :         [4096+0x04] = 0x10C84,  /* U+10CC4: OLD HUNGARIAN SMALL LETTER EC */
    4783             :         [4096+0x05] = 0x10C85,  /* U+10CC5: OLD HUNGARIAN SMALL LETTER ENC */
    4784             :         [4096+0x06] = 0x10C86,  /* U+10CC6: OLD HUNGARIAN SMALL LETTER ECS */
    4785             :         [4096+0x07] = 0x10C87,  /* U+10CC7: OLD HUNGARIAN SMALL LETTER ED */
    4786             :         [4096+0x08] = 0x10C88,  /* U+10CC8: OLD HUNGARIAN SMALL LETTER AND */
    4787             :         [4096+0x09] = 0x10C89,  /* U+10CC9: OLD HUNGARIAN SMALL LETTER E */
    4788             :         [4096+0x0A] = 0x10C8A,  /* U+10CCA: OLD HUNGARIAN SMALL LETTER CLOSE E */
    4789             :         [4096+0x0B] = 0x10C8B,  /* U+10CCB: OLD HUNGARIAN SMALL LETTER EE */
    4790             :         [4096+0x0C] = 0x10C8C,  /* U+10CCC: OLD HUNGARIAN SMALL LETTER EF */
    4791             :         [4096+0x0D] = 0x10C8D,  /* U+10CCD: OLD HUNGARIAN SMALL LETTER EG */
    4792             :         [4096+0x0E] = 0x10C8E,  /* U+10CCE: OLD HUNGARIAN SMALL LETTER EGY */
    4793             :         [4096+0x0F] = 0x10C8F,  /* U+10CCF: OLD HUNGARIAN SMALL LETTER EH */
    4794             :         [4096+0x10] = 0x10C90,  /* U+10CD0: OLD HUNGARIAN SMALL LETTER I */
    4795             :         [4096+0x11] = 0x10C91,  /* U+10CD1: OLD HUNGARIAN SMALL LETTER II */
    4796             :         [4096+0x12] = 0x10C92,  /* U+10CD2: OLD HUNGARIAN SMALL LETTER EJ */
    4797             :         [4096+0x13] = 0x10C93,  /* U+10CD3: OLD HUNGARIAN SMALL LETTER EK */
    4798             :         [4096+0x14] = 0x10C94,  /* U+10CD4: OLD HUNGARIAN SMALL LETTER AK */
    4799             :         [4096+0x15] = 0x10C95,  /* U+10CD5: OLD HUNGARIAN SMALL LETTER UNK */
    4800             :         [4096+0x16] = 0x10C96,  /* U+10CD6: OLD HUNGARIAN SMALL LETTER EL */
    4801             :         [4096+0x17] = 0x10C97,  /* U+10CD7: OLD HUNGARIAN SMALL LETTER ELY */
    4802             :         [4096+0x18] = 0x10C98,  /* U+10CD8: OLD HUNGARIAN SMALL LETTER EM */
    4803             :         [4096+0x19] = 0x10C99,  /* U+10CD9: OLD HUNGARIAN SMALL LETTER EN */
    4804             :         [4096+0x1A] = 0x10C9A,  /* U+10CDA: OLD HUNGARIAN SMALL LETTER ENY */
    4805             :         [4096+0x1B] = 0x10C9B,  /* U+10CDB: OLD HUNGARIAN SMALL LETTER O */
    4806             :         [4096+0x1C] = 0x10C9C,  /* U+10CDC: OLD HUNGARIAN SMALL LETTER OO */
    4807             :         [4096+0x1D] = 0x10C9D,  /* U+10CDD: OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE */
    4808             :         [4096+0x1E] = 0x10C9E,  /* U+10CDE: OLD HUNGARIAN SMALL LETTER RUDIMENTA OE */
    4809             :         [4096+0x1F] = 0x10C9F,  /* U+10CDF: OLD HUNGARIAN SMALL LETTER OEE */
    4810             :         [4096+0x20] = 0x10CA0,  /* U+10CE0: OLD HUNGARIAN SMALL LETTER EP */
    4811             :         [4096+0x21] = 0x10CA1,  /* U+10CE1: OLD HUNGARIAN SMALL LETTER EMP */
    4812             :         [4096+0x22] = 0x10CA2,  /* U+10CE2: OLD HUNGARIAN SMALL LETTER ER */
    4813             :         [4096+0x23] = 0x10CA3,  /* U+10CE3: OLD HUNGARIAN SMALL LETTER SHORT ER */
    4814             :         [4096+0x24] = 0x10CA4,  /* U+10CE4: OLD HUNGARIAN SMALL LETTER ES */
    4815             :         [4096+0x25] = 0x10CA5,  /* U+10CE5: OLD HUNGARIAN SMALL LETTER ESZ */
    4816             :         [4096+0x26] = 0x10CA6,  /* U+10CE6: OLD HUNGARIAN SMALL LETTER ET */
    4817             :         [4096+0x27] = 0x10CA7,  /* U+10CE7: OLD HUNGARIAN SMALL LETTER ENT */
    4818             :         [4096+0x28] = 0x10CA8,  /* U+10CE8: OLD HUNGARIAN SMALL LETTER ETY */
    4819             :         [4096+0x29] = 0x10CA9,  /* U+10CE9: OLD HUNGARIAN SMALL LETTER ECH */
    4820             :         [4096+0x2A] = 0x10CAA,  /* U+10CEA: OLD HUNGARIAN SMALL LETTER U */
    4821             :         [4096+0x2B] = 0x10CAB,  /* U+10CEB: OLD HUNGARIAN SMALL LETTER UU */
    4822             :         [4096+0x2C] = 0x10CAC,  /* U+10CEC: OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE */
    4823             :         [4096+0x2D] = 0x10CAD,  /* U+10CED: OLD HUNGARIAN SMALL LETTER RUDIMENTA UE */
    4824             :         [4096+0x2E] = 0x10CAE,  /* U+10CEE: OLD HUNGARIAN SMALL LETTER EV */
    4825             :         [4096+0x2F] = 0x10CAF,  /* U+10CEF: OLD HUNGARIAN SMALL LETTER EZ */
    4826             :         [4096+0x30] = 0x10CB0,  /* U+10CF0: OLD HUNGARIAN SMALL LETTER EZS */
    4827             :         [4096+0x31] = 0x10CB1,  /* U+10CF1: OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN */
    4828             :         [4096+0x32] = 0x10CB2,  /* U+10CF2: OLD HUNGARIAN SMALL LETTER US */
    4829             :         [3712+0x11] = 4160 - 0x80,      /* 360 221 ... */
    4830             :         [4160+0x23] = 4224 - 0x80,      /* 360 221 243 ... */
    4831             :         [4224+0x00] = 0x118A0,  /* U+118C0: WARANG CITI SMALL LETTER NGAA */
    4832             :         [4224+0x01] = 0x118A1,  /* U+118C1: WARANG CITI SMALL LETTER A */
    4833             :         [4224+0x02] = 0x118A2,  /* U+118C2: WARANG CITI SMALL LETTER WI */
    4834             :         [4224+0x03] = 0x118A3,  /* U+118C3: WARANG CITI SMALL LETTER YU */
    4835             :         [4224+0x04] = 0x118A4,  /* U+118C4: WARANG CITI SMALL LETTER YA */
    4836             :         [4224+0x05] = 0x118A5,  /* U+118C5: WARANG CITI SMALL LETTER YO */
    4837             :         [4224+0x06] = 0x118A6,  /* U+118C6: WARANG CITI SMALL LETTER II */
    4838             :         [4224+0x07] = 0x118A7,  /* U+118C7: WARANG CITI SMALL LETTER UU */
    4839             :         [4224+0x08] = 0x118A8,  /* U+118C8: WARANG CITI SMALL LETTER E */
    4840             :         [4224+0x09] = 0x118A9,  /* U+118C9: WARANG CITI SMALL LETTER O */
    4841             :         [4224+0x0A] = 0x118AA,  /* U+118CA: WARANG CITI SMALL LETTER ANG */
    4842             :         [4224+0x0B] = 0x118AB,  /* U+118CB: WARANG CITI SMALL LETTER GA */
    4843             :         [4224+0x0C] = 0x118AC,  /* U+118CC: WARANG CITI SMALL LETTER KO */
    4844             :         [4224+0x0D] = 0x118AD,  /* U+118CD: WARANG CITI SMALL LETTER ENY */
    4845             :         [4224+0x0E] = 0x118AE,  /* U+118CE: WARANG CITI SMALL LETTER YUJ */
    4846             :         [4224+0x0F] = 0x118AF,  /* U+118CF: WARANG CITI SMALL LETTER UC */
    4847             :         [4224+0x10] = 0x118B0,  /* U+118D0: WARANG CITI SMALL LETTER ENN */
    4848             :         [4224+0x11] = 0x118B1,  /* U+118D1: WARANG CITI SMALL LETTER ODD */
    4849             :         [4224+0x12] = 0x118B2,  /* U+118D2: WARANG CITI SMALL LETTER TTE */
    4850             :         [4224+0x13] = 0x118B3,  /* U+118D3: WARANG CITI SMALL LETTER NUNG */
    4851             :         [4224+0x14] = 0x118B4,  /* U+118D4: WARANG CITI SMALL LETTER DA */
    4852             :         [4224+0x15] = 0x118B5,  /* U+118D5: WARANG CITI SMALL LETTER AT */
    4853             :         [4224+0x16] = 0x118B6,  /* U+118D6: WARANG CITI SMALL LETTER AM */
    4854             :         [4224+0x17] = 0x118B7,  /* U+118D7: WARANG CITI SMALL LETTER BU */
    4855             :         [4224+0x18] = 0x118B8,  /* U+118D8: WARANG CITI SMALL LETTER PU */
    4856             :         [4224+0x19] = 0x118B9,  /* U+118D9: WARANG CITI SMALL LETTER HIYO */
    4857             :         [4224+0x1A] = 0x118BA,  /* U+118DA: WARANG CITI SMALL LETTER HOLO */
    4858             :         [4224+0x1B] = 0x118BB,  /* U+118DB: WARANG CITI SMALL LETTER HORR */
    4859             :         [4224+0x1C] = 0x118BC,  /* U+118DC: WARANG CITI SMALL LETTER HAR */
    4860             :         [4224+0x1D] = 0x118BD,  /* U+118DD: WARANG CITI SMALL LETTER SSUU */
    4861             :         [4224+0x1E] = 0x118BE,  /* U+118DE: WARANG CITI SMALL LETTER SII */
    4862             :         [4224+0x1F] = 0x118BF,  /* U+118DF: WARANG CITI SMALL LETTER VIYO */
    4863             :         [3712+0x16] = 4288 - 0x80,      /* 360 226 ... */
    4864             :         [4288+0x39] = 4352 - 0x80,      /* 360 226 271 ... */
    4865             :         [4352+0x20] = 0x16E40,  /* U+16E60: MEDEFAIDRIN SMALL LETTER M */
    4866             :         [4352+0x21] = 0x16E41,  /* U+16E61: MEDEFAIDRIN SMALL LETTER S */
    4867             :         [4352+0x22] = 0x16E42,  /* U+16E62: MEDEFAIDRIN SMALL LETTER V */
    4868             :         [4352+0x23] = 0x16E43,  /* U+16E63: MEDEFAIDRIN SMALL LETTER W */
    4869             :         [4352+0x24] = 0x16E44,  /* U+16E64: MEDEFAIDRIN SMALL LETTER ATIU */
    4870             :         [4352+0x25] = 0x16E45,  /* U+16E65: MEDEFAIDRIN SMALL LETTER Z */
    4871             :         [4352+0x26] = 0x16E46,  /* U+16E66: MEDEFAIDRIN SMALL LETTER KP */
    4872             :         [4352+0x27] = 0x16E47,  /* U+16E67: MEDEFAIDRIN SMALL LETTER P */
    4873             :         [4352+0x28] = 0x16E48,  /* U+16E68: MEDEFAIDRIN SMALL LETTER T */
    4874             :         [4352+0x29] = 0x16E49,  /* U+16E69: MEDEFAIDRIN SMALL LETTER G */
    4875             :         [4352+0x2A] = 0x16E4A,  /* U+16E6A: MEDEFAIDRIN SMALL LETTER F */
    4876             :         [4352+0x2B] = 0x16E4B,  /* U+16E6B: MEDEFAIDRIN SMALL LETTER I */
    4877             :         [4352+0x2C] = 0x16E4C,  /* U+16E6C: MEDEFAIDRIN SMALL LETTER K */
    4878             :         [4352+0x2D] = 0x16E4D,  /* U+16E6D: MEDEFAIDRIN SMALL LETTER A */
    4879             :         [4352+0x2E] = 0x16E4E,  /* U+16E6E: MEDEFAIDRIN SMALL LETTER J */
    4880             :         [4352+0x2F] = 0x16E4F,  /* U+16E6F: MEDEFAIDRIN SMALL LETTER E */
    4881             :         [4352+0x30] = 0x16E50,  /* U+16E70: MEDEFAIDRIN SMALL LETTER B */
    4882             :         [4352+0x31] = 0x16E51,  /* U+16E71: MEDEFAIDRIN SMALL LETTER C */
    4883             :         [4352+0x32] = 0x16E52,  /* U+16E72: MEDEFAIDRIN SMALL LETTER U */
    4884             :         [4352+0x33] = 0x16E53,  /* U+16E73: MEDEFAIDRIN SMALL LETTER YU */
    4885             :         [4352+0x34] = 0x16E54,  /* U+16E74: MEDEFAIDRIN SMALL LETTER L */
    4886             :         [4352+0x35] = 0x16E55,  /* U+16E75: MEDEFAIDRIN SMALL LETTER Q */
    4887             :         [4352+0x36] = 0x16E56,  /* U+16E76: MEDEFAIDRIN SMALL LETTER HP */
    4888             :         [4352+0x37] = 0x16E57,  /* U+16E77: MEDEFAIDRIN SMALL LETTER NY */
    4889             :         [4352+0x38] = 0x16E58,  /* U+16E78: MEDEFAIDRIN SMALL LETTER X */
    4890             :         [4352+0x39] = 0x16E59,  /* U+16E79: MEDEFAIDRIN SMALL LETTER D */
    4891             :         [4352+0x3A] = 0x16E5A,  /* U+16E7A: MEDEFAIDRIN SMALL LETTER OE */
    4892             :         [4352+0x3B] = 0x16E5B,  /* U+16E7B: MEDEFAIDRIN SMALL LETTER N */
    4893             :         [4352+0x3C] = 0x16E5C,  /* U+16E7C: MEDEFAIDRIN SMALL LETTER R */
    4894             :         [4352+0x3D] = 0x16E5D,  /* U+16E7D: MEDEFAIDRIN SMALL LETTER O */
    4895             :         [4352+0x3E] = 0x16E5E,  /* U+16E7E: MEDEFAIDRIN SMALL LETTER AI */
    4896             :         [4352+0x3F] = 0x16E5F,  /* U+16E7F: MEDEFAIDRIN SMALL LETTER Y */
    4897             :         [3712+0x1E] = 4416 - 0x80,      /* 360 236 ... */
    4898             :         [4416+0x24] = 4480 - 0x80,      /* 360 236 244 ... */
    4899             :         [4480+0x22] = 0x1E900,  /* U+1E922: ADLAM SMALL LETTER ALIF */
    4900             :         [4480+0x23] = 0x1E901,  /* U+1E923: ADLAM SMALL LETTER DAALI */
    4901             :         [4480+0x24] = 0x1E902,  /* U+1E924: ADLAM SMALL LETTER LAAM */
    4902             :         [4480+0x25] = 0x1E903,  /* U+1E925: ADLAM SMALL LETTER MIIM */
    4903             :         [4480+0x26] = 0x1E904,  /* U+1E926: ADLAM SMALL LETTER BA */
    4904             :         [4480+0x27] = 0x1E905,  /* U+1E927: ADLAM SMALL LETTER SINNYIIYHE */
    4905             :         [4480+0x28] = 0x1E906,  /* U+1E928: ADLAM SMALL LETTER PE */
    4906             :         [4480+0x29] = 0x1E907,  /* U+1E929: ADLAM SMALL LETTER BHE */
    4907             :         [4480+0x2A] = 0x1E908,  /* U+1E92A: ADLAM SMALL LETTER RA */
    4908             :         [4480+0x2B] = 0x1E909,  /* U+1E92B: ADLAM SMALL LETTER E */
    4909             :         [4480+0x2C] = 0x1E90A,  /* U+1E92C: ADLAM SMALL LETTER FA */
    4910             :         [4480+0x2D] = 0x1E90B,  /* U+1E92D: ADLAM SMALL LETTER I */
    4911             :         [4480+0x2E] = 0x1E90C,  /* U+1E92E: ADLAM SMALL LETTER O */
    4912             :         [4480+0x2F] = 0x1E90D,  /* U+1E92F: ADLAM SMALL LETTER DHA */
    4913             :         [4480+0x30] = 0x1E90E,  /* U+1E930: ADLAM SMALL LETTER YHE */
    4914             :         [4480+0x31] = 0x1E90F,  /* U+1E931: ADLAM SMALL LETTER WAW */
    4915             :         [4480+0x32] = 0x1E910,  /* U+1E932: ADLAM SMALL LETTER NUN */
    4916             :         [4480+0x33] = 0x1E911,  /* U+1E933: ADLAM SMALL LETTER KAF */
    4917             :         [4480+0x34] = 0x1E912,  /* U+1E934: ADLAM SMALL LETTER YA */
    4918             :         [4480+0x35] = 0x1E913,  /* U+1E935: ADLAM SMALL LETTER U */
    4919             :         [4480+0x36] = 0x1E914,  /* U+1E936: ADLAM SMALL LETTER JIIM */
    4920             :         [4480+0x37] = 0x1E915,  /* U+1E937: ADLAM SMALL LETTER CHI */
    4921             :         [4480+0x38] = 0x1E916,  /* U+1E938: ADLAM SMALL LETTER HA */
    4922             :         [4480+0x39] = 0x1E917,  /* U+1E939: ADLAM SMALL LETTER QAAF */
    4923             :         [4480+0x3A] = 0x1E918,  /* U+1E93A: ADLAM SMALL LETTER GA */
    4924             :         [4480+0x3B] = 0x1E919,  /* U+1E93B: ADLAM SMALL LETTER NYA */
    4925             :         [4480+0x3C] = 0x1E91A,  /* U+1E93C: ADLAM SMALL LETTER TU */
    4926             :         [4480+0x3D] = 0x1E91B,  /* U+1E93D: ADLAM SMALL LETTER NHA */
    4927             :         [4480+0x3E] = 0x1E91C,  /* U+1E93E: ADLAM SMALL LETTER VA */
    4928             :         [4480+0x3F] = 0x1E91D,  /* U+1E93F: ADLAM SMALL LETTER KHA */
    4929             :         [4416+0x25] = 4544 - 0x80,      /* 360 236 245 ... */
    4930             :         [4544+0x00] = 0x1E91E,  /* U+1E940: ADLAM SMALL LETTER GBE */
    4931             :         [4544+0x01] = 0x1E91F,  /* U+1E941: ADLAM SMALL LETTER ZAL */
    4932             :         [4544+0x02] = 0x1E920,  /* U+1E942: ADLAM SMALL LETTER KPO */
    4933             :         [4544+0x03] = 0x1E921,  /* U+1E943: ADLAM SMALL LETTER SHA */
    4934             : };
    4935             : static const int casefold[4544] = {
    4936             :         [0x00] = 0x0000,        /* U+0000: <control> */
    4937             :         [0x01] = 0x0001,        /* U+0001: <control> */
    4938             :         [0x02] = 0x0002,        /* U+0002: <control> */
    4939             :         [0x03] = 0x0003,        /* U+0003: <control> */
    4940             :         [0x04] = 0x0004,        /* U+0004: <control> */
    4941             :         [0x05] = 0x0005,        /* U+0005: <control> */
    4942             :         [0x06] = 0x0006,        /* U+0006: <control> */
    4943             :         [0x07] = 0x0007,        /* U+0007: <control> */
    4944             :         [0x08] = 0x0008,        /* U+0008: <control> */
    4945             :         [0x09] = 0x0009,        /* U+0009: <control> */
    4946             :         [0x0A] = 0x000A,        /* U+000A: <control> */
    4947             :         [0x0B] = 0x000B,        /* U+000B: <control> */
    4948             :         [0x0C] = 0x000C,        /* U+000C: <control> */
    4949             :         [0x0D] = 0x000D,        /* U+000D: <control> */
    4950             :         [0x0E] = 0x000E,        /* U+000E: <control> */
    4951             :         [0x0F] = 0x000F,        /* U+000F: <control> */
    4952             :         [0x10] = 0x0010,        /* U+0010: <control> */
    4953             :         [0x11] = 0x0011,        /* U+0011: <control> */
    4954             :         [0x12] = 0x0012,        /* U+0012: <control> */
    4955             :         [0x13] = 0x0013,        /* U+0013: <control> */
    4956             :         [0x14] = 0x0014,        /* U+0014: <control> */
    4957             :         [0x15] = 0x0015,        /* U+0015: <control> */
    4958             :         [0x16] = 0x0016,        /* U+0016: <control> */
    4959             :         [0x17] = 0x0017,        /* U+0017: <control> */
    4960             :         [0x18] = 0x0018,        /* U+0018: <control> */
    4961             :         [0x19] = 0x0019,        /* U+0019: <control> */
    4962             :         [0x1A] = 0x001A,        /* U+001A: <control> */
    4963             :         [0x1B] = 0x001B,        /* U+001B: <control> */
    4964             :         [0x1C] = 0x001C,        /* U+001C: <control> */
    4965             :         [0x1D] = 0x001D,        /* U+001D: <control> */
    4966             :         [0x1E] = 0x001E,        /* U+001E: <control> */
    4967             :         [0x1F] = 0x001F,        /* U+001F: <control> */
    4968             :         [0x20] = 0x0020,        /* U+0020: SPACE */
    4969             :         [0x21] = 0x0021,        /* U+0021: EXCLAMATION MARK */
    4970             :         [0x22] = 0x0022,        /* U+0022: QUOTATION MARK */
    4971             :         [0x23] = 0x0023,        /* U+0023: NUMBER SIGN */
    4972             :         [0x24] = 0x0024,        /* U+0024: DOLLAR SIGN */
    4973             :         [0x25] = 0x0025,        /* U+0025: PERCENT SIGN */
    4974             :         [0x26] = 0x0026,        /* U+0026: AMPERSAND */
    4975             :         [0x27] = 0x0027,        /* U+0027: APOSTROPHE */
    4976             :         [0x28] = 0x0028,        /* U+0028: LEFT PARENTHESIS */
    4977             :         [0x29] = 0x0029,        /* U+0029: RIGHT PARENTHESIS */
    4978             :         [0x2A] = 0x002A,        /* U+002A: ASTERISK */
    4979             :         [0x2B] = 0x002B,        /* U+002B: PLUS SIGN */
    4980             :         [0x2C] = 0x002C,        /* U+002C: COMMA */
    4981             :         [0x2D] = 0x002D,        /* U+002D: HYPHEN-MINUS */
    4982             :         [0x2E] = 0x002E,        /* U+002E: FULL STOP */
    4983             :         [0x2F] = 0x002F,        /* U+002F: SOLIDUS */
    4984             :         [0x30] = 0x0030,        /* U+0030: DIGIT ZERO */
    4985             :         [0x31] = 0x0031,        /* U+0031: DIGIT ONE */
    4986             :         [0x32] = 0x0032,        /* U+0032: DIGIT TWO */
    4987             :         [0x33] = 0x0033,        /* U+0033: DIGIT THREE */
    4988             :         [0x34] = 0x0034,        /* U+0034: DIGIT FOUR */
    4989             :         [0x35] = 0x0035,        /* U+0035: DIGIT FIVE */
    4990             :         [0x36] = 0x0036,        /* U+0036: DIGIT SIX */
    4991             :         [0x37] = 0x0037,        /* U+0037: DIGIT SEVEN */
    4992             :         [0x38] = 0x0038,        /* U+0038: DIGIT EIGHT */
    4993             :         [0x39] = 0x0039,        /* U+0039: DIGIT NINE */
    4994             :         [0x3A] = 0x003A,        /* U+003A: COLON */
    4995             :         [0x3B] = 0x003B,        /* U+003B: SEMICOLON */
    4996             :         [0x3C] = 0x003C,        /* U+003C: LESS-THAN SIGN */
    4997             :         [0x3D] = 0x003D,        /* U+003D: EQUALS SIGN */
    4998             :         [0x3E] = 0x003E,        /* U+003E: GREATER-THAN SIGN */
    4999             :         [0x3F] = 0x003F,        /* U+003F: QUESTION MARK */
    5000             :         [0x40] = 0x0040,        /* U+0040: COMMERCIAL AT */
    5001             :         [0x41] = 0x0061,        /* U+0041: LATIN CAPITAL LETTER A */
    5002             :         [0x42] = 0x0062,        /* U+0042: LATIN CAPITAL LETTER B */
    5003             :         [0x43] = 0x0063,        /* U+0043: LATIN CAPITAL LETTER C */
    5004             :         [0x44] = 0x0064,        /* U+0044: LATIN CAPITAL LETTER D */
    5005             :         [0x45] = 0x0065,        /* U+0045: LATIN CAPITAL LETTER E */
    5006             :         [0x46] = 0x0066,        /* U+0046: LATIN CAPITAL LETTER F */
    5007             :         [0x47] = 0x0067,        /* U+0047: LATIN CAPITAL LETTER G */
    5008             :         [0x48] = 0x0068,        /* U+0048: LATIN CAPITAL LETTER H */
    5009             :         [0x49] = 0x0069,        /* U+0049: LATIN CAPITAL LETTER I */
    5010             :         [0x4A] = 0x006A,        /* U+004A: LATIN CAPITAL LETTER J */
    5011             :         [0x4B] = 0x006B,        /* U+004B: LATIN CAPITAL LETTER K */
    5012             :         [0x4C] = 0x006C,        /* U+004C: LATIN CAPITAL LETTER L */
    5013             :         [0x4D] = 0x006D,        /* U+004D: LATIN CAPITAL LETTER M */
    5014             :         [0x4E] = 0x006E,        /* U+004E: LATIN CAPITAL LETTER N */
    5015             :         [0x4F] = 0x006F,        /* U+004F: LATIN CAPITAL LETTER O */
    5016             :         [0x50] = 0x0070,        /* U+0050: LATIN CAPITAL LETTER P */
    5017             :         [0x51] = 0x0071,        /* U+0051: LATIN CAPITAL LETTER Q */
    5018             :         [0x52] = 0x0072,        /* U+0052: LATIN CAPITAL LETTER R */
    5019             :         [0x53] = 0x0073,        /* U+0053: LATIN CAPITAL LETTER S */
    5020             :         [0x54] = 0x0074,        /* U+0054: LATIN CAPITAL LETTER T */
    5021             :         [0x55] = 0x0075,        /* U+0055: LATIN CAPITAL LETTER U */
    5022             :         [0x56] = 0x0076,        /* U+0056: LATIN CAPITAL LETTER V */
    5023             :         [0x57] = 0x0077,        /* U+0057: LATIN CAPITAL LETTER W */
    5024             :         [0x58] = 0x0078,        /* U+0058: LATIN CAPITAL LETTER X */
    5025             :         [0x59] = 0x0079,        /* U+0059: LATIN CAPITAL LETTER Y */
    5026             :         [0x5A] = 0x007A,        /* U+005A: LATIN CAPITAL LETTER Z */
    5027             :         [0x5B] = 0x005B,        /* U+005B: LEFT SQUARE BRACKET */
    5028             :         [0x5C] = 0x005C,        /* U+005C: REVERSE SOLIDUS */
    5029             :         [0x5D] = 0x005D,        /* U+005D: RIGHT SQUARE BRACKET */
    5030             :         [0x5E] = 0x005E,        /* U+005E: CIRCUMFLEX ACCENT */
    5031             :         [0x5F] = 0x005F,        /* U+005F: LOW LINE */
    5032             :         [0x60] = 0x0060,        /* U+0060: GRAVE ACCENT */
    5033             :         [0x61] = 0x0061,        /* U+0061: LATIN SMALL LETTER A */
    5034             :         [0x62] = 0x0062,        /* U+0062: LATIN SMALL LETTER B */
    5035             :         [0x63] = 0x0063,        /* U+0063: LATIN SMALL LETTER C */
    5036             :         [0x64] = 0x0064,        /* U+0064: LATIN SMALL LETTER D */
    5037             :         [0x65] = 0x0065,        /* U+0065: LATIN SMALL LETTER E */
    5038             :         [0x66] = 0x0066,        /* U+0066: LATIN SMALL LETTER F */
    5039             :         [0x67] = 0x0067,        /* U+0067: LATIN SMALL LETTER G */
    5040             :         [0x68] = 0x0068,        /* U+0068: LATIN SMALL LETTER H */
    5041             :         [0x69] = 0x0069,        /* U+0069: LATIN SMALL LETTER I */
    5042             :         [0x6A] = 0x006A,        /* U+006A: LATIN SMALL LETTER J */
    5043             :         [0x6B] = 0x006B,        /* U+006B: LATIN SMALL LETTER K */
    5044             :         [0x6C] = 0x006C,        /* U+006C: LATIN SMALL LETTER L */
    5045             :         [0x6D] = 0x006D,        /* U+006D: LATIN SMALL LETTER M */
    5046             :         [0x6E] = 0x006E,        /* U+006E: LATIN SMALL LETTER N */
    5047             :         [0x6F] = 0x006F,        /* U+006F: LATIN SMALL LETTER O */
    5048             :         [0x70] = 0x0070,        /* U+0070: LATIN SMALL LETTER P */
    5049             :         [0x71] = 0x0071,        /* U+0071: LATIN SMALL LETTER Q */
    5050             :         [0x72] = 0x0072,        /* U+0072: LATIN SMALL LETTER R */
    5051             :         [0x73] = 0x0073,        /* U+0073: LATIN SMALL LETTER S */
    5052             :         [0x74] = 0x0074,        /* U+0074: LATIN SMALL LETTER T */
    5053             :         [0x75] = 0x0075,        /* U+0075: LATIN SMALL LETTER U */
    5054             :         [0x76] = 0x0076,        /* U+0076: LATIN SMALL LETTER V */
    5055             :         [0x77] = 0x0077,        /* U+0077: LATIN SMALL LETTER W */
    5056             :         [0x78] = 0x0078,        /* U+0078: LATIN SMALL LETTER X */
    5057             :         [0x79] = 0x0079,        /* U+0079: LATIN SMALL LETTER Y */
    5058             :         [0x7A] = 0x007A,        /* U+007A: LATIN SMALL LETTER Z */
    5059             :         [0x7B] = 0x007B,        /* U+007B: LEFT CURLY BRACKET */
    5060             :         [0x7C] = 0x007C,        /* U+007C: VERTICAL LINE */
    5061             :         [0x7D] = 0x007D,        /* U+007D: RIGHT CURLY BRACKET */
    5062             :         [0x7E] = 0x007E,        /* U+007E: TILDE */
    5063             :         [0x7F] = 0x007F,        /* U+007F: <control> */
    5064             :         [0xC2] = 256 - 0x80,    /* 302 ... */
    5065             :         [256+0x35] = 0x03BC,    /* U+00B5: MICRO SIGN */
    5066             :         [0xC3] = 320 - 0x80,    /* 303 ... */
    5067             :         [320+0x00] = 0x00E0,    /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
    5068             :         [320+0x01] = 0x00E1,    /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
    5069             :         [320+0x02] = 0x00E2,    /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
    5070             :         [320+0x03] = 0x00E3,    /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
    5071             :         [320+0x04] = 0x00E4,    /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
    5072             :         [320+0x05] = 0x00E5,    /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
    5073             :         [320+0x06] = 0x00E6,    /* U+00C6: LATIN CAPITAL LETTER AE */
    5074             :         [320+0x07] = 0x00E7,    /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
    5075             :         [320+0x08] = 0x00E8,    /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
    5076             :         [320+0x09] = 0x00E9,    /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
    5077             :         [320+0x0A] = 0x00EA,    /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
    5078             :         [320+0x0B] = 0x00EB,    /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
    5079             :         [320+0x0C] = 0x00EC,    /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
    5080             :         [320+0x0D] = 0x00ED,    /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
    5081             :         [320+0x0E] = 0x00EE,    /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
    5082             :         [320+0x0F] = 0x00EF,    /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
    5083             :         [320+0x10] = 0x00F0,    /* U+00D0: LATIN CAPITAL LETTER ETH */
    5084             :         [320+0x11] = 0x00F1,    /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
    5085             :         [320+0x12] = 0x00F2,    /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
    5086             :         [320+0x13] = 0x00F3,    /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
    5087             :         [320+0x14] = 0x00F4,    /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
    5088             :         [320+0x15] = 0x00F5,    /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
    5089             :         [320+0x16] = 0x00F6,    /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
    5090             :         [320+0x18] = 0x00F8,    /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
    5091             :         [320+0x19] = 0x00F9,    /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
    5092             :         [320+0x1A] = 0x00FA,    /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
    5093             :         [320+0x1B] = 0x00FB,    /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
    5094             :         [320+0x1C] = 0x00FC,    /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
    5095             :         [320+0x1D] = 0x00FD,    /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
    5096             :         [320+0x1E] = 0x00FE,    /* U+00DE: LATIN CAPITAL LETTER THORN */
    5097             :         [320+0x1F] = -1,        /* U+00DF: LATIN SMALL LETTER SHARP S */
    5098             :         [0xC4] = 384 - 0x80,    /* 304 ... */
    5099             :         [384+0x00] = 0x0101,    /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
    5100             :         [384+0x02] = 0x0103,    /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
    5101             :         [384+0x04] = 0x0105,    /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
    5102             :         [384+0x06] = 0x0107,    /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
    5103             :         [384+0x08] = 0x0109,    /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
    5104             :         [384+0x0A] = 0x010B,    /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
    5105             :         [384+0x0C] = 0x010D,    /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
    5106             :         [384+0x0E] = 0x010F,    /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
    5107             :         [384+0x10] = 0x0111,    /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
    5108             :         [384+0x12] = 0x0113,    /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
    5109             :         [384+0x14] = 0x0115,    /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
    5110             :         [384+0x16] = 0x0117,    /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
    5111             :         [384+0x18] = 0x0119,    /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
    5112             :         [384+0x1A] = 0x011B,    /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
    5113             :         [384+0x1C] = 0x011D,    /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
    5114             :         [384+0x1E] = 0x011F,    /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
    5115             :         [384+0x20] = 0x0121,    /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
    5116             :         [384+0x22] = 0x0123,    /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
    5117             :         [384+0x24] = 0x0125,    /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
    5118             :         [384+0x26] = 0x0127,    /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
    5119             :         [384+0x28] = 0x0129,    /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
    5120             :         [384+0x2A] = 0x012B,    /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
    5121             :         [384+0x2C] = 0x012D,    /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
    5122             :         [384+0x2E] = 0x012F,    /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
    5123             :         [384+0x30] = -2,        /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
    5124             :         [384+0x32] = 0x0133,    /* U+0132: LATIN CAPITAL LIGATURE IJ */
    5125             :         [384+0x34] = 0x0135,    /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
    5126             :         [384+0x36] = 0x0137,    /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
    5127             :         [384+0x39] = 0x013A,    /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
    5128             :         [384+0x3B] = 0x013C,    /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
    5129             :         [384+0x3D] = 0x013E,    /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
    5130             :         [384+0x3F] = 0x0140,    /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
    5131             :         [0xC5] = 448 - 0x80,    /* 305 ... */
    5132             :         [448+0x01] = 0x0142,    /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
    5133             :         [448+0x03] = 0x0144,    /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
    5134             :         [448+0x05] = 0x0146,    /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
    5135             :         [448+0x07] = 0x0148,    /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
    5136             :         [448+0x09] = -3,        /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
    5137             :         [448+0x0A] = 0x014B,    /* U+014A: LATIN CAPITAL LETTER ENG */
    5138             :         [448+0x0C] = 0x014D,    /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
    5139             :         [448+0x0E] = 0x014F,    /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
    5140             :         [448+0x10] = 0x0151,    /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
    5141             :         [448+0x12] = 0x0153,    /* U+0152: LATIN CAPITAL LIGATURE OE */
    5142             :         [448+0x14] = 0x0155,    /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
    5143             :         [448+0x16] = 0x0157,    /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
    5144             :         [448+0x18] = 0x0159,    /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
    5145             :         [448+0x1A] = 0x015B,    /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
    5146             :         [448+0x1C] = 0x015D,    /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
    5147             :         [448+0x1E] = 0x015F,    /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
    5148             :         [448+0x20] = 0x0161,    /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
    5149             :         [448+0x22] = 0x0163,    /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
    5150             :         [448+0x24] = 0x0165,    /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
    5151             :         [448+0x26] = 0x0167,    /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
    5152             :         [448+0x28] = 0x0169,    /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
    5153             :         [448+0x2A] = 0x016B,    /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
    5154             :         [448+0x2C] = 0x016D,    /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
    5155             :         [448+0x2E] = 0x016F,    /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
    5156             :         [448+0x30] = 0x0171,    /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
    5157             :         [448+0x32] = 0x0173,    /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
    5158             :         [448+0x34] = 0x0175,    /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
    5159             :         [448+0x36] = 0x0177,    /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
    5160             :         [448+0x38] = 0x00FF,    /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
    5161             :         [448+0x39] = 0x017A,    /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
    5162             :         [448+0x3B] = 0x017C,    /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
    5163             :         [448+0x3D] = 0x017E,    /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
    5164             :         [448+0x3F] = 0x0073,    /* U+017F: LATIN SMALL LETTER LONG S */
    5165             :         [0xC6] = 512 - 0x80,    /* 306 ... */
    5166             :         [512+0x01] = 0x0253,    /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
    5167             :         [512+0x02] = 0x0183,    /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
    5168             :         [512+0x04] = 0x0185,    /* U+0184: LATIN CAPITAL LETTER TONE SIX */
    5169             :         [512+0x06] = 0x0254,    /* U+0186: LATIN CAPITAL LETTER OPEN O */
    5170             :         [512+0x07] = 0x0188,    /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
    5171             :         [512+0x09] = 0x0256,    /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
    5172             :         [512+0x0A] = 0x0257,    /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
    5173             :         [512+0x0B] = 0x018C,    /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
    5174             :         [512+0x0E] = 0x01DD,    /* U+018E: LATIN CAPITAL LETTER REVERSED E */
    5175             :         [512+0x0F] = 0x0259,    /* U+018F: LATIN CAPITAL LETTER SCHWA */
    5176             :         [512+0x10] = 0x025B,    /* U+0190: LATIN CAPITAL LETTER OPEN E */
    5177             :         [512+0x11] = 0x0192,    /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
    5178             :         [512+0x13] = 0x0260,    /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
    5179             :         [512+0x14] = 0x0263,    /* U+0194: LATIN CAPITAL LETTER GAMMA */
    5180             :         [512+0x16] = 0x0269,    /* U+0196: LATIN CAPITAL LETTER IOTA */
    5181             :         [512+0x17] = 0x0268,    /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
    5182             :         [512+0x18] = 0x0199,    /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
    5183             :         [512+0x1C] = 0x026F,    /* U+019C: LATIN CAPITAL LETTER TURNED M */
    5184             :         [512+0x1D] = 0x0272,    /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
    5185             :         [512+0x1F] = 0x0275,    /* U+019F: LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
    5186             :         [512+0x20] = 0x01A1,    /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
    5187             :         [512+0x22] = 0x01A3,    /* U+01A2: LATIN CAPITAL LETTER OI */
    5188             :         [512+0x24] = 0x01A5,    /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
    5189             :         [512+0x26] = 0x0280,    /* U+01A6: LATIN LETTER YR */
    5190             :         [512+0x27] = 0x01A8,    /* U+01A7: LATIN CAPITAL LETTER TONE TWO */
    5191             :         [512+0x29] = 0x0283,    /* U+01A9: LATIN CAPITAL LETTER ESH */
    5192             :         [512+0x2C] = 0x01AD,    /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
    5193             :         [512+0x2E] = 0x0288,    /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
    5194             :         [512+0x2F] = 0x01B0,    /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
    5195             :         [512+0x31] = 0x028A,    /* U+01B1: LATIN CAPITAL LETTER UPSILON */
    5196             :         [512+0x32] = 0x028B,    /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
    5197             :         [512+0x33] = 0x01B4,    /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
    5198             :         [512+0x35] = 0x01B6,    /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
    5199             :         [512+0x37] = 0x0292,    /* U+01B7: LATIN CAPITAL LETTER EZH */
    5200             :         [512+0x38] = 0x01B9,    /* U+01B8: LATIN CAPITAL LETTER EZH REVERSED */
    5201             :         [512+0x3C] = 0x01BD,    /* U+01BC: LATIN CAPITAL LETTER TONE FIVE */
    5202             :         [0xC7] = 576 - 0x80,    /* 307 ... */
    5203             :         [576+0x04] = 0x01C6,    /* U+01C4: LATIN CAPITAL LETTER DZ WITH CARON */
    5204             :         [576+0x05] = 0x01C6,    /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
    5205             :         [576+0x07] = 0x01C9,    /* U+01C7: LATIN CAPITAL LETTER LJ */
    5206             :         [576+0x08] = 0x01C9,    /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
    5207             :         [576+0x0A] = 0x01CC,    /* U+01CA: LATIN CAPITAL LETTER NJ */
    5208             :         [576+0x0B] = 0x01CC,    /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
    5209             :         [576+0x0D] = 0x01CE,    /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
    5210             :         [576+0x0F] = 0x01D0,    /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
    5211             :         [576+0x11] = 0x01D2,    /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
    5212             :         [576+0x13] = 0x01D4,    /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
    5213             :         [576+0x15] = 0x01D6,    /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
    5214             :         [576+0x17] = 0x01D8,    /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
    5215             :         [576+0x19] = 0x01DA,    /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
    5216             :         [576+0x1B] = 0x01DC,    /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
    5217             :         [576+0x1E] = 0x01DF,    /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
    5218             :         [576+0x20] = 0x01E1,    /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
    5219             :         [576+0x22] = 0x01E3,    /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
    5220             :         [576+0x24] = 0x01E5,    /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
    5221             :         [576+0x26] = 0x01E7,    /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
    5222             :         [576+0x28] = 0x01E9,    /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
    5223             :         [576+0x2A] = 0x01EB,    /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
    5224             :         [576+0x2C] = 0x01ED,    /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
    5225             :         [576+0x2E] = 0x01EF,    /* U+01EE: LATIN CAPITAL LETTER EZH WITH CARON */
    5226             :         [576+0x30] = -4,        /* U+01F0: LATIN SMALL LETTER J WITH CARON */
    5227             :         [576+0x31] = 0x01F3,    /* U+01F1: LATIN CAPITAL LETTER DZ */
    5228             :         [576+0x32] = 0x01F3,    /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
    5229             :         [576+0x34] = 0x01F5,    /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
    5230             :         [576+0x36] = 0x0195,    /* U+01F6: LATIN CAPITAL LETTER HWAIR */
    5231             :         [576+0x37] = 0x01BF,    /* U+01F7: LATIN CAPITAL LETTER WYNN */
    5232             :         [576+0x38] = 0x01F9,    /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
    5233             :         [576+0x3A] = 0x01FB,    /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
    5234             :         [576+0x3C] = 0x01FD,    /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
    5235             :         [576+0x3E] = 0x01FF,    /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
    5236             :         [0xC8] = 640 - 0x80,    /* 310 ... */
    5237             :         [640+0x00] = 0x0201,    /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
    5238             :         [640+0x02] = 0x0203,    /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
    5239             :         [640+0x04] = 0x0205,    /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
    5240             :         [640+0x06] = 0x0207,    /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
    5241             :         [640+0x08] = 0x0209,    /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
    5242             :         [640+0x0A] = 0x020B,    /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
    5243             :         [640+0x0C] = 0x020D,    /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
    5244             :         [640+0x0E] = 0x020F,    /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
    5245             :         [640+0x10] = 0x0211,    /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
    5246             :         [640+0x12] = 0x0213,    /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
    5247             :         [640+0x14] = 0x0215,    /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
    5248             :         [640+0x16] = 0x0217,    /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
    5249             :         [640+0x18] = 0x0219,    /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
    5250             :         [640+0x1A] = 0x021B,    /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
    5251             :         [640+0x1C] = 0x021D,    /* U+021C: LATIN CAPITAL LETTER YOGH */
    5252             :         [640+0x1E] = 0x021F,    /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
    5253             :         [640+0x20] = 0x019E,    /* U+0220: LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */
    5254             :         [640+0x22] = 0x0223,    /* U+0222: LATIN CAPITAL LETTER OU */
    5255             :         [640+0x24] = 0x0225,    /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
    5256             :         [640+0x26] = 0x0227,    /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
    5257             :         [640+0x28] = 0x0229,    /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
    5258             :         [640+0x2A] = 0x022B,    /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
    5259             :         [640+0x2C] = 0x022D,    /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
    5260             :         [640+0x2E] = 0x022F,    /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
    5261             :         [640+0x30] = 0x0231,    /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
    5262             :         [640+0x32] = 0x0233,    /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
    5263             :         [640+0x3A] = 0x2C65,    /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
    5264             :         [640+0x3B] = 0x023C,    /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
    5265             :         [640+0x3D] = 0x019A,    /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
    5266             :         [640+0x3E] = 0x2C66,    /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
    5267             :         [0xC9] = 704 - 0x80,    /* 311 ... */
    5268             :         [704+0x01] = 0x0242,    /* U+0241: LATIN CAPITAL LETTER GLOTTAL STOP */
    5269             :         [704+0x03] = 0x0180,    /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
    5270             :         [704+0x04] = 0x0289,    /* U+0244: LATIN CAPITAL LETTER U BAR */
    5271             :         [704+0x05] = 0x028C,    /* U+0245: LATIN CAPITAL LETTER TURNED V */
    5272             :         [704+0x06] = 0x0247,    /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
    5273             :         [704+0x08] = 0x0249,    /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
    5274             :         [704+0x0A] = 0x024B,    /* U+024A: LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */
    5275             :         [704+0x0C] = 0x024D,    /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
    5276             :         [704+0x0E] = 0x024F,    /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
    5277             :         [0xCD] = 768 - 0x80,    /* 315 ... */
    5278             :         [768+0x05] = 0x03B9,    /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
    5279             :         [768+0x30] = 0x0371,    /* U+0370: GREEK CAPITAL LETTER HETA */
    5280             :         [768+0x32] = 0x0373,    /* U+0372: GREEK CAPITAL LETTER ARCHAIC SAMPI */
    5281             :         [768+0x36] = 0x0377,    /* U+0376: GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */
    5282             :         [768+0x3F] = 0x03F3,    /* U+037F: GREEK CAPITAL LETTER YOT */
    5283             :         [0xCE] = 832 - 0x80,    /* 316 ... */
    5284             :         [832+0x06] = 0x03AC,    /* U+0386: GREEK CAPITAL LETTER ALPHA WITH TONOS */
    5285             :         [832+0x08] = 0x03AD,    /* U+0388: GREEK CAPITAL LETTER EPSILON WITH TONOS */
    5286             :         [832+0x09] = 0x03AE,    /* U+0389: GREEK CAPITAL LETTER ETA WITH TONOS */
    5287             :         [832+0x0A] = 0x03AF,    /* U+038A: GREEK CAPITAL LETTER IOTA WITH TONOS */
    5288             :         [832+0x0C] = 0x03CC,    /* U+038C: GREEK CAPITAL LETTER OMICRON WITH TONOS */
    5289             :         [832+0x0E] = 0x03CD,    /* U+038E: GREEK CAPITAL LETTER UPSILON WITH TONOS */
    5290             :         [832+0x0F] = 0x03CE,    /* U+038F: GREEK CAPITAL LETTER OMEGA WITH TONOS */
    5291             :         [832+0x10] = -5,        /* U+0390: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
    5292             :         [832+0x11] = 0x03B1,    /* U+0391: GREEK CAPITAL LETTER ALPHA */
    5293             :         [832+0x12] = 0x03B2,    /* U+0392: GREEK CAPITAL LETTER BETA */
    5294             :         [832+0x13] = 0x03B3,    /* U+0393: GREEK CAPITAL LETTER GAMMA */
    5295             :         [832+0x14] = 0x03B4,    /* U+0394: GREEK CAPITAL LETTER DELTA */
    5296             :         [832+0x15] = 0x03B5,    /* U+0395: GREEK CAPITAL LETTER EPSILON */
    5297             :         [832+0x16] = 0x03B6,    /* U+0396: GREEK CAPITAL LETTER ZETA */
    5298             :         [832+0x17] = 0x03B7,    /* U+0397: GREEK CAPITAL LETTER ETA */
    5299             :         [832+0x18] = 0x03B8,    /* U+0398: GREEK CAPITAL LETTER THETA */
    5300             :         [832+0x19] = 0x03B9,    /* U+0399: GREEK CAPITAL LETTER IOTA */
    5301             :         [832+0x1A] = 0x03BA,    /* U+039A: GREEK CAPITAL LETTER KAPPA */
    5302             :         [832+0x1B] = 0x03BB,    /* U+039B: GREEK CAPITAL LETTER LAMDA */
    5303             :         [832+0x1C] = 0x03BC,    /* U+039C: GREEK CAPITAL LETTER MU */
    5304             :         [832+0x1D] = 0x03BD,    /* U+039D: GREEK CAPITAL LETTER NU */
    5305             :         [832+0x1E] = 0x03BE,    /* U+039E: GREEK CAPITAL LETTER XI */
    5306             :         [832+0x1F] = 0x03BF,    /* U+039F: GREEK CAPITAL LETTER OMICRON */
    5307             :         [832+0x20] = 0x03C0,    /* U+03A0: GREEK CAPITAL LETTER PI */
    5308             :         [832+0x21] = 0x03C1,    /* U+03A1: GREEK CAPITAL LETTER RHO */
    5309             :         [832+0x23] = 0x03C3,    /* U+03A3: GREEK CAPITAL LETTER SIGMA */
    5310             :         [832+0x24] = 0x03C4,    /* U+03A4: GREEK CAPITAL LETTER TAU */
    5311             :         [832+0x25] = 0x03C5,    /* U+03A5: GREEK CAPITAL LETTER UPSILON */
    5312             :         [832+0x26] = 0x03C6,    /* U+03A6: GREEK CAPITAL LETTER PHI */
    5313             :         [832+0x27] = 0x03C7,    /* U+03A7: GREEK CAPITAL LETTER CHI */
    5314             :         [832+0x28] = 0x03C8,    /* U+03A8: GREEK CAPITAL LETTER PSI */
    5315             :         [832+0x29] = 0x03C9,    /* U+03A9: GREEK CAPITAL LETTER OMEGA */
    5316             :         [832+0x2A] = 0x03CA,    /* U+03AA: GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
    5317             :         [832+0x2B] = 0x03CB,    /* U+03AB: GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
    5318             :         [832+0x30] = -6,        /* U+03B0: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
    5319             :         [0xCF] = 896 - 0x80,    /* 317 ... */
    5320             :         [896+0x02] = 0x03C3,    /* U+03C2: GREEK SMALL LETTER FINAL SIGMA */
    5321             :         [896+0x0F] = 0x03D7,    /* U+03CF: GREEK CAPITAL KAI SYMBOL */
    5322             :         [896+0x10] = 0x03B2,    /* U+03D0: GREEK BETA SYMBOL */
    5323             :         [896+0x11] = 0x03B8,    /* U+03D1: GREEK THETA SYMBOL */
    5324             :         [896+0x15] = 0x03C6,    /* U+03D5: GREEK PHI SYMBOL */
    5325             :         [896+0x16] = 0x03C0,    /* U+03D6: GREEK PI SYMBOL */
    5326             :         [896+0x18] = 0x03D9,    /* U+03D8: GREEK LETTER ARCHAIC KOPPA */
    5327             :         [896+0x1A] = 0x03DB,    /* U+03DA: GREEK LETTER STIGMA */
    5328             :         [896+0x1C] = 0x03DD,    /* U+03DC: GREEK LETTER DIGAMMA */
    5329             :         [896+0x1E] = 0x03DF,    /* U+03DE: GREEK LETTER KOPPA */
    5330             :         [896+0x20] = 0x03E1,    /* U+03E0: GREEK LETTER SAMPI */
    5331             :         [896+0x22] = 0x03E3,    /* U+03E2: COPTIC CAPITAL LETTER SHEI */
    5332             :         [896+0x24] = 0x03E5,    /* U+03E4: COPTIC CAPITAL LETTER FEI */
    5333             :         [896+0x26] = 0x03E7,    /* U+03E6: COPTIC CAPITAL LETTER KHEI */
    5334             :         [896+0x28] = 0x03E9,    /* U+03E8: COPTIC CAPITAL LETTER HORI */
    5335             :         [896+0x2A] = 0x03EB,    /* U+03EA: COPTIC CAPITAL LETTER GANGIA */
    5336             :         [896+0x2C] = 0x03ED,    /* U+03EC: COPTIC CAPITAL LETTER SHIMA */
    5337             :         [896+0x2E] = 0x03EF,    /* U+03EE: COPTIC CAPITAL LETTER DEI */
    5338             :         [896+0x30] = 0x03BA,    /* U+03F0: GREEK KAPPA SYMBOL */
    5339             :         [896+0x31] = 0x03C1,    /* U+03F1: GREEK RHO SYMBOL */
    5340             :         [896+0x34] = 0x03B8,    /* U+03F4: GREEK CAPITAL THETA SYMBOL */
    5341             :         [896+0x35] = 0x03B5,    /* U+03F5: GREEK LUNATE EPSILON SYMBOL */
    5342             :         [896+0x37] = 0x03F8,    /* U+03F7: GREEK CAPITAL LETTER SHO */
    5343             :         [896+0x39] = 0x03F2,    /* U+03F9: GREEK CAPITAL LUNATE SIGMA SYMBOL */
    5344             :         [896+0x3A] = 0x03FB,    /* U+03FA: GREEK CAPITAL LETTER SAN */
    5345             :         [896+0x3D] = 0x037B,    /* U+03FD: GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */
    5346             :         [896+0x3E] = 0x037C,    /* U+03FE: GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */
    5347             :         [896+0x3F] = 0x037D,    /* U+03FF: GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */
    5348             :         [0xD0] = 960 - 0x80,    /* 320 ... */
    5349             :         [960+0x00] = 0x0450,    /* U+0400: CYRILLIC CAPITAL LETTER IE WITH GRAVE */
    5350             :         [960+0x01] = 0x0451,    /* U+0401: CYRILLIC CAPITAL LETTER IO */
    5351             :         [960+0x02] = 0x0452,    /* U+0402: CYRILLIC CAPITAL LETTER DJE */
    5352             :         [960+0x03] = 0x0453,    /* U+0403: CYRILLIC CAPITAL LETTER GJE */
    5353             :         [960+0x04] = 0x0454,    /* U+0404: CYRILLIC CAPITAL LETTER UKRAINIAN IE */
    5354             :         [960+0x05] = 0x0455,    /* U+0405: CYRILLIC CAPITAL LETTER DZE */
    5355             :         [960+0x06] = 0x0456,    /* U+0406: CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
    5356             :         [960+0x07] = 0x0457,    /* U+0407: CYRILLIC CAPITAL LETTER YI */
    5357             :         [960+0x08] = 0x0458,    /* U+0408: CYRILLIC CAPITAL LETTER JE */
    5358             :         [960+0x09] = 0x0459,    /* U+0409: CYRILLIC CAPITAL LETTER LJE */
    5359             :         [960+0x0A] = 0x045A,    /* U+040A: CYRILLIC CAPITAL LETTER NJE */
    5360             :         [960+0x0B] = 0x045B,    /* U+040B: CYRILLIC CAPITAL LETTER TSHE */
    5361             :         [960+0x0C] = 0x045C,    /* U+040C: CYRILLIC CAPITAL LETTER KJE */
    5362             :         [960+0x0D] = 0x045D,    /* U+040D: CYRILLIC CAPITAL LETTER I WITH GRAVE */
    5363             :         [960+0x0E] = 0x045E,    /* U+040E: CYRILLIC CAPITAL LETTER SHORT U */
    5364             :         [960+0x0F] = 0x045F,    /* U+040F: CYRILLIC CAPITAL LETTER DZHE */
    5365             :         [960+0x10] = 0x0430,    /* U+0410: CYRILLIC CAPITAL LETTER A */
    5366             :         [960+0x11] = 0x0431,    /* U+0411: CYRILLIC CAPITAL LETTER BE */
    5367             :         [960+0x12] = 0x0432,    /* U+0412: CYRILLIC CAPITAL LETTER VE */
    5368             :         [960+0x13] = 0x0433,    /* U+0413: CYRILLIC CAPITAL LETTER GHE */
    5369             :         [960+0x14] = 0x0434,    /* U+0414: CYRILLIC CAPITAL LETTER DE */
    5370             :         [960+0x15] = 0x0435,    /* U+0415: CYRILLIC CAPITAL LETTER IE */
    5371             :         [960+0x16] = 0x0436,    /* U+0416: CYRILLIC CAPITAL LETTER ZHE */
    5372             :         [960+0x17] = 0x0437,    /* U+0417: CYRILLIC CAPITAL LETTER ZE */
    5373             :         [960+0x18] = 0x0438,    /* U+0418: CYRILLIC CAPITAL LETTER I */
    5374             :         [960+0x19] = 0x0439,    /* U+0419: CYRILLIC CAPITAL LETTER SHORT I */
    5375             :         [960+0x1A] = 0x043A,    /* U+041A: CYRILLIC CAPITAL LETTER KA */
    5376             :         [960+0x1B] = 0x043B,    /* U+041B: CYRILLIC CAPITAL LETTER EL */
    5377             :         [960+0x1C] = 0x043C,    /* U+041C: CYRILLIC CAPITAL LETTER EM */
    5378             :         [960+0x1D] = 0x043D,    /* U+041D: CYRILLIC CAPITAL LETTER EN */
    5379             :         [960+0x1E] = 0x043E,    /* U+041E: CYRILLIC CAPITAL LETTER O */
    5380             :         [960+0x1F] = 0x043F,    /* U+041F: CYRILLIC CAPITAL LETTER PE */
    5381             :         [960+0x20] = 0x0440,    /* U+0420: CYRILLIC CAPITAL LETTER ER */
    5382             :         [960+0x21] = 0x0441,    /* U+0421: CYRILLIC CAPITAL LETTER ES */
    5383             :         [960+0x22] = 0x0442,    /* U+0422: CYRILLIC CAPITAL LETTER TE */
    5384             :         [960+0x23] = 0x0443,    /* U+0423: CYRILLIC CAPITAL LETTER U */
    5385             :         [960+0x24] = 0x0444,    /* U+0424: CYRILLIC CAPITAL LETTER EF */
    5386             :         [960+0x25] = 0x0445,    /* U+0425: CYRILLIC CAPITAL LETTER HA */
    5387             :         [960+0x26] = 0x0446,    /* U+0426: CYRILLIC CAPITAL LETTER TSE */
    5388             :         [960+0x27] = 0x0447,    /* U+0427: CYRILLIC CAPITAL LETTER CHE */
    5389             :         [960+0x28] = 0x0448,    /* U+0428: CYRILLIC CAPITAL LETTER SHA */
    5390             :         [960+0x29] = 0x0449,    /* U+0429: CYRILLIC CAPITAL LETTER SHCHA */
    5391             :         [960+0x2A] = 0x044A,    /* U+042A: CYRILLIC CAPITAL LETTER HARD SIGN */
    5392             :         [960+0x2B] = 0x044B,    /* U+042B: CYRILLIC CAPITAL LETTER YERU */
    5393             :         [960+0x2C] = 0x044C,    /* U+042C: CYRILLIC CAPITAL LETTER SOFT SIGN */
    5394             :         [960+0x2D] = 0x044D,    /* U+042D: CYRILLIC CAPITAL LETTER E */
    5395             :         [960+0x2E] = 0x044E,    /* U+042E: CYRILLIC CAPITAL LETTER YU */
    5396             :         [960+0x2F] = 0x044F,    /* U+042F: CYRILLIC CAPITAL LETTER YA */
    5397             :         [0xD1] = 1024 - 0x80,   /* 321 ... */
    5398             :         [1024+0x20] = 0x0461,   /* U+0460: CYRILLIC CAPITAL LETTER OMEGA */
    5399             :         [1024+0x22] = 0x0463,   /* U+0462: CYRILLIC CAPITAL LETTER YAT */
    5400             :         [1024+0x24] = 0x0465,   /* U+0464: CYRILLIC CAPITAL LETTER IOTIFIED E */
    5401             :         [1024+0x26] = 0x0467,   /* U+0466: CYRILLIC CAPITAL LETTER LITTLE YUS */
    5402             :         [1024+0x28] = 0x0469,   /* U+0468: CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */
    5403             :         [1024+0x2A] = 0x046B,   /* U+046A: CYRILLIC CAPITAL LETTER BIG YUS */
    5404             :         [1024+0x2C] = 0x046D,   /* U+046C: CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */
    5405             :         [1024+0x2E] = 0x046F,   /* U+046E: CYRILLIC CAPITAL LETTER KSI */
    5406             :         [1024+0x30] = 0x0471,   /* U+0470: CYRILLIC CAPITAL LETTER PSI */
    5407             :         [1024+0x32] = 0x0473,   /* U+0472: CYRILLIC CAPITAL LETTER FITA */
    5408             :         [1024+0x34] = 0x0475,   /* U+0474: CYRILLIC CAPITAL LETTER IZHITSA */
    5409             :         [1024+0x36] = 0x0477,   /* U+0476: CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
    5410             :         [1024+0x38] = 0x0479,   /* U+0478: CYRILLIC CAPITAL LETTER UK */
    5411             :         [1024+0x3A] = 0x047B,   /* U+047A: CYRILLIC CAPITAL LETTER ROUND OMEGA */
    5412             :         [1024+0x3C] = 0x047D,   /* U+047C: CYRILLIC CAPITAL LETTER OMEGA WITH TITLO */
    5413             :         [1024+0x3E] = 0x047F,   /* U+047E: CYRILLIC CAPITAL LETTER OT */
    5414             :         [0xD2] = 1088 - 0x80,   /* 322 ... */
    5415             :         [1088+0x00] = 0x0481,   /* U+0480: CYRILLIC CAPITAL LETTER KOPPA */
    5416             :         [1088+0x0A] = 0x048B,   /* U+048A: CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */
    5417             :         [1088+0x0C] = 0x048D,   /* U+048C: CYRILLIC CAPITAL LETTER SEMISOFT SIGN */
    5418             :         [1088+0x0E] = 0x048F,   /* U+048E: CYRILLIC CAPITAL LETTER ER WITH TICK */
    5419             :         [1088+0x10] = 0x0491,   /* U+0490: CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
    5420             :         [1088+0x12] = 0x0493,   /* U+0492: CYRILLIC CAPITAL LETTER GHE WITH STROKE */
    5421             :         [1088+0x14] = 0x0495,   /* U+0494: CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK */
    5422             :         [1088+0x16] = 0x0497,   /* U+0496: CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
    5423             :         [1088+0x18] = 0x0499,   /* U+0498: CYRILLIC CAPITAL LETTER ZE WITH DESCENDER */
    5424             :         [1088+0x1A] = 0x049B,   /* U+049A: CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
    5425             :         [1088+0x1C] = 0x049D,   /* U+049C: CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
    5426             :         [1088+0x1E] = 0x049F,   /* U+049E: CYRILLIC CAPITAL LETTER KA WITH STROKE */
    5427             :         [1088+0x20] = 0x04A1,   /* U+04A0: CYRILLIC CAPITAL LETTER BASHKIR KA */
    5428             :         [1088+0x22] = 0x04A3,   /* U+04A2: CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
    5429             :         [1088+0x24] = 0x04A5,   /* U+04A4: CYRILLIC CAPITAL LIGATURE EN GHE */
    5430             :         [1088+0x26] = 0x04A7,   /* U+04A6: CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK */
    5431             :         [1088+0x28] = 0x04A9,   /* U+04A8: CYRILLIC CAPITAL LETTER ABKHASIAN HA */
    5432             :         [1088+0x2A] = 0x04AB,   /* U+04AA: CYRILLIC CAPITAL LETTER ES WITH DESCENDER */
    5433             :         [1088+0x2C] = 0x04AD,   /* U+04AC: CYRILLIC CAPITAL LETTER TE WITH DESCENDER */
    5434             :         [1088+0x2E] = 0x04AF,   /* U+04AE: CYRILLIC CAPITAL LETTER STRAIGHT U */
    5435             :         [1088+0x30] = 0x04B1,   /* U+04B0: CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
    5436             :         [1088+0x32] = 0x04B3,   /* U+04B2: CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
    5437             :         [1088+0x34] = 0x04B5,   /* U+04B4: CYRILLIC CAPITAL LIGATURE TE TSE */
    5438             :         [1088+0x36] = 0x04B7,   /* U+04B6: CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
    5439             :         [1088+0x38] = 0x04B9,   /* U+04B8: CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
    5440             :         [1088+0x3A] = 0x04BB,   /* U+04BA: CYRILLIC CAPITAL LETTER SHHA */
    5441             :         [1088+0x3C] = 0x04BD,   /* U+04BC: CYRILLIC CAPITAL LETTER ABKHASIAN CHE */
    5442             :         [1088+0x3E] = 0x04BF,   /* U+04BE: CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER */
    5443             :         [0xD3] = 1152 - 0x80,   /* 323 ... */
    5444             :         [1152+0x00] = 0x04CF,   /* U+04C0: CYRILLIC LETTER PALOCHKA */
    5445             :         [1152+0x01] = 0x04C2,   /* U+04C1: CYRILLIC CAPITAL LETTER ZHE WITH BREVE */
    5446             :         [1152+0x03] = 0x04C4,   /* U+04C3: CYRILLIC CAPITAL LETTER KA WITH HOOK */
    5447             :         [1152+0x05] = 0x04C6,   /* U+04C5: CYRILLIC CAPITAL LETTER EL WITH TAIL */
    5448             :         [1152+0x07] = 0x04C8,   /* U+04C7: CYRILLIC CAPITAL LETTER EN WITH HOOK */
    5449             :         [1152+0x09] = 0x04CA,   /* U+04C9: CYRILLIC CAPITAL LETTER EN WITH TAIL */
    5450             :         [1152+0x0B] = 0x04CC,   /* U+04CB: CYRILLIC CAPITAL LETTER KHAKASSIAN CHE */
    5451             :         [1152+0x0D] = 0x04CE,   /* U+04CD: CYRILLIC CAPITAL LETTER EM WITH TAIL */
    5452             :         [1152+0x10] = 0x04D1,   /* U+04D0: CYRILLIC CAPITAL LETTER A WITH BREVE */
    5453             :         [1152+0x12] = 0x04D3,   /* U+04D2: CYRILLIC CAPITAL LETTER A WITH DIAERESIS */
    5454             :         [1152+0x14] = 0x04D5,   /* U+04D4: CYRILLIC CAPITAL LIGATURE A IE */
    5455             :         [1152+0x16] = 0x04D7,   /* U+04D6: CYRILLIC CAPITAL LETTER IE WITH BREVE */
    5456             :         [1152+0x18] = 0x04D9,   /* U+04D8: CYRILLIC CAPITAL LETTER SCHWA */
    5457             :         [1152+0x1A] = 0x04DB,   /* U+04DA: CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
    5458             :         [1152+0x1C] = 0x04DD,   /* U+04DC: CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */
    5459             :         [1152+0x1E] = 0x04DF,   /* U+04DE: CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */
    5460             :         [1152+0x20] = 0x04E1,   /* U+04E0: CYRILLIC CAPITAL LETTER ABKHASIAN DZE */
    5461             :         [1152+0x22] = 0x04E3,   /* U+04E2: CYRILLIC CAPITAL LETTER I WITH MACRON */
    5462             :         [1152+0x24] = 0x04E5,   /* U+04E4: CYRILLIC CAPITAL LETTER I WITH DIAERESIS */
    5463             :         [1152+0x26] = 0x04E7,   /* U+04E6: CYRILLIC CAPITAL LETTER O WITH DIAERESIS */
    5464             :         [1152+0x28] = 0x04E9,   /* U+04E8: CYRILLIC CAPITAL LETTER BARRED O */
    5465             :         [1152+0x2A] = 0x04EB,   /* U+04EA: CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
    5466             :         [1152+0x2C] = 0x04ED,   /* U+04EC: CYRILLIC CAPITAL LETTER E WITH DIAERESIS */
    5467             :         [1152+0x2E] = 0x04EF,   /* U+04EE: CYRILLIC CAPITAL LETTER U WITH MACRON */
    5468             :         [1152+0x30] = 0x04F1,   /* U+04F0: CYRILLIC CAPITAL LETTER U WITH DIAERESIS */
    5469             :         [1152+0x32] = 0x04F3,   /* U+04F2: CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */
    5470             :         [1152+0x34] = 0x04F5,   /* U+04F4: CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */
    5471             :         [1152+0x36] = 0x04F7,   /* U+04F6: CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */
    5472             :         [1152+0x38] = 0x04F9,   /* U+04F8: CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */
    5473             :         [1152+0x3A] = 0x04FB,   /* U+04FA: CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */
    5474             :         [1152+0x3C] = 0x04FD,   /* U+04FC: CYRILLIC CAPITAL LETTER HA WITH HOOK */
    5475             :         [1152+0x3E] = 0x04FF,   /* U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE */
    5476             :         [0xD4] = 1216 - 0x80,   /* 324 ... */
    5477             :         [1216+0x00] = 0x0501,   /* U+0500: CYRILLIC CAPITAL LETTER KOMI DE */
    5478             :         [1216+0x02] = 0x0503,   /* U+0502: CYRILLIC CAPITAL LETTER KOMI DJE */
    5479             :         [1216+0x04] = 0x0505,   /* U+0504: CYRILLIC CAPITAL LETTER KOMI ZJE */
    5480             :         [1216+0x06] = 0x0507,   /* U+0506: CYRILLIC CAPITAL LETTER KOMI DZJE */
    5481             :         [1216+0x08] = 0x0509,   /* U+0508: CYRILLIC CAPITAL LETTER KOMI LJE */
    5482             :         [1216+0x0A] = 0x050B,   /* U+050A: CYRILLIC CAPITAL LETTER KOMI NJE */
    5483             :         [1216+0x0C] = 0x050D,   /* U+050C: CYRILLIC CAPITAL LETTER KOMI SJE */
    5484             :         [1216+0x0E] = 0x050F,   /* U+050E: CYRILLIC CAPITAL LETTER KOMI TJE */
    5485             :         [1216+0x10] = 0x0511,   /* U+0510: CYRILLIC CAPITAL LETTER REVERSED ZE */
    5486             :         [1216+0x12] = 0x0513,   /* U+0512: CYRILLIC CAPITAL LETTER EL WITH HOOK */
    5487             :         [1216+0x14] = 0x0515,   /* U+0514: CYRILLIC CAPITAL LETTER LHA */
    5488             :         [1216+0x16] = 0x0517,   /* U+0516: CYRILLIC CAPITAL LETTER RHA */
    5489             :         [1216+0x18] = 0x0519,   /* U+0518: CYRILLIC CAPITAL LETTER YAE */
    5490             :         [1216+0x1A] = 0x051B,   /* U+051A: CYRILLIC CAPITAL LETTER QA */
    5491             :         [1216+0x1C] = 0x051D,   /* U+051C: CYRILLIC CAPITAL LETTER WE */
    5492             :         [1216+0x1E] = 0x051F,   /* U+051E: CYRILLIC CAPITAL LETTER ALEUT KA */
    5493             :         [1216+0x20] = 0x0521,   /* U+0520: CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */
    5494             :         [1216+0x22] = 0x0523,   /* U+0522: CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */
    5495             :         [1216+0x24] = 0x0525,   /* U+0524: CYRILLIC CAPITAL LETTER PE WITH DESCENDER */
    5496             :         [1216+0x26] = 0x0527,   /* U+0526: CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */
    5497             :         [1216+0x28] = 0x0529,   /* U+0528: CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */
    5498             :         [1216+0x2A] = 0x052B,   /* U+052A: CYRILLIC CAPITAL LETTER DZZHE */
    5499             :         [1216+0x2C] = 0x052D,   /* U+052C: CYRILLIC CAPITAL LETTER DCHE */
    5500             :         [1216+0x2E] = 0x052F,   /* U+052E: CYRILLIC CAPITAL LETTER EL WITH DESCENDER */
    5501             :         [1216+0x31] = 0x0561,   /* U+0531: ARMENIAN CAPITAL LETTER AYB */
    5502             :         [1216+0x32] = 0x0562,   /* U+0532: ARMENIAN CAPITAL LETTER BEN */
    5503             :         [1216+0x33] = 0x0563,   /* U+0533: ARMENIAN CAPITAL LETTER GIM */
    5504             :         [1216+0x34] = 0x0564,   /* U+0534: ARMENIAN CAPITAL LETTER DA */
    5505             :         [1216+0x35] = 0x0565,   /* U+0535: ARMENIAN CAPITAL LETTER ECH */
    5506             :         [1216+0x36] = 0x0566,   /* U+0536: ARMENIAN CAPITAL LETTER ZA */
    5507             :         [1216+0x37] = 0x0567,   /* U+0537: ARMENIAN CAPITAL LETTER EH */
    5508             :         [1216+0x38] = 0x0568,   /* U+0538: ARMENIAN CAPITAL LETTER ET */
    5509             :         [1216+0x39] = 0x0569,   /* U+0539: ARMENIAN CAPITAL LETTER TO */
    5510             :         [1216+0x3A] = 0x056A,   /* U+053A: ARMENIAN CAPITAL LETTER ZHE */
    5511             :         [1216+0x3B] = 0x056B,   /* U+053B: ARMENIAN CAPITAL LETTER INI */
    5512             :         [1216+0x3C] = 0x056C,   /* U+053C: ARMENIAN CAPITAL LETTER LIWN */
    5513             :         [1216+0x3D] = 0x056D,   /* U+053D: ARMENIAN CAPITAL LETTER XEH */
    5514             :         [1216+0x3E] = 0x056E,   /* U+053E: ARMENIAN CAPITAL LETTER CA */
    5515             :         [1216+0x3F] = 0x056F,   /* U+053F: ARMENIAN CAPITAL LETTER KEN */
    5516             :         [0xD5] = 1280 - 0x80,   /* 325 ... */
    5517             :         [1280+0x00] = 0x0570,   /* U+0540: ARMENIAN CAPITAL LETTER HO */
    5518             :         [1280+0x01] = 0x0571,   /* U+0541: ARMENIAN CAPITAL LETTER JA */
    5519             :         [1280+0x02] = 0x0572,   /* U+0542: ARMENIAN CAPITAL LETTER GHAD */
    5520             :         [1280+0x03] = 0x0573,   /* U+0543: ARMENIAN CAPITAL LETTER CHEH */
    5521             :         [1280+0x04] = 0x0574,   /* U+0544: ARMENIAN CAPITAL LETTER MEN */
    5522             :         [1280+0x05] = 0x0575,   /* U+0545: ARMENIAN CAPITAL LETTER YI */
    5523             :         [1280+0x06] = 0x0576,   /* U+0546: ARMENIAN CAPITAL LETTER NOW */
    5524             :         [1280+0x07] = 0x0577,   /* U+0547: ARMENIAN CAPITAL LETTER SHA */
    5525             :         [1280+0x08] = 0x0578,   /* U+0548: ARMENIAN CAPITAL LETTER VO */
    5526             :         [1280+0x09] = 0x0579,   /* U+0549: ARMENIAN CAPITAL LETTER CHA */
    5527             :         [1280+0x0A] = 0x057A,   /* U+054A: ARMENIAN CAPITAL LETTER PEH */
    5528             :         [1280+0x0B] = 0x057B,   /* U+054B: ARMENIAN CAPITAL LETTER JHEH */
    5529             :         [1280+0x0C] = 0x057C,   /* U+054C: ARMENIAN CAPITAL LETTER RA */
    5530             :         [1280+0x0D] = 0x057D,   /* U+054D: ARMENIAN CAPITAL LETTER SEH */
    5531             :         [1280+0x0E] = 0x057E,   /* U+054E: ARMENIAN CAPITAL LETTER VEW */
    5532             :         [1280+0x0F] = 0x057F,   /* U+054F: ARMENIAN CAPITAL LETTER TIWN */
    5533             :         [1280+0x10] = 0x0580,   /* U+0550: ARMENIAN CAPITAL LETTER REH */
    5534             :         [1280+0x11] = 0x0581,   /* U+0551: ARMENIAN CAPITAL LETTER CO */
    5535             :         [1280+0x12] = 0x0582,   /* U+0552: ARMENIAN CAPITAL LETTER YIWN */
    5536             :         [1280+0x13] = 0x0583,   /* U+0553: ARMENIAN CAPITAL LETTER PIWR */
    5537             :         [1280+0x14] = 0x0584,   /* U+0554: ARMENIAN CAPITAL LETTER KEH */
    5538             :         [1280+0x15] = 0x0585,   /* U+0555: ARMENIAN CAPITAL LETTER OH */
    5539             :         [1280+0x16] = 0x0586,   /* U+0556: ARMENIAN CAPITAL LETTER FEH */
    5540             :         [0xD6] = 1344 - 0x80,   /* 326 ... */
    5541             :         [1344+0x07] = -7,       /* U+0587: ARMENIAN SMALL LIGATURE ECH YIWN */
    5542             :         [0xE1] = 1408 - 0x80,   /* 341 ... */
    5543             :         [1408+0x02] = 1472 - 0x80,      /* 341 202 ... */
    5544             :         [1472+0x20] = 0x2D00,   /* U+10A0: GEORGIAN CAPITAL LETTER AN */
    5545             :         [1472+0x21] = 0x2D01,   /* U+10A1: GEORGIAN CAPITAL LETTER BAN */
    5546             :         [1472+0x22] = 0x2D02,   /* U+10A2: GEORGIAN CAPITAL LETTER GAN */
    5547             :         [1472+0x23] = 0x2D03,   /* U+10A3: GEORGIAN CAPITAL LETTER DON */
    5548             :         [1472+0x24] = 0x2D04,   /* U+10A4: GEORGIAN CAPITAL LETTER EN */
    5549             :         [1472+0x25] = 0x2D05,   /* U+10A5: GEORGIAN CAPITAL LETTER VIN */
    5550             :         [1472+0x26] = 0x2D06,   /* U+10A6: GEORGIAN CAPITAL LETTER ZEN */
    5551             :         [1472+0x27] = 0x2D07,   /* U+10A7: GEORGIAN CAPITAL LETTER TAN */
    5552             :         [1472+0x28] = 0x2D08,   /* U+10A8: GEORGIAN CAPITAL LETTER IN */
    5553             :         [1472+0x29] = 0x2D09,   /* U+10A9: GEORGIAN CAPITAL LETTER KAN */
    5554             :         [1472+0x2A] = 0x2D0A,   /* U+10AA: GEORGIAN CAPITAL LETTER LAS */
    5555             :         [1472+0x2B] = 0x2D0B,   /* U+10AB: GEORGIAN CAPITAL LETTER MAN */
    5556             :         [1472+0x2C] = 0x2D0C,   /* U+10AC: GEORGIAN CAPITAL LETTER NAR */
    5557             :         [1472+0x2D] = 0x2D0D,   /* U+10AD: GEORGIAN CAPITAL LETTER ON */
    5558             :         [1472+0x2E] = 0x2D0E,   /* U+10AE: GEORGIAN CAPITAL LETTER PAR */
    5559             :         [1472+0x2F] = 0x2D0F,   /* U+10AF: GEORGIAN CAPITAL LETTER ZHAR */
    5560             :         [1472+0x30] = 0x2D10,   /* U+10B0: GEORGIAN CAPITAL LETTER RAE */
    5561             :         [1472+0x31] = 0x2D11,   /* U+10B1: GEORGIAN CAPITAL LETTER SAN */
    5562             :         [1472+0x32] = 0x2D12,   /* U+10B2: GEORGIAN CAPITAL LETTER TAR */
    5563             :         [1472+0x33] = 0x2D13,   /* U+10B3: GEORGIAN CAPITAL LETTER UN */
    5564             :         [1472+0x34] = 0x2D14,   /* U+10B4: GEORGIAN CAPITAL LETTER PHAR */
    5565             :         [1472+0x35] = 0x2D15,   /* U+10B5: GEORGIAN CAPITAL LETTER KHAR */
    5566             :         [1472+0x36] = 0x2D16,   /* U+10B6: GEORGIAN CAPITAL LETTER GHAN */
    5567             :         [1472+0x37] = 0x2D17,   /* U+10B7: GEORGIAN CAPITAL LETTER QAR */
    5568             :         [1472+0x38] = 0x2D18,   /* U+10B8: GEORGIAN CAPITAL LETTER SHIN */
    5569             :         [1472+0x39] = 0x2D19,   /* U+10B9: GEORGIAN CAPITAL LETTER CHIN */
    5570             :         [1472+0x3A] = 0x2D1A,   /* U+10BA: GEORGIAN CAPITAL LETTER CAN */
    5571             :         [1472+0x3B] = 0x2D1B,   /* U+10BB: GEORGIAN CAPITAL LETTER JIL */
    5572             :         [1472+0x3C] = 0x2D1C,   /* U+10BC: GEORGIAN CAPITAL LETTER CIL */
    5573             :         [1472+0x3D] = 0x2D1D,   /* U+10BD: GEORGIAN CAPITAL LETTER CHAR */
    5574             :         [1472+0x3E] = 0x2D1E,   /* U+10BE: GEORGIAN CAPITAL LETTER XAN */
    5575             :         [1472+0x3F] = 0x2D1F,   /* U+10BF: GEORGIAN CAPITAL LETTER JHAN */
    5576             :         [1408+0x03] = 1536 - 0x80,      /* 341 203 ... */
    5577             :         [1536+0x00] = 0x2D20,   /* U+10C0: GEORGIAN CAPITAL LETTER HAE */
    5578             :         [1536+0x01] = 0x2D21,   /* U+10C1: GEORGIAN CAPITAL LETTER HE */
    5579             :         [1536+0x02] = 0x2D22,   /* U+10C2: GEORGIAN CAPITAL LETTER HIE */
    5580             :         [1536+0x03] = 0x2D23,   /* U+10C3: GEORGIAN CAPITAL LETTER WE */
    5581             :         [1536+0x04] = 0x2D24,   /* U+10C4: GEORGIAN CAPITAL LETTER HAR */
    5582             :         [1536+0x05] = 0x2D25,   /* U+10C5: GEORGIAN CAPITAL LETTER HOE */
    5583             :         [1536+0x07] = 0x2D27,   /* U+10C7: GEORGIAN CAPITAL LETTER YN */
    5584             :         [1536+0x0D] = 0x2D2D,   /* U+10CD: GEORGIAN CAPITAL LETTER AEN */
    5585             :         [1408+0x0F] = 1600 - 0x80,      /* 341 217 ... */
    5586             :         [1600+0x38] = 0x13F0,   /* U+13F8: CHEROKEE SMALL LETTER YE */
    5587             :         [1600+0x39] = 0x13F1,   /* U+13F9: CHEROKEE SMALL LETTER YI */
    5588             :         [1600+0x3A] = 0x13F2,   /* U+13FA: CHEROKEE SMALL LETTER YO */
    5589             :         [1600+0x3B] = 0x13F3,   /* U+13FB: CHEROKEE SMALL LETTER YU */
    5590             :         [1600+0x3C] = 0x13F4,   /* U+13FC: CHEROKEE SMALL LETTER YV */
    5591             :         [1600+0x3D] = 0x13F5,   /* U+13FD: CHEROKEE SMALL LETTER MV */
    5592             :         [1408+0x32] = 1664 - 0x80,      /* 341 262 ... */
    5593             :         [1664+0x00] = 0x0432,   /* U+1C80: CYRILLIC SMALL LETTER ROUNDED VE */
    5594             :         [1664+0x01] = 0x0434,   /* U+1C81: CYRILLIC SMALL LETTER LONG-LEGGED DE */
    5595             :         [1664+0x02] = 0x043E,   /* U+1C82: CYRILLIC SMALL LETTER NARROW O */
    5596             :         [1664+0x03] = 0x0441,   /* U+1C83: CYRILLIC SMALL LETTER WIDE ES */
    5597             :         [1664+0x04] = 0x0442,   /* U+1C84: CYRILLIC SMALL LETTER TALL TE */
    5598             :         [1664+0x05] = 0x0442,   /* U+1C85: CYRILLIC SMALL LETTER THREE-LEGGED TE */
    5599             :         [1664+0x06] = 0x044A,   /* U+1C86: CYRILLIC SMALL LETTER TALL HARD SIGN */
    5600             :         [1664+0x07] = 0x0463,   /* U+1C87: CYRILLIC SMALL LETTER TALL YAT */
    5601             :         [1664+0x08] = 0xA64B,   /* U+1C88: CYRILLIC SMALL LETTER UNBLENDED UK */
    5602             :         [1664+0x10] = 0x10D0,   /* U+1C90: GEORGIAN MTAVRULI CAPITAL LETTER AN */
    5603             :         [1664+0x11] = 0x10D1,   /* U+1C91: GEORGIAN MTAVRULI CAPITAL LETTER BAN */
    5604             :         [1664+0x12] = 0x10D2,   /* U+1C92: GEORGIAN MTAVRULI CAPITAL LETTER GAN */
    5605             :         [1664+0x13] = 0x10D3,   /* U+1C93: GEORGIAN MTAVRULI CAPITAL LETTER DON */
    5606             :         [1664+0x14] = 0x10D4,   /* U+1C94: GEORGIAN MTAVRULI CAPITAL LETTER EN */
    5607             :         [1664+0x15] = 0x10D5,   /* U+1C95: GEORGIAN MTAVRULI CAPITAL LETTER VIN */
    5608             :         [1664+0x16] = 0x10D6,   /* U+1C96: GEORGIAN MTAVRULI CAPITAL LETTER ZEN */
    5609             :         [1664+0x17] = 0x10D7,   /* U+1C97: GEORGIAN MTAVRULI CAPITAL LETTER TAN */
    5610             :         [1664+0x18] = 0x10D8,   /* U+1C98: GEORGIAN MTAVRULI CAPITAL LETTER IN */
    5611             :         [1664+0x19] = 0x10D9,   /* U+1C99: GEORGIAN MTAVRULI CAPITAL LETTER KAN */
    5612             :         [1664+0x1A] = 0x10DA,   /* U+1C9A: GEORGIAN MTAVRULI CAPITAL LETTER LAS */
    5613             :         [1664+0x1B] = 0x10DB,   /* U+1C9B: GEORGIAN MTAVRULI CAPITAL LETTER MAN */
    5614             :         [1664+0x1C] = 0x10DC,   /* U+1C9C: GEORGIAN MTAVRULI CAPITAL LETTER NAR */
    5615             :         [1664+0x1D] = 0x10DD,   /* U+1C9D: GEORGIAN MTAVRULI CAPITAL LETTER ON */
    5616             :         [1664+0x1E] = 0x10DE,   /* U+1C9E: GEORGIAN MTAVRULI CAPITAL LETTER PAR */
    5617             :         [1664+0x1F] = 0x10DF,   /* U+1C9F: GEORGIAN MTAVRULI CAPITAL LETTER ZHAR */
    5618             :         [1664+0x20] = 0x10E0,   /* U+1CA0: GEORGIAN MTAVRULI CAPITAL LETTER RAE */
    5619             :         [1664+0x21] = 0x10E1,   /* U+1CA1: GEORGIAN MTAVRULI CAPITAL LETTER SAN */
    5620             :         [1664+0x22] = 0x10E2,   /* U+1CA2: GEORGIAN MTAVRULI CAPITAL LETTER TAR */
    5621             :         [1664+0x23] = 0x10E3,   /* U+1CA3: GEORGIAN MTAVRULI CAPITAL LETTER UN */
    5622             :         [1664+0x24] = 0x10E4,   /* U+1CA4: GEORGIAN MTAVRULI CAPITAL LETTER PHAR */
    5623             :         [1664+0x25] = 0x10E5,   /* U+1CA5: GEORGIAN MTAVRULI CAPITAL LETTER KHAR */
    5624             :         [1664+0x26] = 0x10E6,   /* U+1CA6: GEORGIAN MTAVRULI CAPITAL LETTER GHAN */
    5625             :         [1664+0x27] = 0x10E7,   /* U+1CA7: GEORGIAN MTAVRULI CAPITAL LETTER QAR */
    5626             :         [1664+0x28] = 0x10E8,   /* U+1CA8: GEORGIAN MTAVRULI CAPITAL LETTER SHIN */
    5627             :         [1664+0x29] = 0x10E9,   /* U+1CA9: GEORGIAN MTAVRULI CAPITAL LETTER CHIN */
    5628             :         [1664+0x2A] = 0x10EA,   /* U+1CAA: GEORGIAN MTAVRULI CAPITAL LETTER CAN */
    5629             :         [1664+0x2B] = 0x10EB,   /* U+1CAB: GEORGIAN MTAVRULI CAPITAL LETTER JIL */
    5630             :         [1664+0x2C] = 0x10EC,   /* U+1CAC: GEORGIAN MTAVRULI CAPITAL LETTER CIL */
    5631             :         [1664+0x2D] = 0x10ED,   /* U+1CAD: GEORGIAN MTAVRULI CAPITAL LETTER CHAR */
    5632             :         [1664+0x2E] = 0x10EE,   /* U+1CAE: GEORGIAN MTAVRULI CAPITAL LETTER XAN */
    5633             :         [1664+0x2F] = 0x10EF,   /* U+1CAF: GEORGIAN MTAVRULI CAPITAL LETTER JHAN */
    5634             :         [1664+0x30] = 0x10F0,   /* U+1CB0: GEORGIAN MTAVRULI CAPITAL LETTER HAE */
    5635             :         [1664+0x31] = 0x10F1,   /* U+1CB1: GEORGIAN MTAVRULI CAPITAL LETTER HE */
    5636             :         [1664+0x32] = 0x10F2,   /* U+1CB2: GEORGIAN MTAVRULI CAPITAL LETTER HIE */
    5637             :         [1664+0x33] = 0x10F3,   /* U+1CB3: GEORGIAN MTAVRULI CAPITAL LETTER WE */
    5638             :         [1664+0x34] = 0x10F4,   /* U+1CB4: GEORGIAN MTAVRULI CAPITAL LETTER HAR */
    5639             :         [1664+0x35] = 0x10F5,   /* U+1CB5: GEORGIAN MTAVRULI CAPITAL LETTER HOE */
    5640             :         [1664+0x36] = 0x10F6,   /* U+1CB6: GEORGIAN MTAVRULI CAPITAL LETTER FI */
    5641             :         [1664+0x37] = 0x10F7,   /* U+1CB7: GEORGIAN MTAVRULI CAPITAL LETTER YN */
    5642             :         [1664+0x38] = 0x10F8,   /* U+1CB8: GEORGIAN MTAVRULI CAPITAL LETTER ELIFI */
    5643             :         [1664+0x39] = 0x10F9,   /* U+1CB9: GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN */
    5644             :         [1664+0x3A] = 0x10FA,   /* U+1CBA: GEORGIAN MTAVRULI CAPITAL LETTER AIN */
    5645             :         [1664+0x3D] = 0x10FD,   /* U+1CBD: GEORGIAN MTAVRULI CAPITAL LETTER AEN */
    5646             :         [1664+0x3E] = 0x10FE,   /* U+1CBE: GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN */
    5647             :         [1664+0x3F] = 0x10FF,   /* U+1CBF: GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */
    5648             :         [1408+0x38] = 1728 - 0x80,      /* 341 270 ... */
    5649             :         [1728+0x00] = 0x1E01,   /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
    5650             :         [1728+0x02] = 0x1E03,   /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
    5651             :         [1728+0x04] = 0x1E05,   /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
    5652             :         [1728+0x06] = 0x1E07,   /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
    5653             :         [1728+0x08] = 0x1E09,   /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
    5654             :         [1728+0x0A] = 0x1E0B,   /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
    5655             :         [1728+0x0C] = 0x1E0D,   /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
    5656             :         [1728+0x0E] = 0x1E0F,   /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
    5657             :         [1728+0x10] = 0x1E11,   /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
    5658             :         [1728+0x12] = 0x1E13,   /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
    5659             :         [1728+0x14] = 0x1E15,   /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
    5660             :         [1728+0x16] = 0x1E17,   /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
    5661             :         [1728+0x18] = 0x1E19,   /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
    5662             :         [1728+0x1A] = 0x1E1B,   /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
    5663             :         [1728+0x1C] = 0x1E1D,   /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
    5664             :         [1728+0x1E] = 0x1E1F,   /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
    5665             :         [1728+0x20] = 0x1E21,   /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
    5666             :         [1728+0x22] = 0x1E23,   /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
    5667             :         [1728+0x24] = 0x1E25,   /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
    5668             :         [1728+0x26] = 0x1E27,   /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
    5669             :         [1728+0x28] = 0x1E29,   /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
    5670             :         [1728+0x2A] = 0x1E2B,   /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
    5671             :         [1728+0x2C] = 0x1E2D,   /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
    5672             :         [1728+0x2E] = 0x1E2F,   /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
    5673             :         [1728+0x30] = 0x1E31,   /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
    5674             :         [1728+0x32] = 0x1E33,   /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
    5675             :         [1728+0x34] = 0x1E35,   /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
    5676             :         [1728+0x36] = 0x1E37,   /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
    5677             :         [1728+0x38] = 0x1E39,   /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
    5678             :         [1728+0x3A] = 0x1E3B,   /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
    5679             :         [1728+0x3C] = 0x1E3D,   /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
    5680             :         [1728+0x3E] = 0x1E3F,   /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
    5681             :         [1408+0x39] = 1792 - 0x80,      /* 341 271 ... */
    5682             :         [1792+0x00] = 0x1E41,   /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
    5683             :         [1792+0x02] = 0x1E43,   /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
    5684             :         [1792+0x04] = 0x1E45,   /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
    5685             :         [1792+0x06] = 0x1E47,   /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
    5686             :         [1792+0x08] = 0x1E49,   /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
    5687             :         [1792+0x0A] = 0x1E4B,   /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
    5688             :         [1792+0x0C] = 0x1E4D,   /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
    5689             :         [1792+0x0E] = 0x1E4F,   /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
    5690             :         [1792+0x10] = 0x1E51,   /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
    5691             :         [1792+0x12] = 0x1E53,   /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
    5692             :         [1792+0x14] = 0x1E55,   /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
    5693             :         [1792+0x16] = 0x1E57,   /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
    5694             :         [1792+0x18] = 0x1E59,   /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
    5695             :         [1792+0x1A] = 0x1E5B,   /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
    5696             :         [1792+0x1C] = 0x1E5D,   /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
    5697             :         [1792+0x1E] = 0x1E5F,   /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
    5698             :         [1792+0x20] = 0x1E61,   /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
    5699             :         [1792+0x22] = 0x1E63,   /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
    5700             :         [1792+0x24] = 0x1E65,   /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
    5701             :         [1792+0x26] = 0x1E67,   /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
    5702             :         [1792+0x28] = 0x1E69,   /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
    5703             :         [1792+0x2A] = 0x1E6B,   /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
    5704             :         [1792+0x2C] = 0x1E6D,   /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
    5705             :         [1792+0x2E] = 0x1E6F,   /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
    5706             :         [1792+0x30] = 0x1E71,   /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
    5707             :         [1792+0x32] = 0x1E73,   /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
    5708             :         [1792+0x34] = 0x1E75,   /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
    5709             :         [1792+0x36] = 0x1E77,   /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
    5710             :         [1792+0x38] = 0x1E79,   /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
    5711             :         [1792+0x3A] = 0x1E7B,   /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
    5712             :         [1792+0x3C] = 0x1E7D,   /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
    5713             :         [1792+0x3E] = 0x1E7F,   /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
    5714             :         [1408+0x3A] = 1856 - 0x80,      /* 341 272 ... */
    5715             :         [1856+0x00] = 0x1E81,   /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
    5716             :         [1856+0x02] = 0x1E83,   /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
    5717             :         [1856+0x04] = 0x1E85,   /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
    5718             :         [1856+0x06] = 0x1E87,   /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
    5719             :         [1856+0x08] = 0x1E89,   /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
    5720             :         [1856+0x0A] = 0x1E8B,   /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
    5721             :         [1856+0x0C] = 0x1E8D,   /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
    5722             :         [1856+0x0E] = 0x1E8F,   /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
    5723             :         [1856+0x10] = 0x1E91,   /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
    5724             :         [1856+0x12] = 0x1E93,   /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
    5725             :         [1856+0x14] = 0x1E95,   /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
    5726             :         [1856+0x16] = -8,       /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
    5727             :         [1856+0x17] = -9,       /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
    5728             :         [1856+0x18] = -10,      /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
    5729             :         [1856+0x19] = -11,      /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
    5730             :         [1856+0x1A] = -12,      /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
    5731             :         [1856+0x1B] = 0x1E61,   /* U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE */
    5732             :         [1856+0x1E] = -1,       /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
    5733             :         [1856+0x20] = 0x1EA1,   /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
    5734             :         [1856+0x22] = 0x1EA3,   /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
    5735             :         [1856+0x24] = 0x1EA5,   /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
    5736             :         [1856+0x26] = 0x1EA7,   /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
    5737             :         [1856+0x28] = 0x1EA9,   /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
    5738             :         [1856+0x2A] = 0x1EAB,   /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
    5739             :         [1856+0x2C] = 0x1EAD,   /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
    5740             :         [1856+0x2E] = 0x1EAF,   /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
    5741             :         [1856+0x30] = 0x1EB1,   /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
    5742             :         [1856+0x32] = 0x1EB3,   /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
    5743             :         [1856+0x34] = 0x1EB5,   /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
    5744             :         [1856+0x36] = 0x1EB7,   /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
    5745             :         [1856+0x38] = 0x1EB9,   /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
    5746             :         [1856+0x3A] = 0x1EBB,   /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
    5747             :         [1856+0x3C] = 0x1EBD,   /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
    5748             :         [1856+0x3E] = 0x1EBF,   /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
    5749             :         [1408+0x3B] = 1920 - 0x80,      /* 341 273 ... */
    5750             :         [1920+0x00] = 0x1EC1,   /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
    5751             :         [1920+0x02] = 0x1EC3,   /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
    5752             :         [1920+0x04] = 0x1EC5,   /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
    5753             :         [1920+0x06] = 0x1EC7,   /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
    5754             :         [1920+0x08] = 0x1EC9,   /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
    5755             :         [1920+0x0A] = 0x1ECB,   /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
    5756             :         [1920+0x0C] = 0x1ECD,   /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
    5757             :         [1920+0x0E] = 0x1ECF,   /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
    5758             :         [1920+0x10] = 0x1ED1,   /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
    5759             :         [1920+0x12] = 0x1ED3,   /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
    5760             :         [1920+0x14] = 0x1ED5,   /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
    5761             :         [1920+0x16] = 0x1ED7,   /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
    5762             :         [1920+0x18] = 0x1ED9,   /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
    5763             :         [1920+0x1A] = 0x1EDB,   /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
    5764             :         [1920+0x1C] = 0x1EDD,   /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
    5765             :         [1920+0x1E] = 0x1EDF,   /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
    5766             :         [1920+0x20] = 0x1EE1,   /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
    5767             :         [1920+0x22] = 0x1EE3,   /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
    5768             :         [1920+0x24] = 0x1EE5,   /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
    5769             :         [1920+0x26] = 0x1EE7,   /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
    5770             :         [1920+0x28] = 0x1EE9,   /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
    5771             :         [1920+0x2A] = 0x1EEB,   /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
    5772             :         [1920+0x2C] = 0x1EED,   /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
    5773             :         [1920+0x2E] = 0x1EEF,   /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
    5774             :         [1920+0x30] = 0x1EF1,   /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
    5775             :         [1920+0x32] = 0x1EF3,   /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
    5776             :         [1920+0x34] = 0x1EF5,   /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
    5777             :         [1920+0x36] = 0x1EF7,   /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
    5778             :         [1920+0x38] = 0x1EF9,   /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
    5779             :         [1920+0x3A] = 0x1EFB,   /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
    5780             :         [1920+0x3C] = 0x1EFD,   /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
    5781             :         [1920+0x3E] = 0x1EFF,   /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
    5782             :         [1408+0x3C] = 1984 - 0x80,      /* 341 274 ... */
    5783             :         [1984+0x08] = 0x1F00,   /* U+1F08: GREEK CAPITAL LETTER ALPHA WITH PSILI */
    5784             :         [1984+0x09] = 0x1F01,   /* U+1F09: GREEK CAPITAL LETTER ALPHA WITH DASIA */
    5785             :         [1984+0x0A] = 0x1F02,   /* U+1F0A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
    5786             :         [1984+0x0B] = 0x1F03,   /* U+1F0B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
    5787             :         [1984+0x0C] = 0x1F04,   /* U+1F0C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
    5788             :         [1984+0x0D] = 0x1F05,   /* U+1F0D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
    5789             :         [1984+0x0E] = 0x1F06,   /* U+1F0E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
    5790             :         [1984+0x0F] = 0x1F07,   /* U+1F0F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
    5791             :         [1984+0x18] = 0x1F10,   /* U+1F18: GREEK CAPITAL LETTER EPSILON WITH PSILI */
    5792             :         [1984+0x19] = 0x1F11,   /* U+1F19: GREEK CAPITAL LETTER EPSILON WITH DASIA */
    5793             :         [1984+0x1A] = 0x1F12,   /* U+1F1A: GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
    5794             :         [1984+0x1B] = 0x1F13,   /* U+1F1B: GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
    5795             :         [1984+0x1C] = 0x1F14,   /* U+1F1C: GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
    5796             :         [1984+0x1D] = 0x1F15,   /* U+1F1D: GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
    5797             :         [1984+0x28] = 0x1F20,   /* U+1F28: GREEK CAPITAL LETTER ETA WITH PSILI */
    5798             :         [1984+0x29] = 0x1F21,   /* U+1F29: GREEK CAPITAL LETTER ETA WITH DASIA */
    5799             :         [1984+0x2A] = 0x1F22,   /* U+1F2A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
    5800             :         [1984+0x2B] = 0x1F23,   /* U+1F2B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
    5801             :         [1984+0x2C] = 0x1F24,   /* U+1F2C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
    5802             :         [1984+0x2D] = 0x1F25,   /* U+1F2D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
    5803             :         [1984+0x2E] = 0x1F26,   /* U+1F2E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
    5804             :         [1984+0x2F] = 0x1F27,   /* U+1F2F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
    5805             :         [1984+0x38] = 0x1F30,   /* U+1F38: GREEK CAPITAL LETTER IOTA WITH PSILI */
    5806             :         [1984+0x39] = 0x1F31,   /* U+1F39: GREEK CAPITAL LETTER IOTA WITH DASIA */
    5807             :         [1984+0x3A] = 0x1F32,   /* U+1F3A: GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
    5808             :         [1984+0x3B] = 0x1F33,   /* U+1F3B: GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
    5809             :         [1984+0x3C] = 0x1F34,   /* U+1F3C: GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
    5810             :         [1984+0x3D] = 0x1F35,   /* U+1F3D: GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
    5811             :         [1984+0x3E] = 0x1F36,   /* U+1F3E: GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
    5812             :         [1984+0x3F] = 0x1F37,   /* U+1F3F: GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
    5813             :         [1408+0x3D] = 2048 - 0x80,      /* 341 275 ... */
    5814             :         [2048+0x08] = 0x1F40,   /* U+1F48: GREEK CAPITAL LETTER OMICRON WITH PSILI */
    5815             :         [2048+0x09] = 0x1F41,   /* U+1F49: GREEK CAPITAL LETTER OMICRON WITH DASIA */
    5816             :         [2048+0x0A] = 0x1F42,   /* U+1F4A: GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
    5817             :         [2048+0x0B] = 0x1F43,   /* U+1F4B: GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
    5818             :         [2048+0x0C] = 0x1F44,   /* U+1F4C: GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
    5819             :         [2048+0x0D] = 0x1F45,   /* U+1F4D: GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
    5820             :         [2048+0x10] = -13,      /* U+1F50: GREEK SMALL LETTER UPSILON WITH PSILI */
    5821             :         [2048+0x12] = -14,      /* U+1F52: GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
    5822             :         [2048+0x14] = -15,      /* U+1F54: GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
    5823             :         [2048+0x16] = -16,      /* U+1F56: GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
    5824             :         [2048+0x19] = 0x1F51,   /* U+1F59: GREEK CAPITAL LETTER UPSILON WITH DASIA */
    5825             :         [2048+0x1B] = 0x1F53,   /* U+1F5B: GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
    5826             :         [2048+0x1D] = 0x1F55,   /* U+1F5D: GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
    5827             :         [2048+0x1F] = 0x1F57,   /* U+1F5F: GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
    5828             :         [2048+0x28] = 0x1F60,   /* U+1F68: GREEK CAPITAL LETTER OMEGA WITH PSILI */
    5829             :         [2048+0x29] = 0x1F61,   /* U+1F69: GREEK CAPITAL LETTER OMEGA WITH DASIA */
    5830             :         [2048+0x2A] = 0x1F62,   /* U+1F6A: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
    5831             :         [2048+0x2B] = 0x1F63,   /* U+1F6B: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
    5832             :         [2048+0x2C] = 0x1F64,   /* U+1F6C: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
    5833             :         [2048+0x2D] = 0x1F65,   /* U+1F6D: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
    5834             :         [2048+0x2E] = 0x1F66,   /* U+1F6E: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
    5835             :         [2048+0x2F] = 0x1F67,   /* U+1F6F: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
    5836             :         [1408+0x3E] = 2112 - 0x80,      /* 341 276 ... */
    5837             :         [2112+0x00] = -17,      /* U+1F80: GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
    5838             :         [2112+0x01] = -18,      /* U+1F81: GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
    5839             :         [2112+0x02] = -19,      /* U+1F82: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    5840             :         [2112+0x03] = -20,      /* U+1F83: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    5841             :         [2112+0x04] = -21,      /* U+1F84: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    5842             :         [2112+0x05] = -22,      /* U+1F85: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    5843             :         [2112+0x06] = -23,      /* U+1F86: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    5844             :         [2112+0x07] = -24,      /* U+1F87: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    5845             :         [2112+0x08] = -17,      /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
    5846             :         [2112+0x09] = -18,      /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
    5847             :         [2112+0x0A] = -19,      /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    5848             :         [2112+0x0B] = -20,      /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    5849             :         [2112+0x0C] = -21,      /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    5850             :         [2112+0x0D] = -22,      /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    5851             :         [2112+0x0E] = -23,      /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    5852             :         [2112+0x0F] = -24,      /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    5853             :         [2112+0x10] = -25,      /* U+1F90: GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
    5854             :         [2112+0x11] = -26,      /* U+1F91: GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
    5855             :         [2112+0x12] = -27,      /* U+1F92: GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    5856             :         [2112+0x13] = -28,      /* U+1F93: GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    5857             :         [2112+0x14] = -29,      /* U+1F94: GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    5858             :         [2112+0x15] = -30,      /* U+1F95: GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    5859             :         [2112+0x16] = -31,      /* U+1F96: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    5860             :         [2112+0x17] = -32,      /* U+1F97: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    5861             :         [2112+0x18] = -25,      /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
    5862             :         [2112+0x19] = -26,      /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
    5863             :         [2112+0x1A] = -27,      /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    5864             :         [2112+0x1B] = -28,      /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    5865             :         [2112+0x1C] = -29,      /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    5866             :         [2112+0x1D] = -30,      /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    5867             :         [2112+0x1E] = -31,      /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    5868             :         [2112+0x1F] = -32,      /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    5869             :         [2112+0x20] = -33,      /* U+1FA0: GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
    5870             :         [2112+0x21] = -34,      /* U+1FA1: GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
    5871             :         [2112+0x22] = -35,      /* U+1FA2: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
    5872             :         [2112+0x23] = -36,      /* U+1FA3: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
    5873             :         [2112+0x24] = -37,      /* U+1FA4: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
    5874             :         [2112+0x25] = -38,      /* U+1FA5: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
    5875             :         [2112+0x26] = -39,      /* U+1FA6: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
    5876             :         [2112+0x27] = -40,      /* U+1FA7: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
    5877             :         [2112+0x28] = -33,      /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
    5878             :         [2112+0x29] = -34,      /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
    5879             :         [2112+0x2A] = -35,      /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
    5880             :         [2112+0x2B] = -36,      /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
    5881             :         [2112+0x2C] = -37,      /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
    5882             :         [2112+0x2D] = -38,      /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
    5883             :         [2112+0x2E] = -39,      /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
    5884             :         [2112+0x2F] = -40,      /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
    5885             :         [2112+0x32] = -41,      /* U+1FB2: GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
    5886             :         [2112+0x33] = -42,      /* U+1FB3: GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
    5887             :         [2112+0x34] = -43,      /* U+1FB4: GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
    5888             :         [2112+0x36] = -44,      /* U+1FB6: GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
    5889             :         [2112+0x37] = -45,      /* U+1FB7: GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
    5890             :         [2112+0x38] = 0x1FB0,   /* U+1FB8: GREEK CAPITAL LETTER ALPHA WITH VRACHY */
    5891             :         [2112+0x39] = 0x1FB1,   /* U+1FB9: GREEK CAPITAL LETTER ALPHA WITH MACRON */
    5892             :         [2112+0x3A] = 0x1F70,   /* U+1FBA: GREEK CAPITAL LETTER ALPHA WITH VARIA */
    5893             :         [2112+0x3B] = 0x1F71,   /* U+1FBB: GREEK CAPITAL LETTER ALPHA WITH OXIA */
    5894             :         [2112+0x3C] = -42,      /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
    5895             :         [2112+0x3E] = 0x03B9,   /* U+1FBE: GREEK PROSGEGRAMMENI */
    5896             :         [1408+0x3F] = 2176 - 0x80,      /* 341 277 ... */
    5897             :         [2176+0x02] = -46,      /* U+1FC2: GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
    5898             :         [2176+0x03] = -47,      /* U+1FC3: GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
    5899             :         [2176+0x04] = -48,      /* U+1FC4: GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
    5900             :         [2176+0x06] = -49,      /* U+1FC6: GREEK SMALL LETTER ETA WITH PERISPOMENI */
    5901             :         [2176+0x07] = -50,      /* U+1FC7: GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
    5902             :         [2176+0x08] = 0x1F72,   /* U+1FC8: GREEK CAPITAL LETTER EPSILON WITH VARIA */
    5903             :         [2176+0x09] = 0x1F73,   /* U+1FC9: GREEK CAPITAL LETTER EPSILON WITH OXIA */
    5904             :         [2176+0x0A] = 0x1F74,   /* U+1FCA: GREEK CAPITAL LETTER ETA WITH VARIA */
    5905             :         [2176+0x0B] = 0x1F75,   /* U+1FCB: GREEK CAPITAL LETTER ETA WITH OXIA */
    5906             :         [2176+0x0C] = -47,      /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
    5907             :         [2176+0x12] = -51,      /* U+1FD2: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
    5908             :         [2176+0x13] = -5,       /* U+1FD3: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
    5909             :         [2176+0x16] = -52,      /* U+1FD6: GREEK SMALL LETTER IOTA WITH PERISPOMENI */
    5910             :         [2176+0x17] = -53,      /* U+1FD7: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
    5911             :         [2176+0x18] = 0x1FD0,   /* U+1FD8: GREEK CAPITAL LETTER IOTA WITH VRACHY */
    5912             :         [2176+0x19] = 0x1FD1,   /* U+1FD9: GREEK CAPITAL LETTER IOTA WITH MACRON */
    5913             :         [2176+0x1A] = 0x1F76,   /* U+1FDA: GREEK CAPITAL LETTER IOTA WITH VARIA */
    5914             :         [2176+0x1B] = 0x1F77,   /* U+1FDB: GREEK CAPITAL LETTER IOTA WITH OXIA */
    5915             :         [2176+0x22] = -54,      /* U+1FE2: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
    5916             :         [2176+0x23] = -6,       /* U+1FE3: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
    5917             :         [2176+0x24] = -55,      /* U+1FE4: GREEK SMALL LETTER RHO WITH PSILI */
    5918             :         [2176+0x26] = -56,      /* U+1FE6: GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
    5919             :         [2176+0x27] = -57,      /* U+1FE7: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
    5920             :         [2176+0x28] = 0x1FE0,   /* U+1FE8: GREEK CAPITAL LETTER UPSILON WITH VRACHY */
    5921             :         [2176+0x29] = 0x1FE1,   /* U+1FE9: GREEK CAPITAL LETTER UPSILON WITH MACRON */
    5922             :         [2176+0x2A] = 0x1F7A,   /* U+1FEA: GREEK CAPITAL LETTER UPSILON WITH VARIA */
    5923             :         [2176+0x2B] = 0x1F7B,   /* U+1FEB: GREEK CAPITAL LETTER UPSILON WITH OXIA */
    5924             :         [2176+0x2C] = 0x1FE5,   /* U+1FEC: GREEK CAPITAL LETTER RHO WITH DASIA */
    5925             :         [2176+0x32] = -58,      /* U+1FF2: GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
    5926             :         [2176+0x33] = -59,      /* U+1FF3: GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
    5927             :         [2176+0x34] = -60,      /* U+1FF4: GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
    5928             :         [2176+0x36] = -61,      /* U+1FF6: GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
    5929             :         [2176+0x37] = -62,      /* U+1FF7: GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
    5930             :         [2176+0x38] = 0x1F78,   /* U+1FF8: GREEK CAPITAL LETTER OMICRON WITH VARIA */
    5931             :         [2176+0x39] = 0x1F79,   /* U+1FF9: GREEK CAPITAL LETTER OMICRON WITH OXIA */
    5932             :         [2176+0x3A] = 0x1F7C,   /* U+1FFA: GREEK CAPITAL LETTER OMEGA WITH VARIA */
    5933             :         [2176+0x3B] = 0x1F7D,   /* U+1FFB: GREEK CAPITAL LETTER OMEGA WITH OXIA */
    5934             :         [2176+0x3C] = -59,      /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
    5935             :         [0xE2] = 2240 - 0x80,   /* 342 ... */
    5936             :         [2240+0x04] = 2304 - 0x80,      /* 342 204 ... */
    5937             :         [2304+0x26] = 0x03C9,   /* U+2126: OHM SIGN */
    5938             :         [2304+0x2A] = 0x006B,   /* U+212A: KELVIN SIGN */
    5939             :         [2304+0x2B] = 0x00E5,   /* U+212B: ANGSTROM SIGN */
    5940             :         [2304+0x32] = 0x214E,   /* U+2132: TURNED CAPITAL F */
    5941             :         [2240+0x05] = 2368 - 0x80,      /* 342 205 ... */
    5942             :         [2368+0x20] = 0x2170,   /* U+2160: ROMAN NUMERAL ONE */
    5943             :         [2368+0x21] = 0x2171,   /* U+2161: ROMAN NUMERAL TWO */
    5944             :         [2368+0x22] = 0x2172,   /* U+2162: ROMAN NUMERAL THREE */
    5945             :         [2368+0x23] = 0x2173,   /* U+2163: ROMAN NUMERAL FOUR */
    5946             :         [2368+0x24] = 0x2174,   /* U+2164: ROMAN NUMERAL FIVE */
    5947             :         [2368+0x25] = 0x2175,   /* U+2165: ROMAN NUMERAL SIX */
    5948             :         [2368+0x26] = 0x2176,   /* U+2166: ROMAN NUMERAL SEVEN */
    5949             :         [2368+0x27] = 0x2177,   /* U+2167: ROMAN NUMERAL EIGHT */
    5950             :         [2368+0x28] = 0x2178,   /* U+2168: ROMAN NUMERAL NINE */
    5951             :         [2368+0x29] = 0x2179,   /* U+2169: ROMAN NUMERAL TEN */
    5952             :         [2368+0x2A] = 0x217A,   /* U+216A: ROMAN NUMERAL ELEVEN */
    5953             :         [2368+0x2B] = 0x217B,   /* U+216B: ROMAN NUMERAL TWELVE */
    5954             :         [2368+0x2C] = 0x217C,   /* U+216C: ROMAN NUMERAL FIFTY */
    5955             :         [2368+0x2D] = 0x217D,   /* U+216D: ROMAN NUMERAL ONE HUNDRED */
    5956             :         [2368+0x2E] = 0x217E,   /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
    5957             :         [2368+0x2F] = 0x217F,   /* U+216F: ROMAN NUMERAL ONE THOUSAND */
    5958             :         [2240+0x06] = 2432 - 0x80,      /* 342 206 ... */
    5959             :         [2432+0x03] = 0x2184,   /* U+2183: ROMAN NUMERAL REVERSED ONE HUNDRED */
    5960             :         [2240+0x12] = 2496 - 0x80,      /* 342 222 ... */
    5961             :         [2496+0x36] = 0x24D0,   /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
    5962             :         [2496+0x37] = 0x24D1,   /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
    5963             :         [2496+0x38] = 0x24D2,   /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
    5964             :         [2496+0x39] = 0x24D3,   /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
    5965             :         [2496+0x3A] = 0x24D4,   /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
    5966             :         [2496+0x3B] = 0x24D5,   /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
    5967             :         [2496+0x3C] = 0x24D6,   /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
    5968             :         [2496+0x3D] = 0x24D7,   /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
    5969             :         [2496+0x3E] = 0x24D8,   /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
    5970             :         [2496+0x3F] = 0x24D9,   /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
    5971             :         [2240+0x13] = 2560 - 0x80,      /* 342 223 ... */
    5972             :         [2560+0x00] = 0x24DA,   /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
    5973             :         [2560+0x01] = 0x24DB,   /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
    5974             :         [2560+0x02] = 0x24DC,   /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
    5975             :         [2560+0x03] = 0x24DD,   /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
    5976             :         [2560+0x04] = 0x24DE,   /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
    5977             :         [2560+0x05] = 0x24DF,   /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
    5978             :         [2560+0x06] = 0x24E0,   /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
    5979             :         [2560+0x07] = 0x24E1,   /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
    5980             :         [2560+0x08] = 0x24E2,   /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
    5981             :         [2560+0x09] = 0x24E3,   /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
    5982             :         [2560+0x0A] = 0x24E4,   /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
    5983             :         [2560+0x0B] = 0x24E5,   /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
    5984             :         [2560+0x0C] = 0x24E6,   /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
    5985             :         [2560+0x0D] = 0x24E7,   /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
    5986             :         [2560+0x0E] = 0x24E8,   /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
    5987             :         [2560+0x0F] = 0x24E9,   /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
    5988             :         [2240+0x30] = 2624 - 0x80,      /* 342 260 ... */
    5989             :         [2624+0x00] = 0x2C30,   /* U+2C00: GLAGOLITIC CAPITAL LETTER AZU */
    5990             :         [2624+0x01] = 0x2C31,   /* U+2C01: GLAGOLITIC CAPITAL LETTER BUKY */
    5991             :         [2624+0x02] = 0x2C32,   /* U+2C02: GLAGOLITIC CAPITAL LETTER VEDE */
    5992             :         [2624+0x03] = 0x2C33,   /* U+2C03: GLAGOLITIC CAPITAL LETTER GLAGOLI */
    5993             :         [2624+0x04] = 0x2C34,   /* U+2C04: GLAGOLITIC CAPITAL LETTER DOBRO */
    5994             :         [2624+0x05] = 0x2C35,   /* U+2C05: GLAGOLITIC CAPITAL LETTER YESTU */
    5995             :         [2624+0x06] = 0x2C36,   /* U+2C06: GLAGOLITIC CAPITAL LETTER ZHIVETE */
    5996             :         [2624+0x07] = 0x2C37,   /* U+2C07: GLAGOLITIC CAPITAL LETTER DZELO */
    5997             :         [2624+0x08] = 0x2C38,   /* U+2C08: GLAGOLITIC CAPITAL LETTER ZEMLJA */
    5998             :         [2624+0x09] = 0x2C39,   /* U+2C09: GLAGOLITIC CAPITAL LETTER IZHE */
    5999             :         [2624+0x0A] = 0x2C3A,   /* U+2C0A: GLAGOLITIC CAPITAL LETTER INITIAL IZHE */
    6000             :         [2624+0x0B] = 0x2C3B,   /* U+2C0B: GLAGOLITIC CAPITAL LETTER I */
    6001             :         [2624+0x0C] = 0x2C3C,   /* U+2C0C: GLAGOLITIC CAPITAL LETTER DJERVI */
    6002             :         [2624+0x0D] = 0x2C3D,   /* U+2C0D: GLAGOLITIC CAPITAL LETTER KAKO */
    6003             :         [2624+0x0E] = 0x2C3E,   /* U+2C0E: GLAGOLITIC CAPITAL LETTER LJUDIJE */
    6004             :         [2624+0x0F] = 0x2C3F,   /* U+2C0F: GLAGOLITIC CAPITAL LETTER MYSLITE */
    6005             :         [2624+0x10] = 0x2C40,   /* U+2C10: GLAGOLITIC CAPITAL LETTER NASHI */
    6006             :         [2624+0x11] = 0x2C41,   /* U+2C11: GLAGOLITIC CAPITAL LETTER ONU */
    6007             :         [2624+0x12] = 0x2C42,   /* U+2C12: GLAGOLITIC CAPITAL LETTER POKOJI */
    6008             :         [2624+0x13] = 0x2C43,   /* U+2C13: GLAGOLITIC CAPITAL LETTER RITSI */
    6009             :         [2624+0x14] = 0x2C44,   /* U+2C14: GLAGOLITIC CAPITAL LETTER SLOVO */
    6010             :         [2624+0x15] = 0x2C45,   /* U+2C15: GLAGOLITIC CAPITAL LETTER TVRIDO */
    6011             :         [2624+0x16] = 0x2C46,   /* U+2C16: GLAGOLITIC CAPITAL LETTER UKU */
    6012             :         [2624+0x17] = 0x2C47,   /* U+2C17: GLAGOLITIC CAPITAL LETTER FRITU */
    6013             :         [2624+0x18] = 0x2C48,   /* U+2C18: GLAGOLITIC CAPITAL LETTER HERU */
    6014             :         [2624+0x19] = 0x2C49,   /* U+2C19: GLAGOLITIC CAPITAL LETTER OTU */
    6015             :         [2624+0x1A] = 0x2C4A,   /* U+2C1A: GLAGOLITIC CAPITAL LETTER PE */
    6016             :         [2624+0x1B] = 0x2C4B,   /* U+2C1B: GLAGOLITIC CAPITAL LETTER SHTA */
    6017             :         [2624+0x1C] = 0x2C4C,   /* U+2C1C: GLAGOLITIC CAPITAL LETTER TSI */
    6018             :         [2624+0x1D] = 0x2C4D,   /* U+2C1D: GLAGOLITIC CAPITAL LETTER CHRIVI */
    6019             :         [2624+0x1E] = 0x2C4E,   /* U+2C1E: GLAGOLITIC CAPITAL LETTER SHA */
    6020             :         [2624+0x1F] = 0x2C4F,   /* U+2C1F: GLAGOLITIC CAPITAL LETTER YERU */
    6021             :         [2624+0x20] = 0x2C50,   /* U+2C20: GLAGOLITIC CAPITAL LETTER YERI */
    6022             :         [2624+0x21] = 0x2C51,   /* U+2C21: GLAGOLITIC CAPITAL LETTER YATI */
    6023             :         [2624+0x22] = 0x2C52,   /* U+2C22: GLAGOLITIC CAPITAL LETTER SPIDERY HA */
    6024             :         [2624+0x23] = 0x2C53,   /* U+2C23: GLAGOLITIC CAPITAL LETTER YU */
    6025             :         [2624+0x24] = 0x2C54,   /* U+2C24: GLAGOLITIC CAPITAL LETTER SMALL YUS */
    6026             :         [2624+0x25] = 0x2C55,   /* U+2C25: GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */
    6027             :         [2624+0x26] = 0x2C56,   /* U+2C26: GLAGOLITIC CAPITAL LETTER YO */
    6028             :         [2624+0x27] = 0x2C57,   /* U+2C27: GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */
    6029             :         [2624+0x28] = 0x2C58,   /* U+2C28: GLAGOLITIC CAPITAL LETTER BIG YUS */
    6030             :         [2624+0x29] = 0x2C59,   /* U+2C29: GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */
    6031             :         [2624+0x2A] = 0x2C5A,   /* U+2C2A: GLAGOLITIC CAPITAL LETTER FITA */
    6032             :         [2624+0x2B] = 0x2C5B,   /* U+2C2B: GLAGOLITIC CAPITAL LETTER IZHITSA */
    6033             :         [2624+0x2C] = 0x2C5C,   /* U+2C2C: GLAGOLITIC CAPITAL LETTER SHTAPIC */
    6034             :         [2624+0x2D] = 0x2C5D,   /* U+2C2D: GLAGOLITIC CAPITAL LETTER TROKUTASTI A */
    6035             :         [2624+0x2E] = 0x2C5E,   /* U+2C2E: GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */
    6036             :         [2624+0x2F] = 0x2C5F,   /* U+2C2F: GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */
    6037             :         [2240+0x31] = 2688 - 0x80,      /* 342 261 ... */
    6038             :         [2688+0x20] = 0x2C61,   /* U+2C60: LATIN CAPITAL LETTER L WITH DOUBLE BAR */
    6039             :         [2688+0x22] = 0x026B,   /* U+2C62: LATIN CAPITAL LETTER L WITH MIDDLE TILDE */
    6040             :         [2688+0x23] = 0x1D7D,   /* U+2C63: LATIN CAPITAL LETTER P WITH STROKE */
    6041             :         [2688+0x24] = 0x027D,   /* U+2C64: LATIN CAPITAL LETTER R WITH TAIL */
    6042             :         [2688+0x27] = 0x2C68,   /* U+2C67: LATIN CAPITAL LETTER H WITH DESCENDER */
    6043             :         [2688+0x29] = 0x2C6A,   /* U+2C69: LATIN CAPITAL LETTER K WITH DESCENDER */
    6044             :         [2688+0x2B] = 0x2C6C,   /* U+2C6B: LATIN CAPITAL LETTER Z WITH DESCENDER */
    6045             :         [2688+0x2D] = 0x0251,   /* U+2C6D: LATIN CAPITAL LETTER ALPHA */
    6046             :         [2688+0x2E] = 0x0271,   /* U+2C6E: LATIN CAPITAL LETTER M WITH HOOK */
    6047             :         [2688+0x2F] = 0x0250,   /* U+2C6F: LATIN CAPITAL LETTER TURNED A */
    6048             :         [2688+0x30] = 0x0252,   /* U+2C70: LATIN CAPITAL LETTER TURNED ALPHA */
    6049             :         [2688+0x32] = 0x2C73,   /* U+2C72: LATIN CAPITAL LETTER W WITH HOOK */
    6050             :         [2688+0x35] = 0x2C76,   /* U+2C75: LATIN CAPITAL LETTER HALF H */
    6051             :         [2688+0x3E] = 0x023F,   /* U+2C7E: LATIN CAPITAL LETTER S WITH SWASH TAIL */
    6052             :         [2688+0x3F] = 0x0240,   /* U+2C7F: LATIN CAPITAL LETTER Z WITH SWASH TAIL */
    6053             :         [2240+0x32] = 2752 - 0x80,      /* 342 262 ... */
    6054             :         [2752+0x00] = 0x2C81,   /* U+2C80: COPTIC CAPITAL LETTER ALFA */
    6055             :         [2752+0x02] = 0x2C83,   /* U+2C82: COPTIC CAPITAL LETTER VIDA */
    6056             :         [2752+0x04] = 0x2C85,   /* U+2C84: COPTIC CAPITAL LETTER GAMMA */
    6057             :         [2752+0x06] = 0x2C87,   /* U+2C86: COPTIC CAPITAL LETTER DALDA */
    6058             :         [2752+0x08] = 0x2C89,   /* U+2C88: COPTIC CAPITAL LETTER EIE */
    6059             :         [2752+0x0A] = 0x2C8B,   /* U+2C8A: COPTIC CAPITAL LETTER SOU */
    6060             :         [2752+0x0C] = 0x2C8D,   /* U+2C8C: COPTIC CAPITAL LETTER ZATA */
    6061             :         [2752+0x0E] = 0x2C8F,   /* U+2C8E: COPTIC CAPITAL LETTER HATE */
    6062             :         [2752+0x10] = 0x2C91,   /* U+2C90: COPTIC CAPITAL LETTER THETHE */
    6063             :         [2752+0x12] = 0x2C93,   /* U+2C92: COPTIC CAPITAL LETTER IAUDA */
    6064             :         [2752+0x14] = 0x2C95,   /* U+2C94: COPTIC CAPITAL LETTER KAPA */
    6065             :         [2752+0x16] = 0x2C97,   /* U+2C96: COPTIC CAPITAL LETTER LAULA */
    6066             :         [2752+0x18] = 0x2C99,   /* U+2C98: COPTIC CAPITAL LETTER MI */
    6067             :         [2752+0x1A] = 0x2C9B,   /* U+2C9A: COPTIC CAPITAL LETTER NI */
    6068             :         [2752+0x1C] = 0x2C9D,   /* U+2C9C: COPTIC CAPITAL LETTER KSI */
    6069             :         [2752+0x1E] = 0x2C9F,   /* U+2C9E: COPTIC CAPITAL LETTER O */
    6070             :         [2752+0x20] = 0x2CA1,   /* U+2CA0: COPTIC CAPITAL LETTER PI */
    6071             :         [2752+0x22] = 0x2CA3,   /* U+2CA2: COPTIC CAPITAL LETTER RO */
    6072             :         [2752+0x24] = 0x2CA5,   /* U+2CA4: COPTIC CAPITAL LETTER SIMA */
    6073             :         [2752+0x26] = 0x2CA7,   /* U+2CA6: COPTIC CAPITAL LETTER TAU */
    6074             :         [2752+0x28] = 0x2CA9,   /* U+2CA8: COPTIC CAPITAL LETTER UA */
    6075             :         [2752+0x2A] = 0x2CAB,   /* U+2CAA: COPTIC CAPITAL LETTER FI */
    6076             :         [2752+0x2C] = 0x2CAD,   /* U+2CAC: COPTIC CAPITAL LETTER KHI */
    6077             :         [2752+0x2E] = 0x2CAF,   /* U+2CAE: COPTIC CAPITAL LETTER PSI */
    6078             :         [2752+0x30] = 0x2CB1,   /* U+2CB0: COPTIC CAPITAL LETTER OOU */
    6079             :         [2752+0x32] = 0x2CB3,   /* U+2CB2: COPTIC CAPITAL LETTER DIALECT-P ALEF */
    6080             :         [2752+0x34] = 0x2CB5,   /* U+2CB4: COPTIC CAPITAL LETTER OLD COPTIC AIN */
    6081             :         [2752+0x36] = 0x2CB7,   /* U+2CB6: COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */
    6082             :         [2752+0x38] = 0x2CB9,   /* U+2CB8: COPTIC CAPITAL LETTER DIALECT-P KAPA */
    6083             :         [2752+0x3A] = 0x2CBB,   /* U+2CBA: COPTIC CAPITAL LETTER DIALECT-P NI */
    6084             :         [2752+0x3C] = 0x2CBD,   /* U+2CBC: COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */
    6085             :         [2752+0x3E] = 0x2CBF,   /* U+2CBE: COPTIC CAPITAL LETTER OLD COPTIC OOU */
    6086             :         [2240+0x33] = 2816 - 0x80,      /* 342 263 ... */
    6087             :         [2816+0x00] = 0x2CC1,   /* U+2CC0: COPTIC CAPITAL LETTER SAMPI */
    6088             :         [2816+0x02] = 0x2CC3,   /* U+2CC2: COPTIC CAPITAL LETTER CROSSED SHEI */
    6089             :         [2816+0x04] = 0x2CC5,   /* U+2CC4: COPTIC CAPITAL LETTER OLD COPTIC SHEI */
    6090             :         [2816+0x06] = 0x2CC7,   /* U+2CC6: COPTIC CAPITAL LETTER OLD COPTIC ESH */
    6091             :         [2816+0x08] = 0x2CC9,   /* U+2CC8: COPTIC CAPITAL LETTER AKHMIMIC KHEI */
    6092             :         [2816+0x0A] = 0x2CCB,   /* U+2CCA: COPTIC CAPITAL LETTER DIALECT-P HORI */
    6093             :         [2816+0x0C] = 0x2CCD,   /* U+2CCC: COPTIC CAPITAL LETTER OLD COPTIC HORI */
    6094             :         [2816+0x0E] = 0x2CCF,   /* U+2CCE: COPTIC CAPITAL LETTER OLD COPTIC HA */
    6095             :         [2816+0x10] = 0x2CD1,   /* U+2CD0: COPTIC CAPITAL LETTER L-SHAPED HA */
    6096             :         [2816+0x12] = 0x2CD3,   /* U+2CD2: COPTIC CAPITAL LETTER OLD COPTIC HEI */
    6097             :         [2816+0x14] = 0x2CD5,   /* U+2CD4: COPTIC CAPITAL LETTER OLD COPTIC HAT */
    6098             :         [2816+0x16] = 0x2CD7,   /* U+2CD6: COPTIC CAPITAL LETTER OLD COPTIC GANGIA */
    6099             :         [2816+0x18] = 0x2CD9,   /* U+2CD8: COPTIC CAPITAL LETTER OLD COPTIC DJA */
    6100             :         [2816+0x1A] = 0x2CDB,   /* U+2CDA: COPTIC CAPITAL LETTER OLD COPTIC SHIMA */
    6101             :         [2816+0x1C] = 0x2CDD,   /* U+2CDC: COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */
    6102             :         [2816+0x1E] = 0x2CDF,   /* U+2CDE: COPTIC CAPITAL LETTER OLD NUBIAN NGI */
    6103             :         [2816+0x20] = 0x2CE1,   /* U+2CE0: COPTIC CAPITAL LETTER OLD NUBIAN NYI */
    6104             :         [2816+0x22] = 0x2CE3,   /* U+2CE2: COPTIC CAPITAL LETTER OLD NUBIAN WAU */
    6105             :         [2816+0x2B] = 0x2CEC,   /* U+2CEB: COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */
    6106             :         [2816+0x2D] = 0x2CEE,   /* U+2CED: COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */
    6107             :         [2816+0x32] = 0x2CF3,   /* U+2CF2: COPTIC CAPITAL LETTER BOHAIRIC KHEI */
    6108             :         [0xEA] = 2880 - 0x80,   /* 352 ... */
    6109             :         [2880+0x19] = 2944 - 0x80,      /* 352 231 ... */
    6110             :         [2944+0x00] = 0xA641,   /* U+A640: CYRILLIC CAPITAL LETTER ZEMLYA */
    6111             :         [2944+0x02] = 0xA643,   /* U+A642: CYRILLIC CAPITAL LETTER DZELO */
    6112             :         [2944+0x04] = 0xA645,   /* U+A644: CYRILLIC CAPITAL LETTER REVERSED DZE */
    6113             :         [2944+0x06] = 0xA647,   /* U+A646: CYRILLIC CAPITAL LETTER IOTA */
    6114             :         [2944+0x08] = 0xA649,   /* U+A648: CYRILLIC CAPITAL LETTER DJERV */
    6115             :         [2944+0x0A] = 0xA64B,   /* U+A64A: CYRILLIC CAPITAL LETTER MONOGRAPH UK */
    6116             :         [2944+0x0C] = 0xA64D,   /* U+A64C: CYRILLIC CAPITAL LETTER BROAD OMEGA */
    6117             :         [2944+0x0E] = 0xA64F,   /* U+A64E: CYRILLIC CAPITAL LETTER NEUTRAL YER */
    6118             :         [2944+0x10] = 0xA651,   /* U+A650: CYRILLIC CAPITAL LETTER YERU WITH BACK YER */
    6119             :         [2944+0x12] = 0xA653,   /* U+A652: CYRILLIC CAPITAL LETTER IOTIFIED YAT */
    6120             :         [2944+0x14] = 0xA655,   /* U+A654: CYRILLIC CAPITAL LETTER REVERSED YU */
    6121             :         [2944+0x16] = 0xA657,   /* U+A656: CYRILLIC CAPITAL LETTER IOTIFIED A */
    6122             :         [2944+0x18] = 0xA659,   /* U+A658: CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */
    6123             :         [2944+0x1A] = 0xA65B,   /* U+A65A: CYRILLIC CAPITAL LETTER BLENDED YUS */
    6124             :         [2944+0x1C] = 0xA65D,   /* U+A65C: CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */
    6125             :         [2944+0x1E] = 0xA65F,   /* U+A65E: CYRILLIC CAPITAL LETTER YN */
    6126             :         [2944+0x20] = 0xA661,   /* U+A660: CYRILLIC CAPITAL LETTER REVERSED TSE */
    6127             :         [2944+0x22] = 0xA663,   /* U+A662: CYRILLIC CAPITAL LETTER SOFT DE */
    6128             :         [2944+0x24] = 0xA665,   /* U+A664: CYRILLIC CAPITAL LETTER SOFT EL */
    6129             :         [2944+0x26] = 0xA667,   /* U+A666: CYRILLIC CAPITAL LETTER SOFT EM */
    6130             :         [2944+0x28] = 0xA669,   /* U+A668: CYRILLIC CAPITAL LETTER MONOCULAR O */
    6131             :         [2944+0x2A] = 0xA66B,   /* U+A66A: CYRILLIC CAPITAL LETTER BINOCULAR O */
    6132             :         [2944+0x2C] = 0xA66D,   /* U+A66C: CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */
    6133             :         [2880+0x1A] = 3008 - 0x80,      /* 352 232 ... */
    6134             :         [3008+0x00] = 0xA681,   /* U+A680: CYRILLIC CAPITAL LETTER DWE */
    6135             :         [3008+0x02] = 0xA683,   /* U+A682: CYRILLIC CAPITAL LETTER DZWE */
    6136             :         [3008+0x04] = 0xA685,   /* U+A684: CYRILLIC CAPITAL LETTER ZHWE */
    6137             :         [3008+0x06] = 0xA687,   /* U+A686: CYRILLIC CAPITAL LETTER CCHE */
    6138             :         [3008+0x08] = 0xA689,   /* U+A688: CYRILLIC CAPITAL LETTER DZZE */
    6139             :         [3008+0x0A] = 0xA68B,   /* U+A68A: CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */
    6140             :         [3008+0x0C] = 0xA68D,   /* U+A68C: CYRILLIC CAPITAL LETTER TWE */
    6141             :         [3008+0x0E] = 0xA68F,   /* U+A68E: CYRILLIC CAPITAL LETTER TSWE */
    6142             :         [3008+0x10] = 0xA691,   /* U+A690: CYRILLIC CAPITAL LETTER TSSE */
    6143             :         [3008+0x12] = 0xA693,   /* U+A692: CYRILLIC CAPITAL LETTER TCHE */
    6144             :         [3008+0x14] = 0xA695,   /* U+A694: CYRILLIC CAPITAL LETTER HWE */
    6145             :         [3008+0x16] = 0xA697,   /* U+A696: CYRILLIC CAPITAL LETTER SHWE */
    6146             :         [3008+0x18] = 0xA699,   /* U+A698: CYRILLIC CAPITAL LETTER DOUBLE O */
    6147             :         [3008+0x1A] = 0xA69B,   /* U+A69A: CYRILLIC CAPITAL LETTER CROSSED O */
    6148             :         [2880+0x1C] = 3072 - 0x80,      /* 352 234 ... */
    6149             :         [3072+0x22] = 0xA723,   /* U+A722: LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */
    6150             :         [3072+0x24] = 0xA725,   /* U+A724: LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */
    6151             :         [3072+0x26] = 0xA727,   /* U+A726: LATIN CAPITAL LETTER HENG */
    6152             :         [3072+0x28] = 0xA729,   /* U+A728: LATIN CAPITAL LETTER TZ */
    6153             :         [3072+0x2A] = 0xA72B,   /* U+A72A: LATIN CAPITAL LETTER TRESILLO */
    6154             :         [3072+0x2C] = 0xA72D,   /* U+A72C: LATIN CAPITAL LETTER CUATRILLO */
    6155             :         [3072+0x2E] = 0xA72F,   /* U+A72E: LATIN CAPITAL LETTER CUATRILLO WITH COMMA */
    6156             :         [3072+0x32] = 0xA733,   /* U+A732: LATIN CAPITAL LETTER AA */
    6157             :         [3072+0x34] = 0xA735,   /* U+A734: LATIN CAPITAL LETTER AO */
    6158             :         [3072+0x36] = 0xA737,   /* U+A736: LATIN CAPITAL LETTER AU */
    6159             :         [3072+0x38] = 0xA739,   /* U+A738: LATIN CAPITAL LETTER AV */
    6160             :         [3072+0x3A] = 0xA73B,   /* U+A73A: LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */
    6161             :         [3072+0x3C] = 0xA73D,   /* U+A73C: LATIN CAPITAL LETTER AY */
    6162             :         [3072+0x3E] = 0xA73F,   /* U+A73E: LATIN CAPITAL LETTER REVERSED C WITH DOT */
    6163             :         [2880+0x1D] = 3136 - 0x80,      /* 352 235 ... */
    6164             :         [3136+0x00] = 0xA741,   /* U+A740: LATIN CAPITAL LETTER K WITH STROKE */
    6165             :         [3136+0x02] = 0xA743,   /* U+A742: LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */
    6166             :         [3136+0x04] = 0xA745,   /* U+A744: LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */
    6167             :         [3136+0x06] = 0xA747,   /* U+A746: LATIN CAPITAL LETTER BROKEN L */
    6168             :         [3136+0x08] = 0xA749,   /* U+A748: LATIN CAPITAL LETTER L WITH HIGH STROKE */
    6169             :         [3136+0x0A] = 0xA74B,   /* U+A74A: LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */
    6170             :         [3136+0x0C] = 0xA74D,   /* U+A74C: LATIN CAPITAL LETTER O WITH LOOP */
    6171             :         [3136+0x0E] = 0xA74F,   /* U+A74E: LATIN CAPITAL LETTER OO */
    6172             :         [3136+0x10] = 0xA751,   /* U+A750: LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */
    6173             :         [3136+0x12] = 0xA753,   /* U+A752: LATIN CAPITAL LETTER P WITH FLOURISH */
    6174             :         [3136+0x14] = 0xA755,   /* U+A754: LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */
    6175             :         [3136+0x16] = 0xA757,   /* U+A756: LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */
    6176             :         [3136+0x18] = 0xA759,   /* U+A758: LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */
    6177             :         [3136+0x1A] = 0xA75B,   /* U+A75A: LATIN CAPITAL LETTER R ROTUNDA */
    6178             :         [3136+0x1C] = 0xA75D,   /* U+A75C: LATIN CAPITAL LETTER RUM ROTUNDA */
    6179             :         [3136+0x1E] = 0xA75F,   /* U+A75E: LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */
    6180             :         [3136+0x20] = 0xA761,   /* U+A760: LATIN CAPITAL LETTER VY */
    6181             :         [3136+0x22] = 0xA763,   /* U+A762: LATIN CAPITAL LETTER VISIGOTHIC Z */
    6182             :         [3136+0x24] = 0xA765,   /* U+A764: LATIN CAPITAL LETTER THORN WITH STROKE */
    6183             :         [3136+0x26] = 0xA767,   /* U+A766: LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */
    6184             :         [3136+0x28] = 0xA769,   /* U+A768: LATIN CAPITAL LETTER VEND */
    6185             :         [3136+0x2A] = 0xA76B,   /* U+A76A: LATIN CAPITAL LETTER ET */
    6186             :         [3136+0x2C] = 0xA76D,   /* U+A76C: LATIN CAPITAL LETTER IS */
    6187             :         [3136+0x2E] = 0xA76F,   /* U+A76E: LATIN CAPITAL LETTER CON */
    6188             :         [3136+0x39] = 0xA77A,   /* U+A779: LATIN CAPITAL LETTER INSULAR D */
    6189             :         [3136+0x3B] = 0xA77C,   /* U+A77B: LATIN CAPITAL LETTER INSULAR F */
    6190             :         [3136+0x3D] = 0x1D79,   /* U+A77D: LATIN CAPITAL LETTER INSULAR G */
    6191             :         [3136+0x3E] = 0xA77F,   /* U+A77E: LATIN CAPITAL LETTER TURNED INSULAR G */
    6192             :         [2880+0x1E] = 3200 - 0x80,      /* 352 236 ... */
    6193             :         [3200+0x00] = 0xA781,   /* U+A780: LATIN CAPITAL LETTER TURNED L */
    6194             :         [3200+0x02] = 0xA783,   /* U+A782: LATIN CAPITAL LETTER INSULAR R */
    6195             :         [3200+0x04] = 0xA785,   /* U+A784: LATIN CAPITAL LETTER INSULAR S */
    6196             :         [3200+0x06] = 0xA787,   /* U+A786: LATIN CAPITAL LETTER INSULAR T */
    6197             :         [3200+0x0B] = 0xA78C,   /* U+A78B: LATIN CAPITAL LETTER SALTILLO */
    6198             :         [3200+0x0D] = 0x0265,   /* U+A78D: LATIN CAPITAL LETTER TURNED H */
    6199             :         [3200+0x10] = 0xA791,   /* U+A790: LATIN CAPITAL LETTER N WITH DESCENDER */
    6200             :         [3200+0x12] = 0xA793,   /* U+A792: LATIN CAPITAL LETTER C WITH BAR */
    6201             :         [3200+0x16] = 0xA797,   /* U+A796: LATIN CAPITAL LETTER B WITH FLOURISH */
    6202             :         [3200+0x18] = 0xA799,   /* U+A798: LATIN CAPITAL LETTER F WITH STROKE */
    6203             :         [3200+0x1A] = 0xA79B,   /* U+A79A: LATIN CAPITAL LETTER VOLAPUK AE */
    6204             :         [3200+0x1C] = 0xA79D,   /* U+A79C: LATIN CAPITAL LETTER VOLAPUK OE */
    6205             :         [3200+0x1E] = 0xA79F,   /* U+A79E: LATIN CAPITAL LETTER VOLAPUK UE */
    6206             :         [3200+0x20] = 0xA7A1,   /* U+A7A0: LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */
    6207             :         [3200+0x22] = 0xA7A3,   /* U+A7A2: LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */
    6208             :         [3200+0x24] = 0xA7A5,   /* U+A7A4: LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */
    6209             :         [3200+0x26] = 0xA7A7,   /* U+A7A6: LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */
    6210             :         [3200+0x28] = 0xA7A9,   /* U+A7A8: LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */
    6211             :         [3200+0x2A] = 0x0266,   /* U+A7AA: LATIN CAPITAL LETTER H WITH HOOK */
    6212             :         [3200+0x2B] = 0x025C,   /* U+A7AB: LATIN CAPITAL LETTER REVERSED OPEN E */
    6213             :         [3200+0x2C] = 0x0261,   /* U+A7AC: LATIN CAPITAL LETTER SCRIPT G */
    6214             :         [3200+0x2D] = 0x026C,   /* U+A7AD: LATIN CAPITAL LETTER L WITH BELT */
    6215             :         [3200+0x2E] = 0x026A,   /* U+A7AE: LATIN CAPITAL LETTER SMALL CAPITAL I */
    6216             :         [3200+0x30] = 0x029E,   /* U+A7B0: LATIN CAPITAL LETTER TURNED K */
    6217             :         [3200+0x31] = 0x0287,   /* U+A7B1: LATIN CAPITAL LETTER TURNED T */
    6218             :         [3200+0x32] = 0x029D,   /* U+A7B2: LATIN CAPITAL LETTER J WITH CROSSED-TAIL */
    6219             :         [3200+0x33] = 0xAB53,   /* U+A7B3: LATIN CAPITAL LETTER CHI */
    6220             :         [3200+0x34] = 0xA7B5,   /* U+A7B4: LATIN CAPITAL LETTER BETA */
    6221             :         [3200+0x36] = 0xA7B7,   /* U+A7B6: LATIN CAPITAL LETTER OMEGA */
    6222             :         [3200+0x38] = 0xA7B9,   /* U+A7B8: LATIN CAPITAL LETTER U WITH STROKE */
    6223             :         [3200+0x3A] = 0xA7BB,   /* U+A7BA: LATIN CAPITAL LETTER GLOTTAL A */
    6224             :         [3200+0x3C] = 0xA7BD,   /* U+A7BC: LATIN CAPITAL LETTER GLOTTAL I */
    6225             :         [3200+0x3E] = 0xA7BF,   /* U+A7BE: LATIN CAPITAL LETTER GLOTTAL U */
    6226             :         [2880+0x1F] = 3264 - 0x80,      /* 352 237 ... */
    6227             :         [3264+0x00] = 0xA7C1,   /* U+A7C0: LATIN CAPITAL LETTER OLD POLISH O */
    6228             :         [3264+0x02] = 0xA7C3,   /* U+A7C2: LATIN CAPITAL LETTER ANGLICANA W */
    6229             :         [3264+0x04] = 0xA794,   /* U+A7C4: LATIN CAPITAL LETTER C WITH PALATAL HOOK */
    6230             :         [3264+0x05] = 0x0282,   /* U+A7C5: LATIN CAPITAL LETTER S WITH HOOK */
    6231             :         [3264+0x06] = 0x1D8E,   /* U+A7C6: LATIN CAPITAL LETTER Z WITH PALATAL HOOK */
    6232             :         [3264+0x07] = 0xA7C8,   /* U+A7C7: LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */
    6233             :         [3264+0x09] = 0xA7CA,   /* U+A7C9: LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */
    6234             :         [3264+0x10] = 0xA7D1,   /* U+A7D0: LATIN CAPITAL LETTER CLOSED INSULAR G */
    6235             :         [3264+0x16] = 0xA7D7,   /* U+A7D6: LATIN CAPITAL LETTER MIDDLE SCOTS S */
    6236             :         [3264+0x18] = 0xA7D9,   /* U+A7D8: LATIN CAPITAL LETTER SIGMOID S */
    6237             :         [3264+0x35] = 0xA7F6,   /* U+A7F5: LATIN CAPITAL LETTER REVERSED HALF H */
    6238             :         [2880+0x2D] = 3328 - 0x80,      /* 352 255 ... */
    6239             :         [3328+0x30] = 0x13A0,   /* U+AB70: CHEROKEE SMALL LETTER A */
    6240             :         [3328+0x31] = 0x13A1,   /* U+AB71: CHEROKEE SMALL LETTER E */
    6241             :         [3328+0x32] = 0x13A2,   /* U+AB72: CHEROKEE SMALL LETTER I */
    6242             :         [3328+0x33] = 0x13A3,   /* U+AB73: CHEROKEE SMALL LETTER O */
    6243             :         [3328+0x34] = 0x13A4,   /* U+AB74: CHEROKEE SMALL LETTER U */
    6244             :         [3328+0x35] = 0x13A5,   /* U+AB75: CHEROKEE SMALL LETTER V */
    6245             :         [3328+0x36] = 0x13A6,   /* U+AB76: CHEROKEE SMALL LETTER GA */
    6246             :         [3328+0x37] = 0x13A7,   /* U+AB77: CHEROKEE SMALL LETTER KA */
    6247             :         [3328+0x38] = 0x13A8,   /* U+AB78: CHEROKEE SMALL LETTER GE */
    6248             :         [3328+0x39] = 0x13A9,   /* U+AB79: CHEROKEE SMALL LETTER GI */
    6249             :         [3328+0x3A] = 0x13AA,   /* U+AB7A: CHEROKEE SMALL LETTER GO */
    6250             :         [3328+0x3B] = 0x13AB,   /* U+AB7B: CHEROKEE SMALL LETTER GU */
    6251             :         [3328+0x3C] = 0x13AC,   /* U+AB7C: CHEROKEE SMALL LETTER GV */
    6252             :         [3328+0x3D] = 0x13AD,   /* U+AB7D: CHEROKEE SMALL LETTER HA */
    6253             :         [3328+0x3E] = 0x13AE,   /* U+AB7E: CHEROKEE SMALL LETTER HE */
    6254             :         [3328+0x3F] = 0x13AF,   /* U+AB7F: CHEROKEE SMALL LETTER HI */
    6255             :         [2880+0x2E] = 3392 - 0x80,      /* 352 256 ... */
    6256             :         [3392+0x00] = 0x13B0,   /* U+AB80: CHEROKEE SMALL LETTER HO */
    6257             :         [3392+0x01] = 0x13B1,   /* U+AB81: CHEROKEE SMALL LETTER HU */
    6258             :         [3392+0x02] = 0x13B2,   /* U+AB82: CHEROKEE SMALL LETTER HV */
    6259             :         [3392+0x03] = 0x13B3,   /* U+AB83: CHEROKEE SMALL LETTER LA */
    6260             :         [3392+0x04] = 0x13B4,   /* U+AB84: CHEROKEE SMALL LETTER LE */
    6261             :         [3392+0x05] = 0x13B5,   /* U+AB85: CHEROKEE SMALL LETTER LI */
    6262             :         [3392+0x06] = 0x13B6,   /* U+AB86: CHEROKEE SMALL LETTER LO */
    6263             :         [3392+0x07] = 0x13B7,   /* U+AB87: CHEROKEE SMALL LETTER LU */
    6264             :         [3392+0x08] = 0x13B8,   /* U+AB88: CHEROKEE SMALL LETTER LV */
    6265             :         [3392+0x09] = 0x13B9,   /* U+AB89: CHEROKEE SMALL LETTER MA */
    6266             :         [3392+0x0A] = 0x13BA,   /* U+AB8A: CHEROKEE SMALL LETTER ME */
    6267             :         [3392+0x0B] = 0x13BB,   /* U+AB8B: CHEROKEE SMALL LETTER MI */
    6268             :         [3392+0x0C] = 0x13BC,   /* U+AB8C: CHEROKEE SMALL LETTER MO */
    6269             :         [3392+0x0D] = 0x13BD,   /* U+AB8D: CHEROKEE SMALL LETTER MU */
    6270             :         [3392+0x0E] = 0x13BE,   /* U+AB8E: CHEROKEE SMALL LETTER NA */
    6271             :         [3392+0x0F] = 0x13BF,   /* U+AB8F: CHEROKEE SMALL LETTER HNA */
    6272             :         [3392+0x10] = 0x13C0,   /* U+AB90: CHEROKEE SMALL LETTER NAH */
    6273             :         [3392+0x11] = 0x13C1,   /* U+AB91: CHEROKEE SMALL LETTER NE */
    6274             :         [3392+0x12] = 0x13C2,   /* U+AB92: CHEROKEE SMALL LETTER NI */
    6275             :         [3392+0x13] = 0x13C3,   /* U+AB93: CHEROKEE SMALL LETTER NO */
    6276             :         [3392+0x14] = 0x13C4,   /* U+AB94: CHEROKEE SMALL LETTER NU */
    6277             :         [3392+0x15] = 0x13C5,   /* U+AB95: CHEROKEE SMALL LETTER NV */
    6278             :         [3392+0x16] = 0x13C6,   /* U+AB96: CHEROKEE SMALL LETTER QUA */
    6279             :         [3392+0x17] = 0x13C7,   /* U+AB97: CHEROKEE SMALL LETTER QUE */
    6280             :         [3392+0x18] = 0x13C8,   /* U+AB98: CHEROKEE SMALL LETTER QUI */
    6281             :         [3392+0x19] = 0x13C9,   /* U+AB99: CHEROKEE SMALL LETTER QUO */
    6282             :         [3392+0x1A] = 0x13CA,   /* U+AB9A: CHEROKEE SMALL LETTER QUU */
    6283             :         [3392+0x1B] = 0x13CB,   /* U+AB9B: CHEROKEE SMALL LETTER QUV */
    6284             :         [3392+0x1C] = 0x13CC,   /* U+AB9C: CHEROKEE SMALL LETTER SA */
    6285             :         [3392+0x1D] = 0x13CD,   /* U+AB9D: CHEROKEE SMALL LETTER S */
    6286             :         [3392+0x1E] = 0x13CE,   /* U+AB9E: CHEROKEE SMALL LETTER SE */
    6287             :         [3392+0x1F] = 0x13CF,   /* U+AB9F: CHEROKEE SMALL LETTER SI */
    6288             :         [3392+0x20] = 0x13D0,   /* U+ABA0: CHEROKEE SMALL LETTER SO */
    6289             :         [3392+0x21] = 0x13D1,   /* U+ABA1: CHEROKEE SMALL LETTER SU */
    6290             :         [3392+0x22] = 0x13D2,   /* U+ABA2: CHEROKEE SMALL LETTER SV */
    6291             :         [3392+0x23] = 0x13D3,   /* U+ABA3: CHEROKEE SMALL LETTER DA */
    6292             :         [3392+0x24] = 0x13D4,   /* U+ABA4: CHEROKEE SMALL LETTER TA */
    6293             :         [3392+0x25] = 0x13D5,   /* U+ABA5: CHEROKEE SMALL LETTER DE */
    6294             :         [3392+0x26] = 0x13D6,   /* U+ABA6: CHEROKEE SMALL LETTER TE */
    6295             :         [3392+0x27] = 0x13D7,   /* U+ABA7: CHEROKEE SMALL LETTER DI */
    6296             :         [3392+0x28] = 0x13D8,   /* U+ABA8: CHEROKEE SMALL LETTER TI */
    6297             :         [3392+0x29] = 0x13D9,   /* U+ABA9: CHEROKEE SMALL LETTER DO */
    6298             :         [3392+0x2A] = 0x13DA,   /* U+ABAA: CHEROKEE SMALL LETTER DU */
    6299             :         [3392+0x2B] = 0x13DB,   /* U+ABAB: CHEROKEE SMALL LETTER DV */
    6300             :         [3392+0x2C] = 0x13DC,   /* U+ABAC: CHEROKEE SMALL LETTER DLA */
    6301             :         [3392+0x2D] = 0x13DD,   /* U+ABAD: CHEROKEE SMALL LETTER TLA */
    6302             :         [3392+0x2E] = 0x13DE,   /* U+ABAE: CHEROKEE SMALL LETTER TLE */
    6303             :         [3392+0x2F] = 0x13DF,   /* U+ABAF: CHEROKEE SMALL LETTER TLI */
    6304             :         [3392+0x30] = 0x13E0,   /* U+ABB0: CHEROKEE SMALL LETTER TLO */
    6305             :         [3392+0x31] = 0x13E1,   /* U+ABB1: CHEROKEE SMALL LETTER TLU */
    6306             :         [3392+0x32] = 0x13E2,   /* U+ABB2: CHEROKEE SMALL LETTER TLV */
    6307             :         [3392+0x33] = 0x13E3,   /* U+ABB3: CHEROKEE SMALL LETTER TSA */
    6308             :         [3392+0x34] = 0x13E4,   /* U+ABB4: CHEROKEE SMALL LETTER TSE */
    6309             :         [3392+0x35] = 0x13E5,   /* U+ABB5: CHEROKEE SMALL LETTER TSI */
    6310             :         [3392+0x36] = 0x13E6,   /* U+ABB6: CHEROKEE SMALL LETTER TSO */
    6311             :         [3392+0x37] = 0x13E7,   /* U+ABB7: CHEROKEE SMALL LETTER TSU */
    6312             :         [3392+0x38] = 0x13E8,   /* U+ABB8: CHEROKEE SMALL LETTER TSV */
    6313             :         [3392+0x39] = 0x13E9,   /* U+ABB9: CHEROKEE SMALL LETTER WA */
    6314             :         [3392+0x3A] = 0x13EA,   /* U+ABBA: CHEROKEE SMALL LETTER WE */
    6315             :         [3392+0x3B] = 0x13EB,   /* U+ABBB: CHEROKEE SMALL LETTER WI */
    6316             :         [3392+0x3C] = 0x13EC,   /* U+ABBC: CHEROKEE SMALL LETTER WO */
    6317             :         [3392+0x3D] = 0x13ED,   /* U+ABBD: CHEROKEE SMALL LETTER WU */
    6318             :         [3392+0x3E] = 0x13EE,   /* U+ABBE: CHEROKEE SMALL LETTER WV */
    6319             :         [3392+0x3F] = 0x13EF,   /* U+ABBF: CHEROKEE SMALL LETTER YA */
    6320             :         [0xEF] = 3456 - 0x80,   /* 357 ... */
    6321             :         [3456+0x2C] = 3520 - 0x80,      /* 357 254 ... */
    6322             :         [3520+0x00] = -63,      /* U+FB00: LATIN SMALL LIGATURE FF */
    6323             :         [3520+0x01] = -64,      /* U+FB01: LATIN SMALL LIGATURE FI */
    6324             :         [3520+0x02] = -65,      /* U+FB02: LATIN SMALL LIGATURE FL */
    6325             :         [3520+0x03] = -66,      /* U+FB03: LATIN SMALL LIGATURE FFI */
    6326             :         [3520+0x04] = -67,      /* U+FB04: LATIN SMALL LIGATURE FFL */
    6327             :         [3520+0x05] = -68,      /* U+FB05: LATIN SMALL LIGATURE LONG S T */
    6328             :         [3520+0x06] = -68,      /* U+FB06: LATIN SMALL LIGATURE ST */
    6329             :         [3520+0x13] = -69,      /* U+FB13: ARMENIAN SMALL LIGATURE MEN NOW */
    6330             :         [3520+0x14] = -70,      /* U+FB14: ARMENIAN SMALL LIGATURE MEN ECH */
    6331             :         [3520+0x15] = -71,      /* U+FB15: ARMENIAN SMALL LIGATURE MEN INI */
    6332             :         [3520+0x16] = -72,      /* U+FB16: ARMENIAN SMALL LIGATURE VEW NOW */
    6333             :         [3520+0x17] = -73,      /* U+FB17: ARMENIAN SMALL LIGATURE MEN XEH */
    6334             :         [3456+0x3C] = 3584 - 0x80,      /* 357 274 ... */
    6335             :         [3584+0x21] = 0xFF41,   /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
    6336             :         [3584+0x22] = 0xFF42,   /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
    6337             :         [3584+0x23] = 0xFF43,   /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
    6338             :         [3584+0x24] = 0xFF44,   /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
    6339             :         [3584+0x25] = 0xFF45,   /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
    6340             :         [3584+0x26] = 0xFF46,   /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
    6341             :         [3584+0x27] = 0xFF47,   /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
    6342             :         [3584+0x28] = 0xFF48,   /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
    6343             :         [3584+0x29] = 0xFF49,   /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
    6344             :         [3584+0x2A] = 0xFF4A,   /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
    6345             :         [3584+0x2B] = 0xFF4B,   /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
    6346             :         [3584+0x2C] = 0xFF4C,   /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
    6347             :         [3584+0x2D] = 0xFF4D,   /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
    6348             :         [3584+0x2E] = 0xFF4E,   /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
    6349             :         [3584+0x2F] = 0xFF4F,   /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
    6350             :         [3584+0x30] = 0xFF50,   /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
    6351             :         [3584+0x31] = 0xFF51,   /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
    6352             :         [3584+0x32] = 0xFF52,   /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
    6353             :         [3584+0x33] = 0xFF53,   /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
    6354             :         [3584+0x34] = 0xFF54,   /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
    6355             :         [3584+0x35] = 0xFF55,   /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
    6356             :         [3584+0x36] = 0xFF56,   /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
    6357             :         [3584+0x37] = 0xFF57,   /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
    6358             :         [3584+0x38] = 0xFF58,   /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
    6359             :         [3584+0x39] = 0xFF59,   /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
    6360             :         [3584+0x3A] = 0xFF5A,   /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
    6361             :         [0xF0] = 3648 - 0x80,   /* 360 ... */
    6362             :         [3648+0x10] = 3712 - 0x80,      /* 360 220 ... */
    6363             :         [3712+0x10] = 3776 - 0x80,      /* 360 220 220 ... */
    6364             :         [3776+0x00] = 0x10428,  /* U+10400: DESERET CAPITAL LETTER LONG I */
    6365             :         [3776+0x01] = 0x10429,  /* U+10401: DESERET CAPITAL LETTER LONG E */
    6366             :         [3776+0x02] = 0x1042A,  /* U+10402: DESERET CAPITAL LETTER LONG A */
    6367             :         [3776+0x03] = 0x1042B,  /* U+10403: DESERET CAPITAL LETTER LONG AH */
    6368             :         [3776+0x04] = 0x1042C,  /* U+10404: DESERET CAPITAL LETTER LONG O */
    6369             :         [3776+0x05] = 0x1042D,  /* U+10405: DESERET CAPITAL LETTER LONG OO */
    6370             :         [3776+0x06] = 0x1042E,  /* U+10406: DESERET CAPITAL LETTER SHORT I */
    6371             :         [3776+0x07] = 0x1042F,  /* U+10407: DESERET CAPITAL LETTER SHORT E */
    6372             :         [3776+0x08] = 0x10430,  /* U+10408: DESERET CAPITAL LETTER SHORT A */
    6373             :         [3776+0x09] = 0x10431,  /* U+10409: DESERET CAPITAL LETTER SHORT AH */
    6374             :         [3776+0x0A] = 0x10432,  /* U+1040A: DESERET CAPITAL LETTER SHORT O */
    6375             :         [3776+0x0B] = 0x10433,  /* U+1040B: DESERET CAPITAL LETTER SHORT OO */
    6376             :         [3776+0x0C] = 0x10434,  /* U+1040C: DESERET CAPITAL LETTER AY */
    6377             :         [3776+0x0D] = 0x10435,  /* U+1040D: DESERET CAPITAL LETTER OW */
    6378             :         [3776+0x0E] = 0x10436,  /* U+1040E: DESERET CAPITAL LETTER WU */
    6379             :         [3776+0x0F] = 0x10437,  /* U+1040F: DESERET CAPITAL LETTER YEE */
    6380             :         [3776+0x10] = 0x10438,  /* U+10410: DESERET CAPITAL LETTER H */
    6381             :         [3776+0x11] = 0x10439,  /* U+10411: DESERET CAPITAL LETTER PEE */
    6382             :         [3776+0x12] = 0x1043A,  /* U+10412: DESERET CAPITAL LETTER BEE */
    6383             :         [3776+0x13] = 0x1043B,  /* U+10413: DESERET CAPITAL LETTER TEE */
    6384             :         [3776+0x14] = 0x1043C,  /* U+10414: DESERET CAPITAL LETTER DEE */
    6385             :         [3776+0x15] = 0x1043D,  /* U+10415: DESERET CAPITAL LETTER CHEE */
    6386             :         [3776+0x16] = 0x1043E,  /* U+10416: DESERET CAPITAL LETTER JEE */
    6387             :         [3776+0x17] = 0x1043F,  /* U+10417: DESERET CAPITAL LETTER KAY */
    6388             :         [3776+0x18] = 0x10440,  /* U+10418: DESERET CAPITAL LETTER GAY */
    6389             :         [3776+0x19] = 0x10441,  /* U+10419: DESERET CAPITAL LETTER EF */
    6390             :         [3776+0x1A] = 0x10442,  /* U+1041A: DESERET CAPITAL LETTER VEE */
    6391             :         [3776+0x1B] = 0x10443,  /* U+1041B: DESERET CAPITAL LETTER ETH */
    6392             :         [3776+0x1C] = 0x10444,  /* U+1041C: DESERET CAPITAL LETTER THEE */
    6393             :         [3776+0x1D] = 0x10445,  /* U+1041D: DESERET CAPITAL LETTER ES */
    6394             :         [3776+0x1E] = 0x10446,  /* U+1041E: DESERET CAPITAL LETTER ZEE */
    6395             :         [3776+0x1F] = 0x10447,  /* U+1041F: DESERET CAPITAL LETTER ESH */
    6396             :         [3776+0x20] = 0x10448,  /* U+10420: DESERET CAPITAL LETTER ZHEE */
    6397             :         [3776+0x21] = 0x10449,  /* U+10421: DESERET CAPITAL LETTER ER */
    6398             :         [3776+0x22] = 0x1044A,  /* U+10422: DESERET CAPITAL LETTER EL */
    6399             :         [3776+0x23] = 0x1044B,  /* U+10423: DESERET CAPITAL LETTER EM */
    6400             :         [3776+0x24] = 0x1044C,  /* U+10424: DESERET CAPITAL LETTER EN */
    6401             :         [3776+0x25] = 0x1044D,  /* U+10425: DESERET CAPITAL LETTER ENG */
    6402             :         [3776+0x26] = 0x1044E,  /* U+10426: DESERET CAPITAL LETTER OI */
    6403             :         [3776+0x27] = 0x1044F,  /* U+10427: DESERET CAPITAL LETTER EW */
    6404             :         [3712+0x12] = 3840 - 0x80,      /* 360 220 222 ... */
    6405             :         [3840+0x30] = 0x104D8,  /* U+104B0: OSAGE CAPITAL LETTER A */
    6406             :         [3840+0x31] = 0x104D9,  /* U+104B1: OSAGE CAPITAL LETTER AI */
    6407             :         [3840+0x32] = 0x104DA,  /* U+104B2: OSAGE CAPITAL LETTER AIN */
    6408             :         [3840+0x33] = 0x104DB,  /* U+104B3: OSAGE CAPITAL LETTER AH */
    6409             :         [3840+0x34] = 0x104DC,  /* U+104B4: OSAGE CAPITAL LETTER BRA */
    6410             :         [3840+0x35] = 0x104DD,  /* U+104B5: OSAGE CAPITAL LETTER CHA */
    6411             :         [3840+0x36] = 0x104DE,  /* U+104B6: OSAGE CAPITAL LETTER EHCHA */
    6412             :         [3840+0x37] = 0x104DF,  /* U+104B7: OSAGE CAPITAL LETTER E */
    6413             :         [3840+0x38] = 0x104E0,  /* U+104B8: OSAGE CAPITAL LETTER EIN */
    6414             :         [3840+0x39] = 0x104E1,  /* U+104B9: OSAGE CAPITAL LETTER HA */
    6415             :         [3840+0x3A] = 0x104E2,  /* U+104BA: OSAGE CAPITAL LETTER HYA */
    6416             :         [3840+0x3B] = 0x104E3,  /* U+104BB: OSAGE CAPITAL LETTER I */
    6417             :         [3840+0x3C] = 0x104E4,  /* U+104BC: OSAGE CAPITAL LETTER KA */
    6418             :         [3840+0x3D] = 0x104E5,  /* U+104BD: OSAGE CAPITAL LETTER EHKA */
    6419             :         [3840+0x3E] = 0x104E6,  /* U+104BE: OSAGE CAPITAL LETTER KYA */
    6420             :         [3840+0x3F] = 0x104E7,  /* U+104BF: OSAGE CAPITAL LETTER LA */
    6421             :         [3712+0x13] = 3904 - 0x80,      /* 360 220 223 ... */
    6422             :         [3904+0x00] = 0x104E8,  /* U+104C0: OSAGE CAPITAL LETTER MA */
    6423             :         [3904+0x01] = 0x104E9,  /* U+104C1: OSAGE CAPITAL LETTER NA */
    6424             :         [3904+0x02] = 0x104EA,  /* U+104C2: OSAGE CAPITAL LETTER O */
    6425             :         [3904+0x03] = 0x104EB,  /* U+104C3: OSAGE CAPITAL LETTER OIN */
    6426             :         [3904+0x04] = 0x104EC,  /* U+104C4: OSAGE CAPITAL LETTER PA */
    6427             :         [3904+0x05] = 0x104ED,  /* U+104C5: OSAGE CAPITAL LETTER EHPA */
    6428             :         [3904+0x06] = 0x104EE,  /* U+104C6: OSAGE CAPITAL LETTER SA */
    6429             :         [3904+0x07] = 0x104EF,  /* U+104C7: OSAGE CAPITAL LETTER SHA */
    6430             :         [3904+0x08] = 0x104F0,  /* U+104C8: OSAGE CAPITAL LETTER TA */
    6431             :         [3904+0x09] = 0x104F1,  /* U+104C9: OSAGE CAPITAL LETTER EHTA */
    6432             :         [3904+0x0A] = 0x104F2,  /* U+104CA: OSAGE CAPITAL LETTER TSA */
    6433             :         [3904+0x0B] = 0x104F3,  /* U+104CB: OSAGE CAPITAL LETTER EHTSA */
    6434             :         [3904+0x0C] = 0x104F4,  /* U+104CC: OSAGE CAPITAL LETTER TSHA */
    6435             :         [3904+0x0D] = 0x104F5,  /* U+104CD: OSAGE CAPITAL LETTER DHA */
    6436             :         [3904+0x0E] = 0x104F6,  /* U+104CE: OSAGE CAPITAL LETTER U */
    6437             :         [3904+0x0F] = 0x104F7,  /* U+104CF: OSAGE CAPITAL LETTER WA */
    6438             :         [3904+0x10] = 0x104F8,  /* U+104D0: OSAGE CAPITAL LETTER KHA */
    6439             :         [3904+0x11] = 0x104F9,  /* U+104D1: OSAGE CAPITAL LETTER GHA */
    6440             :         [3904+0x12] = 0x104FA,  /* U+104D2: OSAGE CAPITAL LETTER ZA */
    6441             :         [3904+0x13] = 0x104FB,  /* U+104D3: OSAGE CAPITAL LETTER ZHA */
    6442             :         [3712+0x15] = 3968 - 0x80,      /* 360 220 225 ... */
    6443             :         [3968+0x30] = 0x10597,  /* U+10570: VITHKUQI CAPITAL LETTER A */
    6444             :         [3968+0x31] = 0x10598,  /* U+10571: VITHKUQI CAPITAL LETTER BBE */
    6445             :         [3968+0x32] = 0x10599,  /* U+10572: VITHKUQI CAPITAL LETTER BE */
    6446             :         [3968+0x33] = 0x1059A,  /* U+10573: VITHKUQI CAPITAL LETTER CE */
    6447             :         [3968+0x34] = 0x1059B,  /* U+10574: VITHKUQI CAPITAL LETTER CHE */
    6448             :         [3968+0x35] = 0x1059C,  /* U+10575: VITHKUQI CAPITAL LETTER DE */
    6449             :         [3968+0x36] = 0x1059D,  /* U+10576: VITHKUQI CAPITAL LETTER DHE */
    6450             :         [3968+0x37] = 0x1059E,  /* U+10577: VITHKUQI CAPITAL LETTER EI */
    6451             :         [3968+0x38] = 0x1059F,  /* U+10578: VITHKUQI CAPITAL LETTER E */
    6452             :         [3968+0x39] = 0x105A0,  /* U+10579: VITHKUQI CAPITAL LETTER FE */
    6453             :         [3968+0x3A] = 0x105A1,  /* U+1057A: VITHKUQI CAPITAL LETTER GA */
    6454             :         [3968+0x3C] = 0x105A3,  /* U+1057C: VITHKUQI CAPITAL LETTER HA */
    6455             :         [3968+0x3D] = 0x105A4,  /* U+1057D: VITHKUQI CAPITAL LETTER HHA */
    6456             :         [3968+0x3E] = 0x105A5,  /* U+1057E: VITHKUQI CAPITAL LETTER I */
    6457             :         [3968+0x3F] = 0x105A6,  /* U+1057F: VITHKUQI CAPITAL LETTER IJE */
    6458             :         [3712+0x16] = 4032 - 0x80,      /* 360 220 226 ... */
    6459             :         [4032+0x00] = 0x105A7,  /* U+10580: VITHKUQI CAPITAL LETTER JE */
    6460             :         [4032+0x01] = 0x105A8,  /* U+10581: VITHKUQI CAPITAL LETTER KA */
    6461             :         [4032+0x02] = 0x105A9,  /* U+10582: VITHKUQI CAPITAL LETTER LA */
    6462             :         [4032+0x03] = 0x105AA,  /* U+10583: VITHKUQI CAPITAL LETTER LLA */
    6463             :         [4032+0x04] = 0x105AB,  /* U+10584: VITHKUQI CAPITAL LETTER ME */
    6464             :         [4032+0x05] = 0x105AC,  /* U+10585: VITHKUQI CAPITAL LETTER NE */
    6465             :         [4032+0x06] = 0x105AD,  /* U+10586: VITHKUQI CAPITAL LETTER NJE */
    6466             :         [4032+0x07] = 0x105AE,  /* U+10587: VITHKUQI CAPITAL LETTER O */
    6467             :         [4032+0x08] = 0x105AF,  /* U+10588: VITHKUQI CAPITAL LETTER PE */
    6468             :         [4032+0x09] = 0x105B0,  /* U+10589: VITHKUQI CAPITAL LETTER QA */
    6469             :         [4032+0x0A] = 0x105B1,  /* U+1058A: VITHKUQI CAPITAL LETTER RE */
    6470             :         [4032+0x0C] = 0x105B3,  /* U+1058C: VITHKUQI CAPITAL LETTER SE */
    6471             :         [4032+0x0D] = 0x105B4,  /* U+1058D: VITHKUQI CAPITAL LETTER SHE */
    6472             :         [4032+0x0E] = 0x105B5,  /* U+1058E: VITHKUQI CAPITAL LETTER TE */
    6473             :         [4032+0x0F] = 0x105B6,  /* U+1058F: VITHKUQI CAPITAL LETTER THE */
    6474             :         [4032+0x10] = 0x105B7,  /* U+10590: VITHKUQI CAPITAL LETTER U */
    6475             :         [4032+0x11] = 0x105B8,  /* U+10591: VITHKUQI CAPITAL LETTER VE */
    6476             :         [4032+0x12] = 0x105B9,  /* U+10592: VITHKUQI CAPITAL LETTER XE */
    6477             :         [4032+0x14] = 0x105BB,  /* U+10594: VITHKUQI CAPITAL LETTER Y */
    6478             :         [4032+0x15] = 0x105BC,  /* U+10595: VITHKUQI CAPITAL LETTER ZE */
    6479             :         [3712+0x32] = 4096 - 0x80,      /* 360 220 262 ... */
    6480             :         [4096+0x00] = 0x10CC0,  /* U+10C80: OLD HUNGARIAN CAPITAL LETTER A */
    6481             :         [4096+0x01] = 0x10CC1,  /* U+10C81: OLD HUNGARIAN CAPITAL LETTER AA */
    6482             :         [4096+0x02] = 0x10CC2,  /* U+10C82: OLD HUNGARIAN CAPITAL LETTER EB */
    6483             :         [4096+0x03] = 0x10CC3,  /* U+10C83: OLD HUNGARIAN CAPITAL LETTER AMB */
    6484             :         [4096+0x04] = 0x10CC4,  /* U+10C84: OLD HUNGARIAN CAPITAL LETTER EC */
    6485             :         [4096+0x05] = 0x10CC5,  /* U+10C85: OLD HUNGARIAN CAPITAL LETTER ENC */
    6486             :         [4096+0x06] = 0x10CC6,  /* U+10C86: OLD HUNGARIAN CAPITAL LETTER ECS */
    6487             :         [4096+0x07] = 0x10CC7,  /* U+10C87: OLD HUNGARIAN CAPITAL LETTER ED */
    6488             :         [4096+0x08] = 0x10CC8,  /* U+10C88: OLD HUNGARIAN CAPITAL LETTER AND */
    6489             :         [4096+0x09] = 0x10CC9,  /* U+10C89: OLD HUNGARIAN CAPITAL LETTER E */
    6490             :         [4096+0x0A] = 0x10CCA,  /* U+10C8A: OLD HUNGARIAN CAPITAL LETTER CLOSE E */
    6491             :         [4096+0x0B] = 0x10CCB,  /* U+10C8B: OLD HUNGARIAN CAPITAL LETTER EE */
    6492             :         [4096+0x0C] = 0x10CCC,  /* U+10C8C: OLD HUNGARIAN CAPITAL LETTER EF */
    6493             :         [4096+0x0D] = 0x10CCD,  /* U+10C8D: OLD HUNGARIAN CAPITAL LETTER EG */
    6494             :         [4096+0x0E] = 0x10CCE,  /* U+10C8E: OLD HUNGARIAN CAPITAL LETTER EGY */
    6495             :         [4096+0x0F] = 0x10CCF,  /* U+10C8F: OLD HUNGARIAN CAPITAL LETTER EH */
    6496             :         [4096+0x10] = 0x10CD0,  /* U+10C90: OLD HUNGARIAN CAPITAL LETTER I */
    6497             :         [4096+0x11] = 0x10CD1,  /* U+10C91: OLD HUNGARIAN CAPITAL LETTER II */
    6498             :         [4096+0x12] = 0x10CD2,  /* U+10C92: OLD HUNGARIAN CAPITAL LETTER EJ */
    6499             :         [4096+0x13] = 0x10CD3,  /* U+10C93: OLD HUNGARIAN CAPITAL LETTER EK */
    6500             :         [4096+0x14] = 0x10CD4,  /* U+10C94: OLD HUNGARIAN CAPITAL LETTER AK */
    6501             :         [4096+0x15] = 0x10CD5,  /* U+10C95: OLD HUNGARIAN CAPITAL LETTER UNK */
    6502             :         [4096+0x16] = 0x10CD6,  /* U+10C96: OLD HUNGARIAN CAPITAL LETTER EL */
    6503             :         [4096+0x17] = 0x10CD7,  /* U+10C97: OLD HUNGARIAN CAPITAL LETTER ELY */
    6504             :         [4096+0x18] = 0x10CD8,  /* U+10C98: OLD HUNGARIAN CAPITAL LETTER EM */
    6505             :         [4096+0x19] = 0x10CD9,  /* U+10C99: OLD HUNGARIAN CAPITAL LETTER EN */
    6506             :         [4096+0x1A] = 0x10CDA,  /* U+10C9A: OLD HUNGARIAN CAPITAL LETTER ENY */
    6507             :         [4096+0x1B] = 0x10CDB,  /* U+10C9B: OLD HUNGARIAN CAPITAL LETTER O */
    6508             :         [4096+0x1C] = 0x10CDC,  /* U+10C9C: OLD HUNGARIAN CAPITAL LETTER OO */
    6509             :         [4096+0x1D] = 0x10CDD,  /* U+10C9D: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE */
    6510             :         [4096+0x1E] = 0x10CDE,  /* U+10C9E: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE */
    6511             :         [4096+0x1F] = 0x10CDF,  /* U+10C9F: OLD HUNGARIAN CAPITAL LETTER OEE */
    6512             :         [4096+0x20] = 0x10CE0,  /* U+10CA0: OLD HUNGARIAN CAPITAL LETTER EP */
    6513             :         [4096+0x21] = 0x10CE1,  /* U+10CA1: OLD HUNGARIAN CAPITAL LETTER EMP */
    6514             :         [4096+0x22] = 0x10CE2,  /* U+10CA2: OLD HUNGARIAN CAPITAL LETTER ER */
    6515             :         [4096+0x23] = 0x10CE3,  /* U+10CA3: OLD HUNGARIAN CAPITAL LETTER SHORT ER */
    6516             :         [4096+0x24] = 0x10CE4,  /* U+10CA4: OLD HUNGARIAN CAPITAL LETTER ES */
    6517             :         [4096+0x25] = 0x10CE5,  /* U+10CA5: OLD HUNGARIAN CAPITAL LETTER ESZ */
    6518             :         [4096+0x26] = 0x10CE6,  /* U+10CA6: OLD HUNGARIAN CAPITAL LETTER ET */
    6519             :         [4096+0x27] = 0x10CE7,  /* U+10CA7: OLD HUNGARIAN CAPITAL LETTER ENT */
    6520             :         [4096+0x28] = 0x10CE8,  /* U+10CA8: OLD HUNGARIAN CAPITAL LETTER ETY */
    6521             :         [4096+0x29] = 0x10CE9,  /* U+10CA9: OLD HUNGARIAN CAPITAL LETTER ECH */
    6522             :         [4096+0x2A] = 0x10CEA,  /* U+10CAA: OLD HUNGARIAN CAPITAL LETTER U */
    6523             :         [4096+0x2B] = 0x10CEB,  /* U+10CAB: OLD HUNGARIAN CAPITAL LETTER UU */
    6524             :         [4096+0x2C] = 0x10CEC,  /* U+10CAC: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE */
    6525             :         [4096+0x2D] = 0x10CED,  /* U+10CAD: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE */
    6526             :         [4096+0x2E] = 0x10CEE,  /* U+10CAE: OLD HUNGARIAN CAPITAL LETTER EV */
    6527             :         [4096+0x2F] = 0x10CEF,  /* U+10CAF: OLD HUNGARIAN CAPITAL LETTER EZ */
    6528             :         [4096+0x30] = 0x10CF0,  /* U+10CB0: OLD HUNGARIAN CAPITAL LETTER EZS */
    6529             :         [4096+0x31] = 0x10CF1,  /* U+10CB1: OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN */
    6530             :         [4096+0x32] = 0x10CF2,  /* U+10CB2: OLD HUNGARIAN CAPITAL LETTER US */
    6531             :         [3648+0x11] = 4160 - 0x80,      /* 360 221 ... */
    6532             :         [4160+0x22] = 4224 - 0x80,      /* 360 221 242 ... */
    6533             :         [4224+0x20] = 0x118C0,  /* U+118A0: WARANG CITI CAPITAL LETTER NGAA */
    6534             :         [4224+0x21] = 0x118C1,  /* U+118A1: WARANG CITI CAPITAL LETTER A */
    6535             :         [4224+0x22] = 0x118C2,  /* U+118A2: WARANG CITI CAPITAL LETTER WI */
    6536             :         [4224+0x23] = 0x118C3,  /* U+118A3: WARANG CITI CAPITAL LETTER YU */
    6537             :         [4224+0x24] = 0x118C4,  /* U+118A4: WARANG CITI CAPITAL LETTER YA */
    6538             :         [4224+0x25] = 0x118C5,  /* U+118A5: WARANG CITI CAPITAL LETTER YO */
    6539             :         [4224+0x26] = 0x118C6,  /* U+118A6: WARANG CITI CAPITAL LETTER II */
    6540             :         [4224+0x27] = 0x118C7,  /* U+118A7: WARANG CITI CAPITAL LETTER UU */
    6541             :         [4224+0x28] = 0x118C8,  /* U+118A8: WARANG CITI CAPITAL LETTER E */
    6542             :         [4224+0x29] = 0x118C9,  /* U+118A9: WARANG CITI CAPITAL LETTER O */
    6543             :         [4224+0x2A] = 0x118CA,  /* U+118AA: WARANG CITI CAPITAL LETTER ANG */
    6544             :         [4224+0x2B] = 0x118CB,  /* U+118AB: WARANG CITI CAPITAL LETTER GA */
    6545             :         [4224+0x2C] = 0x118CC,  /* U+118AC: WARANG CITI CAPITAL LETTER KO */
    6546             :         [4224+0x2D] = 0x118CD,  /* U+118AD: WARANG CITI CAPITAL LETTER ENY */
    6547             :         [4224+0x2E] = 0x118CE,  /* U+118AE: WARANG CITI CAPITAL LETTER YUJ */
    6548             :         [4224+0x2F] = 0x118CF,  /* U+118AF: WARANG CITI CAPITAL LETTER UC */
    6549             :         [4224+0x30] = 0x118D0,  /* U+118B0: WARANG CITI CAPITAL LETTER ENN */
    6550             :         [4224+0x31] = 0x118D1,  /* U+118B1: WARANG CITI CAPITAL LETTER ODD */
    6551             :         [4224+0x32] = 0x118D2,  /* U+118B2: WARANG CITI CAPITAL LETTER TTE */
    6552             :         [4224+0x33] = 0x118D3,  /* U+118B3: WARANG CITI CAPITAL LETTER NUNG */
    6553             :         [4224+0x34] = 0x118D4,  /* U+118B4: WARANG CITI CAPITAL LETTER DA */
    6554             :         [4224+0x35] = 0x118D5,  /* U+118B5: WARANG CITI CAPITAL LETTER AT */
    6555             :         [4224+0x36] = 0x118D6,  /* U+118B6: WARANG CITI CAPITAL LETTER AM */
    6556             :         [4224+0x37] = 0x118D7,  /* U+118B7: WARANG CITI CAPITAL LETTER BU */
    6557             :         [4224+0x38] = 0x118D8,  /* U+118B8: WARANG CITI CAPITAL LETTER PU */
    6558             :         [4224+0x39] = 0x118D9,  /* U+118B9: WARANG CITI CAPITAL LETTER HIYO */
    6559             :         [4224+0x3A] = 0x118DA,  /* U+118BA: WARANG CITI CAPITAL LETTER HOLO */
    6560             :         [4224+0x3B] = 0x118DB,  /* U+118BB: WARANG CITI CAPITAL LETTER HORR */
    6561             :         [4224+0x3C] = 0x118DC,  /* U+118BC: WARANG CITI CAPITAL LETTER HAR */
    6562             :         [4224+0x3D] = 0x118DD,  /* U+118BD: WARANG CITI CAPITAL LETTER SSUU */
    6563             :         [4224+0x3E] = 0x118DE,  /* U+118BE: WARANG CITI CAPITAL LETTER SII */
    6564             :         [4224+0x3F] = 0x118DF,  /* U+118BF: WARANG CITI CAPITAL LETTER VIYO */
    6565             :         [3648+0x16] = 4288 - 0x80,      /* 360 226 ... */
    6566             :         [4288+0x39] = 4352 - 0x80,      /* 360 226 271 ... */
    6567             :         [4352+0x00] = 0x16E60,  /* U+16E40: MEDEFAIDRIN CAPITAL LETTER M */
    6568             :         [4352+0x01] = 0x16E61,  /* U+16E41: MEDEFAIDRIN CAPITAL LETTER S */
    6569             :         [4352+0x02] = 0x16E62,  /* U+16E42: MEDEFAIDRIN CAPITAL LETTER V */
    6570             :         [4352+0x03] = 0x16E63,  /* U+16E43: MEDEFAIDRIN CAPITAL LETTER W */
    6571             :         [4352+0x04] = 0x16E64,  /* U+16E44: MEDEFAIDRIN CAPITAL LETTER ATIU */
    6572             :         [4352+0x05] = 0x16E65,  /* U+16E45: MEDEFAIDRIN CAPITAL LETTER Z */
    6573             :         [4352+0x06] = 0x16E66,  /* U+16E46: MEDEFAIDRIN CAPITAL LETTER KP */
    6574             :         [4352+0x07] = 0x16E67,  /* U+16E47: MEDEFAIDRIN CAPITAL LETTER P */
    6575             :         [4352+0x08] = 0x16E68,  /* U+16E48: MEDEFAIDRIN CAPITAL LETTER T */
    6576             :         [4352+0x09] = 0x16E69,  /* U+16E49: MEDEFAIDRIN CAPITAL LETTER G */
    6577             :         [4352+0x0A] = 0x16E6A,  /* U+16E4A: MEDEFAIDRIN CAPITAL LETTER F */
    6578             :         [4352+0x0B] = 0x16E6B,  /* U+16E4B: MEDEFAIDRIN CAPITAL LETTER I */
    6579             :         [4352+0x0C] = 0x16E6C,  /* U+16E4C: MEDEFAIDRIN CAPITAL LETTER K */
    6580             :         [4352+0x0D] = 0x16E6D,  /* U+16E4D: MEDEFAIDRIN CAPITAL LETTER A */
    6581             :         [4352+0x0E] = 0x16E6E,  /* U+16E4E: MEDEFAIDRIN CAPITAL LETTER J */
    6582             :         [4352+0x0F] = 0x16E6F,  /* U+16E4F: MEDEFAIDRIN CAPITAL LETTER E */
    6583             :         [4352+0x10] = 0x16E70,  /* U+16E50: MEDEFAIDRIN CAPITAL LETTER B */
    6584             :         [4352+0x11] = 0x16E71,  /* U+16E51: MEDEFAIDRIN CAPITAL LETTER C */
    6585             :         [4352+0x12] = 0x16E72,  /* U+16E52: MEDEFAIDRIN CAPITAL LETTER U */
    6586             :         [4352+0x13] = 0x16E73,  /* U+16E53: MEDEFAIDRIN CAPITAL LETTER YU */
    6587             :         [4352+0x14] = 0x16E74,  /* U+16E54: MEDEFAIDRIN CAPITAL LETTER L */
    6588             :         [4352+0x15] = 0x16E75,  /* U+16E55: MEDEFAIDRIN CAPITAL LETTER Q */
    6589             :         [4352+0x16] = 0x16E76,  /* U+16E56: MEDEFAIDRIN CAPITAL LETTER HP */
    6590             :         [4352+0x17] = 0x16E77,  /* U+16E57: MEDEFAIDRIN CAPITAL LETTER NY */
    6591             :         [4352+0x18] = 0x16E78,  /* U+16E58: MEDEFAIDRIN CAPITAL LETTER X */
    6592             :         [4352+0x19] = 0x16E79,  /* U+16E59: MEDEFAIDRIN CAPITAL LETTER D */
    6593             :         [4352+0x1A] = 0x16E7A,  /* U+16E5A: MEDEFAIDRIN CAPITAL LETTER OE */
    6594             :         [4352+0x1B] = 0x16E7B,  /* U+16E5B: MEDEFAIDRIN CAPITAL LETTER N */
    6595             :         [4352+0x1C] = 0x16E7C,  /* U+16E5C: MEDEFAIDRIN CAPITAL LETTER R */
    6596             :         [4352+0x1D] = 0x16E7D,  /* U+16E5D: MEDEFAIDRIN CAPITAL LETTER O */
    6597             :         [4352+0x1E] = 0x16E7E,  /* U+16E5E: MEDEFAIDRIN CAPITAL LETTER AI */
    6598             :         [4352+0x1F] = 0x16E7F,  /* U+16E5F: MEDEFAIDRIN CAPITAL LETTER Y */
    6599             :         [3648+0x1E] = 4416 - 0x80,      /* 360 236 ... */
    6600             :         [4416+0x24] = 4480 - 0x80,      /* 360 236 244 ... */
    6601             :         [4480+0x00] = 0x1E922,  /* U+1E900: ADLAM CAPITAL LETTER ALIF */
    6602             :         [4480+0x01] = 0x1E923,  /* U+1E901: ADLAM CAPITAL LETTER DAALI */
    6603             :         [4480+0x02] = 0x1E924,  /* U+1E902: ADLAM CAPITAL LETTER LAAM */
    6604             :         [4480+0x03] = 0x1E925,  /* U+1E903: ADLAM CAPITAL LETTER MIIM */
    6605             :         [4480+0x04] = 0x1E926,  /* U+1E904: ADLAM CAPITAL LETTER BA */
    6606             :         [4480+0x05] = 0x1E927,  /* U+1E905: ADLAM CAPITAL LETTER SINNYIIYHE */
    6607             :         [4480+0x06] = 0x1E928,  /* U+1E906: ADLAM CAPITAL LETTER PE */
    6608             :         [4480+0x07] = 0x1E929,  /* U+1E907: ADLAM CAPITAL LETTER BHE */
    6609             :         [4480+0x08] = 0x1E92A,  /* U+1E908: ADLAM CAPITAL LETTER RA */
    6610             :         [4480+0x09] = 0x1E92B,  /* U+1E909: ADLAM CAPITAL LETTER E */
    6611             :         [4480+0x0A] = 0x1E92C,  /* U+1E90A: ADLAM CAPITAL LETTER FA */
    6612             :         [4480+0x0B] = 0x1E92D,  /* U+1E90B: ADLAM CAPITAL LETTER I */
    6613             :         [4480+0x0C] = 0x1E92E,  /* U+1E90C: ADLAM CAPITAL LETTER O */
    6614             :         [4480+0x0D] = 0x1E92F,  /* U+1E90D: ADLAM CAPITAL LETTER DHA */
    6615             :         [4480+0x0E] = 0x1E930,  /* U+1E90E: ADLAM CAPITAL LETTER YHE */
    6616             :         [4480+0x0F] = 0x1E931,  /* U+1E90F: ADLAM CAPITAL LETTER WAW */
    6617             :         [4480+0x10] = 0x1E932,  /* U+1E910: ADLAM CAPITAL LETTER NUN */
    6618             :         [4480+0x11] = 0x1E933,  /* U+1E911: ADLAM CAPITAL LETTER KAF */
    6619             :         [4480+0x12] = 0x1E934,  /* U+1E912: ADLAM CAPITAL LETTER YA */
    6620             :         [4480+0x13] = 0x1E935,  /* U+1E913: ADLAM CAPITAL LETTER U */
    6621             :         [4480+0x14] = 0x1E936,  /* U+1E914: ADLAM CAPITAL LETTER JIIM */
    6622             :         [4480+0x15] = 0x1E937,  /* U+1E915: ADLAM CAPITAL LETTER CHI */
    6623             :         [4480+0x16] = 0x1E938,  /* U+1E916: ADLAM CAPITAL LETTER HA */
    6624             :         [4480+0x17] = 0x1E939,  /* U+1E917: ADLAM CAPITAL LETTER QAAF */
    6625             :         [4480+0x18] = 0x1E93A,  /* U+1E918: ADLAM CAPITAL LETTER GA */
    6626             :         [4480+0x19] = 0x1E93B,  /* U+1E919: ADLAM CAPITAL LETTER NYA */
    6627             :         [4480+0x1A] = 0x1E93C,  /* U+1E91A: ADLAM CAPITAL LETTER TU */
    6628             :         [4480+0x1B] = 0x1E93D,  /* U+1E91B: ADLAM CAPITAL LETTER NHA */
    6629             :         [4480+0x1C] = 0x1E93E,  /* U+1E91C: ADLAM CAPITAL LETTER VA */
    6630             :         [4480+0x1D] = 0x1E93F,  /* U+1E91D: ADLAM CAPITAL LETTER KHA */
    6631             :         [4480+0x1E] = 0x1E940,  /* U+1E91E: ADLAM CAPITAL LETTER GBE */
    6632             :         [4480+0x1F] = 0x1E941,  /* U+1E91F: ADLAM CAPITAL LETTER ZAL */
    6633             :         [4480+0x20] = 0x1E942,  /* U+1E920: ADLAM CAPITAL LETTER KPO */
    6634             :         [4480+0x21] = 0x1E943,  /* U+1E921: ADLAM CAPITAL LETTER SHA */
    6635             : };
    6636             : 
    6637             : /* convert the case of a UTF-8 encoded string given in `s' into the
    6638             :  * buffer of length `*buflen' given in `*buf'; if the buffer is not
    6639             :  * large enough, it is extended using GDKrealloc; on return (with or
    6640             :  * without error), the current buffer is in *buf, and the current size
    6641             :  * in *buflen. */
    6642             : static gdk_return
    6643             :         __attribute__((__access__(read_write, 1)))
    6644             :         __attribute__((__access__(read_write, 2)))
    6645      267998 : convertcase(char **restrict buf, size_t *restrict buflen,
    6646             :             const uint8_t *restrict s, int direction)
    6647             : {
    6648      267998 :         uint8_t *dst = (uint8_t *) *buf;
    6649      267998 :         size_t dstoff = 0;
    6650      267998 :         size_t bl;
    6651      267998 :         const int *restrict convtab;
    6652      267998 :         switch (direction) {
    6653             :         case 'U':
    6654             :                 convtab = uppercase;
    6655             :                 break;
    6656       63648 :         case 'L':
    6657       63648 :                 convtab = lowercase;
    6658       63648 :                 break;
    6659          50 :         case 'F':
    6660          50 :                 convtab = casefold;
    6661          50 :                 break;
    6662             :         default:
    6663           0 :                 MT_UNREACHABLE();
    6664             :         }
    6665             : 
    6666      267998 :         bl = strlen((const char *) s);
    6667      267998 :         if (*buf == NULL) {
    6668         120 :                 if (bl < 4090)
    6669             :                         bl = 4096;
    6670             :                 else
    6671           0 :                         bl += 5;
    6672         120 :                 dst = GDKmalloc(bl);
    6673         120 :                 if (dst == NULL)
    6674             :                         return GDK_FAIL;
    6675         120 :                 *buf = (char *) dst;
    6676      267878 :         } else if (bl + 5 > *buflen) {
    6677           0 :                 bl += 1024;
    6678           0 :                 dst = GDKrealloc(*buf, bl);
    6679           0 :                 if (dst == NULL)
    6680             :                         return GDK_FAIL;
    6681           0 :                 *buf = (char *) dst;
    6682             :         } else {
    6683             :                 bl = *buflen;
    6684             :         }
    6685             : 
    6686      267998 :         size_t bl5 = bl - 5;    /* time for buffer extension */
    6687      267998 :         if (*s == 0x80) {
    6688             :                 /* nil */
    6689        3091 :                 assert(s[1] == 0);
    6690        3091 :                 dst[dstoff++] = 0x80;
    6691             :         } else {
    6692             :                 /* special case for ASCII prefix */
    6693     3939246 :                 while ((int8_t) *s > 0) {
    6694             :                         /* no need to check for buffer size, we made
    6695             :                          * sure there is enough space */
    6696     3674339 :                         dst[dstoff++] = (uint8_t) convtab[*s++];
    6697             :                 }
    6698      265164 :                 while (*s) {
    6699             :                         /* we are at the start of a Unicode codepoint
    6700             :                          * encoded in UTF-8 */
    6701         228 :                         if (dstoff > bl5) {
    6702             :                                 /* make sure we have enough space for the
    6703             :                                  * largest codepoint, i.e. 4 bytes plus
    6704             :                                  * terminating NUL */
    6705           0 :                                 size_t newlen = bl + 1024;
    6706           0 :                                 dst = GDKrealloc(*buf, newlen);
    6707           0 :                                 if (dst == NULL) {
    6708           0 :                                         *buflen = bl;
    6709           0 :                                         return GDK_FAIL;
    6710             :                                 }
    6711           0 :                                 *buf = (char *) dst;
    6712           0 :                                 bl = newlen;
    6713           0 :                                 bl5 = bl - 5;
    6714             :                         }
    6715         257 :                         const uint8_t *u = s;
    6716         257 :                         int v = convtab[*s++];
    6717         350 :                         while (v && (*s & 0xC0) == 0x80) {
    6718          93 :                                 v = convtab[v + *s++];
    6719             :                         }
    6720         257 :                         if (v == 0) {
    6721             :                                 /* no case conversion */
    6722             :                                 /* copy the first part of the current
    6723             :                                  * codepoint */
    6724         163 :                                 do {
    6725         163 :                                         dst[dstoff++] = *u++;
    6726         163 :                                 } while (u < s);
    6727             :                                 /* copy rest of current codepoint */
    6728         136 :                                 while ((*s & 0xC0) == 0x80) {
    6729          44 :                                         dst[dstoff++] = *s++;
    6730             :                                 }
    6731         165 :                         } else if (v < 0) {
    6732           3 :                                 for (const char *u = specialcase[-v]; *u; u++) {
    6733           2 :                                         dst[dstoff++] = (uint8_t) *u;
    6734             :                                 }
    6735         164 :                         } else if (v <= 0x7F) {
    6736         143 :                                 dst[dstoff++] = v;
    6737          21 :                         } else if (v <= 0x7FF) {
    6738          21 :                                 dst[dstoff++] = 0xC0 | (v >> 6);
    6739          21 :                                 dst[dstoff++] = 0x80 | (v & 0x3F);
    6740           0 :                         } else if (v <= 0xFFFF) {
    6741           0 :                                 dst[dstoff++] = 0xE0 | (v >> 12);
    6742           0 :                                 dst[dstoff++] = 0x80 | ((v >> 6) & 0x3F);
    6743           0 :                                 dst[dstoff++] = 0x80 | (v & 0x3F);
    6744             :                         } else {
    6745           0 :                                 dst[dstoff++] = 0xF0 | (v >> 18);
    6746           0 :                                 dst[dstoff++] = 0x80 | ((v >> 12) & 0x3F);
    6747           0 :                                 dst[dstoff++] = 0x80 | ((v >> 6) & 0x3F);
    6748           0 :                                 dst[dstoff++] = 0x80 | (v & 0x3F);
    6749             :                         }
    6750             :                 }
    6751             :         }
    6752      268027 :         if (dstoff + 1 > bl) {
    6753           0 :                 size_t newlen = dstoff + 1;
    6754           0 :                 dst = GDKrealloc(*buf, newlen);
    6755           0 :                 if (dst == NULL) {
    6756           0 :                         *buflen = bl;
    6757           0 :                         return GDK_FAIL;
    6758             :                 }
    6759           0 :                 *buf = (char *) dst;
    6760           0 :                 bl = newlen;
    6761             :         }
    6762      268027 :         dst[dstoff] = '\0';
    6763      268027 :         *buflen = bl;
    6764      268027 :         return GDK_SUCCEED;
    6765             : }
    6766             : 
    6767             : /* convert string to uppercase; see comment above for more information */
    6768             : gdk_return
    6769      104241 : GDKtoupper(char **restrict buf, size_t *restrict buflen, const char *restrict s)
    6770             : {
    6771      104241 :         return convertcase(buf, buflen, (const uint8_t *) s, 'U');
    6772             : }
    6773             : 
    6774             : /* convert string to lowercase; see comment above for more information */
    6775             : gdk_return
    6776        4361 : GDKtolower(char **restrict buf, size_t *restrict buflen, const char *restrict s)
    6777             : {
    6778        4361 :         return convertcase(buf, buflen, (const uint8_t *) s, 'L');
    6779             : }
    6780             : 
    6781             : /* case fold string; see comment above for more information */
    6782             : gdk_return
    6783           0 : GDKcasefold(char **restrict buf, size_t *restrict buflen, const char *restrict s)
    6784             : {
    6785           0 :         return convertcase(buf, buflen, (const uint8_t *) s, 'F');
    6786             : }
    6787             : 
    6788             : static BAT *
    6789         125 : BATcaseconvert(BAT *b, BAT *s, int direction, const char *restrict func)
    6790             : {
    6791         125 :         lng t0 = 0;
    6792         125 :         BAT *bn;
    6793         125 :         struct canditer ci;
    6794         125 :         BATiter bi;
    6795         125 :         oid bhseqbase = b->hseqbase;
    6796         125 :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();
    6797         125 :         qry_ctx = qry_ctx ? qry_ctx : &(QryCtx) {.endtime = 0};
    6798             : 
    6799         125 :         TRC_DEBUG_IF(ALGO) t0 = GDKusec();
    6800         125 :         BATcheck(b, NULL);
    6801         125 :         canditer_init(&ci, b, s);
    6802         125 :         bn = COLnew(ci.hseq, TYPE_str, ci.ncand, TRANSIENT);
    6803         125 :         if (bn == NULL)
    6804             :                 return NULL;
    6805         125 :         bi = bat_iterator(b);
    6806         123 :         char *buf = NULL;
    6807         123 :         size_t buflen = 0;
    6808      159671 :         TIMEOUT_LOOP_IDX_DECL(i, ci.ncand, qry_ctx) {
    6809      159422 :                 BUN x = canditer_next(&ci) - bhseqbase;
    6810      159414 :                 if (convertcase(&buf, &buflen, BUNtvar(bi, x),
    6811      159423 :                                 direction) != GDK_SUCCEED ||
    6812      159416 :                     tfastins_nocheckVAR(bn, i, buf) != GDK_SUCCEED) {
    6813           0 :                         goto bailout;
    6814             :                 }
    6815             :         }
    6816         124 :         GDKfree(buf);
    6817         125 :         BATsetcount(bn, ci.ncand);
    6818         124 :         bat_iterator_end(&bi);
    6819         125 :         TIMEOUT_CHECK(qry_ctx,
    6820             :                       GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
    6821         125 :         bn->tnil = false;
    6822         125 :         bn->tnonil = false;
    6823         125 :         bn->tkey = BATcount(bn) <= 1;
    6824         125 :         bn->tsorted = BATcount(bn) <= 1;
    6825         125 :         bn->trevsorted = BATcount(bn) <= 1;
    6826         125 :         bn->theap->dirty |= BATcount(bn) > 0;
    6827         125 :         TRC_DEBUG(ALGO, "%s: b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
    6828             :                   " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
    6829             :                   func,
    6830             :                   ALGOBATPAR(b), ALGOOPTBATPAR(s),
    6831             :                   ALGOOPTBATPAR(bn), GDKusec() - t0);
    6832             :         return bn;
    6833             : 
    6834           0 :   bailout:
    6835           0 :         GDKfree(buf);
    6836           0 :         bat_iterator_end(&bi);
    6837           0 :         BBPreclaim(bn);
    6838           0 :         return NULL;
    6839             : }
    6840             : 
    6841             : BAT *
    6842          84 : BATtolower(BAT *b, BAT *s)
    6843             : {
    6844          84 :         return BATcaseconvert(b, s, 'L', __func__);
    6845             : }
    6846             : 
    6847             : BAT *
    6848          19 : BATtoupper(BAT *b, BAT *s)
    6849             : {
    6850          19 :         return BATcaseconvert(b, s, 'U', __func__);
    6851             : }
    6852             : 
    6853             : BAT *
    6854          22 : BATcasefold(BAT *b, BAT *s)
    6855             : {
    6856          22 :         return BATcaseconvert(b, s, 'F', __func__);
    6857             : }
    6858             : 
    6859             : /* Unicode-aware case insensitive string comparison of two UTF-8 encoded
    6860             :  * string; do not look beyond the lengths in bytes of the two strings;
    6861             :  * if either one reaches the end of the buffer (as given by the length
    6862             :  * parameter) before any difference was found, strings compare equal; if
    6863             :  * either string hits a NUL byte, that indicates the end of the string,
    6864             :  * so if both strings hit a NUL byte at the same time, the strings also
    6865             :  * compare equal (and else the shorter string is smaller than the longer
    6866             :  * one) */
    6867             : int
    6868   191358082 : GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2)
    6869             : {
    6870   191358082 :         const uint8_t *s1 = (const uint8_t *) str1;
    6871   191358082 :         const uint8_t *s2 = (const uint8_t *) str2;
    6872   191358082 :         const uint8_t *x1 = NULL, *x2 = NULL;
    6873   191358082 :         int n1, n2;
    6874   191358082 :         int v1 = 0, v2 = 0;
    6875             : 
    6876   191826713 :         for (;;) {
    6877             :                 /* check for the end */
    6878   191826713 :                 if ((x1 == NULL && l1 == 0) || (x2 == NULL && l2 == 0))
    6879             :                         return 0;
    6880   191826164 :                 if (x1 == NULL && *s1 == 0)
    6881     5916467 :                         return -(x2 != NULL || *s2 != 0);
    6882   186046182 :                 if (x2 == NULL && *s2 == 0)
    6883             :                         return 1;
    6884             : 
    6885             :                 /* get next character from str1 */
    6886   132140550 :                 if (x1 == NULL) {
    6887   131879422 :                         v1 = casefold[*s1++];
    6888   131879422 :                         n1 = 1;
    6889   131879422 :                         l1--;
    6890   131879796 :                         while (v1 && l1 > 0 && (*s1 & 0xC0) == 0x80) {
    6891         374 :                                 assert(n1 < 4);
    6892         374 :                                 v1 = casefold[v1 + *s1++];
    6893         374 :                                 n1++;
    6894         374 :                                 l1--;
    6895             :                         }
    6896   131879422 :                         if (v1 == 0) {
    6897         332 :                                 while (l1 > 0 && (*s1 & 0xC0) == 0x80) {
    6898          31 :                                         assert(n1 < 4);
    6899          31 :                                         n1++;
    6900          31 :                                         s1++;
    6901          31 :                                         l1--;
    6902             :                                 }
    6903   131879121 :                         } else if (v1 < 0) {
    6904           0 :                                 x1 = (const uint8_t *) specialcase[-v1];
    6905           0 :                                 v1 = 0;
    6906             :                         }
    6907             :                 }
    6908   132140550 :                 if (x1 != NULL) {
    6909             :                         n1 = 1;
    6910           0 :                         while ((*++x1 & 0xC0) == 0x80)
    6911           0 :                                 n1++;
    6912             :                 }
    6913             : 
    6914             :                 /* get next character from str2 */
    6915   132140550 :                 if (x2 == NULL) {
    6916   131921955 :                         v2 = casefold[*s2++];
    6917   131921955 :                         n2 = 1;
    6918   131921955 :                         l2--;
    6919   131922417 :                         while (v2 && l2 > 0 && (*s2 & 0xC0) == 0x80) {
    6920         462 :                                 assert(n2 < 4);
    6921         462 :                                 v2 = casefold[v2 + *s2++];
    6922         462 :                                 n2++;
    6923         462 :                                 l2--;
    6924             :                         }
    6925   131921955 :                         if (v2 == 0) {
    6926         190 :                                 while (l2 > 0 && (*s2 & 0xC0) == 0x80) {
    6927          38 :                                         assert(n2 < 4);
    6928          38 :                                         n2++;
    6929          38 :                                         s2++;
    6930          38 :                                         l2--;
    6931             :                                 }
    6932   131921803 :                         } else if (v2 < 0) {
    6933           0 :                                 x2 = (const uint8_t *) specialcase[-v2];
    6934           0 :                                 v2 = 0;
    6935             :                         }
    6936             :                 }
    6937   132140550 :                 if (x2 != NULL) {
    6938             :                         n2 = 1;
    6939           0 :                         while ((*++x2 & 0xC0) == 0x80)
    6940           0 :                                 n2++;
    6941             :                 }
    6942             : 
    6943             :                 /* At this point, there are three possibilities:
    6944             :                  * x1 != NULL && v1 == 0:
    6945             :                  *     x1 points to the byte behind a UTF-8 sequence of
    6946             :                  *     length n1 that is to be compared (so x1-n1 is the
    6947             :                  *     start);
    6948             :                  * x1 == NULL && v1 == 0:
    6949             :                  *     s1 points to the byte behind a UTF-8 sequence of
    6950             :                  *     length n1 that is to be compared (so s1-n1 is the
    6951             :                  *     start);
    6952             :                  * x1 == NULL && v1 != 0:
    6953             :                  *     v1 is the codepoint value that is to be compared.
    6954             :                  * Note that x1 != NULL && v1 != 0 cannot happen.
    6955             :                  * In all cases, s1 points to the start of the next
    6956             :                  * UTF-8 sequence, and l1 is the number of bytes left
    6957             :                  * that are to be compared (can be zero).
    6958             :                  *
    6959             :                  * The same goes for s2/x2/v2/n2/l2. */
    6960             : 
    6961             :                 /* compare */
    6962   132140550 :                 if (v1 == 0) {
    6963         309 :                         if (v2 == 0) {
    6964             :                                 /* neither converted */
    6965          76 :                                 if (n1 == n2) {
    6966             :                                         /* at least the same length, so simple strncmp */
    6967         152 :                                         n1 = strncmp((const char *) (x1?x1:s1) - n1, (const char *) (x2?x2:s2) - n2, n1);
    6968          76 :                                         if (n1 != 0)
    6969           5 :                                                 return n1;
    6970             :                                         /* still equal */
    6971             :                                 } else {
    6972             :                                         /* length is leading: shorter
    6973             :                                          * sequences come before longer
    6974             :                                          * ones */
    6975           0 :                                         return n1 - n2;
    6976             :                                 }
    6977             :                         } else {
    6978         233 :                                 switch (n1) {
    6979           0 :                                 case 1:
    6980           0 :                                         if (v2 >= 0x80)
    6981             :                                                 return -1;
    6982           0 :                                         if (x1) {
    6983           0 :                                                 if (x1[-1] != v2)
    6984           0 :                                                         return (x1[-1] > v2) - (x1[-1] < v2);
    6985             :                                         } else {
    6986           0 :                                                 if (s1[-1] != v2)
    6987           0 :                                                         return (s1[-1] > v2) - (s1[-1] < v2);
    6988             :                                         }
    6989             :                                         break;
    6990         231 :                                 case 2:
    6991         231 :                                         if (v2 < 0x80)
    6992             :                                                 return 1;
    6993          36 :                                         else if (v2 >= 0x800)
    6994             :                                                 return -1;
    6995          36 :                                         if (x1)
    6996           0 :                                                 v1 = ((x1[-2] & 0x1F) << 6) | (x1[-1] & 0x3F);
    6997             :                                         else
    6998          36 :                                                 v1 = ((s1[-2] & 0x1F) << 6) | (s1[-1] & 0x3F);
    6999          36 :                                         if (v1 != v2)
    7000          34 :                                                 return (v1 > v2) - (v1 < v2);
    7001             :                                         break;
    7002           2 :                                 case 3:
    7003           2 :                                         if (v2 < 0x800)
    7004             :                                                 return 1;
    7005           1 :                                         else if (v2 >= 0x10000)
    7006             :                                                 return -1;
    7007           1 :                                         if (x1)
    7008           0 :                                                 v1 = ((x1[-3] & 0x0F) << 12) | ((x1[-2] & 0x3F) << 6) | (x1[-1] & 0x3F);
    7009             :                                         else
    7010           1 :                                                 v1 = ((s1[-3] & 0x0F) << 12) | ((s1[-2] & 0x3F) << 6) | (s1[-1] & 0x3F);
    7011           1 :                                         if (v1 != v2)
    7012           0 :                                                 return (v1 > v2) - (v1 < v2);
    7013             :                                         break;
    7014           0 :                                 case 4:
    7015           0 :                                         if (v2 < 0x10000)
    7016             :                                                 return 1;
    7017           0 :                                         if (x1)
    7018           0 :                                                 v1 = ((x1[-4] & 0x07) << 18) | ((x1[-3] & 0x3F) << 12) | ((x1[-2] & 0x3F) << 6) | (x1[-1] & 0x3F);
    7019             :                                         else
    7020           0 :                                                 v1 = ((s1[-4] & 0x07) << 18) | ((s1[-3] & 0x3F) << 12) | ((s1[-2] & 0x3F) << 6) | (s1[-1] & 0x3F);
    7021           0 :                                         if (v1 != v2)
    7022           0 :                                                 return (v1 > v2) - (v1 < v2);
    7023             :                                         break;
    7024             :                                 default:
    7025           0 :                                         MT_UNREACHABLE();
    7026             :                                 }
    7027             :                         }
    7028   132140241 :                 } else if (v2 == 0) {
    7029          76 :                         switch (n2) {
    7030           0 :                         case 1:
    7031           0 :                                 if (v1 >= 0x80)
    7032             :                                         return 1;
    7033           0 :                                 if (x2) {
    7034           0 :                                         if (x2[-1] != v1)
    7035           0 :                                                 return (v1 > x2[-1]) - (v1 < x2[-1]);
    7036             :                                 } else {
    7037           0 :                                         if (s2[-1] != v1)
    7038           0 :                                                 return (v1 > s2[-1]) - (v1 < s2[-1]);
    7039             :                                 }
    7040             :                                 break;
    7041          71 :                         case 2:
    7042          71 :                                 if (v1 < 0x80)
    7043             :                                         return -1;
    7044          20 :                                 else if (v1 >= 0x800)
    7045             :                                         return 1;
    7046          20 :                                 if (x2)
    7047           0 :                                         v2 = ((x2[-2] & 0x1F) << 6) | (x2[-1] & 0x3F);
    7048             :                                 else
    7049          20 :                                         v2 = ((s2[-2] & 0x1F) << 6) | (s2[-1] & 0x3F);
    7050          20 :                                 if (v1 != v2)
    7051           4 :                                         return (v1 > v2) - (v1 < v2);
    7052             :                                 break;
    7053           5 :                         case 3:
    7054           5 :                                 if (v1 < 0x800)
    7055             :                                         return -1;
    7056           1 :                                 else if (v1 >= 0x10000)
    7057             :                                         return 1;
    7058           1 :                                 if (x2)
    7059           0 :                                         v2 = ((x2[-3] & 0x0F) << 12) | ((x2[-2] & 0x3F) << 6) | (x2[-1] & 0x3F);
    7060             :                                 else
    7061           1 :                                         v2 = ((s2[-3] & 0x0F) << 12) | ((s2[-2] & 0x3F) << 6) | (s2[-1] & 0x3F);
    7062           1 :                                 if (v1 != v2)
    7063           0 :                                         return (v1 > v2) - (v1 < v2);
    7064             :                                 break;
    7065           0 :                         case 4:
    7066           0 :                                 if (v1 < 0x10000)
    7067             :                                         return -1;
    7068           0 :                                 if (x2)
    7069           0 :                                         v2 = ((x2[-4] & 0x07) << 18) | ((x2[-3] & 0x3F) << 12) | ((x2[-2] & 0x3F) << 6) | (x2[-1] & 0x3F);
    7070             :                                 else
    7071           0 :                                         v2 = ((s2[-4] & 0x07) << 18) | ((s2[-3] & 0x3F) << 12) | ((s2[-2] & 0x3F) << 6) | (s2[-1] & 0x3F);
    7072           0 :                                 if (v1 != v2)
    7073           0 :                                         return (v1 > v2) - (v1 < v2);
    7074             :                                 break;
    7075             :                         default:
    7076           0 :                                 MT_UNREACHABLE();
    7077             :                         }
    7078             :                 } else {
    7079   132140165 :                         if (v1 != v2) {
    7080             :                                 /* both converted and they're not equal */
    7081   131671625 :                                 return (v1 > v2) - (v1 < v2);
    7082             :                         }
    7083             :                 }
    7084      468631 :                 if (x1 != NULL && *x1 == 0)
    7085      594926 :                         x1 = NULL;
    7086      468631 :                 if (x2 != NULL && *x2 == 0)
    7087      594161 :                         x2 = NULL;
    7088             :         }
    7089             : }
    7090             : 
    7091             : int
    7092   185682493 : GDKstrcasecmp(const char *s1, const char *s2)
    7093             : {
    7094   185682493 :         return GDKstrncasecmp(s1, s2, SIZE_MAX, SIZE_MAX);
    7095             : }
    7096             : 
    7097             : char *
    7098        2294 : GDKstrcasestr(const char *haystack, const char *needle)
    7099             : {
    7100        2294 :         size_t nlen = strlen(needle);
    7101        2294 :         if (nlen == 0)
    7102             :                 return (char *) haystack;
    7103       42287 :         while (*haystack) {
    7104       80363 :                 if ((*haystack & 0xC0) != 0x80 &&
    7105       39872 :                     GDKstrncasecmp(haystack, needle, SIZE_MAX, nlen) == 0)
    7106         498 :                         return (char *) haystack;
    7107       39993 :                 haystack++;
    7108             :         }
    7109             :         return NULL;
    7110             : }
    7111             : 
    7112             : /* The asciify table uses the same technique as the case conversion
    7113             :  * tables, except that the value that is calculated is not a codepoint.
    7114             :  * Instead it is the index into the valtab table which contains the
    7115             :  * string that is to be used to replace the asciified character.
    7116             :  * This combination of tables is derived from the command
    7117             :  * ``iconv -futf-8 -tASCII//TRANSLIT`` */
    7118             : static const char *const valtab[] = {
    7119             :         NULL,
    7120             :         [1] = " ",
    7121             :         [2] = "!",
    7122             :         [3] = "c",
    7123             :         [4] = "GBP",
    7124             :         [5] = "JPY",
    7125             :         [6] = "|",
    7126             :         [7] = "(C)",
    7127             :         [8] = "a",
    7128             :         [9] = "<<",
    7129             :         [10] = "-",
    7130             :         [11] = "(R)",
    7131             :         [12] = "+-",
    7132             :         [13] = "2",
    7133             :         [14] = "3",
    7134             :         [15] = "'",
    7135             :         [16] = "u",
    7136             :         [17] = ".",
    7137             :         [18] = ",",
    7138             :         [19] = "1",
    7139             :         [20] = "o",
    7140             :         [21] = ">>",
    7141             :         [22] = " 1/4 ",
    7142             :         [23] = " 1/2 ",
    7143             :         [24] = " 3/4 ",
    7144             :         [25] = "A",
    7145             :         [26] = "AE",
    7146             :         [27] = "C",
    7147             :         [28] = "E",
    7148             :         [29] = "I",
    7149             :         [30] = "D",
    7150             :         [31] = "N",
    7151             :         [32] = "O",
    7152             :         [33] = "x",
    7153             :         [34] = "U",
    7154             :         [35] = "Y",
    7155             :         [36] = "TH",
    7156             :         [37] = "ss",
    7157             :         [38] = "ae",
    7158             :         [39] = "e",
    7159             :         [40] = "i",
    7160             :         [41] = "d",
    7161             :         [42] = "n",
    7162             :         [43] = "/",
    7163             :         [44] = "y",
    7164             :         [45] = "th",
    7165             :         [46] = "G",
    7166             :         [47] = "g",
    7167             :         [48] = "H",
    7168             :         [49] = "h",
    7169             :         [50] = "IJ",
    7170             :         [51] = "ij",
    7171             :         [52] = "J",
    7172             :         [53] = "j",
    7173             :         [54] = "K",
    7174             :         [55] = "k",
    7175             :         [56] = "q",
    7176             :         [57] = "L",
    7177             :         [58] = "l",
    7178             :         [59] = "'n",
    7179             :         [60] = "OE",
    7180             :         [61] = "oe",
    7181             :         [62] = "R",
    7182             :         [63] = "r",
    7183             :         [64] = "S",
    7184             :         [65] = "s",
    7185             :         [66] = "T",
    7186             :         [67] = "t",
    7187             :         [68] = "W",
    7188             :         [69] = "w",
    7189             :         [70] = "Z",
    7190             :         [71] = "z",
    7191             :         [72] = "b",
    7192             :         [73] = "B",
    7193             :         [74] = "F",
    7194             :         [75] = "f",
    7195             :         [76] = "hv",
    7196             :         [77] = "OI",
    7197             :         [78] = "oi",
    7198             :         [79] = "P",
    7199             :         [80] = "p",
    7200             :         [81] = "V",
    7201             :         [82] = "LJ",
    7202             :         [83] = "Lj",
    7203             :         [84] = "lj",
    7204             :         [85] = "NJ",
    7205             :         [86] = "Nj",
    7206             :         [87] = "nj",
    7207             :         [88] = "DZ",
    7208             :         [89] = "Dz",
    7209             :         [90] = "dz",
    7210             :         [91] = "db",
    7211             :         [92] = "qp",
    7212             :         [93] = "m",
    7213             :         [94] = "v",
    7214             :         [95] = "ts",
    7215             :         [96] = "ls",
    7216             :         [97] = "lz",
    7217             :         [98] = "^",
    7218             :         [99] = "`",
    7219             :         [100] = "_",
    7220             :         [101] = ":",
    7221             :         [102] = "~",
    7222             :         [103] = "''",
    7223             :         [104] = "",
    7224             :         [105] = "M",
    7225             :         [106] = "ue",
    7226             :         [107] = "X",
    7227             :         [108] = "SS",
    7228             :         [109] = "LL",
    7229             :         [110] = "ll",
    7230             :         [111] = "--",
    7231             :         [112] = "\"",
    7232             :         [113] = ",,",
    7233             :         [114] = "+",
    7234             :         [115] = "..",
    7235             :         [116] = "...",
    7236             :         [117] = "``",
    7237             :         [118] = "```",
    7238             :         [119] = "<",
    7239             :         [120] = ">",
    7240             :         [121] = "!!",
    7241             :         [122] = "??",
    7242             :         [123] = "?!",
    7243             :         [124] = "!?",
    7244             :         [125] = "&",
    7245             :         [126] = "0",
    7246             :         [127] = "4",
    7247             :         [128] = "5",
    7248             :         [129] = "6",
    7249             :         [130] = "7",
    7250             :         [131] = "8",
    7251             :         [132] = "9",
    7252             :         [133] = "=",
    7253             :         [134] = "(",
    7254             :         [135] = ")",
    7255             :         [136] = "CE",
    7256             :         [137] = "C=",
    7257             :         [138] = "Cr",
    7258             :         [139] = "Fr.",
    7259             :         [140] = "L.",
    7260             :         [141] = "Pts",
    7261             :         [142] = "Rs",
    7262             :         [143] = "KRW",
    7263             :         [144] = "ILS",
    7264             :         [145] = "Dong",
    7265             :         [146] = "EUR",
    7266             :         [147] = "GRD",
    7267             :         [148] = "PHP",
    7268             :         [149] = "UAH",
    7269             :         [150] = "KZT",
    7270             :         [151] = "INR",
    7271             :         [152] = "TL",
    7272             :         [153] = "RUB",
    7273             :         [154] = "GEL",
    7274             :         [155] = "a/c",
    7275             :         [156] = "a/s",
    7276             :         [157] = "c/o",
    7277             :         [158] = "c/u",
    7278             :         [159] = "No",
    7279             :         [160] = "Q",
    7280             :         [161] = "Rx",
    7281             :         [162] = "SM",
    7282             :         [163] = "TEL",
    7283             :         [164] = "(TM)",
    7284             :         [165] = "FAX",
    7285             :         [166] = " 1/7 ",
    7286             :         [167] = " 1/9 ",
    7287             :         [168] = " 1/10 ",
    7288             :         [169] = " 1/3 ",
    7289             :         [170] = " 2/3 ",
    7290             :         [171] = " 1/5 ",
    7291             :         [172] = " 2/5 ",
    7292             :         [173] = " 3/5 ",
    7293             :         [174] = " 4/5 ",
    7294             :         [175] = " 1/6 ",
    7295             :         [176] = " 5/6 ",
    7296             :         [177] = " 1/8 ",
    7297             :         [178] = " 3/8 ",
    7298             :         [179] = " 5/8 ",
    7299             :         [180] = " 7/8 ",
    7300             :         [181] = " 1/ ",
    7301             :         [182] = "II",
    7302             :         [183] = "III",
    7303             :         [184] = "IV",
    7304             :         [185] = "VI",
    7305             :         [186] = "VII",
    7306             :         [187] = "VIII",
    7307             :         [188] = "IX",
    7308             :         [189] = "XI",
    7309             :         [190] = "XII",
    7310             :         [191] = "ii",
    7311             :         [192] = "iii",
    7312             :         [193] = "iv",
    7313             :         [194] = "vi",
    7314             :         [195] = "vii",
    7315             :         [196] = "viii",
    7316             :         [197] = "ix",
    7317             :         [198] = "xi",
    7318             :         [199] = "xii",
    7319             :         [200] = " 0/3 ",
    7320             :         [201] = "<-",
    7321             :         [202] = "->",
    7322             :         [203] = "<->",
    7323             :         [204] = "!<->",
    7324             :         [205] = "!<=",
    7325             :         [206] = "!<=>",
    7326             :         [207] = "!=>",
    7327             :         [208] = "<=",
    7328             :         [209] = "=>",
    7329             :         [210] = "<=>",
    7330             :         [211] = "\\",
    7331             :         [212] = "*",
    7332             :         [213] = "||",
    7333             :         [214] = "!~",
    7334             :         [215] = "!~-",
    7335             :         [216] = "!~=",
    7336             :         [217] = "!~~",
    7337             :         [218] = "!=",
    7338             :         [219] = "!==",
    7339             :         [220] = ">=",
    7340             :         [221] = "!<",
    7341             :         [222] = "!>",
    7342             :         [223] = "!>=",
    7343             :         [224] = "!<~",
    7344             :         [225] = "!>~",
    7345             :         [226] = "!<>",
    7346             :         [227] = "!><",
    7347             :         [228] = "<<<",
    7348             :         [229] = ">>>",
    7349             :         [230] = "NUL",
    7350             :         [231] = "SOH",
    7351             :         [232] = "STX",
    7352             :         [233] = "ETX",
    7353             :         [234] = "EOT",
    7354             :         [235] = "ENQ",
    7355             :         [236] = "ACK",
    7356             :         [237] = "BEL",
    7357             :         [238] = "BS",
    7358             :         [239] = "HT",
    7359             :         [240] = "LF",
    7360             :         [241] = "VT",
    7361             :         [242] = "FF",
    7362             :         [243] = "CR",
    7363             :         [244] = "SO",
    7364             :         [245] = "SI",
    7365             :         [246] = "DLE",
    7366             :         [247] = "DC1",
    7367             :         [248] = "DC2",
    7368             :         [249] = "DC3",
    7369             :         [250] = "DC4",
    7370             :         [251] = "NAK",
    7371             :         [252] = "SYN",
    7372             :         [253] = "ETB",
    7373             :         [254] = "CAN",
    7374             :         [255] = "EM",
    7375             :         [256] = "SUB",
    7376             :         [257] = "ESC",
    7377             :         [258] = "FS",
    7378             :         [259] = "GS",
    7379             :         [260] = "RS",
    7380             :         [261] = "US",
    7381             :         [262] = "SP",
    7382             :         [263] = "DEL",
    7383             :         [264] = "NL",
    7384             :         [265] = "(1)",
    7385             :         [266] = "(2)",
    7386             :         [267] = "(3)",
    7387             :         [268] = "(4)",
    7388             :         [269] = "(5)",
    7389             :         [270] = "(6)",
    7390             :         [271] = "(7)",
    7391             :         [272] = "(8)",
    7392             :         [273] = "(9)",
    7393             :         [274] = "(10)",
    7394             :         [275] = "(11)",
    7395             :         [276] = "(12)",
    7396             :         [277] = "(13)",
    7397             :         [278] = "(14)",
    7398             :         [279] = "(15)",
    7399             :         [280] = "(16)",
    7400             :         [281] = "(17)",
    7401             :         [282] = "(18)",
    7402             :         [283] = "(19)",
    7403             :         [284] = "(20)",
    7404             :         [285] = "1.",
    7405             :         [286] = "2.",
    7406             :         [287] = "3.",
    7407             :         [288] = "4.",
    7408             :         [289] = "5.",
    7409             :         [290] = "6.",
    7410             :         [291] = "7.",
    7411             :         [292] = "8.",
    7412             :         [293] = "9.",
    7413             :         [294] = "10.",
    7414             :         [295] = "11.",
    7415             :         [296] = "12.",
    7416             :         [297] = "13.",
    7417             :         [298] = "14.",
    7418             :         [299] = "15.",
    7419             :         [300] = "16.",
    7420             :         [301] = "17.",
    7421             :         [302] = "18.",
    7422             :         [303] = "19.",
    7423             :         [304] = "20.",
    7424             :         [305] = "(a)",
    7425             :         [306] = "(b)",
    7426             :         [307] = "(c)",
    7427             :         [308] = "(d)",
    7428             :         [309] = "(e)",
    7429             :         [310] = "(f)",
    7430             :         [311] = "(g)",
    7431             :         [312] = "(h)",
    7432             :         [313] = "(i)",
    7433             :         [314] = "(j)",
    7434             :         [315] = "(k)",
    7435             :         [316] = "(l)",
    7436             :         [317] = "(m)",
    7437             :         [318] = "(n)",
    7438             :         [319] = "(o)",
    7439             :         [320] = "(p)",
    7440             :         [321] = "(q)",
    7441             :         [322] = "(r)",
    7442             :         [323] = "(s)",
    7443             :         [324] = "(t)",
    7444             :         [325] = "(u)",
    7445             :         [326] = "(v)",
    7446             :         [327] = "(w)",
    7447             :         [328] = "(x)",
    7448             :         [329] = "(y)",
    7449             :         [330] = "(z)",
    7450             :         [331] = "(A)",
    7451             :         [332] = "(B)",
    7452             :         [333] = "(D)",
    7453             :         [334] = "(E)",
    7454             :         [335] = "(F)",
    7455             :         [336] = "(G)",
    7456             :         [337] = "(H)",
    7457             :         [338] = "(I)",
    7458             :         [339] = "(J)",
    7459             :         [340] = "(K)",
    7460             :         [341] = "(L)",
    7461             :         [342] = "(M)",
    7462             :         [343] = "(N)",
    7463             :         [344] = "(O)",
    7464             :         [345] = "(P)",
    7465             :         [346] = "(Q)",
    7466             :         [347] = "(S)",
    7467             :         [348] = "(T)",
    7468             :         [349] = "(U)",
    7469             :         [350] = "(V)",
    7470             :         [351] = "(W)",
    7471             :         [352] = "(X)",
    7472             :         [353] = "(Y)",
    7473             :         [354] = "(Z)",
    7474             :         [355] = "(0)",
    7475             :         [356] = ":)",
    7476             :         [357] = "<3",
    7477             :         [358] = "[|",
    7478             :         [359] = "|]",
    7479             :         [360] = "((",
    7480             :         [361] = "))",
    7481             :         [362] = "|||",
    7482             :         [363] = "{|",
    7483             :         [364] = "|}",
    7484             :         [365] = "(|",
    7485             :         [366] = "|)",
    7486             :         [367] = "<|",
    7487             :         [368] = "|>",
    7488             :         [369] = "#",
    7489             :         [370] = "::=",
    7490             :         [371] = "==",
    7491             :         [372] = "===",
    7492             :         [373] = "PTE",
    7493             :         [374] = "(21)",
    7494             :         [375] = "(22)",
    7495             :         [376] = "(23)",
    7496             :         [377] = "(24)",
    7497             :         [378] = "(25)",
    7498             :         [379] = "(26)",
    7499             :         [380] = "(27)",
    7500             :         [381] = "(28)",
    7501             :         [382] = "(29)",
    7502             :         [383] = "(30)",
    7503             :         [384] = "(31)",
    7504             :         [385] = "(32)",
    7505             :         [386] = "(33)",
    7506             :         [387] = "(34)",
    7507             :         [388] = "(35)",
    7508             :         [389] = "(36)",
    7509             :         [390] = "(37)",
    7510             :         [391] = "(38)",
    7511             :         [392] = "(39)",
    7512             :         [393] = "(40)",
    7513             :         [394] = "(41)",
    7514             :         [395] = "(42)",
    7515             :         [396] = "(43)",
    7516             :         [397] = "(44)",
    7517             :         [398] = "(45)",
    7518             :         [399] = "(46)",
    7519             :         [400] = "(47)",
    7520             :         [401] = "(48)",
    7521             :         [402] = "(49)",
    7522             :         [403] = "(50)",
    7523             :         [404] = "Hg",
    7524             :         [405] = "erg",
    7525             :         [406] = "eV",
    7526             :         [407] = "LTD",
    7527             :         [408] = "hPa",
    7528             :         [409] = "da",
    7529             :         [410] = "AU",
    7530             :         [411] = "bar",
    7531             :         [412] = "oV",
    7532             :         [413] = "pc",
    7533             :         [414] = "dm",
    7534             :         [415] = "dm^2",
    7535             :         [416] = "dm^3",
    7536             :         [417] = "IU",
    7537             :         [418] = "pA",
    7538             :         [419] = "nA",
    7539             :         [420] = "uA",
    7540             :         [421] = "mA",
    7541             :         [422] = "kA",
    7542             :         [423] = "KB",
    7543             :         [424] = "MB",
    7544             :         [425] = "GB",
    7545             :         [426] = "cal",
    7546             :         [427] = "kcal",
    7547             :         [428] = "pF",
    7548             :         [429] = "nF",
    7549             :         [430] = "uF",
    7550             :         [431] = "ug",
    7551             :         [432] = "mg",
    7552             :         [433] = "kg",
    7553             :         [434] = "Hz",
    7554             :         [435] = "kHz",
    7555             :         [436] = "MHz",
    7556             :         [437] = "GHz",
    7557             :         [438] = "THz",
    7558             :         [439] = "ul",
    7559             :         [440] = "ml",
    7560             :         [441] = "dl",
    7561             :         [442] = "kl",
    7562             :         [443] = "fm",
    7563             :         [444] = "nm",
    7564             :         [445] = "um",
    7565             :         [446] = "mm",
    7566             :         [447] = "cm",
    7567             :         [448] = "km",
    7568             :         [449] = "mm^2",
    7569             :         [450] = "cm^2",
    7570             :         [451] = "m^2",
    7571             :         [452] = "km^2",
    7572             :         [453] = "mm^3",
    7573             :         [454] = "cm^3",
    7574             :         [455] = "m^3",
    7575             :         [456] = "km^3",
    7576             :         [457] = "m/s",
    7577             :         [458] = "m/s^2",
    7578             :         [459] = "Pa",
    7579             :         [460] = "kPa",
    7580             :         [461] = "MPa",
    7581             :         [462] = "GPa",
    7582             :         [463] = "rad",
    7583             :         [464] = "rad/s",
    7584             :         [465] = "rad/s^2",
    7585             :         [466] = "ps",
    7586             :         [467] = "ns",
    7587             :         [468] = "us",
    7588             :         [469] = "ms",
    7589             :         [470] = "pV",
    7590             :         [471] = "nV",
    7591             :         [472] = "uV",
    7592             :         [473] = "mV",
    7593             :         [474] = "kV",
    7594             :         [475] = "MV",
    7595             :         [476] = "pW",
    7596             :         [477] = "nW",
    7597             :         [478] = "uW",
    7598             :         [479] = "mW",
    7599             :         [480] = "kW",
    7600             :         [481] = "MW",
    7601             :         [482] = "a.m.",
    7602             :         [483] = "Bq",
    7603             :         [484] = "cc",
    7604             :         [485] = "cd",
    7605             :         [486] = "C/kg",
    7606             :         [487] = "Co.",
    7607             :         [488] = "dB",
    7608             :         [489] = "Gy",
    7609             :         [490] = "ha",
    7610             :         [491] = "HP",
    7611             :         [492] = "in",
    7612             :         [493] = "KK",
    7613             :         [494] = "KM",
    7614             :         [495] = "kt",
    7615             :         [496] = "lm",
    7616             :         [497] = "ln",
    7617             :         [498] = "log",
    7618             :         [499] = "lx",
    7619             :         [500] = "mb",
    7620             :         [501] = "mil",
    7621             :         [502] = "mol",
    7622             :         [503] = "PH",
    7623             :         [504] = "p.m.",
    7624             :         [505] = "PPM",
    7625             :         [506] = "PR",
    7626             :         [507] = "sr",
    7627             :         [508] = "Sv",
    7628             :         [509] = "Wb",
    7629             :         [510] = "V/m",
    7630             :         [511] = "A/m",
    7631             :         [512] = "gal",
    7632             :         [513] = "ff",
    7633             :         [514] = "fi",
    7634             :         [515] = "fl",
    7635             :         [516] = "ffi",
    7636             :         [517] = "ffl",
    7637             :         [518] = "st",
    7638             :         [519] = ";",
    7639             :         [520] = "{",
    7640             :         [521] = "}",
    7641             :         [522] = "[",
    7642             :         [523] = "]",
    7643             :         [524] = "$",
    7644             :         [525] = "%",
    7645             :         [526] = "@",
    7646             : };
    7647             : static const int16_t asciify[4544] = {
    7648             :         [0xC2] = 256 - 0x80,    /* 302 ... */
    7649             :         [256+0x20] = 1, /* U+00A0: NO-BREAK SPACE */
    7650             :         [256+0x21] = 2, /* U+00A1: INVERTED EXCLAMATION MARK */
    7651             :         [256+0x22] = 3, /* U+00A2: CENT SIGN */
    7652             :         [256+0x23] = 4, /* U+00A3: POUND SIGN */
    7653             :         [256+0x25] = 5, /* U+00A5: YEN SIGN */
    7654             :         [256+0x26] = 6, /* U+00A6: BROKEN BAR */
    7655             :         [256+0x29] = 7, /* U+00A9: COPYRIGHT SIGN */
    7656             :         [256+0x2A] = 8, /* U+00AA: FEMININE ORDINAL INDICATOR */
    7657             :         [256+0x2B] = 9, /* U+00AB: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
    7658             :         [256+0x2C] = 2, /* U+00AC: NOT SIGN */
    7659             :         [256+0x2D] = 10,        /* U+00AD: SOFT HYPHEN */
    7660             :         [256+0x2E] = 11,        /* U+00AE: REGISTERED SIGN */
    7661             :         [256+0x31] = 12,        /* U+00B1: PLUS-MINUS SIGN */
    7662             :         [256+0x32] = 13,        /* U+00B2: SUPERSCRIPT TWO */
    7663             :         [256+0x33] = 14,        /* U+00B3: SUPERSCRIPT THREE */
    7664             :         [256+0x34] = 15,        /* U+00B4: ACUTE ACCENT */
    7665             :         [256+0x35] = 16,        /* U+00B5: MICRO SIGN */
    7666             :         [256+0x37] = 17,        /* U+00B7: MIDDLE DOT */
    7667             :         [256+0x38] = 18,        /* U+00B8: CEDILLA */
    7668             :         [256+0x39] = 19,        /* U+00B9: SUPERSCRIPT ONE */
    7669             :         [256+0x3A] = 20,        /* U+00BA: MASCULINE ORDINAL INDICATOR */
    7670             :         [256+0x3B] = 21,        /* U+00BB: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
    7671             :         [256+0x3C] = 22,        /* U+00BC: VULGAR FRACTION ONE QUARTER */
    7672             :         [256+0x3D] = 23,        /* U+00BD: VULGAR FRACTION ONE HALF */
    7673             :         [256+0x3E] = 24,        /* U+00BE: VULGAR FRACTION THREE QUARTERS */
    7674             :         [0xC3] = 320 - 0x80,    /* 303 ... */
    7675             :         [320+0x00] = 25,        /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
    7676             :         [320+0x01] = 25,        /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
    7677             :         [320+0x02] = 25,        /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
    7678             :         [320+0x03] = 25,        /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
    7679             :         [320+0x04] = 25,        /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
    7680             :         [320+0x05] = 25,        /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
    7681             :         [320+0x06] = 26,        /* U+00C6: LATIN CAPITAL LETTER AE */
    7682             :         [320+0x07] = 27,        /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
    7683             :         [320+0x08] = 28,        /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
    7684             :         [320+0x09] = 28,        /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
    7685             :         [320+0x0A] = 28,        /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
    7686             :         [320+0x0B] = 28,        /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
    7687             :         [320+0x0C] = 29,        /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
    7688             :         [320+0x0D] = 29,        /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
    7689             :         [320+0x0E] = 29,        /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
    7690             :         [320+0x0F] = 29,        /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
    7691             :         [320+0x10] = 30,        /* U+00D0: LATIN CAPITAL LETTER ETH */
    7692             :         [320+0x11] = 31,        /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
    7693             :         [320+0x12] = 32,        /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
    7694             :         [320+0x13] = 32,        /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
    7695             :         [320+0x14] = 32,        /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
    7696             :         [320+0x15] = 32,        /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
    7697             :         [320+0x16] = 32,        /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
    7698             :         [320+0x17] = 33,        /* U+00D7: MULTIPLICATION SIGN */
    7699             :         [320+0x18] = 32,        /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
    7700             :         [320+0x19] = 34,        /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
    7701             :         [320+0x1A] = 34,        /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
    7702             :         [320+0x1B] = 34,        /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
    7703             :         [320+0x1C] = 34,        /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
    7704             :         [320+0x1D] = 35,        /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
    7705             :         [320+0x1E] = 36,        /* U+00DE: LATIN CAPITAL LETTER THORN */
    7706             :         [320+0x1F] = 37,        /* U+00DF: LATIN SMALL LETTER SHARP S */
    7707             :         [320+0x20] = 8, /* U+00E0: LATIN SMALL LETTER A WITH GRAVE */
    7708             :         [320+0x21] = 8, /* U+00E1: LATIN SMALL LETTER A WITH ACUTE */
    7709             :         [320+0x22] = 8, /* U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX */
    7710             :         [320+0x23] = 8, /* U+00E3: LATIN SMALL LETTER A WITH TILDE */
    7711             :         [320+0x24] = 8, /* U+00E4: LATIN SMALL LETTER A WITH DIAERESIS */
    7712             :         [320+0x25] = 8, /* U+00E5: LATIN SMALL LETTER A WITH RING ABOVE */
    7713             :         [320+0x26] = 38,        /* U+00E6: LATIN SMALL LETTER AE */
    7714             :         [320+0x27] = 3, /* U+00E7: LATIN SMALL LETTER C WITH CEDILLA */
    7715             :         [320+0x28] = 39,        /* U+00E8: LATIN SMALL LETTER E WITH GRAVE */
    7716             :         [320+0x29] = 39,        /* U+00E9: LATIN SMALL LETTER E WITH ACUTE */
    7717             :         [320+0x2A] = 39,        /* U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX */
    7718             :         [320+0x2B] = 39,        /* U+00EB: LATIN SMALL LETTER E WITH DIAERESIS */
    7719             :         [320+0x2C] = 40,        /* U+00EC: LATIN SMALL LETTER I WITH GRAVE */
    7720             :         [320+0x2D] = 40,        /* U+00ED: LATIN SMALL LETTER I WITH ACUTE */
    7721             :         [320+0x2E] = 40,        /* U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX */
    7722             :         [320+0x2F] = 40,        /* U+00EF: LATIN SMALL LETTER I WITH DIAERESIS */
    7723             :         [320+0x30] = 41,        /* U+00F0: LATIN SMALL LETTER ETH */
    7724             :         [320+0x31] = 42,        /* U+00F1: LATIN SMALL LETTER N WITH TILDE */
    7725             :         [320+0x32] = 20,        /* U+00F2: LATIN SMALL LETTER O WITH GRAVE */
    7726             :         [320+0x33] = 20,        /* U+00F3: LATIN SMALL LETTER O WITH ACUTE */
    7727             :         [320+0x34] = 20,        /* U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX */
    7728             :         [320+0x35] = 20,        /* U+00F5: LATIN SMALL LETTER O WITH TILDE */
    7729             :         [320+0x36] = 20,        /* U+00F6: LATIN SMALL LETTER O WITH DIAERESIS */
    7730             :         [320+0x37] = 43,        /* U+00F7: DIVISION SIGN */
    7731             :         [320+0x38] = 20,        /* U+00F8: LATIN SMALL LETTER O WITH STROKE */
    7732             :         [320+0x39] = 16,        /* U+00F9: LATIN SMALL LETTER U WITH GRAVE */
    7733             :         [320+0x3A] = 16,        /* U+00FA: LATIN SMALL LETTER U WITH ACUTE */
    7734             :         [320+0x3B] = 16,        /* U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX */
    7735             :         [320+0x3C] = 16,        /* U+00FC: LATIN SMALL LETTER U WITH DIAERESIS */
    7736             :         [320+0x3D] = 44,        /* U+00FD: LATIN SMALL LETTER Y WITH ACUTE */
    7737             :         [320+0x3E] = 45,        /* U+00FE: LATIN SMALL LETTER THORN */
    7738             :         [320+0x3F] = 44,        /* U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS */
    7739             :         [0xC4] = 384 - 0x80,    /* 304 ... */
    7740             :         [384+0x00] = 25,        /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
    7741             :         [384+0x01] = 8, /* U+0101: LATIN SMALL LETTER A WITH MACRON */
    7742             :         [384+0x02] = 25,        /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
    7743             :         [384+0x03] = 8, /* U+0103: LATIN SMALL LETTER A WITH BREVE */
    7744             :         [384+0x04] = 25,        /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
    7745             :         [384+0x05] = 8, /* U+0105: LATIN SMALL LETTER A WITH OGONEK */
    7746             :         [384+0x06] = 27,        /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
    7747             :         [384+0x07] = 3, /* U+0107: LATIN SMALL LETTER C WITH ACUTE */
    7748             :         [384+0x08] = 27,        /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
    7749             :         [384+0x09] = 3, /* U+0109: LATIN SMALL LETTER C WITH CIRCUMFLEX */
    7750             :         [384+0x0A] = 27,        /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
    7751             :         [384+0x0B] = 3, /* U+010B: LATIN SMALL LETTER C WITH DOT ABOVE */
    7752             :         [384+0x0C] = 27,        /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
    7753             :         [384+0x0D] = 3, /* U+010D: LATIN SMALL LETTER C WITH CARON */
    7754             :         [384+0x0E] = 30,        /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
    7755             :         [384+0x0F] = 41,        /* U+010F: LATIN SMALL LETTER D WITH CARON */
    7756             :         [384+0x10] = 30,        /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
    7757             :         [384+0x11] = 41,        /* U+0111: LATIN SMALL LETTER D WITH STROKE */
    7758             :         [384+0x12] = 28,        /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
    7759             :         [384+0x13] = 39,        /* U+0113: LATIN SMALL LETTER E WITH MACRON */
    7760             :         [384+0x14] = 28,        /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
    7761             :         [384+0x15] = 39,        /* U+0115: LATIN SMALL LETTER E WITH BREVE */
    7762             :         [384+0x16] = 28,        /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
    7763             :         [384+0x17] = 39,        /* U+0117: LATIN SMALL LETTER E WITH DOT ABOVE */
    7764             :         [384+0x18] = 28,        /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
    7765             :         [384+0x19] = 39,        /* U+0119: LATIN SMALL LETTER E WITH OGONEK */
    7766             :         [384+0x1A] = 28,        /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
    7767             :         [384+0x1B] = 39,        /* U+011B: LATIN SMALL LETTER E WITH CARON */
    7768             :         [384+0x1C] = 46,        /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
    7769             :         [384+0x1D] = 47,        /* U+011D: LATIN SMALL LETTER G WITH CIRCUMFLEX */
    7770             :         [384+0x1E] = 46,        /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
    7771             :         [384+0x1F] = 47,        /* U+011F: LATIN SMALL LETTER G WITH BREVE */
    7772             :         [384+0x20] = 46,        /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
    7773             :         [384+0x21] = 47,        /* U+0121: LATIN SMALL LETTER G WITH DOT ABOVE */
    7774             :         [384+0x22] = 46,        /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
    7775             :         [384+0x23] = 47,        /* U+0123: LATIN SMALL LETTER G WITH CEDILLA */
    7776             :         [384+0x24] = 48,        /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
    7777             :         [384+0x25] = 49,        /* U+0125: LATIN SMALL LETTER H WITH CIRCUMFLEX */
    7778             :         [384+0x26] = 48,        /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
    7779             :         [384+0x27] = 49,        /* U+0127: LATIN SMALL LETTER H WITH STROKE */
    7780             :         [384+0x28] = 29,        /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
    7781             :         [384+0x29] = 40,        /* U+0129: LATIN SMALL LETTER I WITH TILDE */
    7782             :         [384+0x2A] = 29,        /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
    7783             :         [384+0x2B] = 40,        /* U+012B: LATIN SMALL LETTER I WITH MACRON */
    7784             :         [384+0x2C] = 29,        /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
    7785             :         [384+0x2D] = 40,        /* U+012D: LATIN SMALL LETTER I WITH BREVE */
    7786             :         [384+0x2E] = 29,        /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
    7787             :         [384+0x2F] = 40,        /* U+012F: LATIN SMALL LETTER I WITH OGONEK */
    7788             :         [384+0x30] = 29,        /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
    7789             :         [384+0x31] = 40,        /* U+0131: LATIN SMALL LETTER DOTLESS I */
    7790             :         [384+0x32] = 50,        /* U+0132: LATIN CAPITAL LIGATURE IJ */
    7791             :         [384+0x33] = 51,        /* U+0133: LATIN SMALL LIGATURE IJ */
    7792             :         [384+0x34] = 52,        /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
    7793             :         [384+0x35] = 53,        /* U+0135: LATIN SMALL LETTER J WITH CIRCUMFLEX */
    7794             :         [384+0x36] = 54,        /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
    7795             :         [384+0x37] = 55,        /* U+0137: LATIN SMALL LETTER K WITH CEDILLA */
    7796             :         [384+0x38] = 56,        /* U+0138: LATIN SMALL LETTER KRA */
    7797             :         [384+0x39] = 57,        /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
    7798             :         [384+0x3A] = 58,        /* U+013A: LATIN SMALL LETTER L WITH ACUTE */
    7799             :         [384+0x3B] = 57,        /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
    7800             :         [384+0x3C] = 58,        /* U+013C: LATIN SMALL LETTER L WITH CEDILLA */
    7801             :         [384+0x3D] = 57,        /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
    7802             :         [384+0x3E] = 58,        /* U+013E: LATIN SMALL LETTER L WITH CARON */
    7803             :         [384+0x3F] = 57,        /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
    7804             :         [0xC5] = 448 - 0x80,    /* 305 ... */
    7805             :         [448+0x00] = 58,        /* U+0140: LATIN SMALL LETTER L WITH MIDDLE DOT */
    7806             :         [448+0x01] = 57,        /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
    7807             :         [448+0x02] = 58,        /* U+0142: LATIN SMALL LETTER L WITH STROKE */
    7808             :         [448+0x03] = 31,        /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
    7809             :         [448+0x04] = 42,        /* U+0144: LATIN SMALL LETTER N WITH ACUTE */
    7810             :         [448+0x05] = 31,        /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
    7811             :         [448+0x06] = 42,        /* U+0146: LATIN SMALL LETTER N WITH CEDILLA */
    7812             :         [448+0x07] = 31,        /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
    7813             :         [448+0x08] = 42,        /* U+0148: LATIN SMALL LETTER N WITH CARON */
    7814             :         [448+0x09] = 59,        /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
    7815             :         [448+0x0A] = 31,        /* U+014A: LATIN CAPITAL LETTER ENG */
    7816             :         [448+0x0B] = 42,        /* U+014B: LATIN SMALL LETTER ENG */
    7817             :         [448+0x0C] = 32,        /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
    7818             :         [448+0x0D] = 20,        /* U+014D: LATIN SMALL LETTER O WITH MACRON */
    7819             :         [448+0x0E] = 32,        /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
    7820             :         [448+0x0F] = 20,        /* U+014F: LATIN SMALL LETTER O WITH BREVE */
    7821             :         [448+0x10] = 32,        /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
    7822             :         [448+0x11] = 20,        /* U+0151: LATIN SMALL LETTER O WITH DOUBLE ACUTE */
    7823             :         [448+0x12] = 60,        /* U+0152: LATIN CAPITAL LIGATURE OE */
    7824             :         [448+0x13] = 61,        /* U+0153: LATIN SMALL LIGATURE OE */
    7825             :         [448+0x14] = 62,        /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
    7826             :         [448+0x15] = 63,        /* U+0155: LATIN SMALL LETTER R WITH ACUTE */
    7827             :         [448+0x16] = 62,        /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
    7828             :         [448+0x17] = 63,        /* U+0157: LATIN SMALL LETTER R WITH CEDILLA */
    7829             :         [448+0x18] = 62,        /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
    7830             :         [448+0x19] = 63,        /* U+0159: LATIN SMALL LETTER R WITH CARON */
    7831             :         [448+0x1A] = 64,        /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
    7832             :         [448+0x1B] = 65,        /* U+015B: LATIN SMALL LETTER S WITH ACUTE */
    7833             :         [448+0x1C] = 64,        /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
    7834             :         [448+0x1D] = 65,        /* U+015D: LATIN SMALL LETTER S WITH CIRCUMFLEX */
    7835             :         [448+0x1E] = 64,        /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
    7836             :         [448+0x1F] = 65,        /* U+015F: LATIN SMALL LETTER S WITH CEDILLA */
    7837             :         [448+0x20] = 64,        /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
    7838             :         [448+0x21] = 65,        /* U+0161: LATIN SMALL LETTER S WITH CARON */
    7839             :         [448+0x22] = 66,        /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
    7840             :         [448+0x23] = 67,        /* U+0163: LATIN SMALL LETTER T WITH CEDILLA */
    7841             :         [448+0x24] = 66,        /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
    7842             :         [448+0x25] = 67,        /* U+0165: LATIN SMALL LETTER T WITH CARON */
    7843             :         [448+0x26] = 66,        /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
    7844             :         [448+0x27] = 67,        /* U+0167: LATIN SMALL LETTER T WITH STROKE */
    7845             :         [448+0x28] = 34,        /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
    7846             :         [448+0x29] = 16,        /* U+0169: LATIN SMALL LETTER U WITH TILDE */
    7847             :         [448+0x2A] = 34,        /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
    7848             :         [448+0x2B] = 16,        /* U+016B: LATIN SMALL LETTER U WITH MACRON */
    7849             :         [448+0x2C] = 34,        /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
    7850             :         [448+0x2D] = 16,        /* U+016D: LATIN SMALL LETTER U WITH BREVE */
    7851             :         [448+0x2E] = 34,        /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
    7852             :         [448+0x2F] = 16,        /* U+016F: LATIN SMALL LETTER U WITH RING ABOVE */
    7853             :         [448+0x30] = 34,        /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
    7854             :         [448+0x31] = 16,        /* U+0171: LATIN SMALL LETTER U WITH DOUBLE ACUTE */
    7855             :         [448+0x32] = 34,        /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
    7856             :         [448+0x33] = 16,        /* U+0173: LATIN SMALL LETTER U WITH OGONEK */
    7857             :         [448+0x34] = 68,        /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
    7858             :         [448+0x35] = 69,        /* U+0175: LATIN SMALL LETTER W WITH CIRCUMFLEX */
    7859             :         [448+0x36] = 35,        /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
    7860             :         [448+0x37] = 44,        /* U+0177: LATIN SMALL LETTER Y WITH CIRCUMFLEX */
    7861             :         [448+0x38] = 35,        /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
    7862             :         [448+0x39] = 70,        /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
    7863             :         [448+0x3A] = 71,        /* U+017A: LATIN SMALL LETTER Z WITH ACUTE */
    7864             :         [448+0x3B] = 70,        /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
    7865             :         [448+0x3C] = 71,        /* U+017C: LATIN SMALL LETTER Z WITH DOT ABOVE */
    7866             :         [448+0x3D] = 70,        /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
    7867             :         [448+0x3E] = 71,        /* U+017E: LATIN SMALL LETTER Z WITH CARON */
    7868             :         [448+0x3F] = 65,        /* U+017F: LATIN SMALL LETTER LONG S */
    7869             :         [0xC6] = 512 - 0x80,    /* 306 ... */
    7870             :         [512+0x00] = 72,        /* U+0180: LATIN SMALL LETTER B WITH STROKE */
    7871             :         [512+0x01] = 73,        /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
    7872             :         [512+0x02] = 73,        /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
    7873             :         [512+0x03] = 72,        /* U+0183: LATIN SMALL LETTER B WITH TOPBAR */
    7874             :         [512+0x07] = 27,        /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
    7875             :         [512+0x08] = 3, /* U+0188: LATIN SMALL LETTER C WITH HOOK */
    7876             :         [512+0x09] = 30,        /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
    7877             :         [512+0x0A] = 30,        /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
    7878             :         [512+0x0B] = 30,        /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
    7879             :         [512+0x0C] = 41,        /* U+018C: LATIN SMALL LETTER D WITH TOPBAR */
    7880             :         [512+0x10] = 28,        /* U+0190: LATIN CAPITAL LETTER OPEN E */
    7881             :         [512+0x11] = 74,        /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
    7882             :         [512+0x12] = 75,        /* U+0192: LATIN SMALL LETTER F WITH HOOK */
    7883             :         [512+0x13] = 46,        /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
    7884             :         [512+0x15] = 76,        /* U+0195: LATIN SMALL LETTER HV */
    7885             :         [512+0x16] = 29,        /* U+0196: LATIN CAPITAL LETTER IOTA */
    7886             :         [512+0x17] = 29,        /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
    7887             :         [512+0x18] = 54,        /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
    7888             :         [512+0x19] = 55,        /* U+0199: LATIN SMALL LETTER K WITH HOOK */
    7889             :         [512+0x1A] = 58,        /* U+019A: LATIN SMALL LETTER L WITH BAR */
    7890             :         [512+0x1D] = 31,        /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
    7891             :         [512+0x1E] = 42,        /* U+019E: LATIN SMALL LETTER N WITH LONG RIGHT LEG */
    7892             :         [512+0x20] = 32,        /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
    7893             :         [512+0x21] = 20,        /* U+01A1: LATIN SMALL LETTER O WITH HORN */
    7894             :         [512+0x22] = 77,        /* U+01A2: LATIN CAPITAL LETTER OI */
    7895             :         [512+0x23] = 78,        /* U+01A3: LATIN SMALL LETTER OI */
    7896             :         [512+0x24] = 79,        /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
    7897             :         [512+0x25] = 80,        /* U+01A5: LATIN SMALL LETTER P WITH HOOK */
    7898             :         [512+0x2B] = 67,        /* U+01AB: LATIN SMALL LETTER T WITH PALATAL HOOK */
    7899             :         [512+0x2C] = 66,        /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
    7900             :         [512+0x2D] = 67,        /* U+01AD: LATIN SMALL LETTER T WITH HOOK */
    7901             :         [512+0x2E] = 66,        /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
    7902             :         [512+0x2F] = 34,        /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
    7903             :         [512+0x30] = 16,        /* U+01B0: LATIN SMALL LETTER U WITH HORN */
    7904             :         [512+0x32] = 81,        /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
    7905             :         [512+0x33] = 35,        /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
    7906             :         [512+0x34] = 44,        /* U+01B4: LATIN SMALL LETTER Y WITH HOOK */
    7907             :         [512+0x35] = 70,        /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
    7908             :         [512+0x36] = 71,        /* U+01B6: LATIN SMALL LETTER Z WITH STROKE */
    7909             :         [0xC7] = 576 - 0x80,    /* 307 ... */
    7910             :         [576+0x07] = 82,        /* U+01C7: LATIN CAPITAL LETTER LJ */
    7911             :         [576+0x08] = 83,        /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
    7912             :         [576+0x09] = 84,        /* U+01C9: LATIN SMALL LETTER LJ */
    7913             :         [576+0x0A] = 85,        /* U+01CA: LATIN CAPITAL LETTER NJ */
    7914             :         [576+0x0B] = 86,        /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
    7915             :         [576+0x0C] = 87,        /* U+01CC: LATIN SMALL LETTER NJ */
    7916             :         [576+0x0D] = 25,        /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
    7917             :         [576+0x0E] = 8, /* U+01CE: LATIN SMALL LETTER A WITH CARON */
    7918             :         [576+0x0F] = 29,        /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
    7919             :         [576+0x10] = 40,        /* U+01D0: LATIN SMALL LETTER I WITH CARON */
    7920             :         [576+0x11] = 32,        /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
    7921             :         [576+0x12] = 20,        /* U+01D2: LATIN SMALL LETTER O WITH CARON */
    7922             :         [576+0x13] = 34,        /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
    7923             :         [576+0x14] = 16,        /* U+01D4: LATIN SMALL LETTER U WITH CARON */
    7924             :         [576+0x15] = 34,        /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
    7925             :         [576+0x16] = 16,        /* U+01D6: LATIN SMALL LETTER U WITH DIAERESIS AND MACRON */
    7926             :         [576+0x17] = 34,        /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
    7927             :         [576+0x18] = 16,        /* U+01D8: LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE */
    7928             :         [576+0x19] = 34,        /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
    7929             :         [576+0x1A] = 16,        /* U+01DA: LATIN SMALL LETTER U WITH DIAERESIS AND CARON */
    7930             :         [576+0x1B] = 34,        /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
    7931             :         [576+0x1C] = 16,        /* U+01DC: LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE */
    7932             :         [576+0x1E] = 25,        /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
    7933             :         [576+0x1F] = 8, /* U+01DF: LATIN SMALL LETTER A WITH DIAERESIS AND MACRON */
    7934             :         [576+0x20] = 25,        /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
    7935             :         [576+0x21] = 8, /* U+01E1: LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON */
    7936             :         [576+0x22] = 26,        /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
    7937             :         [576+0x23] = 38,        /* U+01E3: LATIN SMALL LETTER AE WITH MACRON */
    7938             :         [576+0x24] = 46,        /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
    7939             :         [576+0x25] = 47,        /* U+01E5: LATIN SMALL LETTER G WITH STROKE */
    7940             :         [576+0x26] = 46,        /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
    7941             :         [576+0x27] = 47,        /* U+01E7: LATIN SMALL LETTER G WITH CARON */
    7942             :         [576+0x28] = 54,        /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
    7943             :         [576+0x29] = 55,        /* U+01E9: LATIN SMALL LETTER K WITH CARON */
    7944             :         [576+0x2A] = 32,        /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
    7945             :         [576+0x2B] = 20,        /* U+01EB: LATIN SMALL LETTER O WITH OGONEK */
    7946             :         [576+0x2C] = 32,        /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
    7947             :         [576+0x2D] = 20,        /* U+01ED: LATIN SMALL LETTER O WITH OGONEK AND MACRON */
    7948             :         [576+0x30] = 53,        /* U+01F0: LATIN SMALL LETTER J WITH CARON */
    7949             :         [576+0x31] = 88,        /* U+01F1: LATIN CAPITAL LETTER DZ */
    7950             :         [576+0x32] = 89,        /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
    7951             :         [576+0x33] = 90,        /* U+01F3: LATIN SMALL LETTER DZ */
    7952             :         [576+0x34] = 46,        /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
    7953             :         [576+0x35] = 47,        /* U+01F5: LATIN SMALL LETTER G WITH ACUTE */
    7954             :         [576+0x38] = 31,        /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
    7955             :         [576+0x39] = 42,        /* U+01F9: LATIN SMALL LETTER N WITH GRAVE */
    7956             :         [576+0x3A] = 25,        /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
    7957             :         [576+0x3B] = 8, /* U+01FB: LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */
    7958             :         [576+0x3C] = 26,        /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
    7959             :         [576+0x3D] = 38,        /* U+01FD: LATIN SMALL LETTER AE WITH ACUTE */
    7960             :         [576+0x3E] = 32,        /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
    7961             :         [576+0x3F] = 20,        /* U+01FF: LATIN SMALL LETTER O WITH STROKE AND ACUTE */
    7962             :         [0xC8] = 640 - 0x80,    /* 310 ... */
    7963             :         [640+0x00] = 25,        /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
    7964             :         [640+0x01] = 8, /* U+0201: LATIN SMALL LETTER A WITH DOUBLE GRAVE */
    7965             :         [640+0x02] = 25,        /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
    7966             :         [640+0x03] = 8, /* U+0203: LATIN SMALL LETTER A WITH INVERTED BREVE */
    7967             :         [640+0x04] = 28,        /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
    7968             :         [640+0x05] = 39,        /* U+0205: LATIN SMALL LETTER E WITH DOUBLE GRAVE */
    7969             :         [640+0x06] = 28,        /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
    7970             :         [640+0x07] = 39,        /* U+0207: LATIN SMALL LETTER E WITH INVERTED BREVE */
    7971             :         [640+0x08] = 29,        /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
    7972             :         [640+0x09] = 40,        /* U+0209: LATIN SMALL LETTER I WITH DOUBLE GRAVE */
    7973             :         [640+0x0A] = 29,        /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
    7974             :         [640+0x0B] = 40,        /* U+020B: LATIN SMALL LETTER I WITH INVERTED BREVE */
    7975             :         [640+0x0C] = 32,        /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
    7976             :         [640+0x0D] = 20,        /* U+020D: LATIN SMALL LETTER O WITH DOUBLE GRAVE */
    7977             :         [640+0x0E] = 32,        /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
    7978             :         [640+0x0F] = 20,        /* U+020F: LATIN SMALL LETTER O WITH INVERTED BREVE */
    7979             :         [640+0x10] = 62,        /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
    7980             :         [640+0x11] = 63,        /* U+0211: LATIN SMALL LETTER R WITH DOUBLE GRAVE */
    7981             :         [640+0x12] = 62,        /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
    7982             :         [640+0x13] = 63,        /* U+0213: LATIN SMALL LETTER R WITH INVERTED BREVE */
    7983             :         [640+0x14] = 34,        /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
    7984             :         [640+0x15] = 16,        /* U+0215: LATIN SMALL LETTER U WITH DOUBLE GRAVE */
    7985             :         [640+0x16] = 34,        /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
    7986             :         [640+0x17] = 16,        /* U+0217: LATIN SMALL LETTER U WITH INVERTED BREVE */
    7987             :         [640+0x18] = 64,        /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
    7988             :         [640+0x19] = 65,        /* U+0219: LATIN SMALL LETTER S WITH COMMA BELOW */
    7989             :         [640+0x1A] = 66,        /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
    7990             :         [640+0x1B] = 67,        /* U+021B: LATIN SMALL LETTER T WITH COMMA BELOW */
    7991             :         [640+0x1E] = 48,        /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
    7992             :         [640+0x1F] = 49,        /* U+021F: LATIN SMALL LETTER H WITH CARON */
    7993             :         [640+0x21] = 41,        /* U+0221: LATIN SMALL LETTER D WITH CURL */
    7994             :         [640+0x24] = 70,        /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
    7995             :         [640+0x25] = 71,        /* U+0225: LATIN SMALL LETTER Z WITH HOOK */
    7996             :         [640+0x26] = 25,        /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
    7997             :         [640+0x27] = 8, /* U+0227: LATIN SMALL LETTER A WITH DOT ABOVE */
    7998             :         [640+0x28] = 28,        /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
    7999             :         [640+0x29] = 39,        /* U+0229: LATIN SMALL LETTER E WITH CEDILLA */
    8000             :         [640+0x2A] = 32,        /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
    8001             :         [640+0x2B] = 20,        /* U+022B: LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */
    8002             :         [640+0x2C] = 32,        /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
    8003             :         [640+0x2D] = 20,        /* U+022D: LATIN SMALL LETTER O WITH TILDE AND MACRON */
    8004             :         [640+0x2E] = 32,        /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
    8005             :         [640+0x2F] = 20,        /* U+022F: LATIN SMALL LETTER O WITH DOT ABOVE */
    8006             :         [640+0x30] = 32,        /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
    8007             :         [640+0x31] = 20,        /* U+0231: LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
    8008             :         [640+0x32] = 35,        /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
    8009             :         [640+0x33] = 44,        /* U+0233: LATIN SMALL LETTER Y WITH MACRON */
    8010             :         [640+0x34] = 58,        /* U+0234: LATIN SMALL LETTER L WITH CURL */
    8011             :         [640+0x35] = 42,        /* U+0235: LATIN SMALL LETTER N WITH CURL */
    8012             :         [640+0x36] = 67,        /* U+0236: LATIN SMALL LETTER T WITH CURL */
    8013             :         [640+0x37] = 53,        /* U+0237: LATIN SMALL LETTER DOTLESS J */
    8014             :         [640+0x38] = 91,        /* U+0238: LATIN SMALL LETTER DB DIGRAPH */
    8015             :         [640+0x39] = 92,        /* U+0239: LATIN SMALL LETTER QP DIGRAPH */
    8016             :         [640+0x3A] = 25,        /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
    8017             :         [640+0x3B] = 27,        /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
    8018             :         [640+0x3C] = 3, /* U+023C: LATIN SMALL LETTER C WITH STROKE */
    8019             :         [640+0x3D] = 57,        /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
    8020             :         [640+0x3E] = 66,        /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
    8021             :         [640+0x3F] = 65,        /* U+023F: LATIN SMALL LETTER S WITH SWASH TAIL */
    8022             :         [0xC9] = 704 - 0x80,    /* 311 ... */
    8023             :         [704+0x00] = 71,        /* U+0240: LATIN SMALL LETTER Z WITH SWASH TAIL */
    8024             :         [704+0x03] = 73,        /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
    8025             :         [704+0x04] = 34,        /* U+0244: LATIN CAPITAL LETTER U BAR */
    8026             :         [704+0x06] = 28,        /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
    8027             :         [704+0x07] = 39,        /* U+0247: LATIN SMALL LETTER E WITH STROKE */
    8028             :         [704+0x08] = 52,        /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
    8029             :         [704+0x09] = 53,        /* U+0249: LATIN SMALL LETTER J WITH STROKE */
    8030             :         [704+0x0C] = 62,        /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
    8031             :         [704+0x0D] = 63,        /* U+024D: LATIN SMALL LETTER R WITH STROKE */
    8032             :         [704+0x0E] = 35,        /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
    8033             :         [704+0x0F] = 44,        /* U+024F: LATIN SMALL LETTER Y WITH STROKE */
    8034             :         [704+0x13] = 72,        /* U+0253: LATIN SMALL LETTER B WITH HOOK */
    8035             :         [704+0x15] = 3, /* U+0255: LATIN SMALL LETTER C WITH CURL */
    8036             :         [704+0x16] = 41,        /* U+0256: LATIN SMALL LETTER D WITH TAIL */
    8037             :         [704+0x17] = 41,        /* U+0257: LATIN SMALL LETTER D WITH HOOK */
    8038             :         [704+0x1B] = 39,        /* U+025B: LATIN SMALL LETTER OPEN E */
    8039             :         [704+0x1F] = 53,        /* U+025F: LATIN SMALL LETTER DOTLESS J WITH STROKE */
    8040             :         [704+0x20] = 47,        /* U+0260: LATIN SMALL LETTER G WITH HOOK */
    8041             :         [704+0x21] = 47,        /* U+0261: LATIN SMALL LETTER SCRIPT G */
    8042             :         [704+0x22] = 46,        /* U+0262: LATIN LETTER SMALL CAPITAL G */
    8043             :         [704+0x26] = 49,        /* U+0266: LATIN SMALL LETTER H WITH HOOK */
    8044             :         [704+0x27] = 49,        /* U+0267: LATIN SMALL LETTER HENG WITH HOOK */
    8045             :         [704+0x28] = 40,        /* U+0268: LATIN SMALL LETTER I WITH STROKE */
    8046             :         [704+0x2A] = 29,        /* U+026A: LATIN LETTER SMALL CAPITAL I */
    8047             :         [704+0x2B] = 58,        /* U+026B: LATIN SMALL LETTER L WITH MIDDLE TILDE */
    8048             :         [704+0x2C] = 58,        /* U+026C: LATIN SMALL LETTER L WITH BELT */
    8049             :         [704+0x2D] = 58,        /* U+026D: LATIN SMALL LETTER L WITH RETROFLEX HOOK */
    8050             :         [704+0x31] = 93,        /* U+0271: LATIN SMALL LETTER M WITH HOOK */
    8051             :         [704+0x32] = 42,        /* U+0272: LATIN SMALL LETTER N WITH LEFT HOOK */
    8052             :         [704+0x33] = 42,        /* U+0273: LATIN SMALL LETTER N WITH RETROFLEX HOOK */
    8053             :         [704+0x34] = 31,        /* U+0274: LATIN LETTER SMALL CAPITAL N */
    8054             :         [704+0x36] = 60,        /* U+0276: LATIN LETTER SMALL CAPITAL OE */
    8055             :         [704+0x3C] = 63,        /* U+027C: LATIN SMALL LETTER R WITH LONG LEG */
    8056             :         [704+0x3D] = 63,        /* U+027D: LATIN SMALL LETTER R WITH TAIL */
    8057             :         [704+0x3E] = 63,        /* U+027E: LATIN SMALL LETTER R WITH FISHHOOK */
    8058             :         [0xCA] = 768 - 0x80,    /* 312 ... */
    8059             :         [768+0x00] = 62,        /* U+0280: LATIN LETTER SMALL CAPITAL R */
    8060             :         [768+0x02] = 65,        /* U+0282: LATIN SMALL LETTER S WITH HOOK */
    8061             :         [768+0x08] = 67,        /* U+0288: LATIN SMALL LETTER T WITH RETROFLEX HOOK */
    8062             :         [768+0x09] = 16,        /* U+0289: LATIN SMALL LETTER U BAR */
    8063             :         [768+0x0B] = 94,        /* U+028B: LATIN SMALL LETTER V WITH HOOK */
    8064             :         [768+0x0F] = 35,        /* U+028F: LATIN LETTER SMALL CAPITAL Y */
    8065             :         [768+0x10] = 71,        /* U+0290: LATIN SMALL LETTER Z WITH RETROFLEX HOOK */
    8066             :         [768+0x11] = 71,        /* U+0291: LATIN SMALL LETTER Z WITH CURL */
    8067             :         [768+0x19] = 73,        /* U+0299: LATIN LETTER SMALL CAPITAL B */
    8068             :         [768+0x1B] = 46,        /* U+029B: LATIN LETTER SMALL CAPITAL G WITH HOOK */
    8069             :         [768+0x1C] = 48,        /* U+029C: LATIN LETTER SMALL CAPITAL H */
    8070             :         [768+0x1D] = 53,        /* U+029D: LATIN SMALL LETTER J WITH CROSSED-TAIL */
    8071             :         [768+0x1F] = 57,        /* U+029F: LATIN LETTER SMALL CAPITAL L */
    8072             :         [768+0x20] = 56,        /* U+02A0: LATIN SMALL LETTER Q WITH HOOK */
    8073             :         [768+0x23] = 90,        /* U+02A3: LATIN SMALL LETTER DZ DIGRAPH */
    8074             :         [768+0x25] = 90,        /* U+02A5: LATIN SMALL LETTER DZ DIGRAPH WITH CURL */
    8075             :         [768+0x26] = 95,        /* U+02A6: LATIN SMALL LETTER TS DIGRAPH */
    8076             :         [768+0x2A] = 96,        /* U+02AA: LATIN SMALL LETTER LS DIGRAPH */
    8077             :         [768+0x2B] = 97,        /* U+02AB: LATIN SMALL LETTER LZ DIGRAPH */
    8078             :         [768+0x30] = 49,        /* U+02B0: MODIFIER LETTER SMALL H */
    8079             :         [768+0x32] = 53,        /* U+02B2: MODIFIER LETTER SMALL J */
    8080             :         [768+0x33] = 63,        /* U+02B3: MODIFIER LETTER SMALL R */
    8081             :         [768+0x37] = 69,        /* U+02B7: MODIFIER LETTER SMALL W */
    8082             :         [768+0x38] = 44,        /* U+02B8: MODIFIER LETTER SMALL Y */
    8083             :         [768+0x3C] = 15,        /* U+02BC: MODIFIER LETTER APOSTROPHE */
    8084             :         [0xCB] = 832 - 0x80,    /* 313 ... */
    8085             :         [832+0x06] = 98,        /* U+02C6: MODIFIER LETTER CIRCUMFLEX ACCENT */
    8086             :         [832+0x08] = 15,        /* U+02C8: MODIFIER LETTER VERTICAL LINE */
    8087             :         [832+0x0B] = 99,        /* U+02CB: MODIFIER LETTER GRAVE ACCENT */
    8088             :         [832+0x0D] = 100,       /* U+02CD: MODIFIER LETTER LOW MACRON */
    8089             :         [832+0x10] = 101,       /* U+02D0: MODIFIER LETTER TRIANGULAR COLON */
    8090             :         [832+0x1C] = 102,       /* U+02DC: SMALL TILDE */
    8091             :         [832+0x1D] = 103,       /* U+02DD: DOUBLE ACUTE ACCENT */
    8092             :         [832+0x21] = 58,        /* U+02E1: MODIFIER LETTER SMALL L */
    8093             :         [832+0x22] = 65,        /* U+02E2: MODIFIER LETTER SMALL S */
    8094             :         [832+0x23] = 33,        /* U+02E3: MODIFIER LETTER SMALL X */
    8095             :         [0xCC] = 896 - 0x80,    /* 314 ... */
    8096             :         [896+0x00] = 104,       /* U+0300: COMBINING GRAVE ACCENT */
    8097             :         [896+0x01] = 104,       /* U+0301: COMBINING ACUTE ACCENT */
    8098             :         [896+0x02] = 104,       /* U+0302: COMBINING CIRCUMFLEX ACCENT */
    8099             :         [896+0x03] = 104,       /* U+0303: COMBINING TILDE */
    8100             :         [896+0x04] = 104,       /* U+0304: COMBINING MACRON */
    8101             :         [896+0x05] = 104,       /* U+0305: COMBINING OVERLINE */
    8102             :         [896+0x06] = 104,       /* U+0306: COMBINING BREVE */
    8103             :         [896+0x07] = 104,       /* U+0307: COMBINING DOT ABOVE */
    8104             :         [896+0x08] = 104,       /* U+0308: COMBINING DIAERESIS */
    8105             :         [896+0x09] = 104,       /* U+0309: COMBINING HOOK ABOVE */
    8106             :         [896+0x0A] = 104,       /* U+030A: COMBINING RING ABOVE */
    8107             :         [896+0x0B] = 104,       /* U+030B: COMBINING DOUBLE ACUTE ACCENT */
    8108             :         [896+0x0C] = 104,       /* U+030C: COMBINING CARON */
    8109             :         [896+0x0D] = 104,       /* U+030D: COMBINING VERTICAL LINE ABOVE */
    8110             :         [896+0x0E] = 104,       /* U+030E: COMBINING DOUBLE VERTICAL LINE ABOVE */
    8111             :         [896+0x0F] = 104,       /* U+030F: COMBINING DOUBLE GRAVE ACCENT */
    8112             :         [896+0x10] = 104,       /* U+0310: COMBINING CANDRABINDU */
    8113             :         [896+0x11] = 104,       /* U+0311: COMBINING INVERTED BREVE */
    8114             :         [896+0x12] = 104,       /* U+0312: COMBINING TURNED COMMA ABOVE */
    8115             :         [896+0x13] = 104,       /* U+0313: COMBINING COMMA ABOVE */
    8116             :         [896+0x14] = 104,       /* U+0314: COMBINING REVERSED COMMA ABOVE */
    8117             :         [896+0x15] = 104,       /* U+0315: COMBINING COMMA ABOVE RIGHT */
    8118             :         [896+0x16] = 104,       /* U+0316: COMBINING GRAVE ACCENT BELOW */
    8119             :         [896+0x17] = 104,       /* U+0317: COMBINING ACUTE ACCENT BELOW */
    8120             :         [896+0x18] = 104,       /* U+0318: COMBINING LEFT TACK BELOW */
    8121             :         [896+0x19] = 104,       /* U+0319: COMBINING RIGHT TACK BELOW */
    8122             :         [896+0x1A] = 104,       /* U+031A: COMBINING LEFT ANGLE ABOVE */
    8123             :         [896+0x1B] = 104,       /* U+031B: COMBINING HORN */
    8124             :         [896+0x1C] = 104,       /* U+031C: COMBINING LEFT HALF RING BELOW */
    8125             :         [896+0x1D] = 104,       /* U+031D: COMBINING UP TACK BELOW */
    8126             :         [896+0x1E] = 104,       /* U+031E: COMBINING DOWN TACK BELOW */
    8127             :         [896+0x1F] = 104,       /* U+031F: COMBINING PLUS SIGN BELOW */
    8128             :         [896+0x20] = 104,       /* U+0320: COMBINING MINUS SIGN BELOW */
    8129             :         [896+0x21] = 104,       /* U+0321: COMBINING PALATALIZED HOOK BELOW */
    8130             :         [896+0x22] = 104,       /* U+0322: COMBINING RETROFLEX HOOK BELOW */
    8131             :         [896+0x23] = 104,       /* U+0323: COMBINING DOT BELOW */
    8132             :         [896+0x24] = 104,       /* U+0324: COMBINING DIAERESIS BELOW */
    8133             :         [896+0x25] = 104,       /* U+0325: COMBINING RING BELOW */
    8134             :         [896+0x26] = 104,       /* U+0326: COMBINING COMMA BELOW */
    8135             :         [896+0x27] = 104,       /* U+0327: COMBINING CEDILLA */
    8136             :         [896+0x28] = 104,       /* U+0328: COMBINING OGONEK */
    8137             :         [896+0x29] = 104,       /* U+0329: COMBINING VERTICAL LINE BELOW */
    8138             :         [896+0x2A] = 104,       /* U+032A: COMBINING BRIDGE BELOW */
    8139             :         [896+0x2B] = 104,       /* U+032B: COMBINING INVERTED DOUBLE ARCH BELOW */
    8140             :         [896+0x2C] = 104,       /* U+032C: COMBINING CARON BELOW */
    8141             :         [896+0x2D] = 104,       /* U+032D: COMBINING CIRCUMFLEX ACCENT BELOW */
    8142             :         [896+0x2E] = 104,       /* U+032E: COMBINING BREVE BELOW */
    8143             :         [896+0x2F] = 104,       /* U+032F: COMBINING INVERTED BREVE BELOW */
    8144             :         [896+0x30] = 104,       /* U+0330: COMBINING TILDE BELOW */
    8145             :         [896+0x31] = 104,       /* U+0331: COMBINING MACRON BELOW */
    8146             :         [896+0x32] = 104,       /* U+0332: COMBINING LOW LINE */
    8147             :         [896+0x33] = 104,       /* U+0333: COMBINING DOUBLE LOW LINE */
    8148             :         [896+0x34] = 104,       /* U+0334: COMBINING TILDE OVERLAY */
    8149             :         [896+0x35] = 104,       /* U+0335: COMBINING SHORT STROKE OVERLAY */
    8150             :         [896+0x36] = 104,       /* U+0336: COMBINING LONG STROKE OVERLAY */
    8151             :         [896+0x37] = 104,       /* U+0337: COMBINING SHORT SOLIDUS OVERLAY */
    8152             :         [896+0x38] = 104,       /* U+0338: COMBINING LONG SOLIDUS OVERLAY */
    8153             :         [896+0x39] = 104,       /* U+0339: COMBINING RIGHT HALF RING BELOW */
    8154             :         [896+0x3A] = 104,       /* U+033A: COMBINING INVERTED BRIDGE BELOW */
    8155             :         [896+0x3B] = 104,       /* U+033B: COMBINING SQUARE BELOW */
    8156             :         [896+0x3C] = 104,       /* U+033C: COMBINING SEAGULL BELOW */
    8157             :         [896+0x3D] = 104,       /* U+033D: COMBINING X ABOVE */
    8158             :         [896+0x3E] = 104,       /* U+033E: COMBINING VERTICAL TILDE */
    8159             :         [896+0x3F] = 104,       /* U+033F: COMBINING DOUBLE OVERLINE */
    8160             :         [0xCD] = 960 - 0x80,    /* 315 ... */
    8161             :         [960+0x00] = 104,       /* U+0340: COMBINING GRAVE TONE MARK */
    8162             :         [960+0x01] = 104,       /* U+0341: COMBINING ACUTE TONE MARK */
    8163             :         [960+0x02] = 104,       /* U+0342: COMBINING GREEK PERISPOMENI */
    8164             :         [960+0x03] = 104,       /* U+0343: COMBINING GREEK KORONIS */
    8165             :         [960+0x04] = 104,       /* U+0344: COMBINING GREEK DIALYTIKA TONOS */
    8166             :         [960+0x05] = 104,       /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
    8167             :         [960+0x06] = 104,       /* U+0346: COMBINING BRIDGE ABOVE */
    8168             :         [960+0x07] = 104,       /* U+0347: COMBINING EQUALS SIGN BELOW */
    8169             :         [960+0x08] = 104,       /* U+0348: COMBINING DOUBLE VERTICAL LINE BELOW */
    8170             :         [960+0x09] = 104,       /* U+0349: COMBINING LEFT ANGLE BELOW */
    8171             :         [960+0x0A] = 104,       /* U+034A: COMBINING NOT TILDE ABOVE */
    8172             :         [960+0x0B] = 104,       /* U+034B: COMBINING HOMOTHETIC ABOVE */
    8173             :         [960+0x0C] = 104,       /* U+034C: COMBINING ALMOST EQUAL TO ABOVE */
    8174             :         [960+0x0D] = 104,       /* U+034D: COMBINING LEFT RIGHT ARROW BELOW */
    8175             :         [960+0x0E] = 104,       /* U+034E: COMBINING UPWARDS ARROW BELOW */
    8176             :         [960+0x0F] = 104,       /* U+034F: COMBINING GRAPHEME JOINER */
    8177             :         [960+0x10] = 104,       /* U+0350: COMBINING RIGHT ARROWHEAD ABOVE */
    8178             :         [960+0x11] = 104,       /* U+0351: COMBINING LEFT HALF RING ABOVE */
    8179             :         [960+0x12] = 104,       /* U+0352: COMBINING FERMATA */
    8180             :         [960+0x13] = 104,       /* U+0353: COMBINING X BELOW */
    8181             :         [960+0x14] = 104,       /* U+0354: COMBINING LEFT ARROWHEAD BELOW */
    8182             :         [960+0x15] = 104,       /* U+0355: COMBINING RIGHT ARROWHEAD BELOW */
    8183             :         [960+0x16] = 104,       /* U+0356: COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW */
    8184             :         [960+0x17] = 104,       /* U+0357: COMBINING RIGHT HALF RING ABOVE */
    8185             :         [960+0x18] = 104,       /* U+0358: COMBINING DOT ABOVE RIGHT */
    8186             :         [960+0x19] = 104,       /* U+0359: COMBINING ASTERISK BELOW */
    8187             :         [960+0x1A] = 104,       /* U+035A: COMBINING DOUBLE RING BELOW */
    8188             :         [960+0x1B] = 104,       /* U+035B: COMBINING ZIGZAG ABOVE */
    8189             :         [960+0x1C] = 104,       /* U+035C: COMBINING DOUBLE BREVE BELOW */
    8190             :         [960+0x1D] = 104,       /* U+035D: COMBINING DOUBLE BREVE */
    8191             :         [960+0x1E] = 104,       /* U+035E: COMBINING DOUBLE MACRON */
    8192             :         [960+0x1F] = 104,       /* U+035F: COMBINING DOUBLE MACRON BELOW */
    8193             :         [960+0x20] = 104,       /* U+0360: COMBINING DOUBLE TILDE */
    8194             :         [960+0x21] = 104,       /* U+0361: COMBINING DOUBLE INVERTED BREVE */
    8195             :         [960+0x22] = 104,       /* U+0362: COMBINING DOUBLE RIGHTWARDS ARROW BELOW */
    8196             :         [960+0x23] = 104,       /* U+0363: COMBINING LATIN SMALL LETTER A */
    8197             :         [960+0x24] = 104,       /* U+0364: COMBINING LATIN SMALL LETTER E */
    8198             :         [960+0x25] = 104,       /* U+0365: COMBINING LATIN SMALL LETTER I */
    8199             :         [960+0x26] = 104,       /* U+0366: COMBINING LATIN SMALL LETTER O */
    8200             :         [960+0x27] = 104,       /* U+0367: COMBINING LATIN SMALL LETTER U */
    8201             :         [960+0x28] = 104,       /* U+0368: COMBINING LATIN SMALL LETTER C */
    8202             :         [960+0x29] = 104,       /* U+0369: COMBINING LATIN SMALL LETTER D */
    8203             :         [960+0x2A] = 104,       /* U+036A: COMBINING LATIN SMALL LETTER H */
    8204             :         [960+0x2B] = 104,       /* U+036B: COMBINING LATIN SMALL LETTER M */
    8205             :         [960+0x2C] = 104,       /* U+036C: COMBINING LATIN SMALL LETTER R */
    8206             :         [960+0x2D] = 104,       /* U+036D: COMBINING LATIN SMALL LETTER T */
    8207             :         [960+0x2E] = 104,       /* U+036E: COMBINING LATIN SMALL LETTER V */
    8208             :         [960+0x2F] = 104,       /* U+036F: COMBINING LATIN SMALL LETTER X */
    8209             :         [0xE1] = 1024 - 0x80,   /* 341 ... */
    8210             :         [1024+0x34] = 1088 - 0x80,      /* 341 264 ... */
    8211             :         [1088+0x00] = 25,       /* U+1D00: LATIN LETTER SMALL CAPITAL A */
    8212             :         [1088+0x01] = 26,       /* U+1D01: LATIN LETTER SMALL CAPITAL AE */
    8213             :         [1088+0x03] = 73,       /* U+1D03: LATIN LETTER SMALL CAPITAL BARRED B */
    8214             :         [1088+0x04] = 27,       /* U+1D04: LATIN LETTER SMALL CAPITAL C */
    8215             :         [1088+0x05] = 30,       /* U+1D05: LATIN LETTER SMALL CAPITAL D */
    8216             :         [1088+0x06] = 30,       /* U+1D06: LATIN LETTER SMALL CAPITAL ETH */
    8217             :         [1088+0x07] = 28,       /* U+1D07: LATIN LETTER SMALL CAPITAL E */
    8218             :         [1088+0x0A] = 52,       /* U+1D0A: LATIN LETTER SMALL CAPITAL J */
    8219             :         [1088+0x0B] = 54,       /* U+1D0B: LATIN LETTER SMALL CAPITAL K */
    8220             :         [1088+0x0C] = 57,       /* U+1D0C: LATIN LETTER SMALL CAPITAL L WITH STROKE */
    8221             :         [1088+0x0D] = 105,      /* U+1D0D: LATIN LETTER SMALL CAPITAL M */
    8222             :         [1088+0x0F] = 32,       /* U+1D0F: LATIN LETTER SMALL CAPITAL O */
    8223             :         [1088+0x18] = 79,       /* U+1D18: LATIN LETTER SMALL CAPITAL P */
    8224             :         [1088+0x1B] = 66,       /* U+1D1B: LATIN LETTER SMALL CAPITAL T */
    8225             :         [1088+0x1C] = 34,       /* U+1D1C: LATIN LETTER SMALL CAPITAL U */
    8226             :         [1088+0x20] = 81,       /* U+1D20: LATIN LETTER SMALL CAPITAL V */
    8227             :         [1088+0x21] = 68,       /* U+1D21: LATIN LETTER SMALL CAPITAL W */
    8228             :         [1088+0x22] = 70,       /* U+1D22: LATIN LETTER SMALL CAPITAL Z */
    8229             :         [1088+0x2C] = 25,       /* U+1D2C: MODIFIER LETTER CAPITAL A */
    8230             :         [1088+0x2E] = 73,       /* U+1D2E: MODIFIER LETTER CAPITAL B */
    8231             :         [1088+0x30] = 30,       /* U+1D30: MODIFIER LETTER CAPITAL D */
    8232             :         [1088+0x31] = 28,       /* U+1D31: MODIFIER LETTER CAPITAL E */
    8233             :         [1088+0x33] = 46,       /* U+1D33: MODIFIER LETTER CAPITAL G */
    8234             :         [1088+0x34] = 48,       /* U+1D34: MODIFIER LETTER CAPITAL H */
    8235             :         [1088+0x35] = 29,       /* U+1D35: MODIFIER LETTER CAPITAL I */
    8236             :         [1088+0x36] = 52,       /* U+1D36: MODIFIER LETTER CAPITAL J */
    8237             :         [1088+0x37] = 54,       /* U+1D37: MODIFIER LETTER CAPITAL K */
    8238             :         [1088+0x38] = 57,       /* U+1D38: MODIFIER LETTER CAPITAL L */
    8239             :         [1088+0x39] = 105,      /* U+1D39: MODIFIER LETTER CAPITAL M */
    8240             :         [1088+0x3A] = 31,       /* U+1D3A: MODIFIER LETTER CAPITAL N */
    8241             :         [1088+0x3C] = 32,       /* U+1D3C: MODIFIER LETTER CAPITAL O */
    8242             :         [1088+0x3E] = 79,       /* U+1D3E: MODIFIER LETTER CAPITAL P */
    8243             :         [1088+0x3F] = 62,       /* U+1D3F: MODIFIER LETTER CAPITAL R */
    8244             :         [1024+0x35] = 1152 - 0x80,      /* 341 265 ... */
    8245             :         [1152+0x00] = 66,       /* U+1D40: MODIFIER LETTER CAPITAL T */
    8246             :         [1152+0x01] = 34,       /* U+1D41: MODIFIER LETTER CAPITAL U */
    8247             :         [1152+0x02] = 68,       /* U+1D42: MODIFIER LETTER CAPITAL W */
    8248             :         [1152+0x03] = 8,        /* U+1D43: MODIFIER LETTER SMALL A */
    8249             :         [1152+0x07] = 72,       /* U+1D47: MODIFIER LETTER SMALL B */
    8250             :         [1152+0x08] = 41,       /* U+1D48: MODIFIER LETTER SMALL D */
    8251             :         [1152+0x09] = 39,       /* U+1D49: MODIFIER LETTER SMALL E */
    8252             :         [1152+0x0D] = 47,       /* U+1D4D: MODIFIER LETTER SMALL G */
    8253             :         [1152+0x0F] = 55,       /* U+1D4F: MODIFIER LETTER SMALL K */
    8254             :         [1152+0x10] = 93,       /* U+1D50: MODIFIER LETTER SMALL M */
    8255             :         [1152+0x12] = 20,       /* U+1D52: MODIFIER LETTER SMALL O */
    8256             :         [1152+0x16] = 80,       /* U+1D56: MODIFIER LETTER SMALL P */
    8257             :         [1152+0x17] = 67,       /* U+1D57: MODIFIER LETTER SMALL T */
    8258             :         [1152+0x18] = 16,       /* U+1D58: MODIFIER LETTER SMALL U */
    8259             :         [1152+0x1B] = 94,       /* U+1D5B: MODIFIER LETTER SMALL V */
    8260             :         [1152+0x22] = 40,       /* U+1D62: LATIN SUBSCRIPT SMALL LETTER I */
    8261             :         [1152+0x23] = 63,       /* U+1D63: LATIN SUBSCRIPT SMALL LETTER R */
    8262             :         [1152+0x24] = 16,       /* U+1D64: LATIN SUBSCRIPT SMALL LETTER U */
    8263             :         [1152+0x25] = 94,       /* U+1D65: LATIN SUBSCRIPT SMALL LETTER V */
    8264             :         [1152+0x2B] = 106,      /* U+1D6B: LATIN SMALL LETTER UE */
    8265             :         [1152+0x2C] = 72,       /* U+1D6C: LATIN SMALL LETTER B WITH MIDDLE TILDE */
    8266             :         [1152+0x2D] = 41,       /* U+1D6D: LATIN SMALL LETTER D WITH MIDDLE TILDE */
    8267             :         [1152+0x2E] = 75,       /* U+1D6E: LATIN SMALL LETTER F WITH MIDDLE TILDE */
    8268             :         [1152+0x2F] = 93,       /* U+1D6F: LATIN SMALL LETTER M WITH MIDDLE TILDE */
    8269             :         [1152+0x30] = 42,       /* U+1D70: LATIN SMALL LETTER N WITH MIDDLE TILDE */
    8270             :         [1152+0x31] = 80,       /* U+1D71: LATIN SMALL LETTER P WITH MIDDLE TILDE */
    8271             :         [1152+0x32] = 63,       /* U+1D72: LATIN SMALL LETTER R WITH MIDDLE TILDE */
    8272             :         [1152+0x33] = 63,       /* U+1D73: LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE */
    8273             :         [1152+0x34] = 65,       /* U+1D74: LATIN SMALL LETTER S WITH MIDDLE TILDE */
    8274             :         [1152+0x35] = 67,       /* U+1D75: LATIN SMALL LETTER T WITH MIDDLE TILDE */
    8275             :         [1152+0x36] = 71,       /* U+1D76: LATIN SMALL LETTER Z WITH MIDDLE TILDE */
    8276             :         [1152+0x3A] = 45,       /* U+1D7A: LATIN SMALL LETTER TH WITH STRIKETHROUGH */
    8277             :         [1152+0x3B] = 29,       /* U+1D7B: LATIN SMALL CAPITAL LETTER I WITH STROKE */
    8278             :         [1152+0x3D] = 80,       /* U+1D7D: LATIN SMALL LETTER P WITH STROKE */
    8279             :         [1152+0x3E] = 34,       /* U+1D7E: LATIN SMALL CAPITAL LETTER U WITH STROKE */
    8280             :         [1024+0x36] = 1216 - 0x80,      /* 341 266 ... */
    8281             :         [1216+0x00] = 72,       /* U+1D80: LATIN SMALL LETTER B WITH PALATAL HOOK */
    8282             :         [1216+0x01] = 41,       /* U+1D81: LATIN SMALL LETTER D WITH PALATAL HOOK */
    8283             :         [1216+0x02] = 75,       /* U+1D82: LATIN SMALL LETTER F WITH PALATAL HOOK */
    8284             :         [1216+0x03] = 47,       /* U+1D83: LATIN SMALL LETTER G WITH PALATAL HOOK */
    8285             :         [1216+0x04] = 55,       /* U+1D84: LATIN SMALL LETTER K WITH PALATAL HOOK */
    8286             :         [1216+0x05] = 58,       /* U+1D85: LATIN SMALL LETTER L WITH PALATAL HOOK */
    8287             :         [1216+0x06] = 93,       /* U+1D86: LATIN SMALL LETTER M WITH PALATAL HOOK */
    8288             :         [1216+0x07] = 42,       /* U+1D87: LATIN SMALL LETTER N WITH PALATAL HOOK */
    8289             :         [1216+0x08] = 80,       /* U+1D88: LATIN SMALL LETTER P WITH PALATAL HOOK */
    8290             :         [1216+0x09] = 63,       /* U+1D89: LATIN SMALL LETTER R WITH PALATAL HOOK */
    8291             :         [1216+0x0A] = 65,       /* U+1D8A: LATIN SMALL LETTER S WITH PALATAL HOOK */
    8292             :         [1216+0x0C] = 94,       /* U+1D8C: LATIN SMALL LETTER V WITH PALATAL HOOK */
    8293             :         [1216+0x0D] = 33,       /* U+1D8D: LATIN SMALL LETTER X WITH PALATAL HOOK */
    8294             :         [1216+0x0E] = 71,       /* U+1D8E: LATIN SMALL LETTER Z WITH PALATAL HOOK */
    8295             :         [1216+0x0F] = 8,        /* U+1D8F: LATIN SMALL LETTER A WITH RETROFLEX HOOK */
    8296             :         [1216+0x11] = 41,       /* U+1D91: LATIN SMALL LETTER D WITH HOOK AND TAIL */
    8297             :         [1216+0x12] = 39,       /* U+1D92: LATIN SMALL LETTER E WITH RETROFLEX HOOK */
    8298             :         [1216+0x13] = 39,       /* U+1D93: LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK */
    8299             :         [1216+0x16] = 40,       /* U+1D96: LATIN SMALL LETTER I WITH RETROFLEX HOOK */
    8300             :         [1216+0x19] = 16,       /* U+1D99: LATIN SMALL LETTER U WITH RETROFLEX HOOK */
    8301             :         [1216+0x1C] = 3,        /* U+1D9C: MODIFIER LETTER SMALL C */
    8302             :         [1216+0x20] = 75,       /* U+1DA0: MODIFIER LETTER SMALL F */
    8303             :         [1216+0x3B] = 71,       /* U+1DBB: MODIFIER LETTER SMALL Z */
    8304             :         [1024+0x37] = 1280 - 0x80,      /* 341 267 ... */
    8305             :         [1280+0x00] = 104,      /* U+1DC0: COMBINING DOTTED GRAVE ACCENT */
    8306             :         [1280+0x01] = 104,      /* U+1DC1: COMBINING DOTTED ACUTE ACCENT */
    8307             :         [1280+0x02] = 104,      /* U+1DC2: COMBINING SNAKE BELOW */
    8308             :         [1280+0x03] = 104,      /* U+1DC3: COMBINING SUSPENSION MARK */
    8309             :         [1280+0x04] = 104,      /* U+1DC4: COMBINING MACRON-ACUTE */
    8310             :         [1280+0x05] = 104,      /* U+1DC5: COMBINING GRAVE-MACRON */
    8311             :         [1280+0x06] = 104,      /* U+1DC6: COMBINING MACRON-GRAVE */
    8312             :         [1280+0x07] = 104,      /* U+1DC7: COMBINING ACUTE-MACRON */
    8313             :         [1280+0x08] = 104,      /* U+1DC8: COMBINING GRAVE-ACUTE-GRAVE */
    8314             :         [1280+0x09] = 104,      /* U+1DC9: COMBINING ACUTE-GRAVE-ACUTE */
    8315             :         [1280+0x0A] = 104,      /* U+1DCA: COMBINING LATIN SMALL LETTER R BELOW */
    8316             :         [1280+0x0B] = 104,      /* U+1DCB: COMBINING BREVE-MACRON */
    8317             :         [1280+0x0C] = 104,      /* U+1DCC: COMBINING MACRON-BREVE */
    8318             :         [1280+0x0D] = 104,      /* U+1DCD: COMBINING DOUBLE CIRCUMFLEX ABOVE */
    8319             :         [1280+0x0E] = 104,      /* U+1DCE: COMBINING OGONEK ABOVE */
    8320             :         [1280+0x0F] = 104,      /* U+1DCF: COMBINING ZIGZAG BELOW */
    8321             :         [1280+0x10] = 104,      /* U+1DD0: COMBINING IS BELOW */
    8322             :         [1280+0x11] = 104,      /* U+1DD1: COMBINING UR ABOVE */
    8323             :         [1280+0x12] = 104,      /* U+1DD2: COMBINING US ABOVE */
    8324             :         [1280+0x13] = 104,      /* U+1DD3: COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE */
    8325             :         [1280+0x14] = 104,      /* U+1DD4: COMBINING LATIN SMALL LETTER AE */
    8326             :         [1280+0x15] = 104,      /* U+1DD5: COMBINING LATIN SMALL LETTER AO */
    8327             :         [1280+0x16] = 104,      /* U+1DD6: COMBINING LATIN SMALL LETTER AV */
    8328             :         [1280+0x17] = 104,      /* U+1DD7: COMBINING LATIN SMALL LETTER C CEDILLA */
    8329             :         [1280+0x18] = 104,      /* U+1DD8: COMBINING LATIN SMALL LETTER INSULAR D */
    8330             :         [1280+0x19] = 104,      /* U+1DD9: COMBINING LATIN SMALL LETTER ETH */
    8331             :         [1280+0x1A] = 104,      /* U+1DDA: COMBINING LATIN SMALL LETTER G */
    8332             :         [1280+0x1B] = 104,      /* U+1DDB: COMBINING LATIN LETTER SMALL CAPITAL G */
    8333             :         [1280+0x1C] = 104,      /* U+1DDC: COMBINING LATIN SMALL LETTER K */
    8334             :         [1280+0x1D] = 104,      /* U+1DDD: COMBINING LATIN SMALL LETTER L */
    8335             :         [1280+0x1E] = 104,      /* U+1DDE: COMBINING LATIN LETTER SMALL CAPITAL L */
    8336             :         [1280+0x1F] = 104,      /* U+1DDF: COMBINING LATIN LETTER SMALL CAPITAL M */
    8337             :         [1280+0x20] = 104,      /* U+1DE0: COMBINING LATIN SMALL LETTER N */
    8338             :         [1280+0x21] = 104,      /* U+1DE1: COMBINING LATIN LETTER SMALL CAPITAL N */
    8339             :         [1280+0x22] = 104,      /* U+1DE2: COMBINING LATIN LETTER SMALL CAPITAL R */
    8340             :         [1280+0x23] = 104,      /* U+1DE3: COMBINING LATIN SMALL LETTER R ROTUNDA */
    8341             :         [1280+0x24] = 104,      /* U+1DE4: COMBINING LATIN SMALL LETTER S */
    8342             :         [1280+0x25] = 104,      /* U+1DE5: COMBINING LATIN SMALL LETTER LONG S */
    8343             :         [1280+0x26] = 104,      /* U+1DE6: COMBINING LATIN SMALL LETTER Z */
    8344             :         [1280+0x27] = 104,      /* U+1DE7: COMBINING LATIN SMALL LETTER ALPHA */
    8345             :         [1280+0x28] = 104,      /* U+1DE8: COMBINING LATIN SMALL LETTER B */
    8346             :         [1280+0x29] = 104,      /* U+1DE9: COMBINING LATIN SMALL LETTER BETA */
    8347             :         [1280+0x2A] = 104,      /* U+1DEA: COMBINING LATIN SMALL LETTER SCHWA */
    8348             :         [1280+0x2B] = 104,      /* U+1DEB: COMBINING LATIN SMALL LETTER F */
    8349             :         [1280+0x2C] = 104,      /* U+1DEC: COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */
    8350             :         [1280+0x2D] = 104,      /* U+1DED: COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE */
    8351             :         [1280+0x2E] = 104,      /* U+1DEE: COMBINING LATIN SMALL LETTER P */
    8352             :         [1280+0x2F] = 104,      /* U+1DEF: COMBINING LATIN SMALL LETTER ESH */
    8353             :         [1280+0x30] = 104,      /* U+1DF0: COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE */
    8354             :         [1280+0x31] = 104,      /* U+1DF1: COMBINING LATIN SMALL LETTER W */
    8355             :         [1280+0x32] = 104,      /* U+1DF2: COMBINING LATIN SMALL LETTER A WITH DIAERESIS */
    8356             :         [1280+0x33] = 104,      /* U+1DF3: COMBINING LATIN SMALL LETTER O WITH DIAERESIS */
    8357             :         [1280+0x34] = 104,      /* U+1DF4: COMBINING LATIN SMALL LETTER U WITH DIAERESIS */
    8358             :         [1280+0x35] = 104,      /* U+1DF5: COMBINING UP TACK ABOVE */
    8359             :         [1280+0x36] = 104,      /* U+1DF6: COMBINING KAVYKA ABOVE RIGHT */
    8360             :         [1280+0x37] = 104,      /* U+1DF7: COMBINING KAVYKA ABOVE LEFT */
    8361             :         [1280+0x38] = 104,      /* U+1DF8: COMBINING DOT ABOVE LEFT */
    8362             :         [1280+0x39] = 104,      /* U+1DF9: COMBINING WIDE INVERTED BRIDGE BELOW */
    8363             :         [1280+0x3A] = 104,      /* U+1DFA: COMBINING DOT BELOW LEFT */
    8364             :         [1280+0x3B] = 104,      /* U+1DFB: COMBINING DELETION MARK */
    8365             :         [1280+0x3C] = 104,      /* U+1DFC: COMBINING DOUBLE INVERTED BREVE BELOW */
    8366             :         [1280+0x3D] = 104,      /* U+1DFD: COMBINING ALMOST EQUAL TO BELOW */
    8367             :         [1280+0x3E] = 104,      /* U+1DFE: COMBINING LEFT ARROWHEAD ABOVE */
    8368             :         [1280+0x3F] = 104,      /* U+1DFF: COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW */
    8369             :         [1024+0x38] = 1344 - 0x80,      /* 341 270 ... */
    8370             :         [1344+0x00] = 25,       /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
    8371             :         [1344+0x01] = 8,        /* U+1E01: LATIN SMALL LETTER A WITH RING BELOW */
    8372             :         [1344+0x02] = 73,       /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
    8373             :         [1344+0x03] = 72,       /* U+1E03: LATIN SMALL LETTER B WITH DOT ABOVE */
    8374             :         [1344+0x04] = 73,       /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
    8375             :         [1344+0x05] = 72,       /* U+1E05: LATIN SMALL LETTER B WITH DOT BELOW */
    8376             :         [1344+0x06] = 73,       /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
    8377             :         [1344+0x07] = 72,       /* U+1E07: LATIN SMALL LETTER B WITH LINE BELOW */
    8378             :         [1344+0x08] = 27,       /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
    8379             :         [1344+0x09] = 3,        /* U+1E09: LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */
    8380             :         [1344+0x0A] = 30,       /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
    8381             :         [1344+0x0B] = 41,       /* U+1E0B: LATIN SMALL LETTER D WITH DOT ABOVE */
    8382             :         [1344+0x0C] = 30,       /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
    8383             :         [1344+0x0D] = 41,       /* U+1E0D: LATIN SMALL LETTER D WITH DOT BELOW */
    8384             :         [1344+0x0E] = 30,       /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
    8385             :         [1344+0x0F] = 41,       /* U+1E0F: LATIN SMALL LETTER D WITH LINE BELOW */
    8386             :         [1344+0x10] = 30,       /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
    8387             :         [1344+0x11] = 41,       /* U+1E11: LATIN SMALL LETTER D WITH CEDILLA */
    8388             :         [1344+0x12] = 30,       /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
    8389             :         [1344+0x13] = 41,       /* U+1E13: LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
    8390             :         [1344+0x14] = 28,       /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
    8391             :         [1344+0x15] = 39,       /* U+1E15: LATIN SMALL LETTER E WITH MACRON AND GRAVE */
    8392             :         [1344+0x16] = 28,       /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
    8393             :         [1344+0x17] = 39,       /* U+1E17: LATIN SMALL LETTER E WITH MACRON AND ACUTE */
    8394             :         [1344+0x18] = 28,       /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
    8395             :         [1344+0x19] = 39,       /* U+1E19: LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
    8396             :         [1344+0x1A] = 28,       /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
    8397             :         [1344+0x1B] = 39,       /* U+1E1B: LATIN SMALL LETTER E WITH TILDE BELOW */
    8398             :         [1344+0x1C] = 28,       /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
    8399             :         [1344+0x1D] = 39,       /* U+1E1D: LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
    8400             :         [1344+0x1E] = 74,       /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
    8401             :         [1344+0x1F] = 75,       /* U+1E1F: LATIN SMALL LETTER F WITH DOT ABOVE */
    8402             :         [1344+0x20] = 46,       /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
    8403             :         [1344+0x21] = 47,       /* U+1E21: LATIN SMALL LETTER G WITH MACRON */
    8404             :         [1344+0x22] = 48,       /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
    8405             :         [1344+0x23] = 49,       /* U+1E23: LATIN SMALL LETTER H WITH DOT ABOVE */
    8406             :         [1344+0x24] = 48,       /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
    8407             :         [1344+0x25] = 49,       /* U+1E25: LATIN SMALL LETTER H WITH DOT BELOW */
    8408             :         [1344+0x26] = 48,       /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
    8409             :         [1344+0x27] = 49,       /* U+1E27: LATIN SMALL LETTER H WITH DIAERESIS */
    8410             :         [1344+0x28] = 48,       /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
    8411             :         [1344+0x29] = 49,       /* U+1E29: LATIN SMALL LETTER H WITH CEDILLA */
    8412             :         [1344+0x2A] = 48,       /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
    8413             :         [1344+0x2B] = 49,       /* U+1E2B: LATIN SMALL LETTER H WITH BREVE BELOW */
    8414             :         [1344+0x2C] = 29,       /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
    8415             :         [1344+0x2D] = 40,       /* U+1E2D: LATIN SMALL LETTER I WITH TILDE BELOW */
    8416             :         [1344+0x2E] = 29,       /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
    8417             :         [1344+0x2F] = 40,       /* U+1E2F: LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */
    8418             :         [1344+0x30] = 54,       /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
    8419             :         [1344+0x31] = 55,       /* U+1E31: LATIN SMALL LETTER K WITH ACUTE */
    8420             :         [1344+0x32] = 54,       /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
    8421             :         [1344+0x33] = 55,       /* U+1E33: LATIN SMALL LETTER K WITH DOT BELOW */
    8422             :         [1344+0x34] = 54,       /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
    8423             :         [1344+0x35] = 55,       /* U+1E35: LATIN SMALL LETTER K WITH LINE BELOW */
    8424             :         [1344+0x36] = 57,       /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
    8425             :         [1344+0x37] = 58,       /* U+1E37: LATIN SMALL LETTER L WITH DOT BELOW */
    8426             :         [1344+0x38] = 57,       /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
    8427             :         [1344+0x39] = 58,       /* U+1E39: LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
    8428             :         [1344+0x3A] = 57,       /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
    8429             :         [1344+0x3B] = 58,       /* U+1E3B: LATIN SMALL LETTER L WITH LINE BELOW */
    8430             :         [1344+0x3C] = 57,       /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
    8431             :         [1344+0x3D] = 58,       /* U+1E3D: LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
    8432             :         [1344+0x3E] = 105,      /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
    8433             :         [1344+0x3F] = 93,       /* U+1E3F: LATIN SMALL LETTER M WITH ACUTE */
    8434             :         [1024+0x39] = 1408 - 0x80,      /* 341 271 ... */
    8435             :         [1408+0x00] = 105,      /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
    8436             :         [1408+0x01] = 93,       /* U+1E41: LATIN SMALL LETTER M WITH DOT ABOVE */
    8437             :         [1408+0x02] = 105,      /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
    8438             :         [1408+0x03] = 93,       /* U+1E43: LATIN SMALL LETTER M WITH DOT BELOW */
    8439             :         [1408+0x04] = 31,       /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
    8440             :         [1408+0x05] = 42,       /* U+1E45: LATIN SMALL LETTER N WITH DOT ABOVE */
    8441             :         [1408+0x06] = 31,       /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
    8442             :         [1408+0x07] = 42,       /* U+1E47: LATIN SMALL LETTER N WITH DOT BELOW */
    8443             :         [1408+0x08] = 31,       /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
    8444             :         [1408+0x09] = 42,       /* U+1E49: LATIN SMALL LETTER N WITH LINE BELOW */
    8445             :         [1408+0x0A] = 31,       /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
    8446             :         [1408+0x0B] = 42,       /* U+1E4B: LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
    8447             :         [1408+0x0C] = 32,       /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
    8448             :         [1408+0x0D] = 20,       /* U+1E4D: LATIN SMALL LETTER O WITH TILDE AND ACUTE */
    8449             :         [1408+0x0E] = 32,       /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
    8450             :         [1408+0x0F] = 20,       /* U+1E4F: LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */
    8451             :         [1408+0x10] = 32,       /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
    8452             :         [1408+0x11] = 20,       /* U+1E51: LATIN SMALL LETTER O WITH MACRON AND GRAVE */
    8453             :         [1408+0x12] = 32,       /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
    8454             :         [1408+0x13] = 20,       /* U+1E53: LATIN SMALL LETTER O WITH MACRON AND ACUTE */
    8455             :         [1408+0x14] = 79,       /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
    8456             :         [1408+0x15] = 80,       /* U+1E55: LATIN SMALL LETTER P WITH ACUTE */
    8457             :         [1408+0x16] = 79,       /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
    8458             :         [1408+0x17] = 80,       /* U+1E57: LATIN SMALL LETTER P WITH DOT ABOVE */
    8459             :         [1408+0x18] = 62,       /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
    8460             :         [1408+0x19] = 63,       /* U+1E59: LATIN SMALL LETTER R WITH DOT ABOVE */
    8461             :         [1408+0x1A] = 62,       /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
    8462             :         [1408+0x1B] = 63,       /* U+1E5B: LATIN SMALL LETTER R WITH DOT BELOW */
    8463             :         [1408+0x1C] = 62,       /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
    8464             :         [1408+0x1D] = 63,       /* U+1E5D: LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
    8465             :         [1408+0x1E] = 62,       /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
    8466             :         [1408+0x1F] = 63,       /* U+1E5F: LATIN SMALL LETTER R WITH LINE BELOW */
    8467             :         [1408+0x20] = 64,       /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
    8468             :         [1408+0x21] = 65,       /* U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE */
    8469             :         [1408+0x22] = 64,       /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
    8470             :         [1408+0x23] = 65,       /* U+1E63: LATIN SMALL LETTER S WITH DOT BELOW */
    8471             :         [1408+0x24] = 64,       /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
    8472             :         [1408+0x25] = 65,       /* U+1E65: LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */
    8473             :         [1408+0x26] = 64,       /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
    8474             :         [1408+0x27] = 65,       /* U+1E67: LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */
    8475             :         [1408+0x28] = 64,       /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
    8476             :         [1408+0x29] = 65,       /* U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
    8477             :         [1408+0x2A] = 66,       /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
    8478             :         [1408+0x2B] = 67,       /* U+1E6B: LATIN SMALL LETTER T WITH DOT ABOVE */
    8479             :         [1408+0x2C] = 66,       /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
    8480             :         [1408+0x2D] = 67,       /* U+1E6D: LATIN SMALL LETTER T WITH DOT BELOW */
    8481             :         [1408+0x2E] = 66,       /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
    8482             :         [1408+0x2F] = 67,       /* U+1E6F: LATIN SMALL LETTER T WITH LINE BELOW */
    8483             :         [1408+0x30] = 66,       /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
    8484             :         [1408+0x31] = 67,       /* U+1E71: LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
    8485             :         [1408+0x32] = 34,       /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
    8486             :         [1408+0x33] = 16,       /* U+1E73: LATIN SMALL LETTER U WITH DIAERESIS BELOW */
    8487             :         [1408+0x34] = 34,       /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
    8488             :         [1408+0x35] = 16,       /* U+1E75: LATIN SMALL LETTER U WITH TILDE BELOW */
    8489             :         [1408+0x36] = 34,       /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
    8490             :         [1408+0x37] = 16,       /* U+1E77: LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
    8491             :         [1408+0x38] = 34,       /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
    8492             :         [1408+0x39] = 16,       /* U+1E79: LATIN SMALL LETTER U WITH TILDE AND ACUTE */
    8493             :         [1408+0x3A] = 34,       /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
    8494             :         [1408+0x3B] = 16,       /* U+1E7B: LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
    8495             :         [1408+0x3C] = 81,       /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
    8496             :         [1408+0x3D] = 94,       /* U+1E7D: LATIN SMALL LETTER V WITH TILDE */
    8497             :         [1408+0x3E] = 81,       /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
    8498             :         [1408+0x3F] = 94,       /* U+1E7F: LATIN SMALL LETTER V WITH DOT BELOW */
    8499             :         [1024+0x3A] = 1472 - 0x80,      /* 341 272 ... */
    8500             :         [1472+0x00] = 68,       /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
    8501             :         [1472+0x01] = 69,       /* U+1E81: LATIN SMALL LETTER W WITH GRAVE */
    8502             :         [1472+0x02] = 68,       /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
    8503             :         [1472+0x03] = 69,       /* U+1E83: LATIN SMALL LETTER W WITH ACUTE */
    8504             :         [1472+0x04] = 68,       /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
    8505             :         [1472+0x05] = 69,       /* U+1E85: LATIN SMALL LETTER W WITH DIAERESIS */
    8506             :         [1472+0x06] = 68,       /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
    8507             :         [1472+0x07] = 69,       /* U+1E87: LATIN SMALL LETTER W WITH DOT ABOVE */
    8508             :         [1472+0x08] = 68,       /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
    8509             :         [1472+0x09] = 69,       /* U+1E89: LATIN SMALL LETTER W WITH DOT BELOW */
    8510             :         [1472+0x0A] = 107,      /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
    8511             :         [1472+0x0B] = 33,       /* U+1E8B: LATIN SMALL LETTER X WITH DOT ABOVE */
    8512             :         [1472+0x0C] = 107,      /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
    8513             :         [1472+0x0D] = 33,       /* U+1E8D: LATIN SMALL LETTER X WITH DIAERESIS */
    8514             :         [1472+0x0E] = 35,       /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
    8515             :         [1472+0x0F] = 44,       /* U+1E8F: LATIN SMALL LETTER Y WITH DOT ABOVE */
    8516             :         [1472+0x10] = 70,       /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
    8517             :         [1472+0x11] = 71,       /* U+1E91: LATIN SMALL LETTER Z WITH CIRCUMFLEX */
    8518             :         [1472+0x12] = 70,       /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
    8519             :         [1472+0x13] = 71,       /* U+1E93: LATIN SMALL LETTER Z WITH DOT BELOW */
    8520             :         [1472+0x14] = 70,       /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
    8521             :         [1472+0x15] = 71,       /* U+1E95: LATIN SMALL LETTER Z WITH LINE BELOW */
    8522             :         [1472+0x16] = 49,       /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
    8523             :         [1472+0x17] = 67,       /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
    8524             :         [1472+0x18] = 69,       /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
    8525             :         [1472+0x19] = 44,       /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
    8526             :         [1472+0x1A] = 8,        /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
    8527             :         [1472+0x1C] = 65,       /* U+1E9C: LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE */
    8528             :         [1472+0x1D] = 65,       /* U+1E9D: LATIN SMALL LETTER LONG S WITH HIGH STROKE */
    8529             :         [1472+0x1E] = 108,      /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
    8530             :         [1472+0x20] = 25,       /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
    8531             :         [1472+0x21] = 8,        /* U+1EA1: LATIN SMALL LETTER A WITH DOT BELOW */
    8532             :         [1472+0x22] = 25,       /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
    8533             :         [1472+0x23] = 8,        /* U+1EA3: LATIN SMALL LETTER A WITH HOOK ABOVE */
    8534             :         [1472+0x24] = 25,       /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
    8535             :         [1472+0x25] = 8,        /* U+1EA5: LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
    8536             :         [1472+0x26] = 25,       /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
    8537             :         [1472+0x27] = 8,        /* U+1EA7: LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
    8538             :         [1472+0x28] = 25,       /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
    8539             :         [1472+0x29] = 8,        /* U+1EA9: LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
    8540             :         [1472+0x2A] = 25,       /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
    8541             :         [1472+0x2B] = 8,        /* U+1EAB: LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
    8542             :         [1472+0x2C] = 25,       /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
    8543             :         [1472+0x2D] = 8,        /* U+1EAD: LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
    8544             :         [1472+0x2E] = 25,       /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
    8545             :         [1472+0x2F] = 8,        /* U+1EAF: LATIN SMALL LETTER A WITH BREVE AND ACUTE */
    8546             :         [1472+0x30] = 25,       /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
    8547             :         [1472+0x31] = 8,        /* U+1EB1: LATIN SMALL LETTER A WITH BREVE AND GRAVE */
    8548             :         [1472+0x32] = 25,       /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
    8549             :         [1472+0x33] = 8,        /* U+1EB3: LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
    8550             :         [1472+0x34] = 25,       /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
    8551             :         [1472+0x35] = 8,        /* U+1EB5: LATIN SMALL LETTER A WITH BREVE AND TILDE */
    8552             :         [1472+0x36] = 25,       /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
    8553             :         [1472+0x37] = 8,        /* U+1EB7: LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
    8554             :         [1472+0x38] = 28,       /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
    8555             :         [1472+0x39] = 39,       /* U+1EB9: LATIN SMALL LETTER E WITH DOT BELOW */
    8556             :         [1472+0x3A] = 28,       /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
    8557             :         [1472+0x3B] = 39,       /* U+1EBB: LATIN SMALL LETTER E WITH HOOK ABOVE */
    8558             :         [1472+0x3C] = 28,       /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
    8559             :         [1472+0x3D] = 39,       /* U+1EBD: LATIN SMALL LETTER E WITH TILDE */
    8560             :         [1472+0x3E] = 28,       /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
    8561             :         [1472+0x3F] = 39,       /* U+1EBF: LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
    8562             :         [1024+0x3B] = 1536 - 0x80,      /* 341 273 ... */
    8563             :         [1536+0x00] = 28,       /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
    8564             :         [1536+0x01] = 39,       /* U+1EC1: LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
    8565             :         [1536+0x02] = 28,       /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
    8566             :         [1536+0x03] = 39,       /* U+1EC3: LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
    8567             :         [1536+0x04] = 28,       /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
    8568             :         [1536+0x05] = 39,       /* U+1EC5: LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
    8569             :         [1536+0x06] = 28,       /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
    8570             :         [1536+0x07] = 39,       /* U+1EC7: LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
    8571             :         [1536+0x08] = 29,       /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
    8572             :         [1536+0x09] = 40,       /* U+1EC9: LATIN SMALL LETTER I WITH HOOK ABOVE */
    8573             :         [1536+0x0A] = 29,       /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
    8574             :         [1536+0x0B] = 40,       /* U+1ECB: LATIN SMALL LETTER I WITH DOT BELOW */
    8575             :         [1536+0x0C] = 32,       /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
    8576             :         [1536+0x0D] = 20,       /* U+1ECD: LATIN SMALL LETTER O WITH DOT BELOW */
    8577             :         [1536+0x0E] = 32,       /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
    8578             :         [1536+0x0F] = 20,       /* U+1ECF: LATIN SMALL LETTER O WITH HOOK ABOVE */
    8579             :         [1536+0x10] = 32,       /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
    8580             :         [1536+0x11] = 20,       /* U+1ED1: LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
    8581             :         [1536+0x12] = 32,       /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
    8582             :         [1536+0x13] = 20,       /* U+1ED3: LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
    8583             :         [1536+0x14] = 32,       /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
    8584             :         [1536+0x15] = 20,       /* U+1ED5: LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
    8585             :         [1536+0x16] = 32,       /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
    8586             :         [1536+0x17] = 20,       /* U+1ED7: LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
    8587             :         [1536+0x18] = 32,       /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
    8588             :         [1536+0x19] = 20,       /* U+1ED9: LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
    8589             :         [1536+0x1A] = 32,       /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
    8590             :         [1536+0x1B] = 20,       /* U+1EDB: LATIN SMALL LETTER O WITH HORN AND ACUTE */
    8591             :         [1536+0x1C] = 32,       /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
    8592             :         [1536+0x1D] = 20,       /* U+1EDD: LATIN SMALL LETTER O WITH HORN AND GRAVE */
    8593             :         [1536+0x1E] = 32,       /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
    8594             :         [1536+0x1F] = 20,       /* U+1EDF: LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
    8595             :         [1536+0x20] = 32,       /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
    8596             :         [1536+0x21] = 20,       /* U+1EE1: LATIN SMALL LETTER O WITH HORN AND TILDE */
    8597             :         [1536+0x22] = 32,       /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
    8598             :         [1536+0x23] = 20,       /* U+1EE3: LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
    8599             :         [1536+0x24] = 34,       /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
    8600             :         [1536+0x25] = 16,       /* U+1EE5: LATIN SMALL LETTER U WITH DOT BELOW */
    8601             :         [1536+0x26] = 34,       /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
    8602             :         [1536+0x27] = 16,       /* U+1EE7: LATIN SMALL LETTER U WITH HOOK ABOVE */
    8603             :         [1536+0x28] = 34,       /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
    8604             :         [1536+0x29] = 16,       /* U+1EE9: LATIN SMALL LETTER U WITH HORN AND ACUTE */
    8605             :         [1536+0x2A] = 34,       /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
    8606             :         [1536+0x2B] = 16,       /* U+1EEB: LATIN SMALL LETTER U WITH HORN AND GRAVE */
    8607             :         [1536+0x2C] = 34,       /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
    8608             :         [1536+0x2D] = 16,       /* U+1EED: LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
    8609             :         [1536+0x2E] = 34,       /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
    8610             :         [1536+0x2F] = 16,       /* U+1EEF: LATIN SMALL LETTER U WITH HORN AND TILDE */
    8611             :         [1536+0x30] = 34,       /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
    8612             :         [1536+0x31] = 16,       /* U+1EF1: LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
    8613             :         [1536+0x32] = 35,       /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
    8614             :         [1536+0x33] = 44,       /* U+1EF3: LATIN SMALL LETTER Y WITH GRAVE */
    8615             :         [1536+0x34] = 35,       /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
    8616             :         [1536+0x35] = 44,       /* U+1EF5: LATIN SMALL LETTER Y WITH DOT BELOW */
    8617             :         [1536+0x36] = 35,       /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
    8618             :         [1536+0x37] = 44,       /* U+1EF7: LATIN SMALL LETTER Y WITH HOOK ABOVE */
    8619             :         [1536+0x38] = 35,       /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
    8620             :         [1536+0x39] = 44,       /* U+1EF9: LATIN SMALL LETTER Y WITH TILDE */
    8621             :         [1536+0x3A] = 109,      /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
    8622             :         [1536+0x3B] = 110,      /* U+1EFB: LATIN SMALL LETTER MIDDLE-WELSH LL */
    8623             :         [1536+0x3C] = 81,       /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
    8624             :         [1536+0x3D] = 94,       /* U+1EFD: LATIN SMALL LETTER MIDDLE-WELSH V */
    8625             :         [1536+0x3E] = 35,       /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
    8626             :         [1536+0x3F] = 44,       /* U+1EFF: LATIN SMALL LETTER Y WITH LOOP */
    8627             :         [0xE2] = 1600 - 0x80,   /* 342 ... */
    8628             :         [1600+0x00] = 1664 - 0x80,      /* 342 200 ... */
    8629             :         [1664+0x00] = 1,        /* U+2000: EN QUAD */
    8630             :         [1664+0x01] = 1,        /* U+2001: EM QUAD */
    8631             :         [1664+0x02] = 1,        /* U+2002: EN SPACE */
    8632             :         [1664+0x03] = 1,        /* U+2003: EM SPACE */
    8633             :         [1664+0x04] = 1,        /* U+2004: THREE-PER-EM SPACE */
    8634             :         [1664+0x05] = 1,        /* U+2005: FOUR-PER-EM SPACE */
    8635             :         [1664+0x06] = 1,        /* U+2006: SIX-PER-EM SPACE */
    8636             :         [1664+0x08] = 1,        /* U+2008: PUNCTUATION SPACE */
    8637             :         [1664+0x09] = 1,        /* U+2009: THIN SPACE */
    8638             :         [1664+0x0A] = 1,        /* U+200A: HAIR SPACE */
    8639             :         [1664+0x0B] = 104,      /* U+200B: ZERO WIDTH SPACE */
    8640             :         [1664+0x10] = 10,       /* U+2010: HYPHEN */
    8641             :         [1664+0x11] = 10,       /* U+2011: NON-BREAKING HYPHEN */
    8642             :         [1664+0x12] = 10,       /* U+2012: FIGURE DASH */
    8643             :         [1664+0x13] = 10,       /* U+2013: EN DASH */
    8644             :         [1664+0x14] = 111,      /* U+2014: EM DASH */
    8645             :         [1664+0x15] = 10,       /* U+2015: HORIZONTAL BAR */
    8646             :         [1664+0x18] = 15,       /* U+2018: LEFT SINGLE QUOTATION MARK */
    8647             :         [1664+0x19] = 15,       /* U+2019: RIGHT SINGLE QUOTATION MARK */
    8648             :         [1664+0x1A] = 18,       /* U+201A: SINGLE LOW-9 QUOTATION MARK */
    8649             :         [1664+0x1B] = 15,       /* U+201B: SINGLE HIGH-REVERSED-9 QUOTATION MARK */
    8650             :         [1664+0x1C] = 112,      /* U+201C: LEFT DOUBLE QUOTATION MARK */
    8651             :         [1664+0x1D] = 112,      /* U+201D: RIGHT DOUBLE QUOTATION MARK */
    8652             :         [1664+0x1E] = 113,      /* U+201E: DOUBLE LOW-9 QUOTATION MARK */
    8653             :         [1664+0x1F] = 112,      /* U+201F: DOUBLE HIGH-REVERSED-9 QUOTATION MARK */
    8654             :         [1664+0x20] = 114,      /* U+2020: DAGGER */
    8655             :         [1664+0x22] = 20,       /* U+2022: BULLET */
    8656             :         [1664+0x24] = 17,       /* U+2024: ONE DOT LEADER */
    8657             :         [1664+0x25] = 115,      /* U+2025: TWO DOT LEADER */
    8658             :         [1664+0x26] = 116,      /* U+2026: HORIZONTAL ELLIPSIS */
    8659             :         [1664+0x2F] = 1,        /* U+202F: NARROW NO-BREAK SPACE */
    8660             :         [1664+0x35] = 99,       /* U+2035: REVERSED PRIME */
    8661             :         [1664+0x36] = 117,      /* U+2036: REVERSED DOUBLE PRIME */
    8662             :         [1664+0x37] = 118,      /* U+2037: REVERSED TRIPLE PRIME */
    8663             :         [1664+0x39] = 119,      /* U+2039: SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
    8664             :         [1664+0x3A] = 120,      /* U+203A: SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
    8665             :         [1664+0x3C] = 121,      /* U+203C: DOUBLE EXCLAMATION MARK */
    8666             :         [1600+0x01] = 1728 - 0x80,      /* 342 201 ... */
    8667             :         [1728+0x04] = 43,       /* U+2044: FRACTION SLASH */
    8668             :         [1728+0x07] = 122,      /* U+2047: DOUBLE QUESTION MARK */
    8669             :         [1728+0x08] = 123,      /* U+2048: QUESTION EXCLAMATION MARK */
    8670             :         [1728+0x09] = 124,      /* U+2049: EXCLAMATION QUESTION MARK */
    8671             :         [1728+0x0A] = 125,      /* U+204A: TIRONIAN SIGN ET */
    8672             :         [1728+0x1F] = 1,        /* U+205F: MEDIUM MATHEMATICAL SPACE */
    8673             :         [1728+0x20] = 104,      /* U+2060: WORD JOINER */
    8674             :         [1728+0x21] = 104,      /* U+2061: FUNCTION APPLICATION */
    8675             :         [1728+0x22] = 104,      /* U+2062: INVISIBLE TIMES */
    8676             :         [1728+0x23] = 104,      /* U+2063: INVISIBLE SEPARATOR */
    8677             :         [1728+0x30] = 126,      /* U+2070: SUPERSCRIPT ZERO */
    8678             :         [1728+0x31] = 40,       /* U+2071: SUPERSCRIPT LATIN SMALL LETTER I */
    8679             :         [1728+0x34] = 127,      /* U+2074: SUPERSCRIPT FOUR */
    8680             :         [1728+0x35] = 128,      /* U+2075: SUPERSCRIPT FIVE */
    8681             :         [1728+0x36] = 129,      /* U+2076: SUPERSCRIPT SIX */
    8682             :         [1728+0x37] = 130,      /* U+2077: SUPERSCRIPT SEVEN */
    8683             :         [1728+0x38] = 131,      /* U+2078: SUPERSCRIPT EIGHT */
    8684             :         [1728+0x39] = 132,      /* U+2079: SUPERSCRIPT NINE */
    8685             :         [1728+0x3A] = 114,      /* U+207A: SUPERSCRIPT PLUS SIGN */
    8686             :         [1728+0x3C] = 133,      /* U+207C: SUPERSCRIPT EQUALS SIGN */
    8687             :         [1728+0x3D] = 134,      /* U+207D: SUPERSCRIPT LEFT PARENTHESIS */
    8688             :         [1728+0x3E] = 135,      /* U+207E: SUPERSCRIPT RIGHT PARENTHESIS */
    8689             :         [1728+0x3F] = 42,       /* U+207F: SUPERSCRIPT LATIN SMALL LETTER N */
    8690             :         [1600+0x02] = 1792 - 0x80,      /* 342 202 ... */
    8691             :         [1792+0x00] = 126,      /* U+2080: SUBSCRIPT ZERO */
    8692             :         [1792+0x01] = 19,       /* U+2081: SUBSCRIPT ONE */
    8693             :         [1792+0x02] = 13,       /* U+2082: SUBSCRIPT TWO */
    8694             :         [1792+0x03] = 14,       /* U+2083: SUBSCRIPT THREE */
    8695             :         [1792+0x04] = 127,      /* U+2084: SUBSCRIPT FOUR */
    8696             :         [1792+0x05] = 128,      /* U+2085: SUBSCRIPT FIVE */
    8697             :         [1792+0x06] = 129,      /* U+2086: SUBSCRIPT SIX */
    8698             :         [1792+0x07] = 130,      /* U+2087: SUBSCRIPT SEVEN */
    8699             :         [1792+0x08] = 131,      /* U+2088: SUBSCRIPT EIGHT */
    8700             :         [1792+0x09] = 132,      /* U+2089: SUBSCRIPT NINE */
    8701             :         [1792+0x0A] = 114,      /* U+208A: SUBSCRIPT PLUS SIGN */
    8702             :         [1792+0x0C] = 133,      /* U+208C: SUBSCRIPT EQUALS SIGN */
    8703             :         [1792+0x0D] = 134,      /* U+208D: SUBSCRIPT LEFT PARENTHESIS */
    8704             :         [1792+0x0E] = 135,      /* U+208E: SUBSCRIPT RIGHT PARENTHESIS */
    8705             :         [1792+0x10] = 8,        /* U+2090: LATIN SUBSCRIPT SMALL LETTER A */
    8706             :         [1792+0x11] = 39,       /* U+2091: LATIN SUBSCRIPT SMALL LETTER E */
    8707             :         [1792+0x12] = 20,       /* U+2092: LATIN SUBSCRIPT SMALL LETTER O */
    8708             :         [1792+0x13] = 33,       /* U+2093: LATIN SUBSCRIPT SMALL LETTER X */
    8709             :         [1792+0x15] = 49,       /* U+2095: LATIN SUBSCRIPT SMALL LETTER H */
    8710             :         [1792+0x16] = 55,       /* U+2096: LATIN SUBSCRIPT SMALL LETTER K */
    8711             :         [1792+0x17] = 58,       /* U+2097: LATIN SUBSCRIPT SMALL LETTER L */
    8712             :         [1792+0x18] = 93,       /* U+2098: LATIN SUBSCRIPT SMALL LETTER M */
    8713             :         [1792+0x19] = 42,       /* U+2099: LATIN SUBSCRIPT SMALL LETTER N */
    8714             :         [1792+0x1A] = 80,       /* U+209A: LATIN SUBSCRIPT SMALL LETTER P */
    8715             :         [1792+0x1B] = 65,       /* U+209B: LATIN SUBSCRIPT SMALL LETTER S */
    8716             :         [1792+0x1C] = 67,       /* U+209C: LATIN SUBSCRIPT SMALL LETTER T */
    8717             :         [1792+0x20] = 136,      /* U+20A0: EURO-CURRENCY SIGN */
    8718             :         [1792+0x21] = 137,      /* U+20A1: COLON SIGN */
    8719             :         [1792+0x22] = 138,      /* U+20A2: CRUZEIRO SIGN */
    8720             :         [1792+0x23] = 139,      /* U+20A3: FRENCH FRANC SIGN */
    8721             :         [1792+0x24] = 140,      /* U+20A4: LIRA SIGN */
    8722             :         [1792+0x27] = 141,      /* U+20A7: PESETA SIGN */
    8723             :         [1792+0x28] = 142,      /* U+20A8: RUPEE SIGN */
    8724             :         [1792+0x29] = 143,      /* U+20A9: WON SIGN */
    8725             :         [1792+0x2A] = 144,      /* U+20AA: NEW SHEQEL SIGN */
    8726             :         [1792+0x2B] = 145,      /* U+20AB: DONG SIGN */
    8727             :         [1792+0x2C] = 146,      /* U+20AC: EURO SIGN */
    8728             :         [1792+0x2F] = 147,      /* U+20AF: DRACHMA SIGN */
    8729             :         [1792+0x31] = 148,      /* U+20B1: PESO SIGN */
    8730             :         [1792+0x34] = 149,      /* U+20B4: HRYVNIA SIGN */
    8731             :         [1792+0x38] = 150,      /* U+20B8: TENGE SIGN */
    8732             :         [1792+0x39] = 151,      /* U+20B9: INDIAN RUPEE SIGN */
    8733             :         [1792+0x3A] = 152,      /* U+20BA: TURKISH LIRA SIGN */
    8734             :         [1792+0x3D] = 153,      /* U+20BD: RUBLE SIGN */
    8735             :         [1792+0x3E] = 154,      /* U+20BE: LARI SIGN */
    8736             :         [1600+0x03] = 1856 - 0x80,      /* 342 203 ... */
    8737             :         [1856+0x10] = 104,      /* U+20D0: COMBINING LEFT HARPOON ABOVE */
    8738             :         [1856+0x11] = 104,      /* U+20D1: COMBINING RIGHT HARPOON ABOVE */
    8739             :         [1856+0x12] = 104,      /* U+20D2: COMBINING LONG VERTICAL LINE OVERLAY */
    8740             :         [1856+0x13] = 104,      /* U+20D3: COMBINING SHORT VERTICAL LINE OVERLAY */
    8741             :         [1856+0x14] = 104,      /* U+20D4: COMBINING ANTICLOCKWISE ARROW ABOVE */
    8742             :         [1856+0x15] = 104,      /* U+20D5: COMBINING CLOCKWISE ARROW ABOVE */
    8743             :         [1856+0x16] = 104,      /* U+20D6: COMBINING LEFT ARROW ABOVE */
    8744             :         [1856+0x17] = 104,      /* U+20D7: COMBINING RIGHT ARROW ABOVE */
    8745             :         [1856+0x18] = 104,      /* U+20D8: COMBINING RING OVERLAY */
    8746             :         [1856+0x19] = 104,      /* U+20D9: COMBINING CLOCKWISE RING OVERLAY */
    8747             :         [1856+0x1A] = 104,      /* U+20DA: COMBINING ANTICLOCKWISE RING OVERLAY */
    8748             :         [1856+0x1B] = 104,      /* U+20DB: COMBINING THREE DOTS ABOVE */
    8749             :         [1856+0x1C] = 104,      /* U+20DC: COMBINING FOUR DOTS ABOVE */
    8750             :         [1856+0x1D] = 104,      /* U+20DD: COMBINING ENCLOSING CIRCLE */
    8751             :         [1856+0x1E] = 104,      /* U+20DE: COMBINING ENCLOSING SQUARE */
    8752             :         [1856+0x1F] = 104,      /* U+20DF: COMBINING ENCLOSING DIAMOND */
    8753             :         [1856+0x20] = 104,      /* U+20E0: COMBINING ENCLOSING CIRCLE BACKSLASH */
    8754             :         [1856+0x21] = 104,      /* U+20E1: COMBINING LEFT RIGHT ARROW ABOVE */
    8755             :         [1856+0x22] = 104,      /* U+20E2: COMBINING ENCLOSING SCREEN */
    8756             :         [1856+0x23] = 104,      /* U+20E3: COMBINING ENCLOSING KEYCAP */
    8757             :         [1856+0x24] = 104,      /* U+20E4: COMBINING ENCLOSING UPWARD POINTING TRIANGLE */
    8758             :         [1856+0x25] = 104,      /* U+20E5: COMBINING REVERSE SOLIDUS OVERLAY */
    8759             :         [1856+0x26] = 104,      /* U+20E6: COMBINING DOUBLE VERTICAL STROKE OVERLAY */
    8760             :         [1856+0x27] = 104,      /* U+20E7: COMBINING ANNUITY SYMBOL */
    8761             :         [1856+0x28] = 104,      /* U+20E8: COMBINING TRIPLE UNDERDOT */
    8762             :         [1856+0x29] = 104,      /* U+20E9: COMBINING WIDE BRIDGE ABOVE */
    8763             :         [1856+0x2A] = 104,      /* U+20EA: COMBINING LEFTWARDS ARROW OVERLAY */
    8764             :         [1856+0x2B] = 104,      /* U+20EB: COMBINING LONG DOUBLE SOLIDUS OVERLAY */
    8765             :         [1856+0x2C] = 104,      /* U+20EC: COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS */
    8766             :         [1856+0x2D] = 104,      /* U+20ED: COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS */
    8767             :         [1856+0x2E] = 104,      /* U+20EE: COMBINING LEFT ARROW BELOW */
    8768             :         [1856+0x2F] = 104,      /* U+20EF: COMBINING RIGHT ARROW BELOW */
    8769             :         [1856+0x30] = 104,      /* U+20F0: COMBINING ASTERISK ABOVE */
    8770             :         [1600+0x04] = 1920 - 0x80,      /* 342 204 ... */
    8771             :         [1920+0x00] = 155,      /* U+2100: ACCOUNT OF */
    8772             :         [1920+0x01] = 156,      /* U+2101: ADDRESSED TO THE SUBJECT */
    8773             :         [1920+0x02] = 27,       /* U+2102: DOUBLE-STRUCK CAPITAL C */
    8774             :         [1920+0x05] = 157,      /* U+2105: CARE OF */
    8775             :         [1920+0x06] = 158,      /* U+2106: CADA UNA */
    8776             :         [1920+0x0A] = 47,       /* U+210A: SCRIPT SMALL G */
    8777             :         [1920+0x0B] = 48,       /* U+210B: SCRIPT CAPITAL H */
    8778             :         [1920+0x0C] = 48,       /* U+210C: BLACK-LETTER CAPITAL H */
    8779             :         [1920+0x0D] = 48,       /* U+210D: DOUBLE-STRUCK CAPITAL H */
    8780             :         [1920+0x0E] = 49,       /* U+210E: PLANCK CONSTANT */
    8781             :         [1920+0x10] = 29,       /* U+2110: SCRIPT CAPITAL I */
    8782             :         [1920+0x11] = 29,       /* U+2111: BLACK-LETTER CAPITAL I */
    8783             :         [1920+0x12] = 57,       /* U+2112: SCRIPT CAPITAL L */
    8784             :         [1920+0x13] = 58,       /* U+2113: SCRIPT SMALL L */
    8785             :         [1920+0x15] = 31,       /* U+2115: DOUBLE-STRUCK CAPITAL N */
    8786             :         [1920+0x16] = 159,      /* U+2116: NUMERO SIGN */
    8787             :         [1920+0x19] = 79,       /* U+2119: DOUBLE-STRUCK CAPITAL P */
    8788             :         [1920+0x1A] = 160,      /* U+211A: DOUBLE-STRUCK CAPITAL Q */
    8789             :         [1920+0x1B] = 62,       /* U+211B: SCRIPT CAPITAL R */
    8790             :         [1920+0x1C] = 62,       /* U+211C: BLACK-LETTER CAPITAL R */
    8791             :         [1920+0x1D] = 62,       /* U+211D: DOUBLE-STRUCK CAPITAL R */
    8792             :         [1920+0x1E] = 161,      /* U+211E: PRESCRIPTION TAKE */
    8793             :         [1920+0x20] = 162,      /* U+2120: SERVICE MARK */
    8794             :         [1920+0x21] = 163,      /* U+2121: TELEPHONE SIGN */
    8795             :         [1920+0x22] = 164,      /* U+2122: TRADE MARK SIGN */
    8796             :         [1920+0x24] = 70,       /* U+2124: DOUBLE-STRUCK CAPITAL Z */
    8797             :         [1920+0x28] = 70,       /* U+2128: BLACK-LETTER CAPITAL Z */
    8798             :         [1920+0x2A] = 54,       /* U+212A: KELVIN SIGN */
    8799             :         [1920+0x2B] = 25,       /* U+212B: ANGSTROM SIGN */
    8800             :         [1920+0x2C] = 73,       /* U+212C: SCRIPT CAPITAL B */
    8801             :         [1920+0x2D] = 27,       /* U+212D: BLACK-LETTER CAPITAL C */
    8802             :         [1920+0x2E] = 39,       /* U+212E: ESTIMATED SYMBOL */
    8803             :         [1920+0x2F] = 39,       /* U+212F: SCRIPT SMALL E */
    8804             :         [1920+0x30] = 28,       /* U+2130: SCRIPT CAPITAL E */
    8805             :         [1920+0x31] = 74,       /* U+2131: SCRIPT CAPITAL F */
    8806             :         [1920+0x33] = 105,      /* U+2133: SCRIPT CAPITAL M */
    8807             :         [1920+0x34] = 20,       /* U+2134: SCRIPT SMALL O */
    8808             :         [1920+0x39] = 40,       /* U+2139: INFORMATION SOURCE */
    8809             :         [1920+0x3B] = 165,      /* U+213B: FACSIMILE SIGN */
    8810             :         [1600+0x05] = 1984 - 0x80,      /* 342 205 ... */
    8811             :         [1984+0x05] = 30,       /* U+2145: DOUBLE-STRUCK ITALIC CAPITAL D */
    8812             :         [1984+0x06] = 41,       /* U+2146: DOUBLE-STRUCK ITALIC SMALL D */
    8813             :         [1984+0x07] = 39,       /* U+2147: DOUBLE-STRUCK ITALIC SMALL E */
    8814             :         [1984+0x08] = 40,       /* U+2148: DOUBLE-STRUCK ITALIC SMALL I */
    8815             :         [1984+0x09] = 53,       /* U+2149: DOUBLE-STRUCK ITALIC SMALL J */
    8816             :         [1984+0x10] = 166,      /* U+2150: VULGAR FRACTION ONE SEVENTH */
    8817             :         [1984+0x11] = 167,      /* U+2151: VULGAR FRACTION ONE NINTH */
    8818             :         [1984+0x12] = 168,      /* U+2152: VULGAR FRACTION ONE TENTH */
    8819             :         [1984+0x13] = 169,      /* U+2153: VULGAR FRACTION ONE THIRD */
    8820             :         [1984+0x14] = 170,      /* U+2154: VULGAR FRACTION TWO THIRDS */
    8821             :         [1984+0x15] = 171,      /* U+2155: VULGAR FRACTION ONE FIFTH */
    8822             :         [1984+0x16] = 172,      /* U+2156: VULGAR FRACTION TWO FIFTHS */
    8823             :         [1984+0x17] = 173,      /* U+2157: VULGAR FRACTION THREE FIFTHS */
    8824             :         [1984+0x18] = 174,      /* U+2158: VULGAR FRACTION FOUR FIFTHS */
    8825             :         [1984+0x19] = 175,      /* U+2159: VULGAR FRACTION ONE SIXTH */
    8826             :         [1984+0x1A] = 176,      /* U+215A: VULGAR FRACTION FIVE SIXTHS */
    8827             :         [1984+0x1B] = 177,      /* U+215B: VULGAR FRACTION ONE EIGHTH */
    8828             :         [1984+0x1C] = 178,      /* U+215C: VULGAR FRACTION THREE EIGHTHS */
    8829             :         [1984+0x1D] = 179,      /* U+215D: VULGAR FRACTION FIVE EIGHTHS */
    8830             :         [1984+0x1E] = 180,      /* U+215E: VULGAR FRACTION SEVEN EIGHTHS */
    8831             :         [1984+0x1F] = 181,      /* U+215F: FRACTION NUMERATOR ONE */
    8832             :         [1984+0x20] = 29,       /* U+2160: ROMAN NUMERAL ONE */
    8833             :         [1984+0x21] = 182,      /* U+2161: ROMAN NUMERAL TWO */
    8834             :         [1984+0x22] = 183,      /* U+2162: ROMAN NUMERAL THREE */
    8835             :         [1984+0x23] = 184,      /* U+2163: ROMAN NUMERAL FOUR */
    8836             :         [1984+0x24] = 81,       /* U+2164: ROMAN NUMERAL FIVE */
    8837             :         [1984+0x25] = 185,      /* U+2165: ROMAN NUMERAL SIX */
    8838             :         [1984+0x26] = 186,      /* U+2166: ROMAN NUMERAL SEVEN */
    8839             :         [1984+0x27] = 187,      /* U+2167: ROMAN NUMERAL EIGHT */
    8840             :         [1984+0x28] = 188,      /* U+2168: ROMAN NUMERAL NINE */
    8841             :         [1984+0x29] = 107,      /* U+2169: ROMAN NUMERAL TEN */
    8842             :         [1984+0x2A] = 189,      /* U+216A: ROMAN NUMERAL ELEVEN */
    8843             :         [1984+0x2B] = 190,      /* U+216B: ROMAN NUMERAL TWELVE */
    8844             :         [1984+0x2C] = 57,       /* U+216C: ROMAN NUMERAL FIFTY */
    8845             :         [1984+0x2D] = 27,       /* U+216D: ROMAN NUMERAL ONE HUNDRED */
    8846             :         [1984+0x2E] = 30,       /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
    8847             :         [1984+0x2F] = 105,      /* U+216F: ROMAN NUMERAL ONE THOUSAND */
    8848             :         [1984+0x30] = 40,       /* U+2170: SMALL ROMAN NUMERAL ONE */
    8849             :         [1984+0x31] = 191,      /* U+2171: SMALL ROMAN NUMERAL TWO */
    8850             :         [1984+0x32] = 192,      /* U+2172: SMALL ROMAN NUMERAL THREE */
    8851             :         [1984+0x33] = 193,      /* U+2173: SMALL ROMAN NUMERAL FOUR */
    8852             :         [1984+0x34] = 94,       /* U+2174: SMALL ROMAN NUMERAL FIVE */
    8853             :         [1984+0x35] = 194,      /* U+2175: SMALL ROMAN NUMERAL SIX */
    8854             :         [1984+0x36] = 195,      /* U+2176: SMALL ROMAN NUMERAL SEVEN */
    8855             :         [1984+0x37] = 196,      /* U+2177: SMALL ROMAN NUMERAL EIGHT */
    8856             :         [1984+0x38] = 197,      /* U+2178: SMALL ROMAN NUMERAL NINE */
    8857             :         [1984+0x39] = 33,       /* U+2179: SMALL ROMAN NUMERAL TEN */
    8858             :         [1984+0x3A] = 198,      /* U+217A: SMALL ROMAN NUMERAL ELEVEN */
    8859             :         [1984+0x3B] = 199,      /* U+217B: SMALL ROMAN NUMERAL TWELVE */
    8860             :         [1984+0x3C] = 58,       /* U+217C: SMALL ROMAN NUMERAL FIFTY */
    8861             :         [1984+0x3D] = 3,        /* U+217D: SMALL ROMAN NUMERAL ONE HUNDRED */
    8862             :         [1984+0x3E] = 41,       /* U+217E: SMALL ROMAN NUMERAL FIVE HUNDRED */
    8863             :         [1984+0x3F] = 93,       /* U+217F: SMALL ROMAN NUMERAL ONE THOUSAND */
    8864             :         [1600+0x06] = 2048 - 0x80,      /* 342 206 ... */
    8865             :         [2048+0x09] = 200,      /* U+2189: VULGAR FRACTION ZERO THIRDS */
    8866             :         [2048+0x10] = 201,      /* U+2190: LEFTWARDS ARROW */
    8867             :         [2048+0x12] = 202,      /* U+2192: RIGHTWARDS ARROW */
    8868             :         [2048+0x14] = 203,      /* U+2194: LEFT RIGHT ARROW */
    8869             :         [2048+0x2E] = 204,      /* U+21AE: LEFT RIGHT ARROW WITH STROKE */
    8870             :         [1600+0x07] = 2112 - 0x80,      /* 342 207 ... */
    8871             :         [2112+0x0D] = 205,      /* U+21CD: LEFTWARDS DOUBLE ARROW WITH STROKE */
    8872             :         [2112+0x0E] = 206,      /* U+21CE: LEFT RIGHT DOUBLE ARROW WITH STROKE */
    8873             :         [2112+0x0F] = 207,      /* U+21CF: RIGHTWARDS DOUBLE ARROW WITH STROKE */
    8874             :         [2112+0x10] = 208,      /* U+21D0: LEFTWARDS DOUBLE ARROW */
    8875             :         [2112+0x12] = 209,      /* U+21D2: RIGHTWARDS DOUBLE ARROW */
    8876             :         [2112+0x14] = 210,      /* U+21D4: LEFT RIGHT DOUBLE ARROW */
    8877             :         [1600+0x08] = 2176 - 0x80,      /* 342 210 ... */
    8878             :         [2176+0x12] = 10,       /* U+2212: MINUS SIGN */
    8879             :         [2176+0x15] = 43,       /* U+2215: DIVISION SLASH */
    8880             :         [2176+0x16] = 211,      /* U+2216: SET MINUS */
    8881             :         [2176+0x17] = 212,      /* U+2217: ASTERISK OPERATOR */
    8882             :         [2176+0x23] = 6,        /* U+2223: DIVIDES */
    8883             :         [2176+0x25] = 213,      /* U+2225: PARALLEL TO */
    8884             :         [2176+0x36] = 101,      /* U+2236: RATIO */
    8885             :         [2176+0x3C] = 102,      /* U+223C: TILDE OPERATOR */
    8886             :         [1600+0x09] = 2240 - 0x80,      /* 342 211 ... */
    8887             :         [2240+0x01] = 214,      /* U+2241: NOT TILDE */
    8888             :         [2240+0x04] = 215,      /* U+2244: NOT ASYMPTOTICALLY EQUAL TO */
    8889             :         [2240+0x07] = 216,      /* U+2247: NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO */
    8890             :         [2240+0x09] = 217,      /* U+2249: NOT ALMOST EQUAL TO */
    8891             :         [2240+0x20] = 218,      /* U+2260: NOT EQUAL TO */
    8892             :         [2240+0x22] = 219,      /* U+2262: NOT IDENTICAL TO */
    8893             :         [2240+0x24] = 208,      /* U+2264: LESS-THAN OR EQUAL TO */
    8894             :         [2240+0x25] = 220,      /* U+2265: GREATER-THAN OR EQUAL TO */
    8895             :         [2240+0x2A] = 9,        /* U+226A: MUCH LESS-THAN */
    8896             :         [2240+0x2B] = 21,       /* U+226B: MUCH GREATER-THAN */
    8897             :         [2240+0x2E] = 221,      /* U+226E: NOT LESS-THAN */
    8898             :         [2240+0x2F] = 222,      /* U+226F: NOT GREATER-THAN */
    8899             :         [2240+0x30] = 205,      /* U+2270: NEITHER LESS-THAN NOR EQUAL TO */
    8900             :         [2240+0x31] = 223,      /* U+2271: NEITHER GREATER-THAN NOR EQUAL TO */
    8901             :         [2240+0x34] = 224,      /* U+2274: NEITHER LESS-THAN NOR EQUIVALENT TO */
    8902             :         [2240+0x35] = 225,      /* U+2275: NEITHER GREATER-THAN NOR EQUIVALENT TO */
    8903             :         [2240+0x38] = 226,      /* U+2278: NEITHER LESS-THAN NOR GREATER-THAN */
    8904             :         [2240+0x39] = 227,      /* U+2279: NEITHER GREATER-THAN NOR LESS-THAN */
    8905             :         [1600+0x0B] = 2304 - 0x80,      /* 342 213 ... */
    8906             :         [2304+0x18] = 228,      /* U+22D8: VERY MUCH LESS-THAN */
    8907             :         [2304+0x19] = 229,      /* U+22D9: VERY MUCH GREATER-THAN */
    8908             :         [1600+0x0C] = 2368 - 0x80,      /* 342 214 ... */
    8909             :         [2368+0x29] = 119,      /* U+2329: LEFT-POINTING ANGLE BRACKET */
    8910             :         [2368+0x2A] = 120,      /* U+232A: RIGHT-POINTING ANGLE BRACKET */
    8911             :         [1600+0x10] = 2432 - 0x80,      /* 342 220 ... */
    8912             :         [2432+0x00] = 230,      /* U+2400: SYMBOL FOR NULL */
    8913             :         [2432+0x01] = 231,      /* U+2401: SYMBOL FOR START OF HEADING */
    8914             :         [2432+0x02] = 232,      /* U+2402: SYMBOL FOR START OF TEXT */
    8915             :         [2432+0x03] = 233,      /* U+2403: SYMBOL FOR END OF TEXT */
    8916             :         [2432+0x04] = 234,      /* U+2404: SYMBOL FOR END OF TRANSMISSION */
    8917             :         [2432+0x05] = 235,      /* U+2405: SYMBOL FOR ENQUIRY */
    8918             :         [2432+0x06] = 236,      /* U+2406: SYMBOL FOR ACKNOWLEDGE */
    8919             :         [2432+0x07] = 237,      /* U+2407: SYMBOL FOR BELL */
    8920             :         [2432+0x08] = 238,      /* U+2408: SYMBOL FOR BACKSPACE */
    8921             :         [2432+0x09] = 239,      /* U+2409: SYMBOL FOR HORIZONTAL TABULATION */
    8922             :         [2432+0x0A] = 240,      /* U+240A: SYMBOL FOR LINE FEED */
    8923             :         [2432+0x0B] = 241,      /* U+240B: SYMBOL FOR VERTICAL TABULATION */
    8924             :         [2432+0x0C] = 242,      /* U+240C: SYMBOL FOR FORM FEED */
    8925             :         [2432+0x0D] = 243,      /* U+240D: SYMBOL FOR CARRIAGE RETURN */
    8926             :         [2432+0x0E] = 244,      /* U+240E: SYMBOL FOR SHIFT OUT */
    8927             :         [2432+0x0F] = 245,      /* U+240F: SYMBOL FOR SHIFT IN */
    8928             :         [2432+0x10] = 246,      /* U+2410: SYMBOL FOR DATA LINK ESCAPE */
    8929             :         [2432+0x11] = 247,      /* U+2411: SYMBOL FOR DEVICE CONTROL ONE */
    8930             :         [2432+0x12] = 248,      /* U+2412: SYMBOL FOR DEVICE CONTROL TWO */
    8931             :         [2432+0x13] = 249,      /* U+2413: SYMBOL FOR DEVICE CONTROL THREE */
    8932             :         [2432+0x14] = 250,      /* U+2414: SYMBOL FOR DEVICE CONTROL FOUR */
    8933             :         [2432+0x15] = 251,      /* U+2415: SYMBOL FOR NEGATIVE ACKNOWLEDGE */
    8934             :         [2432+0x16] = 252,      /* U+2416: SYMBOL FOR SYNCHRONOUS IDLE */
    8935             :         [2432+0x17] = 253,      /* U+2417: SYMBOL FOR END OF TRANSMISSION BLOCK */
    8936             :         [2432+0x18] = 254,      /* U+2418: SYMBOL FOR CANCEL */
    8937             :         [2432+0x19] = 255,      /* U+2419: SYMBOL FOR END OF MEDIUM */
    8938             :         [2432+0x1A] = 256,      /* U+241A: SYMBOL FOR SUBSTITUTE */
    8939             :         [2432+0x1B] = 257,      /* U+241B: SYMBOL FOR ESCAPE */
    8940             :         [2432+0x1C] = 258,      /* U+241C: SYMBOL FOR FILE SEPARATOR */
    8941             :         [2432+0x1D] = 259,      /* U+241D: SYMBOL FOR GROUP SEPARATOR */
    8942             :         [2432+0x1E] = 260,      /* U+241E: SYMBOL FOR RECORD SEPARATOR */
    8943             :         [2432+0x1F] = 261,      /* U+241F: SYMBOL FOR UNIT SEPARATOR */
    8944             :         [2432+0x20] = 262,      /* U+2420: SYMBOL FOR SPACE */
    8945             :         [2432+0x21] = 263,      /* U+2421: SYMBOL FOR DELETE */
    8946             :         [2432+0x23] = 100,      /* U+2423: OPEN BOX */
    8947             :         [2432+0x24] = 264,      /* U+2424: SYMBOL FOR NEWLINE */
    8948             :         [1600+0x11] = 2496 - 0x80,      /* 342 221 ... */
    8949             :         [2496+0x20] = 265,      /* U+2460: CIRCLED DIGIT ONE */
    8950             :         [2496+0x21] = 266,      /* U+2461: CIRCLED DIGIT TWO */
    8951             :         [2496+0x22] = 267,      /* U+2462: CIRCLED DIGIT THREE */
    8952             :         [2496+0x23] = 268,      /* U+2463: CIRCLED DIGIT FOUR */
    8953             :         [2496+0x24] = 269,      /* U+2464: CIRCLED DIGIT FIVE */
    8954             :         [2496+0x25] = 270,      /* U+2465: CIRCLED DIGIT SIX */
    8955             :         [2496+0x26] = 271,      /* U+2466: CIRCLED DIGIT SEVEN */
    8956             :         [2496+0x27] = 272,      /* U+2467: CIRCLED DIGIT EIGHT */
    8957             :         [2496+0x28] = 273,      /* U+2468: CIRCLED DIGIT NINE */
    8958             :         [2496+0x29] = 274,      /* U+2469: CIRCLED NUMBER TEN */
    8959             :         [2496+0x2A] = 275,      /* U+246A: CIRCLED NUMBER ELEVEN */
    8960             :         [2496+0x2B] = 276,      /* U+246B: CIRCLED NUMBER TWELVE */
    8961             :         [2496+0x2C] = 277,      /* U+246C: CIRCLED NUMBER THIRTEEN */
    8962             :         [2496+0x2D] = 278,      /* U+246D: CIRCLED NUMBER FOURTEEN */
    8963             :         [2496+0x2E] = 279,      /* U+246E: CIRCLED NUMBER FIFTEEN */
    8964             :         [2496+0x2F] = 280,      /* U+246F: CIRCLED NUMBER SIXTEEN */
    8965             :         [2496+0x30] = 281,      /* U+2470: CIRCLED NUMBER SEVENTEEN */
    8966             :         [2496+0x31] = 282,      /* U+2471: CIRCLED NUMBER EIGHTEEN */
    8967             :         [2496+0x32] = 283,      /* U+2472: CIRCLED NUMBER NINETEEN */
    8968             :         [2496+0x33] = 284,      /* U+2473: CIRCLED NUMBER TWENTY */
    8969             :         [2496+0x34] = 265,      /* U+2474: PARENTHESIZED DIGIT ONE */
    8970             :         [2496+0x35] = 266,      /* U+2475: PARENTHESIZED DIGIT TWO */
    8971             :         [2496+0x36] = 267,      /* U+2476: PARENTHESIZED DIGIT THREE */
    8972             :         [2496+0x37] = 268,      /* U+2477: PARENTHESIZED DIGIT FOUR */
    8973             :         [2496+0x38] = 269,      /* U+2478: PARENTHESIZED DIGIT FIVE */
    8974             :         [2496+0x39] = 270,      /* U+2479: PARENTHESIZED DIGIT SIX */
    8975             :         [2496+0x3A] = 271,      /* U+247A: PARENTHESIZED DIGIT SEVEN */
    8976             :         [2496+0x3B] = 272,      /* U+247B: PARENTHESIZED DIGIT EIGHT */
    8977             :         [2496+0x3C] = 273,      /* U+247C: PARENTHESIZED DIGIT NINE */
    8978             :         [2496+0x3D] = 274,      /* U+247D: PARENTHESIZED NUMBER TEN */
    8979             :         [2496+0x3E] = 275,      /* U+247E: PARENTHESIZED NUMBER ELEVEN */
    8980             :         [2496+0x3F] = 276,      /* U+247F: PARENTHESIZED NUMBER TWELVE */
    8981             :         [1600+0x12] = 2560 - 0x80,      /* 342 222 ... */
    8982             :         [2560+0x00] = 277,      /* U+2480: PARENTHESIZED NUMBER THIRTEEN */
    8983             :         [2560+0x01] = 278,      /* U+2481: PARENTHESIZED NUMBER FOURTEEN */
    8984             :         [2560+0x02] = 279,      /* U+2482: PARENTHESIZED NUMBER FIFTEEN */
    8985             :         [2560+0x03] = 280,      /* U+2483: PARENTHESIZED NUMBER SIXTEEN */
    8986             :         [2560+0x04] = 281,      /* U+2484: PARENTHESIZED NUMBER SEVENTEEN */
    8987             :         [2560+0x05] = 282,      /* U+2485: PARENTHESIZED NUMBER EIGHTEEN */
    8988             :         [2560+0x06] = 283,      /* U+2486: PARENTHESIZED NUMBER NINETEEN */
    8989             :         [2560+0x07] = 284,      /* U+2487: PARENTHESIZED NUMBER TWENTY */
    8990             :         [2560+0x08] = 285,      /* U+2488: DIGIT ONE FULL STOP */
    8991             :         [2560+0x09] = 286,      /* U+2489: DIGIT TWO FULL STOP */
    8992             :         [2560+0x0A] = 287,      /* U+248A: DIGIT THREE FULL STOP */
    8993             :         [2560+0x0B] = 288,      /* U+248B: DIGIT FOUR FULL STOP */
    8994             :         [2560+0x0C] = 289,      /* U+248C: DIGIT FIVE FULL STOP */
    8995             :         [2560+0x0D] = 290,      /* U+248D: DIGIT SIX FULL STOP */
    8996             :         [2560+0x0E] = 291,      /* U+248E: DIGIT SEVEN FULL STOP */
    8997             :         [2560+0x0F] = 292,      /* U+248F: DIGIT EIGHT FULL STOP */
    8998             :         [2560+0x10] = 293,      /* U+2490: DIGIT NINE FULL STOP */
    8999             :         [2560+0x11] = 294,      /* U+2491: NUMBER TEN FULL STOP */
    9000             :         [2560+0x12] = 295,      /* U+2492: NUMBER ELEVEN FULL STOP */
    9001             :         [2560+0x13] = 296,      /* U+2493: NUMBER TWELVE FULL STOP */
    9002             :         [2560+0x14] = 297,      /* U+2494: NUMBER THIRTEEN FULL STOP */
    9003             :         [2560+0x15] = 298,      /* U+2495: NUMBER FOURTEEN FULL STOP */
    9004             :         [2560+0x16] = 299,      /* U+2496: NUMBER FIFTEEN FULL STOP */
    9005             :         [2560+0x17] = 300,      /* U+2497: NUMBER SIXTEEN FULL STOP */
    9006             :         [2560+0x18] = 301,      /* U+2498: NUMBER SEVENTEEN FULL STOP */
    9007             :         [2560+0x19] = 302,      /* U+2499: NUMBER EIGHTEEN FULL STOP */
    9008             :         [2560+0x1A] = 303,      /* U+249A: NUMBER NINETEEN FULL STOP */
    9009             :         [2560+0x1B] = 304,      /* U+249B: NUMBER TWENTY FULL STOP */
    9010             :         [2560+0x1C] = 305,      /* U+249C: PARENTHESIZED LATIN SMALL LETTER A */
    9011             :         [2560+0x1D] = 306,      /* U+249D: PARENTHESIZED LATIN SMALL LETTER B */
    9012             :         [2560+0x1E] = 307,      /* U+249E: PARENTHESIZED LATIN SMALL LETTER C */
    9013             :         [2560+0x1F] = 308,      /* U+249F: PARENTHESIZED LATIN SMALL LETTER D */
    9014             :         [2560+0x20] = 309,      /* U+24A0: PARENTHESIZED LATIN SMALL LETTER E */
    9015             :         [2560+0x21] = 310,      /* U+24A1: PARENTHESIZED LATIN SMALL LETTER F */
    9016             :         [2560+0x22] = 311,      /* U+24A2: PARENTHESIZED LATIN SMALL LETTER G */
    9017             :         [2560+0x23] = 312,      /* U+24A3: PARENTHESIZED LATIN SMALL LETTER H */
    9018             :         [2560+0x24] = 313,      /* U+24A4: PARENTHESIZED LATIN SMALL LETTER I */
    9019             :         [2560+0x25] = 314,      /* U+24A5: PARENTHESIZED LATIN SMALL LETTER J */
    9020             :         [2560+0x26] = 315,      /* U+24A6: PARENTHESIZED LATIN SMALL LETTER K */
    9021             :         [2560+0x27] = 316,      /* U+24A7: PARENTHESIZED LATIN SMALL LETTER L */
    9022             :         [2560+0x28] = 317,      /* U+24A8: PARENTHESIZED LATIN SMALL LETTER M */
    9023             :         [2560+0x29] = 318,      /* U+24A9: PARENTHESIZED LATIN SMALL LETTER N */
    9024             :         [2560+0x2A] = 319,      /* U+24AA: PARENTHESIZED LATIN SMALL LETTER O */
    9025             :         [2560+0x2B] = 320,      /* U+24AB: PARENTHESIZED LATIN SMALL LETTER P */
    9026             :         [2560+0x2C] = 321,      /* U+24AC: PARENTHESIZED LATIN SMALL LETTER Q */
    9027             :         [2560+0x2D] = 322,      /* U+24AD: PARENTHESIZED LATIN SMALL LETTER R */
    9028             :         [2560+0x2E] = 323,      /* U+24AE: PARENTHESIZED LATIN SMALL LETTER S */
    9029             :         [2560+0x2F] = 324,      /* U+24AF: PARENTHESIZED LATIN SMALL LETTER T */
    9030             :         [2560+0x30] = 325,      /* U+24B0: PARENTHESIZED LATIN SMALL LETTER U */
    9031             :         [2560+0x31] = 326,      /* U+24B1: PARENTHESIZED LATIN SMALL LETTER V */
    9032             :         [2560+0x32] = 327,      /* U+24B2: PARENTHESIZED LATIN SMALL LETTER W */
    9033             :         [2560+0x33] = 328,      /* U+24B3: PARENTHESIZED LATIN SMALL LETTER X */
    9034             :         [2560+0x34] = 329,      /* U+24B4: PARENTHESIZED LATIN SMALL LETTER Y */
    9035             :         [2560+0x35] = 330,      /* U+24B5: PARENTHESIZED LATIN SMALL LETTER Z */
    9036             :         [2560+0x36] = 331,      /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
    9037             :         [2560+0x37] = 332,      /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
    9038             :         [2560+0x38] = 7,        /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
    9039             :         [2560+0x39] = 333,      /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
    9040             :         [2560+0x3A] = 334,      /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
    9041             :         [2560+0x3B] = 335,      /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
    9042             :         [2560+0x3C] = 336,      /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
    9043             :         [2560+0x3D] = 337,      /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
    9044             :         [2560+0x3E] = 338,      /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
    9045             :         [2560+0x3F] = 339,      /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
    9046             :         [1600+0x13] = 2624 - 0x80,      /* 342 223 ... */
    9047             :         [2624+0x00] = 340,      /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
    9048             :         [2624+0x01] = 341,      /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
    9049             :         [2624+0x02] = 342,      /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
    9050             :         [2624+0x03] = 343,      /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
    9051             :         [2624+0x04] = 344,      /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
    9052             :         [2624+0x05] = 345,      /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
    9053             :         [2624+0x06] = 346,      /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
    9054             :         [2624+0x07] = 11,       /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
    9055             :         [2624+0x08] = 347,      /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
    9056             :         [2624+0x09] = 348,      /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
    9057             :         [2624+0x0A] = 349,      /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
    9058             :         [2624+0x0B] = 350,      /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
    9059             :         [2624+0x0C] = 351,      /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
    9060             :         [2624+0x0D] = 352,      /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
    9061             :         [2624+0x0E] = 353,      /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
    9062             :         [2624+0x0F] = 354,      /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
    9063             :         [2624+0x10] = 305,      /* U+24D0: CIRCLED LATIN SMALL LETTER A */
    9064             :         [2624+0x11] = 306,      /* U+24D1: CIRCLED LATIN SMALL LETTER B */
    9065             :         [2624+0x12] = 307,      /* U+24D2: CIRCLED LATIN SMALL LETTER C */
    9066             :         [2624+0x13] = 308,      /* U+24D3: CIRCLED LATIN SMALL LETTER D */
    9067             :         [2624+0x14] = 309,      /* U+24D4: CIRCLED LATIN SMALL LETTER E */
    9068             :         [2624+0x15] = 310,      /* U+24D5: CIRCLED LATIN SMALL LETTER F */
    9069             :         [2624+0x16] = 311,      /* U+24D6: CIRCLED LATIN SMALL LETTER G */
    9070             :         [2624+0x17] = 312,      /* U+24D7: CIRCLED LATIN SMALL LETTER H */
    9071             :         [2624+0x18] = 313,      /* U+24D8: CIRCLED LATIN SMALL LETTER I */
    9072             :         [2624+0x19] = 314,      /* U+24D9: CIRCLED LATIN SMALL LETTER J */
    9073             :         [2624+0x1A] = 315,      /* U+24DA: CIRCLED LATIN SMALL LETTER K */
    9074             :         [2624+0x1B] = 316,      /* U+24DB: CIRCLED LATIN SMALL LETTER L */
    9075             :         [2624+0x1C] = 317,      /* U+24DC: CIRCLED LATIN SMALL LETTER M */
    9076             :         [2624+0x1D] = 318,      /* U+24DD: CIRCLED LATIN SMALL LETTER N */
    9077             :         [2624+0x1E] = 319,      /* U+24DE: CIRCLED LATIN SMALL LETTER O */
    9078             :         [2624+0x1F] = 320,      /* U+24DF: CIRCLED LATIN SMALL LETTER P */
    9079             :         [2624+0x20] = 321,      /* U+24E0: CIRCLED LATIN SMALL LETTER Q */
    9080             :         [2624+0x21] = 322,      /* U+24E1: CIRCLED LATIN SMALL LETTER R */
    9081             :         [2624+0x22] = 323,      /* U+24E2: CIRCLED LATIN SMALL LETTER S */
    9082             :         [2624+0x23] = 324,      /* U+24E3: CIRCLED LATIN SMALL LETTER T */
    9083             :         [2624+0x24] = 325,      /* U+24E4: CIRCLED LATIN SMALL LETTER U */
    9084             :         [2624+0x25] = 326,      /* U+24E5: CIRCLED LATIN SMALL LETTER V */
    9085             :         [2624+0x26] = 327,      /* U+24E6: CIRCLED LATIN SMALL LETTER W */
    9086             :         [2624+0x27] = 328,      /* U+24E7: CIRCLED LATIN SMALL LETTER X */
    9087             :         [2624+0x28] = 329,      /* U+24E8: CIRCLED LATIN SMALL LETTER Y */
    9088             :         [2624+0x29] = 330,      /* U+24E9: CIRCLED LATIN SMALL LETTER Z */
    9089             :         [2624+0x2A] = 355,      /* U+24EA: CIRCLED DIGIT ZERO */
    9090             :         [1600+0x14] = 2688 - 0x80,      /* 342 224 ... */
    9091             :         [2688+0x00] = 10,       /* U+2500: BOX DRAWINGS LIGHT HORIZONTAL */
    9092             :         [2688+0x02] = 6,        /* U+2502: BOX DRAWINGS LIGHT VERTICAL */
    9093             :         [2688+0x0C] = 114,      /* U+250C: BOX DRAWINGS LIGHT DOWN AND RIGHT */
    9094             :         [2688+0x10] = 114,      /* U+2510: BOX DRAWINGS LIGHT DOWN AND LEFT */
    9095             :         [2688+0x14] = 114,      /* U+2514: BOX DRAWINGS LIGHT UP AND RIGHT */
    9096             :         [2688+0x18] = 114,      /* U+2518: BOX DRAWINGS LIGHT UP AND LEFT */
    9097             :         [2688+0x1C] = 114,      /* U+251C: BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
    9098             :         [2688+0x24] = 114,      /* U+2524: BOX DRAWINGS LIGHT VERTICAL AND LEFT */
    9099             :         [2688+0x2C] = 114,      /* U+252C: BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
    9100             :         [2688+0x34] = 114,      /* U+2534: BOX DRAWINGS LIGHT UP AND HORIZONTAL */
    9101             :         [2688+0x3C] = 114,      /* U+253C: BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
    9102             :         [1600+0x15] = 2752 - 0x80,      /* 342 225 ... */
    9103             :         [2752+0x31] = 43,       /* U+2571: BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT */
    9104             :         [2752+0x32] = 211,      /* U+2572: BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT */
    9105             :         [1600+0x17] = 2816 - 0x80,      /* 342 227 ... */
    9106             :         [2816+0x26] = 20,       /* U+25E6: WHITE BULLET */
    9107             :         [1600+0x18] = 2880 - 0x80,      /* 342 230 ... */
    9108             :         [2880+0x3A] = 356,      /* U+263A: WHITE SMILING FACE */
    9109             :         [2880+0x3B] = 356,      /* U+263B: BLACK SMILING FACE */
    9110             :         [1600+0x19] = 2944 - 0x80,      /* 342 231 ... */
    9111             :         [2944+0x21] = 357,      /* U+2661: WHITE HEART SUIT */
    9112             :         [2944+0x25] = 357,      /* U+2665: BLACK HEART SUIT */
    9113             :         [1600+0x1D] = 3008 - 0x80,      /* 342 235 ... */
    9114             :         [3008+0x24] = 357,      /* U+2764: HEAVY BLACK HEART */
    9115             :         [1600+0x1F] = 3072 - 0x80,      /* 342 237 ... */
    9116             :         [3072+0x0B] = 43,       /* U+27CB: MATHEMATICAL RISING DIAGONAL */
    9117             :         [3072+0x0D] = 211,      /* U+27CD: MATHEMATICAL FALLING DIAGONAL */
    9118             :         [3072+0x26] = 358,      /* U+27E6: MATHEMATICAL LEFT WHITE SQUARE BRACKET */
    9119             :         [3072+0x27] = 359,      /* U+27E7: MATHEMATICAL RIGHT WHITE SQUARE BRACKET */
    9120             :         [3072+0x28] = 119,      /* U+27E8: MATHEMATICAL LEFT ANGLE BRACKET */
    9121             :         [3072+0x29] = 120,      /* U+27E9: MATHEMATICAL RIGHT ANGLE BRACKET */
    9122             :         [3072+0x2A] = 9,        /* U+27EA: MATHEMATICAL LEFT DOUBLE ANGLE BRACKET */
    9123             :         [3072+0x2B] = 21,       /* U+27EB: MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET */
    9124             :         [3072+0x2C] = 360,      /* U+27EC: MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET */
    9125             :         [3072+0x2D] = 361,      /* U+27ED: MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET */
    9126             :         [3072+0x2E] = 134,      /* U+27EE: MATHEMATICAL LEFT FLATTENED PARENTHESIS */
    9127             :         [3072+0x2F] = 135,      /* U+27EF: MATHEMATICAL RIGHT FLATTENED PARENTHESIS */
    9128             :         [1600+0x26] = 3136 - 0x80,      /* 342 246 ... */
    9129             :         [3136+0x00] = 362,      /* U+2980: TRIPLE VERTICAL BAR DELIMITER */
    9130             :         [3136+0x03] = 363,      /* U+2983: LEFT WHITE CURLY BRACKET */
    9131             :         [3136+0x04] = 364,      /* U+2984: RIGHT WHITE CURLY BRACKET */
    9132             :         [3136+0x05] = 360,      /* U+2985: LEFT WHITE PARENTHESIS */
    9133             :         [3136+0x06] = 361,      /* U+2986: RIGHT WHITE PARENTHESIS */
    9134             :         [3136+0x07] = 365,      /* U+2987: Z NOTATION LEFT IMAGE BRACKET */
    9135             :         [3136+0x08] = 366,      /* U+2988: Z NOTATION RIGHT IMAGE BRACKET */
    9136             :         [3136+0x09] = 367,      /* U+2989: Z NOTATION LEFT BINDING BRACKET */
    9137             :         [3136+0x0A] = 368,      /* U+298A: Z NOTATION RIGHT BINDING BRACKET */
    9138             :         [1600+0x27] = 3200 - 0x80,      /* 342 247 ... */
    9139             :         [3200+0x23] = 369,      /* U+29E3: EQUALS SIGN AND SLANTED PARALLEL */
    9140             :         [3200+0x25] = 369,      /* U+29E5: IDENTICAL TO AND SLANTED PARALLEL */
    9141             :         [3200+0x35] = 211,      /* U+29F5: REVERSE SOLIDUS OPERATOR */
    9142             :         [3200+0x38] = 43,       /* U+29F8: BIG SOLIDUS */
    9143             :         [3200+0x39] = 211,      /* U+29F9: BIG REVERSE SOLIDUS */
    9144             :         [3200+0x3C] = 119,      /* U+29FC: LEFT-POINTING CURVED ANGLE BRACKET */
    9145             :         [3200+0x3D] = 120,      /* U+29FD: RIGHT-POINTING CURVED ANGLE BRACKET */
    9146             :         [3200+0x3E] = 114,      /* U+29FE: TINY */
    9147             :         [3200+0x3F] = 10,       /* U+29FF: MINY */
    9148             :         [1600+0x29] = 3264 - 0x80,      /* 342 251 ... */
    9149             :         [3264+0x34] = 370,      /* U+2A74: DOUBLE COLON EQUAL */
    9150             :         [3264+0x35] = 371,      /* U+2A75: TWO CONSECUTIVE EQUALS SIGNS */
    9151             :         [3264+0x36] = 372,      /* U+2A76: THREE CONSECUTIVE EQUALS SIGNS */
    9152             :         [1600+0x31] = 3328 - 0x80,      /* 342 261 ... */
    9153             :         [3328+0x3C] = 53,       /* U+2C7C: LATIN SUBSCRIPT SMALL LETTER J */
    9154             :         [3328+0x3D] = 81,       /* U+2C7D: MODIFIER LETTER CAPITAL V */
    9155             :         [0xE3] = 3392 - 0x80,   /* 343 ... */
    9156             :         [3392+0x00] = 3456 - 0x80,      /* 343 200 ... */
    9157             :         [3456+0x00] = 1,        /* U+3000: IDEOGRAPHIC SPACE */
    9158             :         [3456+0x08] = 119,      /* U+3008: LEFT ANGLE BRACKET */
    9159             :         [3456+0x09] = 120,      /* U+3009: RIGHT ANGLE BRACKET */
    9160             :         [3392+0x02] = 3520 - 0x80,      /* 343 202 ... */
    9161             :         [3520+0x19] = 104,      /* U+3099: COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK */
    9162             :         [3520+0x1A] = 104,      /* U+309A: COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
    9163             :         [3520+0x20] = 133,      /* U+30A0: KATAKANA-HIRAGANA DOUBLE HYPHEN */
    9164             :         [3392+0x09] = 3584 - 0x80,      /* 343 211 ... */
    9165             :         [3584+0x10] = 373,      /* U+3250: PARTNERSHIP SIGN */
    9166             :         [3584+0x11] = 374,      /* U+3251: CIRCLED NUMBER TWENTY ONE */
    9167             :         [3584+0x12] = 375,      /* U+3252: CIRCLED NUMBER TWENTY TWO */
    9168             :         [3584+0x13] = 376,      /* U+3253: CIRCLED NUMBER TWENTY THREE */
    9169             :         [3584+0x14] = 377,      /* U+3254: CIRCLED NUMBER TWENTY FOUR */
    9170             :         [3584+0x15] = 378,      /* U+3255: CIRCLED NUMBER TWENTY FIVE */
    9171             :         [3584+0x16] = 379,      /* U+3256: CIRCLED NUMBER TWENTY SIX */
    9172             :         [3584+0x17] = 380,      /* U+3257: CIRCLED NUMBER TWENTY SEVEN */
    9173             :         [3584+0x18] = 381,      /* U+3258: CIRCLED NUMBER TWENTY EIGHT */
    9174             :         [3584+0x19] = 382,      /* U+3259: CIRCLED NUMBER TWENTY NINE */
    9175             :         [3584+0x1A] = 383,      /* U+325A: CIRCLED NUMBER THIRTY */
    9176             :         [3584+0x1B] = 384,      /* U+325B: CIRCLED NUMBER THIRTY ONE */
    9177             :         [3584+0x1C] = 385,      /* U+325C: CIRCLED NUMBER THIRTY TWO */
    9178             :         [3584+0x1D] = 386,      /* U+325D: CIRCLED NUMBER THIRTY THREE */
    9179             :         [3584+0x1E] = 387,      /* U+325E: CIRCLED NUMBER THIRTY FOUR */
    9180             :         [3584+0x1F] = 388,      /* U+325F: CIRCLED NUMBER THIRTY FIVE */
    9181             :         [3392+0x0A] = 3648 - 0x80,      /* 343 212 ... */
    9182             :         [3648+0x31] = 389,      /* U+32B1: CIRCLED NUMBER THIRTY SIX */
    9183             :         [3648+0x32] = 390,      /* U+32B2: CIRCLED NUMBER THIRTY SEVEN */
    9184             :         [3648+0x33] = 391,      /* U+32B3: CIRCLED NUMBER THIRTY EIGHT */
    9185             :         [3648+0x34] = 392,      /* U+32B4: CIRCLED NUMBER THIRTY NINE */
    9186             :         [3648+0x35] = 393,      /* U+32B5: CIRCLED NUMBER FORTY */
    9187             :         [3648+0x36] = 394,      /* U+32B6: CIRCLED NUMBER FORTY ONE */
    9188             :         [3648+0x37] = 395,      /* U+32B7: CIRCLED NUMBER FORTY TWO */
    9189             :         [3648+0x38] = 396,      /* U+32B8: CIRCLED NUMBER FORTY THREE */
    9190             :         [3648+0x39] = 397,      /* U+32B9: CIRCLED NUMBER FORTY FOUR */
    9191             :         [3648+0x3A] = 398,      /* U+32BA: CIRCLED NUMBER FORTY FIVE */
    9192             :         [3648+0x3B] = 399,      /* U+32BB: CIRCLED NUMBER FORTY SIX */
    9193             :         [3648+0x3C] = 400,      /* U+32BC: CIRCLED NUMBER FORTY SEVEN */
    9194             :         [3648+0x3D] = 401,      /* U+32BD: CIRCLED NUMBER FORTY EIGHT */
    9195             :         [3648+0x3E] = 402,      /* U+32BE: CIRCLED NUMBER FORTY NINE */
    9196             :         [3648+0x3F] = 403,      /* U+32BF: CIRCLED NUMBER FIFTY */
    9197             :         [3392+0x0B] = 3712 - 0x80,      /* 343 213 ... */
    9198             :         [3712+0x0C] = 404,      /* U+32CC: SQUARE HG */
    9199             :         [3712+0x0D] = 405,      /* U+32CD: SQUARE ERG */
    9200             :         [3712+0x0E] = 406,      /* U+32CE: SQUARE EV */
    9201             :         [3712+0x0F] = 407,      /* U+32CF: LIMITED LIABILITY SIGN */
    9202             :         [3392+0x0D] = 3776 - 0x80,      /* 343 215 ... */
    9203             :         [3776+0x31] = 408,      /* U+3371: SQUARE HPA */
    9204             :         [3776+0x32] = 409,      /* U+3372: SQUARE DA */
    9205             :         [3776+0x33] = 410,      /* U+3373: SQUARE AU */
    9206             :         [3776+0x34] = 411,      /* U+3374: SQUARE BAR */
    9207             :         [3776+0x35] = 412,      /* U+3375: SQUARE OV */
    9208             :         [3776+0x36] = 413,      /* U+3376: SQUARE PC */
    9209             :         [3776+0x37] = 414,      /* U+3377: SQUARE DM */
    9210             :         [3776+0x38] = 415,      /* U+3378: SQUARE DM SQUARED */
    9211             :         [3776+0x39] = 416,      /* U+3379: SQUARE DM CUBED */
    9212             :         [3776+0x3A] = 417,      /* U+337A: SQUARE IU */
    9213             :         [3392+0x0E] = 3840 - 0x80,      /* 343 216 ... */
    9214             :         [3840+0x00] = 418,      /* U+3380: SQUARE PA AMPS */
    9215             :         [3840+0x01] = 419,      /* U+3381: SQUARE NA */
    9216             :         [3840+0x02] = 420,      /* U+3382: SQUARE MU A */
    9217             :         [3840+0x03] = 421,      /* U+3383: SQUARE MA */
    9218             :         [3840+0x04] = 422,      /* U+3384: SQUARE KA */
    9219             :         [3840+0x05] = 423,      /* U+3385: SQUARE KB */
    9220             :         [3840+0x06] = 424,      /* U+3386: SQUARE MB */
    9221             :         [3840+0x07] = 425,      /* U+3387: SQUARE GB */
    9222             :         [3840+0x08] = 426,      /* U+3388: SQUARE CAL */
    9223             :         [3840+0x09] = 427,      /* U+3389: SQUARE KCAL */
    9224             :         [3840+0x0A] = 428,      /* U+338A: SQUARE PF */
    9225             :         [3840+0x0B] = 429,      /* U+338B: SQUARE NF */
    9226             :         [3840+0x0C] = 430,      /* U+338C: SQUARE MU F */
    9227             :         [3840+0x0D] = 431,      /* U+338D: SQUARE MU G */
    9228             :         [3840+0x0E] = 432,      /* U+338E: SQUARE MG */
    9229             :         [3840+0x0F] = 433,      /* U+338F: SQUARE KG */
    9230             :         [3840+0x10] = 434,      /* U+3390: SQUARE HZ */
    9231             :         [3840+0x11] = 435,      /* U+3391: SQUARE KHZ */
    9232             :         [3840+0x12] = 436,      /* U+3392: SQUARE MHZ */
    9233             :         [3840+0x13] = 437,      /* U+3393: SQUARE GHZ */
    9234             :         [3840+0x14] = 438,      /* U+3394: SQUARE THZ */
    9235             :         [3840+0x15] = 439,      /* U+3395: SQUARE MU L */
    9236             :         [3840+0x16] = 440,      /* U+3396: SQUARE ML */
    9237             :         [3840+0x17] = 441,      /* U+3397: SQUARE DL */
    9238             :         [3840+0x18] = 442,      /* U+3398: SQUARE KL */
    9239             :         [3840+0x19] = 443,      /* U+3399: SQUARE FM */
    9240             :         [3840+0x1A] = 444,      /* U+339A: SQUARE NM */
    9241             :         [3840+0x1B] = 445,      /* U+339B: SQUARE MU M */
    9242             :         [3840+0x1C] = 446,      /* U+339C: SQUARE MM */
    9243             :         [3840+0x1D] = 447,      /* U+339D: SQUARE CM */
    9244             :         [3840+0x1E] = 448,      /* U+339E: SQUARE KM */
    9245             :         [3840+0x1F] = 449,      /* U+339F: SQUARE MM SQUARED */
    9246             :         [3840+0x20] = 450,      /* U+33A0: SQUARE CM SQUARED */
    9247             :         [3840+0x21] = 451,      /* U+33A1: SQUARE M SQUARED */
    9248             :         [3840+0x22] = 452,      /* U+33A2: SQUARE KM SQUARED */
    9249             :         [3840+0x23] = 453,      /* U+33A3: SQUARE MM CUBED */
    9250             :         [3840+0x24] = 454,      /* U+33A4: SQUARE CM CUBED */
    9251             :         [3840+0x25] = 455,      /* U+33A5: SQUARE M CUBED */
    9252             :         [3840+0x26] = 456,      /* U+33A6: SQUARE KM CUBED */
    9253             :         [3840+0x27] = 457,      /* U+33A7: SQUARE M OVER S */
    9254             :         [3840+0x28] = 458,      /* U+33A8: SQUARE M OVER S SQUARED */
    9255             :         [3840+0x29] = 459,      /* U+33A9: SQUARE PA */
    9256             :         [3840+0x2A] = 460,      /* U+33AA: SQUARE KPA */
    9257             :         [3840+0x2B] = 461,      /* U+33AB: SQUARE MPA */
    9258             :         [3840+0x2C] = 462,      /* U+33AC: SQUARE GPA */
    9259             :         [3840+0x2D] = 463,      /* U+33AD: SQUARE RAD */
    9260             :         [3840+0x2E] = 464,      /* U+33AE: SQUARE RAD OVER S */
    9261             :         [3840+0x2F] = 465,      /* U+33AF: SQUARE RAD OVER S SQUARED */
    9262             :         [3840+0x30] = 466,      /* U+33B0: SQUARE PS */
    9263             :         [3840+0x31] = 467,      /* U+33B1: SQUARE NS */
    9264             :         [3840+0x32] = 468,      /* U+33B2: SQUARE MU S */
    9265             :         [3840+0x33] = 469,      /* U+33B3: SQUARE MS */
    9266             :         [3840+0x34] = 470,      /* U+33B4: SQUARE PV */
    9267             :         [3840+0x35] = 471,      /* U+33B5: SQUARE NV */
    9268             :         [3840+0x36] = 472,      /* U+33B6: SQUARE MU V */
    9269             :         [3840+0x37] = 473,      /* U+33B7: SQUARE MV */
    9270             :         [3840+0x38] = 474,      /* U+33B8: SQUARE KV */
    9271             :         [3840+0x39] = 475,      /* U+33B9: SQUARE MV MEGA */
    9272             :         [3840+0x3A] = 476,      /* U+33BA: SQUARE PW */
    9273             :         [3840+0x3B] = 477,      /* U+33BB: SQUARE NW */
    9274             :         [3840+0x3C] = 478,      /* U+33BC: SQUARE MU W */
    9275             :         [3840+0x3D] = 479,      /* U+33BD: SQUARE MW */
    9276             :         [3840+0x3E] = 480,      /* U+33BE: SQUARE KW */
    9277             :         [3840+0x3F] = 481,      /* U+33BF: SQUARE MW MEGA */
    9278             :         [3392+0x0F] = 3904 - 0x80,      /* 343 217 ... */
    9279             :         [3904+0x02] = 482,      /* U+33C2: SQUARE AM */
    9280             :         [3904+0x03] = 483,      /* U+33C3: SQUARE BQ */
    9281             :         [3904+0x04] = 484,      /* U+33C4: SQUARE CC */
    9282             :         [3904+0x05] = 485,      /* U+33C5: SQUARE CD */
    9283             :         [3904+0x06] = 486,      /* U+33C6: SQUARE C OVER KG */
    9284             :         [3904+0x07] = 487,      /* U+33C7: SQUARE CO */
    9285             :         [3904+0x08] = 488,      /* U+33C8: SQUARE DB */
    9286             :         [3904+0x09] = 489,      /* U+33C9: SQUARE GY */
    9287             :         [3904+0x0A] = 490,      /* U+33CA: SQUARE HA */
    9288             :         [3904+0x0B] = 491,      /* U+33CB: SQUARE HP */
    9289             :         [3904+0x0C] = 492,      /* U+33CC: SQUARE IN */
    9290             :         [3904+0x0D] = 493,      /* U+33CD: SQUARE KK */
    9291             :         [3904+0x0E] = 494,      /* U+33CE: SQUARE KM CAPITAL */
    9292             :         [3904+0x0F] = 495,      /* U+33CF: SQUARE KT */
    9293             :         [3904+0x10] = 496,      /* U+33D0: SQUARE LM */
    9294             :         [3904+0x11] = 497,      /* U+33D1: SQUARE LN */
    9295             :         [3904+0x12] = 498,      /* U+33D2: SQUARE LOG */
    9296             :         [3904+0x13] = 499,      /* U+33D3: SQUARE LX */
    9297             :         [3904+0x14] = 500,      /* U+33D4: SQUARE MB SMALL */
    9298             :         [3904+0x15] = 501,      /* U+33D5: SQUARE MIL */
    9299             :         [3904+0x16] = 502,      /* U+33D6: SQUARE MOL */
    9300             :         [3904+0x17] = 503,      /* U+33D7: SQUARE PH */
    9301             :         [3904+0x18] = 504,      /* U+33D8: SQUARE PM */
    9302             :         [3904+0x19] = 505,      /* U+33D9: SQUARE PPM */
    9303             :         [3904+0x1A] = 506,      /* U+33DA: SQUARE PR */
    9304             :         [3904+0x1B] = 507,      /* U+33DB: SQUARE SR */
    9305             :         [3904+0x1C] = 508,      /* U+33DC: SQUARE SV */
    9306             :         [3904+0x1D] = 509,      /* U+33DD: SQUARE WB */
    9307             :         [3904+0x1E] = 510,      /* U+33DE: SQUARE V OVER M */
    9308             :         [3904+0x1F] = 511,      /* U+33DF: SQUARE A OVER M */
    9309             :         [3904+0x3F] = 512,      /* U+33FF: SQUARE GAL */
    9310             :         [0xEA] = 3968 - 0x80,   /* 352 ... */
    9311             :         [3968+0x1F] = 4032 - 0x80,      /* 352 237 ... */
    9312             :         [4032+0x32] = 27,       /* U+A7F2: MODIFIER LETTER CAPITAL C */
    9313             :         [4032+0x33] = 74,       /* U+A7F3: MODIFIER LETTER CAPITAL F */
    9314             :         [4032+0x34] = 160,      /* U+A7F4: MODIFIER LETTER CAPITAL Q */
    9315             :         [0xEF] = 4096 - 0x80,   /* 357 ... */
    9316             :         [4096+0x2C] = 4160 - 0x80,      /* 357 254 ... */
    9317             :         [4160+0x00] = 513,      /* U+FB00: LATIN SMALL LIGATURE FF */
    9318             :         [4160+0x01] = 514,      /* U+FB01: LATIN SMALL LIGATURE FI */
    9319             :         [4160+0x02] = 515,      /* U+FB02: LATIN SMALL LIGATURE FL */
    9320             :         [4160+0x03] = 516,      /* U+FB03: LATIN SMALL LIGATURE FFI */
    9321             :         [4160+0x04] = 517,      /* U+FB04: LATIN SMALL LIGATURE FFL */
    9322             :         [4160+0x05] = 518,      /* U+FB05: LATIN SMALL LIGATURE LONG S T */
    9323             :         [4160+0x06] = 518,      /* U+FB06: LATIN SMALL LIGATURE ST */
    9324             :         [4160+0x1E] = 104,      /* U+FB1E: HEBREW POINT JUDEO-SPANISH VARIKA */
    9325             :         [4160+0x29] = 114,      /* U+FB29: HEBREW LETTER ALTERNATIVE PLUS SIGN */
    9326             :         [4096+0x38] = 4224 - 0x80,      /* 357 270 ... */
    9327             :         [4224+0x00] = 104,      /* U+FE00: VARIATION SELECTOR-1 */
    9328             :         [4224+0x01] = 104,      /* U+FE01: VARIATION SELECTOR-2 */
    9329             :         [4224+0x02] = 104,      /* U+FE02: VARIATION SELECTOR-3 */
    9330             :         [4224+0x03] = 104,      /* U+FE03: VARIATION SELECTOR-4 */
    9331             :         [4224+0x04] = 104,      /* U+FE04: VARIATION SELECTOR-5 */
    9332             :         [4224+0x05] = 104,      /* U+FE05: VARIATION SELECTOR-6 */
    9333             :         [4224+0x06] = 104,      /* U+FE06: VARIATION SELECTOR-7 */
    9334             :         [4224+0x07] = 104,      /* U+FE07: VARIATION SELECTOR-8 */
    9335             :         [4224+0x08] = 104,      /* U+FE08: VARIATION SELECTOR-9 */
    9336             :         [4224+0x09] = 104,      /* U+FE09: VARIATION SELECTOR-10 */
    9337             :         [4224+0x0A] = 104,      /* U+FE0A: VARIATION SELECTOR-11 */
    9338             :         [4224+0x0B] = 104,      /* U+FE0B: VARIATION SELECTOR-12 */
    9339             :         [4224+0x0C] = 104,      /* U+FE0C: VARIATION SELECTOR-13 */
    9340             :         [4224+0x0D] = 104,      /* U+FE0D: VARIATION SELECTOR-14 */
    9341             :         [4224+0x0E] = 104,      /* U+FE0E: VARIATION SELECTOR-15 */
    9342             :         [4224+0x0F] = 104,      /* U+FE0F: VARIATION SELECTOR-16 */
    9343             :         [4224+0x10] = 18,       /* U+FE10: PRESENTATION FORM FOR VERTICAL COMMA */
    9344             :         [4224+0x13] = 101,      /* U+FE13: PRESENTATION FORM FOR VERTICAL COLON */
    9345             :         [4224+0x14] = 519,      /* U+FE14: PRESENTATION FORM FOR VERTICAL SEMICOLON */
    9346             :         [4224+0x15] = 2,        /* U+FE15: PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */
    9347             :         [4224+0x19] = 116,      /* U+FE19: PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */
    9348             :         [4224+0x20] = 104,      /* U+FE20: COMBINING LIGATURE LEFT HALF */
    9349             :         [4224+0x21] = 104,      /* U+FE21: COMBINING LIGATURE RIGHT HALF */
    9350             :         [4224+0x22] = 104,      /* U+FE22: COMBINING DOUBLE TILDE LEFT HALF */
    9351             :         [4224+0x23] = 104,      /* U+FE23: COMBINING DOUBLE TILDE RIGHT HALF */
    9352             :         [4224+0x24] = 104,      /* U+FE24: COMBINING MACRON LEFT HALF */
    9353             :         [4224+0x25] = 104,      /* U+FE25: COMBINING MACRON RIGHT HALF */
    9354             :         [4224+0x26] = 104,      /* U+FE26: COMBINING CONJOINING MACRON */
    9355             :         [4224+0x27] = 104,      /* U+FE27: COMBINING LIGATURE LEFT HALF BELOW */
    9356             :         [4224+0x28] = 104,      /* U+FE28: COMBINING LIGATURE RIGHT HALF BELOW */
    9357             :         [4224+0x29] = 104,      /* U+FE29: COMBINING TILDE LEFT HALF BELOW */
    9358             :         [4224+0x2A] = 104,      /* U+FE2A: COMBINING TILDE RIGHT HALF BELOW */
    9359             :         [4224+0x2B] = 104,      /* U+FE2B: COMBINING MACRON LEFT HALF BELOW */
    9360             :         [4224+0x2C] = 104,      /* U+FE2C: COMBINING MACRON RIGHT HALF BELOW */
    9361             :         [4224+0x2D] = 104,      /* U+FE2D: COMBINING CONJOINING MACRON BELOW */
    9362             :         [4224+0x30] = 115,      /* U+FE30: PRESENTATION FORM FOR VERTICAL TWO DOT LEADER */
    9363             :         [4224+0x33] = 100,      /* U+FE33: PRESENTATION FORM FOR VERTICAL LOW LINE */
    9364             :         [4224+0x34] = 100,      /* U+FE34: PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */
    9365             :         [4224+0x35] = 134,      /* U+FE35: PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */
    9366             :         [4224+0x36] = 135,      /* U+FE36: PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS */
    9367             :         [4224+0x37] = 520,      /* U+FE37: PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET */
    9368             :         [4224+0x38] = 521,      /* U+FE38: PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET */
    9369             :         [4096+0x39] = 4288 - 0x80,      /* 357 271 ... */
    9370             :         [4288+0x07] = 522,      /* U+FE47: PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET */
    9371             :         [4288+0x08] = 523,      /* U+FE48: PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET */
    9372             :         [4288+0x0D] = 100,      /* U+FE4D: DASHED LOW LINE */
    9373             :         [4288+0x0E] = 100,      /* U+FE4E: CENTRELINE LOW LINE */
    9374             :         [4288+0x0F] = 100,      /* U+FE4F: WAVY LOW LINE */
    9375             :         [4288+0x10] = 18,       /* U+FE50: SMALL COMMA */
    9376             :         [4288+0x12] = 17,       /* U+FE52: SMALL FULL STOP */
    9377             :         [4288+0x14] = 519,      /* U+FE54: SMALL SEMICOLON */
    9378             :         [4288+0x15] = 101,      /* U+FE55: SMALL COLON */
    9379             :         [4288+0x17] = 2,        /* U+FE57: SMALL EXCLAMATION MARK */
    9380             :         [4288+0x19] = 134,      /* U+FE59: SMALL LEFT PARENTHESIS */
    9381             :         [4288+0x1A] = 135,      /* U+FE5A: SMALL RIGHT PARENTHESIS */
    9382             :         [4288+0x1B] = 520,      /* U+FE5B: SMALL LEFT CURLY BRACKET */
    9383             :         [4288+0x1C] = 521,      /* U+FE5C: SMALL RIGHT CURLY BRACKET */
    9384             :         [4288+0x1F] = 369,      /* U+FE5F: SMALL NUMBER SIGN */
    9385             :         [4288+0x20] = 125,      /* U+FE60: SMALL AMPERSAND */
    9386             :         [4288+0x21] = 212,      /* U+FE61: SMALL ASTERISK */
    9387             :         [4288+0x22] = 114,      /* U+FE62: SMALL PLUS SIGN */
    9388             :         [4288+0x23] = 10,       /* U+FE63: SMALL HYPHEN-MINUS */
    9389             :         [4288+0x24] = 119,      /* U+FE64: SMALL LESS-THAN SIGN */
    9390             :         [4288+0x25] = 120,      /* U+FE65: SMALL GREATER-THAN SIGN */
    9391             :         [4288+0x26] = 133,      /* U+FE66: SMALL EQUALS SIGN */
    9392             :         [4288+0x28] = 211,      /* U+FE68: SMALL REVERSE SOLIDUS */
    9393             :         [4288+0x29] = 524,      /* U+FE69: SMALL DOLLAR SIGN */
    9394             :         [4288+0x2A] = 525,      /* U+FE6A: SMALL PERCENT SIGN */
    9395             :         [4288+0x2B] = 526,      /* U+FE6B: SMALL COMMERCIAL AT */
    9396             :         [4096+0x3B] = 4352 - 0x80,      /* 357 273 ... */
    9397             :         [4352+0x3F] = 104,      /* U+FEFF: ZERO WIDTH NO-BREAK SPACE */
    9398             :         [4096+0x3C] = 4416 - 0x80,      /* 357 274 ... */
    9399             :         [4416+0x01] = 2,        /* U+FF01: FULLWIDTH EXCLAMATION MARK */
    9400             :         [4416+0x02] = 112,      /* U+FF02: FULLWIDTH QUOTATION MARK */
    9401             :         [4416+0x03] = 369,      /* U+FF03: FULLWIDTH NUMBER SIGN */
    9402             :         [4416+0x04] = 524,      /* U+FF04: FULLWIDTH DOLLAR SIGN */
    9403             :         [4416+0x05] = 525,      /* U+FF05: FULLWIDTH PERCENT SIGN */
    9404             :         [4416+0x06] = 125,      /* U+FF06: FULLWIDTH AMPERSAND */
    9405             :         [4416+0x07] = 15,       /* U+FF07: FULLWIDTH APOSTROPHE */
    9406             :         [4416+0x08] = 134,      /* U+FF08: FULLWIDTH LEFT PARENTHESIS */
    9407             :         [4416+0x09] = 135,      /* U+FF09: FULLWIDTH RIGHT PARENTHESIS */
    9408             :         [4416+0x0A] = 212,      /* U+FF0A: FULLWIDTH ASTERISK */
    9409             :         [4416+0x0B] = 114,      /* U+FF0B: FULLWIDTH PLUS SIGN */
    9410             :         [4416+0x0C] = 18,       /* U+FF0C: FULLWIDTH COMMA */
    9411             :         [4416+0x0D] = 10,       /* U+FF0D: FULLWIDTH HYPHEN-MINUS */
    9412             :         [4416+0x0E] = 17,       /* U+FF0E: FULLWIDTH FULL STOP */
    9413             :         [4416+0x0F] = 43,       /* U+FF0F: FULLWIDTH SOLIDUS */
    9414             :         [4416+0x10] = 126,      /* U+FF10: FULLWIDTH DIGIT ZERO */
    9415             :         [4416+0x11] = 19,       /* U+FF11: FULLWIDTH DIGIT ONE */
    9416             :         [4416+0x12] = 13,       /* U+FF12: FULLWIDTH DIGIT TWO */
    9417             :         [4416+0x13] = 14,       /* U+FF13: FULLWIDTH DIGIT THREE */
    9418             :         [4416+0x14] = 127,      /* U+FF14: FULLWIDTH DIGIT FOUR */
    9419             :         [4416+0x15] = 128,      /* U+FF15: FULLWIDTH DIGIT FIVE */
    9420             :         [4416+0x16] = 129,      /* U+FF16: FULLWIDTH DIGIT SIX */
    9421             :         [4416+0x17] = 130,      /* U+FF17: FULLWIDTH DIGIT SEVEN */
    9422             :         [4416+0x18] = 131,      /* U+FF18: FULLWIDTH DIGIT EIGHT */
    9423             :         [4416+0x19] = 132,      /* U+FF19: FULLWIDTH DIGIT NINE */
    9424             :         [4416+0x1A] = 101,      /* U+FF1A: FULLWIDTH COLON */
    9425             :         [4416+0x1B] = 519,      /* U+FF1B: FULLWIDTH SEMICOLON */
    9426             :         [4416+0x1C] = 119,      /* U+FF1C: FULLWIDTH LESS-THAN SIGN */
    9427             :         [4416+0x1D] = 133,      /* U+FF1D: FULLWIDTH EQUALS SIGN */
    9428             :         [4416+0x1E] = 120,      /* U+FF1E: FULLWIDTH GREATER-THAN SIGN */
    9429             :         [4416+0x20] = 526,      /* U+FF20: FULLWIDTH COMMERCIAL AT */
    9430             :         [4416+0x21] = 25,       /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
    9431             :         [4416+0x22] = 73,       /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
    9432             :         [4416+0x23] = 27,       /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
    9433             :         [4416+0x24] = 30,       /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
    9434             :         [4416+0x25] = 28,       /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
    9435             :         [4416+0x26] = 74,       /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
    9436             :         [4416+0x27] = 46,       /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
    9437             :         [4416+0x28] = 48,       /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
    9438             :         [4416+0x29] = 29,       /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
    9439             :         [4416+0x2A] = 52,       /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
    9440             :         [4416+0x2B] = 54,       /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
    9441             :         [4416+0x2C] = 57,       /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
    9442             :         [4416+0x2D] = 105,      /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
    9443             :         [4416+0x2E] = 31,       /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
    9444             :         [4416+0x2F] = 32,       /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
    9445             :         [4416+0x30] = 79,       /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
    9446             :         [4416+0x31] = 160,      /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
    9447             :         [4416+0x32] = 62,       /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
    9448             :         [4416+0x33] = 64,       /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
    9449             :         [4416+0x34] = 66,       /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
    9450             :         [4416+0x35] = 34,       /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
    9451             :         [4416+0x36] = 81,       /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
    9452             :         [4416+0x37] = 68,       /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
    9453             :         [4416+0x38] = 107,      /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
    9454             :         [4416+0x39] = 35,       /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
    9455             :         [4416+0x3A] = 70,       /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
    9456             :         [4416+0x3B] = 522,      /* U+FF3B: FULLWIDTH LEFT SQUARE BRACKET */
    9457             :         [4416+0x3C] = 211,      /* U+FF3C: FULLWIDTH REVERSE SOLIDUS */
    9458             :         [4416+0x3D] = 523,      /* U+FF3D: FULLWIDTH RIGHT SQUARE BRACKET */
    9459             :         [4416+0x3E] = 98,       /* U+FF3E: FULLWIDTH CIRCUMFLEX ACCENT */
    9460             :         [4416+0x3F] = 100,      /* U+FF3F: FULLWIDTH LOW LINE */
    9461             :         [4096+0x3D] = 4480 - 0x80,      /* 357 275 ... */
    9462             :         [4480+0x00] = 99,       /* U+FF40: FULLWIDTH GRAVE ACCENT */
    9463             :         [4480+0x01] = 8,        /* U+FF41: FULLWIDTH LATIN SMALL LETTER A */
    9464             :         [4480+0x02] = 72,       /* U+FF42: FULLWIDTH LATIN SMALL LETTER B */
    9465             :         [4480+0x03] = 3,        /* U+FF43: FULLWIDTH LATIN SMALL LETTER C */
    9466             :         [4480+0x04] = 41,       /* U+FF44: FULLWIDTH LATIN SMALL LETTER D */
    9467             :         [4480+0x05] = 39,       /* U+FF45: FULLWIDTH LATIN SMALL LETTER E */
    9468             :         [4480+0x06] = 75,       /* U+FF46: FULLWIDTH LATIN SMALL LETTER F */
    9469             :         [4480+0x07] = 47,       /* U+FF47: FULLWIDTH LATIN SMALL LETTER G */
    9470             :         [4480+0x08] = 49,       /* U+FF48: FULLWIDTH LATIN SMALL LETTER H */
    9471             :         [4480+0x09] = 40,       /* U+FF49: FULLWIDTH LATIN SMALL LETTER I */
    9472             :         [4480+0x0A] = 53,       /* U+FF4A: FULLWIDTH LATIN SMALL LETTER J */
    9473             :         [4480+0x0B] = 55,       /* U+FF4B: FULLWIDTH LATIN SMALL LETTER K */
    9474             :         [4480+0x0C] = 58,       /* U+FF4C: FULLWIDTH LATIN SMALL LETTER L */
    9475             :         [4480+0x0D] = 93,       /* U+FF4D: FULLWIDTH LATIN SMALL LETTER M */
    9476             :         [4480+0x0E] = 42,       /* U+FF4E: FULLWIDTH LATIN SMALL LETTER N */
    9477             :         [4480+0x0F] = 20,       /* U+FF4F: FULLWIDTH LATIN SMALL LETTER O */
    9478             :         [4480+0x10] = 80,       /* U+FF50: FULLWIDTH LATIN SMALL LETTER P */
    9479             :         [4480+0x11] = 56,       /* U+FF51: FULLWIDTH LATIN SMALL LETTER Q */
    9480             :         [4480+0x12] = 63,       /* U+FF52: FULLWIDTH LATIN SMALL LETTER R */
    9481             :         [4480+0x13] = 65,       /* U+FF53: FULLWIDTH LATIN SMALL LETTER S */
    9482             :         [4480+0x14] = 67,       /* U+FF54: FULLWIDTH LATIN SMALL LETTER T */
    9483             :         [4480+0x15] = 16,       /* U+FF55: FULLWIDTH LATIN SMALL LETTER U */
    9484             :         [4480+0x16] = 94,       /* U+FF56: FULLWIDTH LATIN SMALL LETTER V */
    9485             :         [4480+0x17] = 69,       /* U+FF57: FULLWIDTH LATIN SMALL LETTER W */
    9486             :         [4480+0x18] = 33,       /* U+FF58: FULLWIDTH LATIN SMALL LETTER X */
    9487             :         [4480+0x19] = 44,       /* U+FF59: FULLWIDTH LATIN SMALL LETTER Y */
    9488             :         [4480+0x1A] = 71,       /* U+FF5A: FULLWIDTH LATIN SMALL LETTER Z */
    9489             :         [4480+0x1B] = 520,      /* U+FF5B: FULLWIDTH LEFT CURLY BRACKET */
    9490             :         [4480+0x1C] = 6,        /* U+FF5C: FULLWIDTH VERTICAL LINE */
    9491             :         [4480+0x1D] = 521,      /* U+FF5D: FULLWIDTH RIGHT CURLY BRACKET */
    9492             :         [4480+0x1E] = 102,      /* U+FF5E: FULLWIDTH TILDE */
    9493             : };
    9494             : 
    9495             : gdk_return
    9496           8 : GDKasciify(char **restrict buf, size_t *restrict buflen,
    9497             :            const char *restrict s)
    9498             : {
    9499           8 :         uint8_t *dst = (uint8_t *) *buf;
    9500           8 :         size_t dstoff = 0;
    9501           8 :         size_t bl;
    9502             : 
    9503           8 :         bl = strlen(s);
    9504           8 :         if (*buf == NULL) {
    9505           5 :                 if (bl < 4090)
    9506             :                         bl = 4096;
    9507             :                 else
    9508           0 :                         bl += 8;
    9509           5 :                 dst = GDKmalloc(bl);
    9510           5 :                 if (dst == NULL)
    9511             :                         return GDK_FAIL;
    9512           5 :                 *buf = (char *) dst;
    9513           3 :         } else if (bl + 8 > *buflen) {
    9514           0 :                 bl += 1024;
    9515           0 :                 dst = GDKrealloc(*buf, bl);
    9516           0 :                 if (dst == NULL)
    9517             :                         return GDK_FAIL;
    9518           0 :                 *buf = (char *) dst;
    9519             :         } else {
    9520             :                 bl = *buflen;
    9521             :         }
    9522             : 
    9523           8 :         size_t bl8 = bl - 8;    /* time for buffer extension */
    9524           8 :         if ((uint8_t) *s == 0x80) {
    9525             :                 /* nil */
    9526           0 :                 assert(s[1] == 0);
    9527           0 :                 dst[dstoff++] = 0x80;
    9528             :         } else {
    9529             :                 /* special case for ASCII prefix */
    9530          28 :                 while ((int8_t) *s > 0) {
    9531             :                         /* no need to check for buffer size, we made
    9532             :                          * sure there is enough space */
    9533          20 :                         dst[dstoff++] = (uint8_t) *s++;
    9534             :                 }
    9535          52 :                 while (*s) {
    9536             :                         /* we are at the start of a Unicode codepoint
    9537             :                          * encoded in UTF-8 */
    9538          44 :                         if (dstoff > bl8) {
    9539             :                                 /* make sure we have enough space for
    9540             :                                  * the largest asciification, i.e. 7
    9541             :                                  * bytes plus terminating NUL */
    9542           0 :                                 size_t newlen = bl + 1024;
    9543           0 :                                 dst = GDKrealloc(*buf, newlen);
    9544           0 :                                 if (dst == NULL) {
    9545           0 :                                         *buflen = bl;
    9546           0 :                                         return GDK_FAIL;
    9547             :                                 }
    9548           0 :                                 *buf = (char *) dst;
    9549           0 :                                 bl = newlen;
    9550           0 :                                 bl8 = bl - 8;
    9551             :                         }
    9552          44 :                         const uint8_t *u = (const uint8_t *) s;
    9553          44 :                         int v = asciify[(uint8_t) *s++];
    9554          52 :                         while (v && ((uint8_t) *s & 0xC0) == 0x80) {
    9555           8 :                                 v = asciify[v + (uint8_t) *s++];
    9556             :                         }
    9557          44 :                         if (v == 0) {
    9558          36 :                                 if ((int8_t) *u > 0)
    9559          36 :                                         dst[dstoff++] = *u;
    9560             :                                 else
    9561           0 :                                         dst[dstoff++] = '?';
    9562             :                                 /* skip rest of current codepoint */
    9563          36 :                                 while (((uint8_t) *s & 0xC0) == 0x80)
    9564           0 :                                         s++;
    9565             :                         } else {
    9566          16 :                                 for (u = (const uint8_t *) valtab[v]; *u; u++)
    9567           8 :                                         dst[dstoff++] = *u;
    9568             :                         }
    9569             :                 }
    9570             :         }
    9571           8 :         if (dstoff + 1 > bl) {
    9572           0 :                 size_t newlen = dstoff + 1;
    9573           0 :                 dst = GDKrealloc(*buf, newlen);
    9574           0 :                 if (dst == NULL) {
    9575           0 :                         *buflen = bl;
    9576           0 :                         return GDK_FAIL;
    9577             :                 }
    9578           0 :                 *buf = (char *) dst;
    9579           0 :                 bl = newlen;
    9580             :         }
    9581           8 :         dst[dstoff] = '\0';
    9582           8 :         *buflen = bl;
    9583           8 :         return GDK_SUCCEED;
    9584             : }
    9585             : 
    9586             : BAT *
    9587          34 : BATasciify(BAT *b, BAT *s)
    9588             : {
    9589          34 :         if (b->tascii) {
    9590          33 :                 if (s)
    9591          16 :                         return BATproject(s, b);
    9592          17 :                 return COLcopy(b, TYPE_str, false, TRANSIENT);
    9593             :         }
    9594             : 
    9595           1 :         lng t0 = 0;
    9596           1 :         BAT *bn;
    9597           1 :         struct canditer ci;
    9598           1 :         BATiter bi;
    9599           1 :         oid bhseqbase = b->hseqbase;
    9600           1 :         QryCtx *qry_ctx = MT_thread_get_qry_ctx();
    9601           1 :         qry_ctx = qry_ctx ? qry_ctx : &(QryCtx) {.endtime = 0};
    9602             : 
    9603           1 :         TRC_DEBUG_IF(ALGO) t0 = GDKusec();
    9604           1 :         BATcheck(b, NULL);
    9605           1 :         canditer_init(&ci, b, s);
    9606           1 :         bn = COLnew(ci.hseq, TYPE_str, ci.ncand, TRANSIENT);
    9607           1 :         if (bn == NULL)
    9608             :                 return NULL;
    9609           1 :         bi = bat_iterator(b);
    9610           1 :         char *buf = NULL;
    9611           1 :         size_t buflen = 0;
    9612           6 :         TIMEOUT_LOOP_IDX_DECL(i, ci.ncand, qry_ctx) {
    9613           4 :                 BUN x = canditer_next(&ci) - bhseqbase;
    9614           8 :                 if (GDKasciify(&buf, &buflen, BUNtvar(bi, x)) != GDK_SUCCEED ||
    9615           4 :                     tfastins_nocheckVAR(bn, i, buf) != GDK_SUCCEED) {
    9616           0 :                         goto bailout;
    9617             :                 }
    9618             :         }
    9619           1 :         GDKfree(buf);
    9620           1 :         BATsetcount(bn, ci.ncand);
    9621           1 :         bat_iterator_end(&bi);
    9622           1 :         TIMEOUT_CHECK(qry_ctx,
    9623             :                       GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
    9624           1 :         bn->tnil = false;
    9625           1 :         bn->tnonil = false;
    9626           1 :         bn->tkey = BATcount(bn) <= 1;
    9627           1 :         bn->tsorted = BATcount(bn) <= 1;
    9628           1 :         bn->trevsorted = BATcount(bn) <= 1;
    9629           1 :         bn->theap->dirty |= BATcount(bn) > 0;
    9630           1 :         TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
    9631             :                   " -> " ALGOBATFMT " " LLFMT "usec\n",
    9632             :                   ALGOBATPAR(b), ALGOOPTBATPAR(s),
    9633             :                   ALGOBATPAR(bn), GDKusec() - t0);
    9634             :         return bn;
    9635             : 
    9636           0 :   bailout:
    9637           0 :         GDKfree(buf);
    9638           0 :         bat_iterator_end(&bi);
    9639           0 :         BBPreclaim(bn);
    9640           0 :         return NULL;
    9641             : }

Generated by: LCOV version 1.14