public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch] MdeModulePkg RegularExpressionDxe: Update Oniguruma from v6.9.0 to v6.9.3
@ 2019-08-08 13:31 Liming Gao
  0 siblings, 0 replies; only message in thread
From: Liming Gao @ 2019-08-08 13:31 UTC (permalink / raw)
  To: devel; +Cc: Jian J Wang, Hao A Wu, Cinnamon Shia

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2066
Update Oniguruma to the latest version v6.9.3.
Oniguruma https://github.com/kkos/oniguruma
This release is the security fix release. It includes the changes:
Fixed CVE-2019-13224
Fixed CVE-2019-13225
Fixed many problems (found by libfuzzer programs)

Verify VS2015, GCC5 build.
Verify RegularExpressionProtocol GetInfo() and Match() function.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Cinnamon Shia <cinnamon.shia@hpe.com>
Signed-off-by: Liming Gao <liming.gao@intel.com>
---
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c                       |    2 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c                     | 2433 +++++++++++--------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c                      |   82 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c                    |   63 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c                     | 2672 +++++++++++----------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c                      |   22 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c                    |  702 +++---
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c                   |   12 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c                    |   16 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c                   |   12 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c                     |  289 ++-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c           |   31 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c           | 2689 ++++++++++-----------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c           |    4 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c           |    4 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c           | 2256 +++++++++---------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c       | 8545 +++++++++++++++++++++++++++++++++++--------------------------------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c |  410 ++--
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c          | 3253 +++++++++++++-------------
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_wb_data.c             | 1023 ++++++++
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c                    |   36 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h                   |   21 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h                      |   23 +-
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h                      |  438 ++--
 MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h                    |  313 ++-
 25 files changed, 14055 insertions(+), 11296 deletions(-)

diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c
index ef961c94d5..2527c02b32 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c
@@ -113,6 +113,6 @@ OnigEncodingType OnigEncodingASCII = {
   init,
   0, /* is_initialized */
   onigenc_always_true_is_valid_mbc_string,
-  ENC_FLAG_ASCII_COMPATIBLE,
+  ENC_FLAG_ASCII_COMPATIBLE|ENC_FLAG_SKIP_OFFSET_1,
   0, 0
 };
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c
index f5db3ea6e8..d847ca4233 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c
@@ -2,7 +2,7 @@
   regcomp.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,6 +29,8 @@
 
 #include "regparse.h"
 
+#define OPS_INIT_SIZE  8
+
 OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
 
 #if 0
@@ -78,7 +80,7 @@ int_stack_push(int_stack* s, int v)
 {
   if (s->n >= s->alloc) {
     int new_size = s->alloc * 2;
-    int* nv = (int* )xrealloc(s->v, sizeof(int) * new_size);
+    int* nv = (int* )xrealloc(s->v, sizeof(int) * new_size, sizeof(int) * s->alloc);
     if (IS_NULL(nv)) return ONIGERR_MEMORY;
 
     s->alloc = new_size;
@@ -108,6 +110,280 @@ int_stack_pop(int_stack* s)
 }
 #endif
 
+static int
+ops_init(regex_t* reg, int init_alloc_size)
+{
+  Operation* p;
+  size_t size;
+
+  if (init_alloc_size > 0) {
+    size = sizeof(Operation) * init_alloc_size;
+    p = (Operation* )xmalloc(size);
+    CHECK_NULL_RETURN_MEMERR(p);
+#ifdef USE_DIRECT_THREADED_CODE
+    {
+      enum OpCode* cp;
+      size = sizeof(enum OpCode) * init_alloc_size;
+      cp = (enum OpCode* )xmalloc(size);
+      CHECK_NULL_RETURN_MEMERR(cp);
+      reg->ocs = cp;
+    }
+#endif
+  }
+  else {
+    p  = (Operation* )0;
+#ifdef USE_DIRECT_THREADED_CODE
+    reg->ocs = (enum OpCode* )0;
+#endif
+  }
+
+  reg->ops = p;
+  reg->ops_curr  = 0; /* !!! not yet done ops_new() */
+  reg->ops_alloc = init_alloc_size;
+  reg->ops_used  = 0;
+
+  return ONIG_NORMAL;
+}
+
+static int
+ops_expand(regex_t* reg, int n)
+{
+#define MIN_OPS_EXPAND_SIZE   4
+
+#ifdef USE_DIRECT_THREADED_CODE
+  enum OpCode* cp;
+#endif
+  Operation* p;
+  size_t size;
+
+  if (n <= 0) n = MIN_OPS_EXPAND_SIZE;
+
+  n += reg->ops_alloc;
+
+  size = sizeof(Operation) * n;
+  p = (Operation* )xrealloc(reg->ops, size, sizeof(Operation) * reg->ops_alloc);
+  CHECK_NULL_RETURN_MEMERR(p);
+
+#ifdef USE_DIRECT_THREADED_CODE
+  size = sizeof(enum OpCode) * n;
+  cp = (enum OpCode* )xrealloc(reg->ocs, size, sizeof(enum OpCode) * reg->ops_alloc);
+  CHECK_NULL_RETURN_MEMERR(cp);
+  reg->ocs = cp;
+#endif
+
+  reg->ops = p;
+  reg->ops_alloc = n;
+  if (reg->ops_used == 0)
+    reg->ops_curr = 0;
+  else
+    reg->ops_curr = reg->ops + (reg->ops_used - 1);
+
+  return ONIG_NORMAL;
+}
+
+static int
+ops_new(regex_t* reg)
+{
+  int r;
+
+  if (reg->ops_used >= reg->ops_alloc) {
+    r = ops_expand(reg, reg->ops_alloc);
+    if (r != ONIG_NORMAL) return r;
+  }
+
+  reg->ops_curr = reg->ops + reg->ops_used;
+  reg->ops_used++;
+
+  xmemset(reg->ops_curr, 0, sizeof(Operation));
+  return ONIG_NORMAL;
+}
+
+static int
+is_in_string_pool(regex_t* reg, UChar* s)
+{
+  return (s >= reg->string_pool && s < reg->string_pool_end);
+}
+
+static void
+ops_free(regex_t* reg)
+{
+  int i;
+
+  if (IS_NULL(reg->ops)) return ;
+
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      if (! is_in_string_pool(reg, op->exact_len_n.s))
+        xfree(op->exact_len_n.s);
+      break;
+    case OP_EXACTN: case OP_EXACTMB2N: case OP_EXACTMB3N: case OP_EXACTN_IC:
+      if (! is_in_string_pool(reg, op->exact_n.s))
+        xfree(op->exact_n.s);
+      break;
+    case OP_EXACT1: case OP_EXACT2: case OP_EXACT3: case OP_EXACT4:
+    case OP_EXACT5: case OP_EXACTMB2N1: case OP_EXACTMB2N2:
+    case OP_EXACTMB2N3: case OP_EXACT1_IC:
+      break;
+
+    case OP_CCLASS_NOT: case OP_CCLASS:
+      xfree(op->cclass.bsp);
+      break;
+
+    case OP_CCLASS_MB_NOT: case OP_CCLASS_MB:
+      xfree(op->cclass_mb.mb);
+      break;
+    case OP_CCLASS_MIX_NOT: case OP_CCLASS_MIX:
+      xfree(op->cclass_mix.mb);
+      xfree(op->cclass_mix.bsp);
+      break;
+
+    case OP_BACKREF1: case OP_BACKREF2: case OP_BACKREF_N: case OP_BACKREF_N_IC:
+      break;
+    case OP_BACKREF_MULTI:      case OP_BACKREF_MULTI_IC:
+    case OP_BACKREF_WITH_LEVEL:
+    case OP_BACKREF_WITH_LEVEL_IC:
+    case OP_BACKREF_CHECK:
+    case OP_BACKREF_CHECK_WITH_LEVEL:
+      if (op->backref_general.num != 1)
+        xfree(op->backref_general.ns);
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  xfree(reg->ops);
+#ifdef USE_DIRECT_THREADED_CODE
+  xfree(reg->ocs);
+  reg->ocs = 0;
+#endif
+
+  reg->ops = 0;
+  reg->ops_curr  = 0;
+  reg->ops_alloc = 0;
+  reg->ops_used  = 0;
+}
+
+static int
+ops_calc_size_of_string_pool(regex_t* reg)
+{
+  int i;
+  int total;
+
+  if (IS_NULL(reg->ops)) return 0;
+
+  total = 0;
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      total += op->exact_len_n.len * op->exact_len_n.n;
+      break;
+    case OP_EXACTN:
+    case OP_EXACTN_IC:
+      total += op->exact_n.n;
+      break;
+    case OP_EXACTMB2N:
+      total += op->exact_n.n * 2;
+      break;
+    case OP_EXACTMB3N:
+      total += op->exact_n.n * 3;
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  return total;
+}
+
+static int
+ops_make_string_pool(regex_t* reg)
+{
+  int i;
+  int len;
+  int size;
+  UChar* pool;
+  UChar* curr;
+
+  size = ops_calc_size_of_string_pool(reg);
+  if (size <= 0) {
+    return 0;
+  }
+
+  curr = pool = (UChar* )xmalloc((size_t )size);
+  CHECK_NULL_RETURN_MEMERR(pool);
+
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      len = op->exact_len_n.len * op->exact_len_n.n;
+      xmemcpy(curr, op->exact_len_n.s, len);
+      xfree(op->exact_len_n.s);
+      op->exact_len_n.s = curr;
+      curr += len;
+      break;
+    case OP_EXACTN:
+    case OP_EXACTN_IC:
+      len = op->exact_n.n;
+    copy:
+      xmemcpy(curr, op->exact_n.s, len);
+      xfree(op->exact_n.s);
+      op->exact_n.s = curr;
+      curr += len;
+      break;
+    case OP_EXACTMB2N:
+      len = op->exact_n.n * 2;
+      goto copy;
+      break;
+    case OP_EXACTMB3N:
+      len = op->exact_n.n * 3;
+      goto copy;
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  reg->string_pool     = pool;
+  reg->string_pool_end = pool + size;
+  return 0;
+}
+
 extern OnigCaseFoldType
 onig_get_default_case_fold_flag(void)
 {
@@ -138,10 +414,17 @@ int_multiply_cmp(int x, int y, int v)
     return 1;
 }
 
+extern int
+onig_positive_int_multiply(int x, int y)
+{
+  if (x == 0 || y == 0) return 0;
+
+  if (x < INT_MAX / y)
+    return x * y;
+  else
+    return -1;
+}
 
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];
-#endif
 
 static void
 swap_node(Node* a, Node* b)
@@ -152,7 +435,7 @@ swap_node(Node* a, Node* b)
 
   if (NODE_TYPE(a) == NODE_STRING) {
     StrNode* sn = STR_(a);
-    if (sn->capa == 0) {
+    if (sn->capacity == 0) {
       int len = (int )(sn->end - sn->s);
       sn->s   = sn->buf;
       sn->end = sn->s + len;
@@ -161,7 +444,7 @@ swap_node(Node* a, Node* b)
 
   if (NODE_TYPE(b) == NODE_STRING) {
     StrNode* sn = STR_(b);
-    if (sn->capa == 0) {
+    if (sn->capacity == 0) {
       int len = (int )(sn->end - sn->s);
       sn->s   = sn->buf;
       sn->end = sn->s + len;
@@ -202,24 +485,6 @@ bitset_is_empty(BitSetRef bs)
   return 1;
 }
 
-extern int
-onig_bbuf_init(BBuf* buf, int size)
-{
-  if (size <= 0) {
-    size   = 0;
-    buf->p = NULL;
-  }
-  else {
-    buf->p = (UChar* )xmalloc(size);
-    if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
-  }
-
-  buf->alloc = size;
-  buf->used  = 0;
-  return 0;
-}
-
-
 #ifdef USE_CALL
 
 static int
@@ -264,113 +529,19 @@ unset_addr_list_add(UnsetAddrList* list, int offset, struct _Node* node)
 
 
 static int
-add_opcode(regex_t* reg, int opcode)
-{
-  BB_ADD1(reg, opcode);
-  return 0;
-}
-
-static int
-add_rel_addr(regex_t* reg, int addr)
-{
-  RelAddrType ra = (RelAddrType )addr;
-
-  BB_ADD(reg, &ra, SIZE_RELADDR);
-  return 0;
-}
-
-static int
-add_abs_addr(regex_t* reg, int addr)
-{
-  AbsAddrType ra = (AbsAddrType )addr;
-
-  BB_ADD(reg, &ra, SIZE_ABSADDR);
-  return 0;
-}
-
-static int
-add_length(regex_t* reg, int len)
-{
-  LengthType l = (LengthType )len;
-
-  BB_ADD(reg, &l, SIZE_LENGTH);
-  return 0;
-}
-
-static int
-add_mem_num(regex_t* reg, int num)
-{
-  MemNumType n = (MemNumType )num;
-
-  BB_ADD(reg, &n, SIZE_MEMNUM);
-  return 0;
-}
-
-#if 0
-static int
-add_pointer(regex_t* reg, void* addr)
-{
-  PointerType ptr = (PointerType )addr;
-
-  BB_ADD(reg, &ptr, SIZE_POINTER);
-  return 0;
-}
-#endif
-
-static int
-add_option(regex_t* reg, OnigOptionType option)
-{
-  BB_ADD(reg, &option, SIZE_OPTION);
-  return 0;
-}
-
-static int
-add_save_type(regex_t* reg, enum SaveType type)
-{
-  SaveType t = (SaveType )type;
-
-  BB_ADD(reg, &t, SIZE_SAVE_TYPE);
-  return 0;
-}
-
-static int
-add_update_var_type(regex_t* reg, enum UpdateVarType type)
-{
-  UpdateVarType t = (UpdateVarType )type;
-
-  BB_ADD(reg, &t, SIZE_UPDATE_VAR_TYPE);
-  return 0;
-}
-
-static int
-add_mode(regex_t* reg, ModeType mode)
-{
-  BB_ADD(reg, &mode, SIZE_MODE);
-  return 0;
-}
-
-static int
-add_opcode_rel_addr(regex_t* reg, int opcode, int addr)
+add_op(regex_t* reg, int opcode)
 {
   int r;
 
-  r = add_opcode(reg, opcode);
-  if (r != 0) return r;
-  r = add_rel_addr(reg, addr);
-  return r;
-}
+  r = ops_new(reg);
+  if (r != ONIG_NORMAL) return r;
 
-static int
-add_bytes(regex_t* reg, UChar* bytes, int len)
-{
-  BB_ADD(reg, bytes, len);
-  return 0;
-}
+#ifdef USE_DIRECT_THREADED_CODE
+  *(reg->ocs + (reg->ops_curr - reg->ops)) = opcode;
+#else
+  reg->ops_curr->opcode = opcode;
+#endif
 
-static int
-add_bitset(regex_t* reg, BitSetRef bs)
-{
-  BB_ADD(reg, bs, SIZE_BITSET);
   return 0;
 }
 
@@ -428,32 +599,53 @@ select_str_opcode(int mb_len, int str_len, int ignore_case)
 }
 
 static int
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info, ScanEnv* env)
+is_strict_real_node(Node* node)
+{
+  switch (NODE_TYPE(node)) {
+  case NODE_STRING:
+    {
+      StrNode* sn = STR_(node);
+      return (sn->end != sn->s);
+    }
+    break;
+
+  case NODE_CCLASS:
+  case NODE_CTYPE:
+    return 1;
+    break;
+
+  default:
+    return 0;
+    break;
+  }
+}
+
+static int
+compile_tree_empty_check(Node* node, regex_t* reg, int emptiness, ScanEnv* env)
 {
   int r;
   int saved_num_null_check = reg->num_null_check;
 
-  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
-    r = add_opcode(reg, OP_EMPTY_CHECK_START);
-    if (r != 0) return r;
-    r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
+  if (emptiness != BODY_IS_NOT_EMPTY) {
+    r = add_op(reg, OP_EMPTY_CHECK_START);
     if (r != 0) return r;
+    COP(reg)->empty_check_start.mem = reg->num_null_check; /* NULL CHECK ID */
     reg->num_null_check++;
   }
 
   r = compile_tree(node, reg, env);
   if (r != 0) return r;
 
-  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
-    if (empty_info == QUANT_BODY_IS_EMPTY)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END);
-    else if (empty_info == QUANT_BODY_IS_EMPTY_MEM)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST);
-    else if (empty_info == QUANT_BODY_IS_EMPTY_REC)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);
+  if (emptiness != BODY_IS_NOT_EMPTY) {
+    if (emptiness == BODY_IS_EMPTY_POSSIBILITY)
+      r = add_op(reg, OP_EMPTY_CHECK_END);
+    else if (emptiness == BODY_IS_EMPTY_POSSIBILITY_MEM)
+      r = add_op(reg, OP_EMPTY_CHECK_END_MEMST);
+    else if (emptiness == BODY_IS_EMPTY_POSSIBILITY_REC)
+      r = add_op(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);
 
     if (r != 0) return r;
-    r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */
+    COP(reg)->empty_check_end.mem = saved_num_null_check; /* NULL CHECK ID */
   }
   return r;
 }
@@ -463,13 +655,15 @@ static int
 compile_call(CallNode* node, regex_t* reg, ScanEnv* env)
 {
   int r;
+  int offset;
 
-  r = add_opcode(reg, OP_CALL);
+  r = add_op(reg, OP_CALL);
   if (r != 0) return r;
-  r = unset_addr_list_add(env->unset_addr_list, BB_GET_OFFSET_POS(reg),
-                          NODE_CALL_BODY(node));
-  if (r != 0) return r;
-  r = add_abs_addr(reg, 0 /*dummy addr.*/);
+
+  COP(reg)->call.addr = 0; /* dummy addr. */
+
+  offset = COP_CURR_OFFSET_BYTES(reg, call.addr);
+  r = unset_addr_list_add(env->unset_addr_list, offset, NODE_CALL_BODY(node));
   return r;
 }
 #endif
@@ -490,41 +684,53 @@ static int
 add_compile_string_length(UChar* s ARG_UNUSED, int mb_len, int str_len,
                           regex_t* reg ARG_UNUSED, int ignore_case)
 {
-  int len;
-  int op = select_str_opcode(mb_len, str_len, ignore_case);
-
-  len = SIZE_OPCODE;
-
-  if (op == OP_EXACTMBN)  len += SIZE_LENGTH;
-  if (IS_NEED_STR_LEN_OP_EXACT(op))
-    len += SIZE_LENGTH;
-
-  len += mb_len * str_len;
-  return len;
+  return 1;
 }
 
 static int
 add_compile_string(UChar* s, int mb_len, int str_len,
                    regex_t* reg, int ignore_case)
 {
-  int op = select_str_opcode(mb_len, str_len, ignore_case);
-  add_opcode(reg, op);
+  int op;
+  int r;
+  int byte_len;
+  UChar* p;
+  UChar* end;
+
+  op = select_str_opcode(mb_len, str_len, ignore_case);
+  r = add_op(reg, op);
+  if (r != 0) return r;
+
+  byte_len = mb_len * str_len;
+  end = s + byte_len;
 
-  if (op == OP_EXACTMBN)
-    add_length(reg, mb_len);
+  if (op == OP_EXACTMBN) {
+    p = onigenc_strdup(reg->enc, s, end);
+    CHECK_NULL_RETURN_MEMERR(p);
+
+    COP(reg)->exact_len_n.len = mb_len;
+    COP(reg)->exact_len_n.n   = str_len;
+    COP(reg)->exact_len_n.s   = p;
+  }
+  else if (IS_NEED_STR_LEN_OP_EXACT(op)) {
+    p = onigenc_strdup(reg->enc, s, end);
+    CHECK_NULL_RETURN_MEMERR(p);
 
-  if (IS_NEED_STR_LEN_OP_EXACT(op)) {
     if (op == OP_EXACTN_IC)
-      add_length(reg, mb_len * str_len);
+      COP(reg)->exact_n.n = byte_len;
     else
-      add_length(reg, str_len);
+      COP(reg)->exact_n.n = str_len;
+
+    COP(reg)->exact_n.s = p;
+  }
+  else {
+    xmemcpy(COP(reg)->exact.s, s, (size_t )byte_len);
+    COP(reg)->exact.s[byte_len] = '\0';
   }
 
-  add_bytes(reg, s, mb_len * str_len);
   return 0;
 }
 
-
 static int
 compile_length_string_node(Node* node, regex_t* reg)
 {
@@ -624,52 +830,24 @@ compile_string_raw_node(StrNode* sn, regex_t* reg)
   return add_compile_string(sn->s, 1 /* sb */, (int )(sn->end - sn->s), reg, 0);
 }
 
-static int
-add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
+static void*
+set_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
 {
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-  add_length(reg, mbuf->used);
-  return add_bytes(reg, mbuf->p, mbuf->used);
-#else
-  int r, pad_size;
-  UChar* p = BB_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;
-
-  GET_ALIGNMENT_PAD_SIZE(p, pad_size);
-  add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));
-  if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
+  size_t len;
+  void* p;
 
-  r = add_bytes(reg, mbuf->p, mbuf->used);
+  len = (size_t )mbuf->used;
+  p = xmalloc(len);
+  if (IS_NULL(p)) return NULL;
 
-  /* padding for return value from compile_length_cclass_node() to be fix. */
-  pad_size = (WORD_ALIGNMENT_SIZE - 1) - pad_size;
-  if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
-  return r;
-#endif
+  xmemcpy(p, mbuf->p, len);
+  return p;
 }
 
 static int
 compile_length_cclass_node(CClassNode* cc, regex_t* reg)
 {
-  int len;
-
-  if (IS_NULL(cc->mbuf)) {
-    len = SIZE_OPCODE + SIZE_BITSET;
-  }
-  else {
-    if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
-      len = SIZE_OPCODE;
-    }
-    else {
-      len = SIZE_OPCODE + SIZE_BITSET;
-    }
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-    len += SIZE_LENGTH + cc->mbuf->used;
-#else
-    len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1);
-#endif
-  }
-
-  return len;
+  return 1;
 }
 
 static int
@@ -678,35 +856,39 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
   int r;
 
   if (IS_NULL(cc->mbuf)) {
-    if (IS_NCCLASS_NOT(cc))
-      add_opcode(reg, OP_CCLASS_NOT);
-    else
-      add_opcode(reg, OP_CCLASS);
+    r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_NOT : OP_CCLASS);
+    if (r != 0) return r;
 
-    r = add_bitset(reg, cc->bs);
+    COP(reg)->cclass.bsp = xmalloc(SIZE_BITSET);
+    CHECK_NULL_RETURN_MEMERR(COP(reg)->cclass.bsp);
+    xmemcpy(COP(reg)->cclass.bsp, cc->bs, SIZE_BITSET);
   }
   else {
+    void* p;
+
     if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
-      if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MB_NOT);
-      else
-        add_opcode(reg, OP_CCLASS_MB);
+      r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_MB_NOT : OP_CCLASS_MB);
+      if (r != 0) return r;
 
-      r = add_multi_byte_cclass(cc->mbuf, reg);
+      p = set_multi_byte_cclass(cc->mbuf, reg);
+      CHECK_NULL_RETURN_MEMERR(p);
+      COP(reg)->cclass_mb.mb = p;
     }
     else {
-      if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MIX_NOT);
-      else
-        add_opcode(reg, OP_CCLASS_MIX);
-
-      r = add_bitset(reg, cc->bs);
+      r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_MIX_NOT : OP_CCLASS_MIX);
       if (r != 0) return r;
-      r = add_multi_byte_cclass(cc->mbuf, reg);
+
+      COP(reg)->cclass_mix.bsp = xmalloc(SIZE_BITSET);
+      CHECK_NULL_RETURN_MEMERR(COP(reg)->cclass_mix.bsp);
+      xmemcpy(COP(reg)->cclass_mix.bsp, cc->bs, SIZE_BITSET);
+
+      p = set_multi_byte_cclass(cc->mbuf, reg);
+      CHECK_NULL_RETURN_MEMERR(p);
+      COP(reg)->cclass_mix.mb = p;
     }
   }
 
-  return r;
+  return 0;
 }
 
 static int
@@ -737,29 +919,27 @@ entry_repeat_range(regex_t* reg, int id, int lower, int upper)
   }
 
   p[id].lower = lower;
-  p[id].upper = (IS_REPEAT_INFINITE(upper) ? 0x7fffffff : upper);
+  p[id].upper = (IS_INFINITE_REPEAT(upper) ? 0x7fffffff : upper);
   return 0;
 }
 
 static int
-compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,
+compile_range_repeat_node(QuantNode* qn, int target_len, int emptiness,
                           regex_t* reg, ScanEnv* env)
 {
   int r;
-  int num_repeat = reg->num_repeat;
+  int num_repeat = reg->num_repeat++;
 
-  r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
-  if (r != 0) return r;
-  r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
-  reg->num_repeat++;
-  if (r != 0) return r;
-  r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
+  r = add_op(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
   if (r != 0) return r;
 
+  COP(reg)->repeat.id   = num_repeat;
+  COP(reg)->repeat.addr = SIZE_INC_OP + target_len + SIZE_OP_REPEAT_INC;
+
   r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);
   if (r != 0) return r;
 
-  r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+  r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
   if (r != 0) return r;
 
   if (
@@ -767,35 +947,36 @@ compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,
       NODE_IS_IN_MULTI_ENTRY(qn) ||
 #endif
       NODE_IS_IN_REAL_REPEAT(qn)) {
-    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
+    r = add_op(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
   }
   else {
-    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
+    r = add_op(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
   }
   if (r != 0) return r;
-  r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
+
+  COP(reg)->repeat_inc.id = num_repeat;
   return r;
 }
 
 static int
 is_anychar_infinite_greedy(QuantNode* qn)
 {
-  if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&
+  if (qn->greedy && IS_INFINITE_REPEAT(qn->upper) &&
       NODE_IS_ANYCHAR(NODE_QUANT_BODY(qn)))
     return 1;
   else
     return 0;
 }
 
-#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
+#define QUANTIFIER_EXPAND_LIMIT_SIZE   10
 #define CKN_ON   (ckn > 0)
 
 static int
 compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
 {
   int len, mod_tlen;
-  int infinite = IS_REPEAT_INFINITE(qn->upper);
-  enum QuantBodyEmpty empty_info = qn->body_empty_info;
+  int infinite = IS_INFINITE_REPEAT(qn->upper);
+  enum BodyEmptyType emptiness = qn->emptiness;
   int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
 
   if (tlen < 0) return tlen;
@@ -812,10 +993,9 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     }
   }
 
-  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
-    mod_tlen = tlen;
-  else
-    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
+  mod_tlen = tlen;
+  if (emptiness != BODY_IS_NOT_EMPTY)
+    mod_tlen += SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END;
 
   if (infinite &&
       (qn->lower <= 1 ||
@@ -828,9 +1008,12 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     }
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact))
         len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;
-      else if (IS_NOT_NULL(qn->next_head_exact))
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact))
         len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
       else
         len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;
@@ -838,8 +1021,12 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     else
       len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;
   }
-  else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
-    len = SIZE_OP_JUMP + tlen;
+  else if (qn->upper == 0) {
+    if (qn->is_refered != 0) { /* /(?<n>..){0}/ */
+      len = SIZE_OP_JUMP + tlen;
+    }
+    else
+      len = 0;
   }
   else if (!infinite && qn->greedy &&
            (qn->upper == 1 ||
@@ -852,8 +1039,7 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;
   }
   else {
-    len = SIZE_OP_REPEAT_INC
-        + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
+    len = SIZE_OP_REPEAT_INC + mod_tlen + SIZE_OP_REPEAT;
   }
 
   return len;
@@ -863,8 +1049,8 @@ static int
 compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
 {
   int i, r, mod_tlen;
-  int infinite = IS_REPEAT_INFINITE(qn->upper);
-  enum QuantBodyEmpty empty_info = qn->body_empty_info;
+  int infinite = IS_INFINITE_REPEAT(qn->upper);
+  enum BodyEmptyType emptiness = qn->emptiness;
   int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
 
   if (tlen < 0) return tlen;
@@ -876,42 +1062,48 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
     if (r != 0) return r;
     if (IS_NOT_NULL(qn->next_head_exact)) {
-      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
-        r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
-      else
-        r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
+      r = add_op(reg,
+                 IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)) ?
+                 OP_ANYCHAR_ML_STAR_PEEK_NEXT : OP_ANYCHAR_STAR_PEEK_NEXT);
       if (r != 0) return r;
-      return add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
+
+      COP(reg)->anychar_star_peek_next.c = STR_(qn->next_head_exact)->s[0];
+      return 0;
     }
     else {
-      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
-        return add_opcode(reg, OP_ANYCHAR_ML_STAR);
-      else
-        return add_opcode(reg, OP_ANYCHAR_STAR);
+      r = add_op(reg,
+                 IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)) ?
+                 OP_ANYCHAR_ML_STAR : OP_ANYCHAR_STAR);
+      return r;
     }
   }
 
-  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
-    mod_tlen = tlen;
-  else
-    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
+  mod_tlen = tlen;
+  if (emptiness != BODY_IS_NOT_EMPTY)
+    mod_tlen += SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END;
 
   if (infinite &&
       (qn->lower <= 1 ||
        int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
+    int addr;
+
     if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
       if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
         if (IS_NOT_NULL(qn->head_exact))
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);
-        else if (IS_NOT_NULL(qn->next_head_exact))
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);
+          COP(reg)->jump.addr = SIZE_OP_PUSH_OR_JUMP_EXACT1 + SIZE_INC_OP;
+        else
+#endif
+        if (IS_NOT_NULL(qn->next_head_exact))
+          COP(reg)->jump.addr = SIZE_OP_PUSH_IF_PEEK_NEXT + SIZE_INC_OP;
         else
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);
+          COP(reg)->jump.addr = SIZE_OP_PUSH + SIZE_INC_OP;
       }
       else {
-        r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);
+        COP(reg)->jump.addr = SIZE_OP_JUMP + SIZE_INC_OP;
       }
-      if (r != 0) return r;
     }
     else {
       r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
@@ -919,48 +1111,72 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     }
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact)) {
-        r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
-                                mod_tlen + SIZE_OP_JUMP);
+        r = add_op(reg, OP_PUSH_OR_JUMP_EXACT1);
         if (r != 0) return r;
-        add_bytes(reg, STR_(qn->head_exact)->s, 1);
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push_or_jump_exact1.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+        COP(reg)->push_or_jump_exact1.c    = STR_(qn->head_exact)->s[0];
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1);
       }
-      else if (IS_NOT_NULL(qn->next_head_exact)) {
-        r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
-                                mod_tlen + SIZE_OP_JUMP);
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact)) {
+        r = add_op(reg, OP_PUSH_IF_PEEK_NEXT);
         if (r != 0) return r;
-        add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push_if_peek_next.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+        COP(reg)->push_if_peek_next.c    = STR_(qn->next_head_exact)->s[0];
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH_IF_PEEK_NEXT);
       }
       else {
-        r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
+        r = add_op(reg, OP_PUSH);
         if (r != 0) return r;
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-                   -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH);
       }
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = addr;
     }
     else {
-      r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
+      r = add_op(reg, OP_JUMP);
       if (r != 0) return r;
-      r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+      COP(reg)->jump.addr = mod_tlen + SIZE_INC_OP;
+
+      r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
+      if (r != 0) return r;
+
+      r = add_op(reg, OP_PUSH);
+      if (r != 0) return r;
+      COP(reg)->push.addr = -mod_tlen;
+    }
+  }
+  else if (qn->upper == 0) {
+    if (qn->is_refered != 0) { /* /(?<n>..){0}/ */
+      r = add_op(reg, OP_JUMP);
       if (r != 0) return r;
-      r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
+      COP(reg)->jump.addr = tlen + SIZE_INC_OP;
+
+      r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
+    }
+    else {
+      /* Nothing output */
+      r = 0;
     }
   }
-  else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
-    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
-    if (r != 0) return r;
-    r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
-  }
   else if (! infinite && qn->greedy &&
            (qn->upper == 1 ||
             int_multiply_cmp(tlen + SIZE_OP_PUSH, qn->upper,
@@ -971,70 +1187,78 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     if (r != 0) return r;
 
     for (i = 0; i < n; i++) {
-      r = add_opcode_rel_addr(reg, OP_PUSH,
-                              (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);
+      int v = onig_positive_int_multiply(n - i, tlen + SIZE_OP_PUSH);
+      if (v < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
+
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = v;
+
       r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
       if (r != 0) return r;
     }
   }
   else if (! qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
-    r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
+    r = add_op(reg, OP_PUSH);
     if (r != 0) return r;
-    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
+    COP(reg)->push.addr = SIZE_INC_OP + SIZE_OP_JUMP;
+
+    r = add_op(reg, OP_JUMP);
     if (r != 0) return r;
+    COP(reg)->jump.addr = tlen + SIZE_INC_OP;
+
     r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
   }
   else {
-    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg, env);
+    r = compile_range_repeat_node(qn, mod_tlen, emptiness, reg, env);
   }
   return r;
 }
 
 static int
-compile_length_option_node(EnclosureNode* node, regex_t* reg)
+compile_length_option_node(BagNode* node, regex_t* reg)
 {
   int tlen;
   OnigOptionType prev = reg->options;
 
   reg->options = node->o.options;
-  tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
+  tlen = compile_length_tree(NODE_BAG_BODY(node), reg);
   reg->options = prev;
 
   return tlen;
 }
 
 static int
-compile_option_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
+compile_option_node(BagNode* node, regex_t* reg, ScanEnv* env)
 {
   int r;
   OnigOptionType prev = reg->options;
 
   reg->options = node->o.options;
-  r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+  r = compile_tree(NODE_BAG_BODY(node), reg, env);
   reg->options = prev;
 
   return r;
 }
 
 static int
-compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)
+compile_length_bag_node(BagNode* node, regex_t* reg)
 {
   int len;
   int tlen;
 
-  if (node->type == ENCLOSURE_OPTION)
+  if (node->type == BAG_OPTION)
     return compile_length_option_node(node, reg);
 
-  if (NODE_ENCLOSURE_BODY(node)) {
-    tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
+  if (NODE_BAG_BODY(node)) {
+    tlen = compile_length_tree(NODE_BAG_BODY(node), reg);
     if (tlen < 0) return tlen;
   }
   else
     tlen = 0;
 
   switch (node->type) {
-  case ENCLOSURE_MEMORY:
+  case BAG_MEMORY:
 #ifdef USE_CALL
 
     if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {
@@ -1070,23 +1294,27 @@ compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)
     }
     break;
 
-  case ENCLOSURE_STOP_BACKTRACK:
-    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
-      QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));
+  case BAG_STOP_BACKTRACK:
+    if (NODE_IS_STRICT_REAL_REPEAT(node)) {
+      int v;
+      QuantNode* qn;
+
+      qn = QUANT_(NODE_BAG_BODY(node));
       tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
       if (tlen < 0) return tlen;
 
-      len = tlen * qn->lower
-        + SIZE_OP_PUSH + tlen + SIZE_OP_POP_OUT + SIZE_OP_JUMP;
+      v = onig_positive_int_multiply(qn->lower, tlen);
+      if (v < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
+      len = v + SIZE_OP_PUSH + tlen + SIZE_OP_POP_OUT + SIZE_OP_JUMP;
     }
     else {
       len = SIZE_OP_ATOMIC_START + tlen + SIZE_OP_ATOMIC_END;
     }
     break;
 
-  case ENCLOSURE_IF_ELSE:
+  case BAG_IF_ELSE:
     {
-      Node* cond = NODE_ENCLOSURE_BODY(node);
+      Node* cond = NODE_BAG_BODY(node);
       Node* Then = node->te.Then;
       Node* Else = node->te.Else;
 
@@ -1101,8 +1329,9 @@ compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)
         len += tlen;
       }
 
+      len += SIZE_OP_JUMP + SIZE_OP_ATOMIC_END;
+
       if (IS_NOT_NULL(Else)) {
-        len += SIZE_OP_JUMP;
         tlen = compile_length_tree(Else, reg);
         if (tlen < 0) return tlen;
         len += tlen;
@@ -1110,146 +1339,151 @@ compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)
     }
     break;
 
-  default:
-    return ONIGERR_TYPE_BUG;
+  case BAG_OPTION:
+    /* never come here, but set for escape warning */
+    len = 0;
     break;
   }
 
   return len;
 }
 
-static int get_char_length_tree(Node* node, regex_t* reg, int* len);
+static int get_char_len_node(Node* node, regex_t* reg, int* len);
 
 static int
-compile_enclosure_memory_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
+compile_bag_memory_node(BagNode* node, regex_t* reg, ScanEnv* env)
 {
   int r;
   int len;
 
 #ifdef USE_CALL
-  if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {
-    r = add_opcode(reg, OP_CALL);
+  if (NODE_IS_CALLED(node)) {
+    r = add_op(reg, OP_CALL);
     if (r != 0) return r;
-    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
+
+    node->m.called_addr = COP_CURR_OFFSET(reg) + 1 + SIZE_OP_JUMP;
     NODE_STATUS_ADD(node, ADDR_FIXED);
-    r = add_abs_addr(reg, (int )node->m.called_addr);
-    if (r != 0) return r;
-    len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
-    len += SIZE_OP_RETURN;
-    r = add_opcode_rel_addr(reg, OP_JUMP, len);
-    if (r != 0) return r;
+    COP(reg)->call.addr = (int )node->m.called_addr;
 
-    r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
-    if (r != 0) return r;
-    r = add_opcode(reg, OP_RETURN);
-    return r;
-  }
+    if (node->m.regnum == 0) {
+      len = compile_length_tree(NODE_BAG_BODY(node), reg);
+      len += SIZE_OP_RETURN;
 
-  if (NODE_IS_CALLED(node)) {
-    r = add_opcode(reg, OP_CALL);
-    if (r != 0) return r;
-    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
-    NODE_STATUS_ADD(node, ADDR_FIXED);
-    r = add_abs_addr(reg, (int )node->m.called_addr);
-    if (r != 0) return r;
-    len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
-    len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
-    if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-      len += (NODE_IS_RECURSION(node)
-              ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
-    else
-      len += (NODE_IS_RECURSION(node)
-              ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = len + SIZE_INC_OP;
 
-    r = add_opcode_rel_addr(reg, OP_JUMP, len);
-    if (r != 0) return r;
+      r = compile_tree(NODE_BAG_BODY(node), reg, env);
+      if (r != 0) return r;
+
+      r = add_op(reg, OP_RETURN);
+      return r;
+    }
+    else {
+      len = compile_length_tree(NODE_BAG_BODY(node), reg);
+      len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
+      if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+        len += (NODE_IS_RECURSION(node)
+                ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
+      else
+        len += (NODE_IS_RECURSION(node)
+                ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = len + SIZE_INC_OP;
+    }
   }
 #endif
 
   if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))
-    r = add_opcode(reg, OP_MEMORY_START_PUSH);
+    r = add_op(reg, OP_MEMORY_START_PUSH);
   else
-    r = add_opcode(reg, OP_MEMORY_START);
+    r = add_op(reg, OP_MEMORY_START);
   if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
-  if (r != 0) return r;
-  r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+  COP(reg)->memory_start.num = node->m.regnum;
+
+  r = compile_tree(NODE_BAG_BODY(node), reg, env);
   if (r != 0) return r;
 
 #ifdef USE_CALL
   if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-    r = add_opcode(reg, (NODE_IS_RECURSION(node)
-                         ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
+    r = add_op(reg, (NODE_IS_RECURSION(node)
+                     ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
   else
-    r = add_opcode(reg, (NODE_IS_RECURSION(node)
-                         ? OP_MEMORY_END_REC : OP_MEMORY_END));
+    r = add_op(reg, (NODE_IS_RECURSION(node) ? OP_MEMORY_END_REC : OP_MEMORY_END));
   if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
+  COP(reg)->memory_end.num = node->m.regnum;
+
   if (NODE_IS_CALLED(node)) {
     if (r != 0) return r;
-    r = add_opcode(reg, OP_RETURN);
+    r = add_op(reg, OP_RETURN);
   }
 #else
   if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-    r = add_opcode(reg, OP_MEMORY_END_PUSH);
+    r = add_op(reg, OP_MEMORY_END_PUSH);
   else
-    r = add_opcode(reg, OP_MEMORY_END);
+    r = add_op(reg, OP_MEMORY_END);
   if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
+  COP(reg)->memory_end.num = node->m.regnum;
 #endif
 
   return r;
 }
 
 static int
-compile_enclosure_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
+compile_bag_node(BagNode* node, regex_t* reg, ScanEnv* env)
 {
   int r, len;
 
   switch (node->type) {
-  case ENCLOSURE_MEMORY:
-    r = compile_enclosure_memory_node(node, reg, env);
+  case BAG_MEMORY:
+    r = compile_bag_memory_node(node, reg, env);
     break;
 
-  case ENCLOSURE_OPTION:
+  case BAG_OPTION:
     r = compile_option_node(node, reg, env);
     break;
 
-  case ENCLOSURE_STOP_BACKTRACK:
-    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
-      QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));
+  case BAG_STOP_BACKTRACK:
+    if (NODE_IS_STRICT_REAL_REPEAT(node)) {
+      QuantNode* qn = QUANT_(NODE_BAG_BODY(node));
       r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
       if (r != 0) return r;
 
       len = compile_length_tree(NODE_QUANT_BODY(qn), reg);
       if (len < 0) return len;
 
-      r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP_OUT + SIZE_OP_JUMP);
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = SIZE_INC_OP + len + SIZE_OP_POP_OUT + SIZE_OP_JUMP;
+
       r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_POP_OUT);
+      r = add_op(reg, OP_POP_OUT);
+      if (r != 0) return r;
+
+      r = add_op(reg, OP_JUMP);
       if (r != 0) return r;
-      r = add_opcode_rel_addr(reg, OP_JUMP,
-           -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP_OUT + (int )SIZE_OP_JUMP));
+      COP(reg)->jump.addr = -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP_OUT);
     }
     else {
-      r = add_opcode(reg, OP_ATOMIC_START);
+      r = add_op(reg, OP_ATOMIC_START);
       if (r != 0) return r;
-      r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+      r = compile_tree(NODE_BAG_BODY(node), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_ATOMIC_END);
+      r = add_op(reg, OP_ATOMIC_END);
     }
     break;
 
-  case ENCLOSURE_IF_ELSE:
+  case BAG_IF_ELSE:
     {
-      int cond_len, then_len, jump_len;
-      Node* cond = NODE_ENCLOSURE_BODY(node);
+      int cond_len, then_len, else_len, jump_len;
+      Node* cond = NODE_BAG_BODY(node);
       Node* Then = node->te.Then;
       Node* Else = node->te.Else;
 
-      r = add_opcode(reg, OP_ATOMIC_START);
+      r = add_op(reg, OP_ATOMIC_START);
       if (r != 0) return r;
 
       cond_len = compile_length_tree(cond, reg);
@@ -1261,14 +1495,15 @@ compile_enclosure_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
       else
         then_len = 0;
 
-      jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END;
-      if (IS_NOT_NULL(Else)) jump_len += SIZE_OP_JUMP;
+      jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END + SIZE_OP_JUMP;
 
-      r = add_opcode_rel_addr(reg, OP_PUSH, jump_len);
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = SIZE_INC_OP + jump_len;
+
       r = compile_tree(cond, reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_ATOMIC_END);
+      r = add_op(reg, OP_ATOMIC_END);
       if (r != 0) return r;
 
       if (IS_NOT_NULL(Then)) {
@@ -1277,17 +1512,24 @@ compile_enclosure_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
       }
 
       if (IS_NOT_NULL(Else)) {
-        int else_len = compile_length_tree(Else, reg);
-        r = add_opcode_rel_addr(reg, OP_JUMP, else_len);
-        if (r != 0) return r;
+        else_len = compile_length_tree(Else, reg);
+        if (else_len < 0) return else_len;
+      }
+      else
+        else_len = 0;
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = SIZE_OP_ATOMIC_END + else_len + SIZE_INC_OP;
+
+      r = add_op(reg, OP_ATOMIC_END);
+      if (r != 0) return r;
+
+      if (IS_NOT_NULL(Else)) {
         r = compile_tree(Else, reg, env);
       }
     }
     break;
-
-  default:
-    return ONIGERR_TYPE_BUG;
-    break;
   }
 
   return r;
@@ -1305,30 +1547,30 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
   }
 
   switch (node->type) {
-  case ANCHOR_PREC_READ:
+  case ANCR_PREC_READ:
     len = SIZE_OP_PREC_READ_START + tlen + SIZE_OP_PREC_READ_END;
     break;
-  case ANCHOR_PREC_READ_NOT:
+  case ANCR_PREC_READ_NOT:
     len = SIZE_OP_PREC_READ_NOT_START + tlen + SIZE_OP_PREC_READ_NOT_END;
     break;
-  case ANCHOR_LOOK_BEHIND:
+  case ANCR_LOOK_BEHIND:
     len = SIZE_OP_LOOK_BEHIND + tlen;
     break;
-  case ANCHOR_LOOK_BEHIND_NOT:
+  case ANCR_LOOK_BEHIND_NOT:
     len = SIZE_OP_LOOK_BEHIND_NOT_START + tlen + SIZE_OP_LOOK_BEHIND_NOT_END;
     break;
 
-  case ANCHOR_WORD_BOUNDARY:
-  case ANCHOR_NO_WORD_BOUNDARY:
+  case ANCR_WORD_BOUNDARY:
+  case ANCR_NO_WORD_BOUNDARY:
 #ifdef USE_WORD_BEGIN_END
-  case ANCHOR_WORD_BEGIN:
-  case ANCHOR_WORD_END:
+  case ANCR_WORD_BEGIN:
+  case ANCR_WORD_END:
 #endif
     len = SIZE_OP_WORD_BOUNDARY;
     break;
 
-  case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-  case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+  case ANCR_TEXT_SEGMENT_BOUNDARY:
+  case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
     len = SIZE_OPCODE;
     break;
 
@@ -1347,96 +1589,111 @@ compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
   enum OpCode op;
 
   switch (node->type) {
-  case ANCHOR_BEGIN_BUF:      r = add_opcode(reg, OP_BEGIN_BUF);      break;
-  case ANCHOR_END_BUF:        r = add_opcode(reg, OP_END_BUF);        break;
-  case ANCHOR_BEGIN_LINE:     r = add_opcode(reg, OP_BEGIN_LINE);     break;
-  case ANCHOR_END_LINE:       r = add_opcode(reg, OP_END_LINE);       break;
-  case ANCHOR_SEMI_END_BUF:   r = add_opcode(reg, OP_SEMI_END_BUF);   break;
-  case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
-
-  case ANCHOR_WORD_BOUNDARY:
+  case ANCR_BEGIN_BUF:      r = add_op(reg, OP_BEGIN_BUF);      break;
+  case ANCR_END_BUF:        r = add_op(reg, OP_END_BUF);        break;
+  case ANCR_BEGIN_LINE:     r = add_op(reg, OP_BEGIN_LINE);     break;
+  case ANCR_END_LINE:       r = add_op(reg, OP_END_LINE);       break;
+  case ANCR_SEMI_END_BUF:   r = add_op(reg, OP_SEMI_END_BUF);   break;
+  case ANCR_BEGIN_POSITION: r = add_op(reg, OP_BEGIN_POSITION); break;
+
+  case ANCR_WORD_BOUNDARY:
     op = OP_WORD_BOUNDARY;
   word:
-    r = add_opcode(reg, op);
+    r = add_op(reg, op);
     if (r != 0) return r;
-    r = add_mode(reg, (ModeType )node->ascii_mode);
+    COP(reg)->word_boundary.mode = (ModeType )node->ascii_mode;
     break;
 
-  case ANCHOR_NO_WORD_BOUNDARY:
+  case ANCR_NO_WORD_BOUNDARY:
     op = OP_NO_WORD_BOUNDARY; goto word;
     break;
 #ifdef USE_WORD_BEGIN_END
-  case ANCHOR_WORD_BEGIN:
+  case ANCR_WORD_BEGIN:
     op = OP_WORD_BEGIN; goto word;
     break;
-  case ANCHOR_WORD_END:
+  case ANCR_WORD_END:
     op = OP_WORD_END; goto word;
     break;
 #endif
 
-  case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-    r = add_opcode(reg, OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
-    break;
+  case ANCR_TEXT_SEGMENT_BOUNDARY:
+  case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
+    {
+      enum TextSegmentBoundaryType type;
 
-  case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-    r = add_opcode(reg, OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+      r = add_op(reg, OP_TEXT_SEGMENT_BOUNDARY);
+      if (r != 0) return r;
+
+      type = EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+#ifdef USE_UNICODE_WORD_BREAK
+      if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_TEXT_SEGMENT_WORD))
+        type = WORD_BOUNDARY;
+#endif
+
+      COP(reg)->text_segment_boundary.type = type;
+      COP(reg)->text_segment_boundary.not =
+        (node->type == ANCR_NO_TEXT_SEGMENT_BOUNDARY ? 1 : 0);
+    }
     break;
 
-  case ANCHOR_PREC_READ:
-    r = add_opcode(reg, OP_PREC_READ_START);
+  case ANCR_PREC_READ:
+    r = add_op(reg, OP_PREC_READ_START);
     if (r != 0) return r;
     r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     if (r != 0) return r;
-    r = add_opcode(reg, OP_PREC_READ_END);
+    r = add_op(reg, OP_PREC_READ_END);
     break;
 
-  case ANCHOR_PREC_READ_NOT:
+  case ANCR_PREC_READ_NOT:
     len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
     if (len < 0) return len;
-    r = add_opcode_rel_addr(reg, OP_PREC_READ_NOT_START, len + SIZE_OP_PREC_READ_NOT_END);
+
+    r = add_op(reg, OP_PREC_READ_NOT_START);
     if (r != 0) return r;
+    COP(reg)->prec_read_not_start.addr = SIZE_INC_OP + len + SIZE_OP_PREC_READ_NOT_END;
     r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     if (r != 0) return r;
-    r = add_opcode(reg, OP_PREC_READ_NOT_END);
+    r = add_op(reg, OP_PREC_READ_NOT_END);
     break;
 
-  case ANCHOR_LOOK_BEHIND:
+  case ANCR_LOOK_BEHIND:
     {
       int n;
-      r = add_opcode(reg, OP_LOOK_BEHIND);
+      r = add_op(reg, OP_LOOK_BEHIND);
       if (r != 0) return r;
       if (node->char_len < 0) {
-        r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);
+        r = get_char_len_node(NODE_ANCHOR_BODY(node), reg, &n);
         if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
       }
       else
         n = node->char_len;
 
-      r = add_length(reg, n);
-      if (r != 0) return r;
+      COP(reg)->look_behind.len = n;
       r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     }
     break;
 
-  case ANCHOR_LOOK_BEHIND_NOT:
+  case ANCR_LOOK_BEHIND_NOT:
     {
       int n;
 
       len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
-      r = add_opcode_rel_addr(reg, OP_LOOK_BEHIND_NOT_START,
-                              len + SIZE_OP_LOOK_BEHIND_NOT_END);
+      r = add_op(reg, OP_LOOK_BEHIND_NOT_START);
       if (r != 0) return r;
+      COP(reg)->look_behind_not_start.addr = SIZE_INC_OP + len + SIZE_OP_LOOK_BEHIND_NOT_END;
+
       if (node->char_len < 0) {
-        r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);
+        r = get_char_len_node(NODE_ANCHOR_BODY(node), reg, &n);
         if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
       }
       else
         n = node->char_len;
-      r = add_length(reg, n);
-      if (r != 0) return r;
+
+      COP(reg)->look_behind_not_start.len = n;
+
       r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_LOOK_BEHIND_NOT_END);
+      r = add_op(reg, OP_LOOK_BEHIND_NOT_END);
     }
     break;
 
@@ -1455,31 +1712,21 @@ compile_gimmick_node(GimmickNode* node, regex_t* reg)
 
   switch (node->type) {
   case GIMMICK_FAIL:
-    r = add_opcode(reg, OP_FAIL);
-    break;
-
-  case GIMMICK_KEEP:
-    r = add_opcode(reg, OP_PUSH_SAVE_VAL);
-    if (r != 0) return r;
-    r = add_save_type(reg, SAVE_KEEP);
-    if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    r = add_op(reg, OP_FAIL);
     break;
 
   case GIMMICK_SAVE:
-    r = add_opcode(reg, OP_PUSH_SAVE_VAL);
-    if (r != 0) return r;
-    r = add_save_type(reg, node->detail_type);
+    r = add_op(reg, OP_PUSH_SAVE_VAL);
     if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    COP(reg)->push_save_val.type = node->detail_type;
+    COP(reg)->push_save_val.id   = node->id;
     break;
 
   case GIMMICK_UPDATE_VAR:
-    r = add_opcode(reg, OP_UPDATE_VAR);
+    r = add_op(reg, OP_UPDATE_VAR);
     if (r != 0) return r;
-    r = add_update_var_type(reg, node->detail_type);
-    if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    COP(reg)->update_var.type = node->detail_type;
+    COP(reg)->update_var.id   = node->id;
     break;
 
 #ifdef USE_CALLOUT
@@ -1488,15 +1735,17 @@ compile_gimmick_node(GimmickNode* node, regex_t* reg)
     case ONIG_CALLOUT_OF_CONTENTS:
     case ONIG_CALLOUT_OF_NAME:
       {
-        r = add_opcode(reg, (node->detail_type == ONIG_CALLOUT_OF_CONTENTS) ?
-                                  OP_CALLOUT_CONTENTS : OP_CALLOUT_NAME);
-        if (r != 0) return r;
         if (node->detail_type == ONIG_CALLOUT_OF_NAME) {
-          r = add_mem_num(reg, node->id);
+          r = add_op(reg, OP_CALLOUT_NAME);
           if (r != 0) return r;
+          COP(reg)->callout_name.id  = node->id;
+          COP(reg)->callout_name.num = node->num;
+        }
+        else {
+          r = add_op(reg, OP_CALLOUT_CONTENTS);
+          if (r != 0) return r;
+          COP(reg)->callout_contents.num = node->num;
         }
-        r = add_mem_num(reg, node->num);
-        if (r != 0) return r;
       }
       break;
 
@@ -1520,7 +1769,6 @@ compile_length_gimmick_node(GimmickNode* node, regex_t* reg)
     len = SIZE_OP_FAIL;
     break;
 
-  case GIMMICK_KEEP:
   case GIMMICK_SAVE:
     len = SIZE_OP_PUSH_SAVE_VAL;
     break;
@@ -1595,35 +1843,7 @@ compile_length_tree(Node* node, regex_t* reg)
     break;
 
   case NODE_BACKREF:
-    {
-      BackRefNode* br = BACKREF_(node);
-
-      if (NODE_IS_CHECKER(node)) {
-#ifdef USE_BACKREF_WITH_LEVEL
-        if (NODE_IS_NEST_LEVEL(node)) {
-          r = SIZE_OPCODE + SIZE_LENGTH + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-        else
-#endif
-          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-      }
-      else {
-#ifdef USE_BACKREF_WITH_LEVEL
-        if (NODE_IS_NEST_LEVEL(node)) {
-          r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
-            SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-        else
-#endif
-        if (br->back_num == 1) {
-          r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)
-               ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
-        }
-        else {
-          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-      }
-    }
+    r = SIZE_OP_BACKREF;
     break;
 
 #ifdef USE_CALL
@@ -1636,8 +1856,8 @@ compile_length_tree(Node* node, regex_t* reg)
     r = compile_length_quantifier_node(QUANT_(node), reg);
     break;
 
-  case NODE_ENCLOSURE:
-    r = compile_length_enclosure_node(ENCLOSURE_(node), reg);
+  case NODE_BAG:
+    r = compile_length_bag_node(BAG_(node), reg);
     break;
 
   case NODE_ANCHOR:
@@ -1678,21 +1898,23 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
           len += SIZE_OP_PUSH + SIZE_OP_JUMP;
         }
       } while (IS_NOT_NULL(x = NODE_CDR(x)));
-      pos = reg->used + len;  /* goal position */
+      pos = COP_CURR_OFFSET(reg) + 1 + len;  /* goal position */
 
       do {
         len = compile_length_tree(NODE_CAR(node), reg);
         if (IS_NOT_NULL(NODE_CDR(node))) {
           enum OpCode push = NODE_IS_SUPER(node) ? OP_PUSH_SUPER : OP_PUSH;
-          r = add_opcode_rel_addr(reg, push, len + SIZE_OP_JUMP);
+          r = add_op(reg, push);
           if (r != 0) break;
+          COP(reg)->push.addr = SIZE_INC_OP + len + SIZE_OP_JUMP;
         }
         r = compile_tree(NODE_CAR(node), reg, env);
         if (r != 0) break;
         if (IS_NOT_NULL(NODE_CDR(node))) {
-          len = pos - (reg->used + SIZE_OP_JUMP);
-          r = add_opcode_rel_addr(reg, OP_JUMP, len);
+          len = pos - (COP_CURR_OFFSET(reg) + 1);
+          r = add_op(reg, OP_JUMP);
           if (r != 0) break;
+          COP(reg)->jump.addr = len;
         }
       } while (IS_NOT_NULL(node = NODE_CDR(node)));
     }
@@ -1715,10 +1937,8 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
 
       switch (CTYPE_(node)->ctype) {
       case CTYPE_ANYCHAR:
-        if (IS_MULTILINE(CTYPE_OPTION(node, reg)))
-          r = add_opcode(reg, OP_ANYCHAR_ML);
-        else
-          r = add_opcode(reg, OP_ANYCHAR);
+        r = add_op(reg, IS_MULTILINE(CTYPE_OPTION(node, reg)) ?
+                   OP_ANYCHAR_ML : OP_ANYCHAR);
         break;
 
       case ONIGENC_CTYPE_WORD:
@@ -1728,7 +1948,7 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
         else {
           op = CTYPE_(node)->not != 0 ? OP_NO_WORD_ASCII : OP_WORD_ASCII;
         }
-        r = add_opcode(reg, op);
+        r = add_op(reg, op);
         break;
 
       default:
@@ -1745,30 +1965,28 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
       if (NODE_IS_CHECKER(node)) {
 #ifdef USE_BACKREF_WITH_LEVEL
         if (NODE_IS_NEST_LEVEL(node)) {
-          r = add_opcode(reg, OP_BACKREF_CHECK_WITH_LEVEL);
-          if (r != 0) return r;
-          r = add_length(reg, br->nest_level);
+          r = add_op(reg, OP_BACKREF_CHECK_WITH_LEVEL);
           if (r != 0) return r;
+          COP(reg)->backref_general.nest_level = br->nest_level;
         }
         else
 #endif
           {
-            r = add_opcode(reg, OP_BACKREF_CHECK);
+            r = add_op(reg, OP_BACKREF_CHECK);
             if (r != 0) return r;
           }
-
         goto add_bacref_mems;
       }
       else {
 #ifdef USE_BACKREF_WITH_LEVEL
         if (NODE_IS_NEST_LEVEL(node)) {
-          r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);
-          if (r != 0) return r;
-          r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));
-          if (r != 0) return r;
-          r = add_length(reg, br->nest_level);
-          if (r != 0) return r;
+          if ((reg->options & ONIG_OPTION_IGNORECASE) != 0)
+            r = add_op(reg, OP_BACKREF_WITH_LEVEL_IC);
+          else
+            r = add_op(reg, OP_BACKREF_WITH_LEVEL);
 
+          if (r != 0) return r;
+          COP(reg)->backref_general.nest_level = br->nest_level;
           goto add_bacref_mems;
         }
         else
@@ -1776,41 +1994,47 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
         if (br->back_num == 1) {
           n = br->back_static[0];
           if (IS_IGNORECASE(reg->options)) {
-            r = add_opcode(reg, OP_BACKREF_N_IC);
+            r = add_op(reg, OP_BACKREF_N_IC);
             if (r != 0) return r;
-            r = add_mem_num(reg, n);
+            COP(reg)->backref_n.n1 = n;
           }
           else {
             switch (n) {
-            case 1:  r = add_opcode(reg, OP_BACKREF1); break;
-            case 2:  r = add_opcode(reg, OP_BACKREF2); break;
+            case 1:  r = add_op(reg, OP_BACKREF1); break;
+            case 2:  r = add_op(reg, OP_BACKREF2); break;
             default:
-              r = add_opcode(reg, OP_BACKREF_N);
+              r = add_op(reg, OP_BACKREF_N);
               if (r != 0) return r;
-              r = add_mem_num(reg, n);
+              COP(reg)->backref_n.n1 = n;
               break;
             }
           }
         }
         else {
-          int i;
+          int num;
           int* p;
 
-          if (IS_IGNORECASE(reg->options)) {
-            r = add_opcode(reg, OP_BACKREF_MULTI_IC);
-          }
-          else {
-            r = add_opcode(reg, OP_BACKREF_MULTI);
-          }
+          r = add_op(reg, IS_IGNORECASE(reg->options) ?
+                     OP_BACKREF_MULTI_IC : OP_BACKREF_MULTI);
           if (r != 0) return r;
 
         add_bacref_mems:
-          r = add_length(reg, br->back_num);
-          if (r != 0) return r;
-          p = BACKREFS_P(br);
-          for (i = br->back_num - 1; i >= 0; i--) {
-            r = add_mem_num(reg, p[i]);
-            if (r != 0) return r;
+          num = br->back_num;
+          COP(reg)->backref_general.num = num;
+          if (num == 1) {
+            COP(reg)->backref_general.n1 = br->back_static[0];
+          }
+          else {
+            int i, j;
+            MemNumType* ns;
+
+            ns = xmalloc(sizeof(MemNumType) * num);
+            CHECK_NULL_RETURN_MEMERR(ns);
+            COP(reg)->backref_general.ns = ns;
+            p = BACKREFS_P(br);
+            for (i = num - 1, j = 0; i >= 0; i--, j++) {
+              ns[j] = p[i];
+            }
           }
         }
       }
@@ -1827,8 +2051,8 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
     r = compile_quantifier_node(QUANT_(node), reg, env);
     break;
 
-  case NODE_ENCLOSURE:
-    r = compile_enclosure_node(ENCLOSURE_(node), reg, env);
+  case NODE_BAG:
+    r = compile_bag_node(BAG_(node), reg, env);
     break;
 
   case NODE_ANCHOR:
@@ -1874,10 +2098,10 @@ noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
-      if (en->type == ENCLOSURE_MEMORY) {
+      BagNode* en = BAG_(node);
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_NAMED_GROUP(node)) {
           (*counter)++;
           map[en->m.regnum].new_val = *counter;
@@ -1891,8 +2115,8 @@ noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)
           r = noname_disable_map(plink, map, counter);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
-        r = noname_disable_map(&(NODE_ENCLOSURE_BODY(en)), map, counter);
+      else if (en->type == BAG_IF_ELSE) {
+        r = noname_disable_map(&(NODE_BAG_BODY(en)), map, counter);
         if (r != 0) return r;
         if (IS_NOT_NULL(en->te.Then)) {
           r = noname_disable_map(&(en->te.Then), map, counter);
@@ -1965,14 +2189,14 @@ renumber_by_map(Node* node, GroupNumRemap* map)
     r = renumber_by_map(NODE_BODY(node), map);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       r = renumber_by_map(NODE_BODY(node), map);
       if (r != 0) return r;
 
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           r = renumber_by_map(en->te.Then, map);
           if (r != 0) return r;
@@ -2022,14 +2246,14 @@ numbered_ref_check(Node* node)
     r = numbered_ref_check(NODE_BODY(node));
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       r = numbered_ref_check(NODE_BODY(node));
       if (r != 0) return r;
 
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           r = numbered_ref_check(en->te.Then);
           if (r != 0) return r;
@@ -2102,18 +2326,20 @@ static int
 fix_unset_addr_list(UnsetAddrList* uslist, regex_t* reg)
 {
   int i, offset;
-  EnclosureNode* en;
+  BagNode* en;
   AbsAddrType addr;
+  AbsAddrType* paddr;
 
   for (i = 0; i < uslist->num; i++) {
     if (! NODE_IS_ADDR_FIXED(uslist->us[i].target))
       return ONIGERR_PARSER_BUG;
 
-    en = ENCLOSURE_(uslist->us[i].target);
+    en = BAG_(uslist->us[i].target);
     addr   = en->m.called_addr;
     offset = uslist->us[i].offset;
 
-    BB_WRITE(reg, offset, &addr, SIZE_ABSADDR);
+    paddr = (AbsAddrType* )((char* )reg->ops + offset);
+    *paddr = addr;
   }
   return 0;
 }
@@ -2125,7 +2351,7 @@ fix_unset_addr_list(UnsetAddrList* uslist, regex_t* reg)
 
 /* fixed size pattern node only */
 static int
-get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
+get_char_len_node1(Node* node, regex_t* reg, int* len, int level)
 {
   int tlen;
   int r = 0;
@@ -2135,7 +2361,7 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
   switch (NODE_TYPE(node)) {
   case NODE_LIST:
     do {
-      r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);
+      r = get_char_len_node1(NODE_CAR(node), reg, &tlen, level);
       if (r == 0)
         *len = distance_add(*len, tlen);
     } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
@@ -2146,9 +2372,9 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
       int tlen2;
       int varlen = 0;
 
-      r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);
+      r = get_char_len_node1(NODE_CAR(node), reg, &tlen, level);
       while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node))) {
-        r = get_char_length_tree1(NODE_CAR(node), reg, &tlen2, level);
+        r = get_char_len_node1(NODE_CAR(node), reg, &tlen2, level);
         if (r == 0) {
           if (tlen != tlen2)
             varlen = 1;
@@ -2188,7 +2414,7 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
           *len = 0;
         }
         else {
-          r = get_char_length_tree1(NODE_BODY(node), reg, &tlen, level);
+          r = get_char_len_node1(NODE_BODY(node), reg, &tlen, level);
           if (r == 0)
             *len = distance_multiply(tlen, qn->lower);
         }
@@ -2201,7 +2427,7 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
 #ifdef USE_CALL
   case NODE_CALL:
     if (! NODE_IS_RECURSION(node))
-      r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
+      r = get_char_len_node1(NODE_BODY(node), reg, len, level);
     else
       r = GET_CHAR_LEN_VARLEN;
     break;
@@ -2212,17 +2438,17 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
     *len = 1;
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       switch (en->type) {
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
 #ifdef USE_CALL
         if (NODE_IS_CLEN_FIXED(node))
           *len = en->char_len;
         else {
-          r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
+          r = get_char_len_node1(NODE_BODY(node), reg, len, level);
           if (r == 0) {
             en->char_len = *len;
             NODE_STATUS_ADD(node, CLEN_FIXED);
@@ -2230,23 +2456,23 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
         }
         break;
 #endif
-      case ENCLOSURE_OPTION:
-      case ENCLOSURE_STOP_BACKTRACK:
-        r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
+      case BAG_OPTION:
+      case BAG_STOP_BACKTRACK:
+        r = get_char_len_node1(NODE_BODY(node), reg, len, level);
         break;
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         {
           int clen, elen;
 
-          r = get_char_length_tree1(NODE_BODY(node), reg, &clen, level);
+          r = get_char_len_node1(NODE_BODY(node), reg, &clen, level);
           if (r == 0) {
             if (IS_NOT_NULL(en->te.Then)) {
-              r = get_char_length_tree1(en->te.Then, reg, &tlen, level);
+              r = get_char_len_node1(en->te.Then, reg, &tlen, level);
               if (r != 0) break;
             }
             else tlen = 0;
             if (IS_NOT_NULL(en->te.Else)) {
-              r = get_char_length_tree1(en->te.Else, reg, &elen, level);
+              r = get_char_len_node1(en->te.Else, reg, &elen, level);
               if (r != 0) break;
             }
             else elen = 0;
@@ -2260,9 +2486,6 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
           }
         }
         break;
-
-      default:
-        break;
       }
     }
     break;
@@ -2284,9 +2507,9 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
 }
 
 static int
-get_char_length_tree(Node* node, regex_t* reg, int* len)
+get_char_len_node(Node* node, regex_t* reg, int* len)
 {
-  return get_char_length_tree1(node, reg, len, 0);
+  return get_char_len_node1(node, reg, len, 0);
 }
 
 /* x is not included y ==>  1 : 0 */
@@ -2453,7 +2676,7 @@ is_exclusive(Node* x, Node* y, regex_t* reg)
 
           code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
                                      xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
-          return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
+          return onig_is_code_in_cc(reg->enc, code, cc) == 0;
         }
         break;
 
@@ -2523,10 +2746,8 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
       if (sn->end <= sn->s)
         break;
 
-      if (exact != 0 &&
-          !NODE_STRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {
-      }
-      else {
+      if (exact == 0 ||
+          ! IS_IGNORECASE(reg->options) || NODE_STRING_IS_RAW(node)) {
         n = node;
       }
     }
@@ -2544,23 +2765,23 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
       switch (en->type) {
-      case ENCLOSURE_OPTION:
+      case BAG_OPTION:
         {
           OnigOptionType options = reg->options;
 
-          reg->options = ENCLOSURE_(node)->o.options;
+          reg->options = BAG_(node)->o.options;
           n = get_head_value_node(NODE_BODY(node), exact, reg);
           reg->options = options;
         }
         break;
 
-      case ENCLOSURE_MEMORY:
-      case ENCLOSURE_STOP_BACKTRACK:
-      case ENCLOSURE_IF_ELSE:
+      case BAG_MEMORY:
+      case BAG_STOP_BACKTRACK:
+      case BAG_IF_ELSE:
         n = get_head_value_node(NODE_BODY(node), exact, reg);
         break;
       }
@@ -2568,7 +2789,7 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
     break;
 
   case NODE_ANCHOR:
-    if (ANCHOR_(node)->type == ANCHOR_PREC_READ)
+    if (ANCHOR_(node)->type == ANCR_PREC_READ)
       n = get_head_value_node(NODE_BODY(node), exact, reg);
     break;
 
@@ -2581,7 +2802,7 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
 }
 
 static int
-check_type_tree(Node* node, int type_mask, int enclosure_mask, int anchor_mask)
+check_type_tree(Node* node, int type_mask, int bag_mask, int anchor_mask)
 {
   NodeType type;
   int r = 0;
@@ -2594,29 +2815,28 @@ check_type_tree(Node* node, int type_mask, int enclosure_mask, int anchor_mask)
   case NODE_LIST:
   case NODE_ALT:
     do {
-      r = check_type_tree(NODE_CAR(node), type_mask, enclosure_mask,
-                          anchor_mask);
+      r = check_type_tree(NODE_CAR(node), type_mask, bag_mask, anchor_mask);
     } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
     break;
 
   case NODE_QUANT:
-    r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
+    r = check_type_tree(NODE_BODY(node), type_mask, bag_mask, anchor_mask);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
-      if (((1<<en->type) & enclosure_mask) == 0)
+      BagNode* en = BAG_(node);
+      if (((1<<en->type) & bag_mask) == 0)
         return 1;
 
-      r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
-      if (r == 0 && en->type == ENCLOSURE_IF_ELSE) {
+      r = check_type_tree(NODE_BODY(node), type_mask, bag_mask, anchor_mask);
+      if (r == 0 && en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
-          r = check_type_tree(en->te.Then, type_mask, enclosure_mask, anchor_mask);
+          r = check_type_tree(en->te.Then, type_mask, bag_mask, anchor_mask);
           if (r != 0) break;
         }
         if (IS_NOT_NULL(en->te.Else)) {
-          r = check_type_tree(en->te.Else, type_mask, enclosure_mask, anchor_mask);
+          r = check_type_tree(en->te.Else, type_mask, bag_mask, anchor_mask);
         }
       }
     }
@@ -2628,7 +2848,7 @@ check_type_tree(Node* node, int type_mask, int enclosure_mask, int anchor_mask)
       return 1;
 
     if (IS_NOT_NULL(NODE_BODY(node)))
-      r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
+      r = check_type_tree(NODE_BODY(node), type_mask, bag_mask, anchor_mask);
     break;
 
   case NODE_GIMMICK:
@@ -2669,7 +2889,7 @@ tree_min_len(Node* node, ScanEnv* env)
       Node* t = NODE_BODY(node);
       if (NODE_IS_RECURSION(node)) {
         if (NODE_IS_MIN_FIXED(t))
-          len = ENCLOSURE_(t)->min_len;
+          len = BAG_(t)->min_len;
       }
       else
         len = tree_min_len(t, env);
@@ -2720,11 +2940,11 @@ tree_min_len(Node* node, ScanEnv* env)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
       switch (en->type) {
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
         if (NODE_IS_MIN_FIXED(node))
           len = en->min_len;
         else {
@@ -2741,11 +2961,11 @@ tree_min_len(Node* node, ScanEnv* env)
         }
         break;
 
-      case ENCLOSURE_OPTION:
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_OPTION:
+      case BAG_STOP_BACKTRACK:
         len = tree_min_len(NODE_BODY(node), env);
         break;
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         {
           OnigLen elen;
 
@@ -2848,7 +3068,7 @@ tree_max_len(Node* node, ScanEnv* env)
       if (qn->upper != 0) {
         len = tree_max_len(NODE_BODY(node), env);
         if (len != 0) {
-          if (! IS_REPEAT_INFINITE(qn->upper))
+          if (! IS_INFINITE_REPEAT(qn->upper))
             len = distance_multiply(len, qn->upper);
           else
             len = INFINITE_LEN;
@@ -2857,11 +3077,11 @@ tree_max_len(Node* node, ScanEnv* env)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
       switch (en->type) {
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
         if (NODE_IS_MAX_FIXED(node))
           len = en->max_len;
         else {
@@ -2878,11 +3098,11 @@ tree_max_len(Node* node, ScanEnv* env)
         }
         break;
 
-      case ENCLOSURE_OPTION:
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_OPTION:
+      case BAG_STOP_BACKTRACK:
         len = tree_max_len(NODE_BODY(node), env);
         break;
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         {
           OnigLen tlen, elen;
 
@@ -2934,12 +3154,12 @@ check_backrefs(Node* node, ScanEnv* env)
     r = check_backrefs(NODE_BODY(node), env);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     r = check_backrefs(NODE_BODY(node), env);
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      if (en->type == BAG_IF_ELSE) {
         if (r != 0) return r;
         if (IS_NOT_NULL(en->te.Then)) {
           r = check_backrefs(en->te.Then, env);
@@ -3042,11 +3262,11 @@ infinite_recursive_call_check(Node* node, ScanEnv* env, int head)
     r = infinite_recursive_call_check(NODE_BODY(node), env, head);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_MARK2(node))
           return 0;
         else if (NODE_IS_MARK1(node))
@@ -3058,7 +3278,7 @@ infinite_recursive_call_check(Node* node, ScanEnv* env, int head)
           NODE_STATUS_REMOVE(node, MARK2);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         int eret;
 
         ret = infinite_recursive_call_check(NODE_BODY(node), env, head);
@@ -3119,11 +3339,11 @@ infinite_recursive_call_check_trav(Node* node, ScanEnv* env)
     r = infinite_recursive_call_check_trav(NODE_BODY(node), env);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_RECURSION(node) && NODE_IS_CALLED(node)) {
           int ret;
 
@@ -3137,7 +3357,7 @@ infinite_recursive_call_check_trav(Node* node, ScanEnv* env)
           NODE_STATUS_REMOVE(node, MARK1);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           r = infinite_recursive_call_check_trav(en->te.Then, env);
           if (r != 0) return r;
@@ -3192,11 +3412,11 @@ recursive_call_check(Node* node)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_MARK2(node))
           return 0;
         else if (NODE_IS_MARK1(node))
@@ -3207,7 +3427,7 @@ recursive_call_check(Node* node)
           NODE_STATUS_REMOVE(node, MARK2);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         r = 0;
         if (IS_NOT_NULL(en->te.Then)) {
           r |= recursive_call_check(en->te.Then);
@@ -3268,13 +3488,13 @@ recursive_call_check_trav(Node* node, ScanEnv* env, int state)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
       int ret;
       int state1;
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_CALLED(node) || (state & IN_RECURSION) != 0) {
           if (! NODE_IS_RECURSION(node)) {
             NODE_STATUS_ADD(node, MARK1);
@@ -3297,7 +3517,7 @@ recursive_call_check_trav(Node* node, ScanEnv* env, int state)
       if (ret == FOUND_CALLED_NODE)
         r = FOUND_CALLED_NODE;
 
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           ret = recursive_call_check_trav(en->te.Then, env, state1);
           if (ret == FOUND_CALLED_NODE)
@@ -3321,6 +3541,15 @@ recursive_call_check_trav(Node* node, ScanEnv* env, int state)
 
 #endif
 
+#define IN_ALT          (1<<0)
+#define IN_NOT          (1<<1)
+#define IN_REAL_REPEAT  (1<<2)
+#define IN_VAR_REPEAT   (1<<3)
+#define IN_ZERO_REPEAT  (1<<4)
+#define IN_MULTI_ENTRY  (1<<5)
+#define IN_LOOK_BEHIND  (1<<6)
+
+
 /* divide different length alternatives in look-behind.
   (?<=A|B) ==> (?<=A)|(?<=B)
   (?<!A|B) ==> (?<!A)(?<!B)
@@ -3346,7 +3575,7 @@ divide_look_behind_alternatives(Node* node)
     NODE_CAR(np) = insert_node;
   }
 
-  if (anc_type == ANCHOR_LOOK_BEHIND_NOT) {
+  if (anc_type == ANCR_LOOK_BEHIND_NOT) {
     np = node;
     do {
       NODE_SET_TYPE(np, NODE_LIST);  /* alt -> list */
@@ -3361,7 +3590,7 @@ setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)
   int r, len;
   AnchorNode* an = ANCHOR_(node);
 
-  r = get_char_length_tree(NODE_ANCHOR_BODY(an), reg, &len);
+  r = get_char_len_node(NODE_ANCHOR_BODY(an), reg, &len);
   if (r == 0)
     an->char_len = len;
   else if (r == GET_CHAR_LEN_VARLEN)
@@ -3385,7 +3614,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
   type = NODE_TYPE(node);
   if (type == NODE_QUANT) {
     QuantNode* qn = QUANT_(node);
-    if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
+    if (qn->greedy && IS_INFINITE_REPEAT(qn->upper)) {
 #ifdef USE_QUANT_PEEK_NEXT
       Node* n = get_head_value_node(next_node, 1, reg);
       /* '\0': for UTF-16BE etc... */
@@ -3395,15 +3624,15 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
 #endif
       /* automatic posseivation a*b ==> (?>a*)b */
       if (qn->lower <= 1) {
-        if (NODE_IS_SIMPLE_TYPE(NODE_BODY(node))) {
+        if (is_strict_real_node(NODE_BODY(node))) {
           Node *x, *y;
           x = get_head_value_node(NODE_BODY(node), 0, reg);
           if (IS_NOT_NULL(x)) {
             y = get_head_value_node(next_node,  0, reg);
             if (IS_NOT_NULL(y) && is_exclusive(x, y, reg)) {
-              Node* en = onig_node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+              Node* en = onig_node_new_bag(BAG_STOP_BACKTRACK);
               CHECK_NULL_RETURN_MEMERR(en);
-              NODE_STATUS_ADD(en, STOP_BT_SIMPLE_REPEAT);
+              NODE_STATUS_ADD(en, STRICT_REAL_REPEAT);
               swap_node(node, en);
               NODE_BODY(node) = en;
             }
@@ -3412,9 +3641,9 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
       }
     }
   }
-  else if (type == NODE_ENCLOSURE) {
-    EnclosureNode* en = ENCLOSURE_(node);
-    if (en->type == ENCLOSURE_MEMORY) {
+  else if (type == NODE_BAG) {
+    BagNode* en = BAG_(node);
+    if (en->type == BAG_MEMORY) {
       node = NODE_BODY(node);
       goto retry;
     }
@@ -3530,7 +3759,7 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[], UChar *p
   for (i = 0; i < item_num; i++) {
     snode = onig_node_new_str(NULL, NULL);
     if (IS_NULL(snode)) goto mem_err;
-    
+
     for (j = 0; j < items[i].code_len; j++) {
       len = ONIGENC_CODE_TO_MBC(reg->enc, items[i].code[j], buf);
       if (len < 0) {
@@ -3603,37 +3832,69 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[], UChar *p
 }
 
 static int
-expand_case_fold_string(Node* node, regex_t* reg)
+is_good_case_fold_items_for_search(OnigEncoding enc, int slen,
+                                   int n, OnigCaseFoldCodeItem items[])
 {
+  int i, len;
+  UChar buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
+
+  for (i = 0; i < n; i++) {
+    OnigCaseFoldCodeItem* item = items + i;
+
+    if (item->code_len != 1)    return 0;
+    if (item->byte_len != slen) return 0;
+    len = ONIGENC_CODE_TO_MBC(enc, item->code[0], buf);
+    if (len != slen) return 0;
+  }
+
+  return 1;
+}
+
 #define THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION  8
 
+static int
+expand_case_fold_string(Node* node, regex_t* reg, int state)
+{
   int r, n, len, alt_num;
+  int fold_len;
+  int prev_is_ambig, prev_is_good, is_good, is_in_look_behind;
   UChar *start, *end, *p;
+  UChar* foldp;
   Node *top_root, *root, *snode, *prev_node;
   OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
-  StrNode* sn = STR_(node);
+  UChar buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
+  StrNode* sn;
 
   if (NODE_STRING_IS_AMBIG(node)) return 0;
 
+  sn = STR_(node);
+
   start = sn->s;
   end   = sn->end;
   if (start >= end) return 0;
 
+  is_in_look_behind = (state & IN_LOOK_BEHIND) != 0;
+
   r = 0;
   top_root = root = prev_node = snode = NULL_NODE;
   alt_num = 1;
   p = start;
   while (p < end) {
-    n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag, p, end,
-                                           items);
+    n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag,
+                                           p, end, items);
     if (n < 0) {
       r = n;
       goto err;
     }
 
     len = enclen(reg->enc, p);
+    is_good = is_good_case_fold_items_for_search(reg->enc, len, n, items);
 
-    if (n == 0) {
+    if (is_in_look_behind ||
+        (IS_NOT_NULL(snode) ||
+         (is_good
+          /* expand single char case: ex. /(?i:a)/ */
+          && !(p == start && p + len >= end)))) {
       if (IS_NULL(snode)) {
         if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {
           top_root = root = onig_node_list_add(NULL_NODE, prev_node);
@@ -3651,10 +3912,49 @@ expand_case_fold_string(Node* node, regex_t* reg)
             goto mem_err;
           }
         }
+
+        prev_is_ambig = -1; /* -1: new */
+        prev_is_good  =  0; /* escape compiler warning */
+      }
+      else {
+        prev_is_ambig = NODE_STRING_IS_AMBIG(snode);
+        prev_is_good  = NODE_STRING_IS_GOOD_AMBIG(snode);
       }
 
-      r = onig_node_str_cat(snode, p, p + len);
-      if (r != 0) goto err;
+      if (n != 0) {
+        foldp = p;
+        fold_len = ONIGENC_MBC_CASE_FOLD(reg->enc, reg->case_fold_flag,
+                                         &foldp, end, buf);
+        foldp = buf;
+      }
+      else {
+        foldp = p; fold_len = len;
+      }
+
+      if ((prev_is_ambig == 0 && n != 0) ||
+          (prev_is_ambig > 0 && (n == 0 || prev_is_good != is_good))) {
+        if (IS_NULL(root) /* && IS_NOT_NULL(prev_node) */) {
+          top_root = root = onig_node_list_add(NULL_NODE, prev_node);
+          if (IS_NULL(root)) {
+            onig_node_free(prev_node);
+            goto mem_err;
+          }
+        }
+
+        prev_node = snode = onig_node_new_str(foldp, foldp + fold_len);
+        if (IS_NULL(snode)) goto mem_err;
+        if (IS_NULL(onig_node_list_add(root, snode))) {
+          onig_node_free(snode);
+          goto mem_err;
+        }
+      }
+      else {
+        r = onig_node_str_cat(snode, foldp, foldp + fold_len);
+        if (r != 0) goto err;
+      }
+
+      if (n != 0) NODE_STRING_SET_AMBIG(snode);
+      if (is_good != 0) NODE_STRING_SET_GOOD_AMBIG(snode);
     }
     else {
       alt_num *= (n + 1);
@@ -3738,11 +4038,11 @@ expand_case_fold_string(Node* node, regex_t* reg)
   return r;
 }
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
-static enum QuantBodyEmpty
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
+static enum BodyEmptyType
 quantifiers_memory_node_info(Node* node)
 {
-  int r = QUANT_BODY_IS_EMPTY;
+  int r = BODY_IS_EMPTY_POSSIBILITY;
 
   switch (NODE_TYPE(node)) {
   case NODE_LIST:
@@ -3759,7 +4059,7 @@ quantifiers_memory_node_info(Node* node)
 #ifdef USE_CALL
   case NODE_CALL:
     if (NODE_IS_RECURSION(node)) {
-      return QUANT_BODY_IS_EMPTY_REC; /* tiny version */
+      return BODY_IS_EMPTY_POSSIBILITY_REC; /* tiny version */
     }
     else
       r = quantifiers_memory_node_info(NODE_BODY(node));
@@ -3775,22 +4075,22 @@ quantifiers_memory_node_info(Node* node)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
       switch (en->type) {
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
         if (NODE_IS_RECURSION(node)) {
-          return QUANT_BODY_IS_EMPTY_REC;
+          return BODY_IS_EMPTY_POSSIBILITY_REC;
         }
-        return QUANT_BODY_IS_EMPTY_MEM;
+        return BODY_IS_EMPTY_POSSIBILITY_MEM;
         break;
 
-      case ENCLOSURE_OPTION:
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_OPTION:
+      case BAG_STOP_BACKTRACK:
         r = quantifiers_memory_node_info(NODE_BODY(node));
         break;
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         {
           int v;
           r = quantifiers_memory_node_info(NODE_BODY(node));
@@ -3804,8 +4104,6 @@ quantifiers_memory_node_info(Node* node)
           }
         }
         break;
-      default:
-        break;
       }
     }
     break;
@@ -3822,15 +4120,8 @@ quantifiers_memory_node_info(Node* node)
 
   return r;
 }
-#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */
-
+#endif /* USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT */
 
-#define IN_ALT          (1<<0)
-#define IN_NOT          (1<<1)
-#define IN_REAL_REPEAT  (1<<2)
-#define IN_VAR_REPEAT   (1<<3)
-#define IN_ZERO_REPEAT  (1<<4)
-#define IN_MULTI_ENTRY  (1<<5)
 
 #ifdef USE_CALL
 
@@ -3908,18 +4199,18 @@ setup_call2_call(Node* node)
       setup_call2_call(NODE_BODY(node));
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (! NODE_IS_MARK1(node)) {
           NODE_STATUS_ADD(node, MARK1);
           setup_call2_call(NODE_BODY(node));
           NODE_STATUS_REMOVE(node, MARK1);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         setup_call2_call(NODE_BODY(node));
         if (IS_NOT_NULL(en->te.Then))
           setup_call2_call(en->te.Then);
@@ -3942,7 +4233,7 @@ setup_call2_call(Node* node)
         cn->entry_count++;
 
         NODE_STATUS_ADD(called, CALLED);
-        ENCLOSURE_(called)->m.entry_count++;
+        BAG_(called)->m.entry_count++;
         setup_call2_call(called);
       }
       NODE_STATUS_REMOVE(node, MARK1);
@@ -3981,18 +4272,18 @@ setup_call(Node* node, ScanEnv* env, int state)
       r = 0;
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if ((state & IN_ZERO_REPEAT) != 0) {
           NODE_STATUS_ADD(node, IN_ZERO_REPEAT);
-          ENCLOSURE_(node)->m.entry_count--;
+          BAG_(node)->m.entry_count--;
         }
         r = setup_call(NODE_BODY(node), env, state);
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         r = setup_call(NODE_BODY(node), env, state);
         if (r != 0) return r;
         if (IS_NOT_NULL(en->te.Then)) {
@@ -4047,15 +4338,15 @@ setup_call2(Node* node)
       r = setup_call2(NODE_BODY(node));
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     if (! NODE_IS_IN_ZERO_REPEAT(node))
       r = setup_call2(NODE_BODY(node));
 
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       if (r != 0) return r;
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           r = setup_call2(en->te.Then);
           if (r != 0) return r;
@@ -4097,7 +4388,7 @@ setup_called_state_call(Node* node, int state)
     {
       QuantNode* qn = QUANT_(node);
 
-      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+      if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
         state |= IN_REAL_REPEAT;
       if (qn->lower != qn->upper)
         state |= IN_VAR_REPEAT;
@@ -4111,12 +4402,12 @@ setup_called_state_call(Node* node, int state)
       AnchorNode* an = ANCHOR_(node);
 
       switch (an->type) {
-      case ANCHOR_PREC_READ_NOT:
-      case ANCHOR_LOOK_BEHIND_NOT:
+      case ANCR_PREC_READ_NOT:
+      case ANCR_LOOK_BEHIND_NOT:
         state |= IN_NOT;
         /* fall */
-      case ANCHOR_PREC_READ:
-      case ANCHOR_LOOK_BEHIND:
+      case ANCR_PREC_READ:
+      case ANCR_LOOK_BEHIND:
         setup_called_state_call(NODE_ANCHOR_BODY(an), state);
         break;
       default:
@@ -4125,11 +4416,11 @@ setup_called_state_call(Node* node, int state)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
-      if (en->type == ENCLOSURE_MEMORY) {
+      if (en->type == BAG_MEMORY) {
         if (NODE_IS_MARK1(node)) {
           if ((~en->m.called_state & state) != 0) {
             en->m.called_state |= state;
@@ -4143,7 +4434,7 @@ setup_called_state_call(Node* node, int state)
           NODE_STATUS_REMOVE(node, MARK1);
         }
       }
-      else if (en->type == ENCLOSURE_IF_ELSE) {
+      else if (en->type == BAG_IF_ELSE) {
         if (IS_NOT_NULL(en->te.Then)) {
           setup_called_state_call(en->te.Then, state);
         }
@@ -4184,22 +4475,22 @@ setup_called_state(Node* node, int state)
     break;
 #endif
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       switch (en->type) {
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
         if (en->m.entry_count > 1)
           state |= IN_MULTI_ENTRY;
 
         en->m.called_state |= state;
         /* fall */
-      case ENCLOSURE_OPTION:
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_OPTION:
+      case BAG_STOP_BACKTRACK:
         setup_called_state(NODE_BODY(node), state);
         break;
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         setup_called_state(NODE_BODY(node), state);
         if (IS_NOT_NULL(en->te.Then))
           setup_called_state(en->te.Then, state);
@@ -4214,7 +4505,7 @@ setup_called_state(Node* node, int state)
     {
       QuantNode* qn = QUANT_(node);
 
-      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+      if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
         state |= IN_REAL_REPEAT;
       if (qn->lower != qn->upper)
         state |= IN_VAR_REPEAT;
@@ -4228,12 +4519,12 @@ setup_called_state(Node* node, int state)
       AnchorNode* an = ANCHOR_(node);
 
       switch (an->type) {
-      case ANCHOR_PREC_READ_NOT:
-      case ANCHOR_LOOK_BEHIND_NOT:
+      case ANCR_PREC_READ_NOT:
+      case ANCR_LOOK_BEHIND_NOT:
         state |= IN_NOT;
         /* fall */
-      case ANCHOR_PREC_READ:
-      case ANCHOR_LOOK_BEHIND:
+      case ANCR_PREC_READ:
+      case ANCR_LOOK_BEHIND:
         setup_called_state(NODE_ANCHOR_BODY(an), state);
         break;
       default:
@@ -4266,56 +4557,55 @@ setup_anchor(Node* node, regex_t* reg, int state, ScanEnv* env)
 /* allowed node types in look-behind */
 #define ALLOWED_TYPE_IN_LB \
   ( NODE_BIT_LIST | NODE_BIT_ALT | NODE_BIT_STRING | NODE_BIT_CCLASS \
-  | NODE_BIT_CTYPE | NODE_BIT_ANCHOR | NODE_BIT_ENCLOSURE | NODE_BIT_QUANT \
+  | NODE_BIT_CTYPE | NODE_BIT_ANCHOR | NODE_BIT_BAG | NODE_BIT_QUANT \
   | NODE_BIT_CALL | NODE_BIT_GIMMICK)
 
-#define ALLOWED_ENCLOSURE_IN_LB       ( 1<<ENCLOSURE_MEMORY | 1<<ENCLOSURE_OPTION )
-#define ALLOWED_ENCLOSURE_IN_LB_NOT   (1<<ENCLOSURE_OPTION)
+#define ALLOWED_BAG_IN_LB       ( 1<<BAG_MEMORY | 1<<BAG_OPTION | 1<<BAG_IF_ELSE )
+#define ALLOWED_BAG_IN_LB_NOT   ( 1<<BAG_OPTION | 1<<BAG_IF_ELSE )
 
 #define ALLOWED_ANCHOR_IN_LB \
-  ( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF \
-  | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY | ANCHOR_NO_WORD_BOUNDARY \
-  | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \
-  | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
-  | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+  ( ANCR_LOOK_BEHIND | ANCR_BEGIN_LINE | ANCR_END_LINE | ANCR_BEGIN_BUF \
+  | ANCR_BEGIN_POSITION | ANCR_WORD_BOUNDARY | ANCR_NO_WORD_BOUNDARY \
+  | ANCR_WORD_BEGIN | ANCR_WORD_END \
+  | ANCR_TEXT_SEGMENT_BOUNDARY | ANCR_NO_TEXT_SEGMENT_BOUNDARY )
 
 #define ALLOWED_ANCHOR_IN_LB_NOT \
-  ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE \
-  | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY \
-  | ANCHOR_NO_WORD_BOUNDARY | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \
-  | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
-  | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+  ( ANCR_LOOK_BEHIND | ANCR_LOOK_BEHIND_NOT | ANCR_BEGIN_LINE \
+  | ANCR_END_LINE | ANCR_BEGIN_BUF | ANCR_BEGIN_POSITION | ANCR_WORD_BOUNDARY \
+  | ANCR_NO_WORD_BOUNDARY | ANCR_WORD_BEGIN | ANCR_WORD_END \
+  | ANCR_TEXT_SEGMENT_BOUNDARY | ANCR_NO_TEXT_SEGMENT_BOUNDARY )
 
   int r;
   AnchorNode* an = ANCHOR_(node);
 
   switch (an->type) {
-  case ANCHOR_PREC_READ:
+  case ANCR_PREC_READ:
     r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);
     break;
-  case ANCHOR_PREC_READ_NOT:
+  case ANCR_PREC_READ_NOT:
     r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);
     break;
 
-  case ANCHOR_LOOK_BEHIND:
+  case ANCR_LOOK_BEHIND:
     {
       r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,
-                          ALLOWED_ENCLOSURE_IN_LB, ALLOWED_ANCHOR_IN_LB);
+                          ALLOWED_BAG_IN_LB, ALLOWED_ANCHOR_IN_LB);
       if (r < 0) return r;
       if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
-      r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);
+      r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state|IN_LOOK_BEHIND), env);
       if (r != 0) return r;
       r = setup_look_behind(node, reg, env);
     }
     break;
 
-  case ANCHOR_LOOK_BEHIND_NOT:
+  case ANCR_LOOK_BEHIND_NOT:
     {
       r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,
-                          ALLOWED_ENCLOSURE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
+                          ALLOWED_BAG_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
       if (r < 0) return r;
       if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
-      r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);
+      r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state|IN_NOT|IN_LOOK_BEHIND),
+                     env);
       if (r != 0) return r;
       r = setup_look_behind(node, reg, env);
     }
@@ -4347,24 +4637,24 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
     NODE_STATUS_ADD(node, IN_MULTI_ENTRY);
   }
 
-  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
+  if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 1) {
     d = tree_min_len(body, env);
     if (d == 0) {
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
-      qn->body_empty_info = quantifiers_memory_node_info(body);
-      if (qn->body_empty_info == QUANT_BODY_IS_EMPTY_REC) {
-        if (NODE_TYPE(body) == NODE_ENCLOSURE &&
-            ENCLOSURE_(body)->type == ENCLOSURE_MEMORY) {
-          MEM_STATUS_ON(env->bt_mem_end, ENCLOSURE_(body)->m.regnum);
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
+      qn->emptiness = quantifiers_memory_node_info(body);
+      if (qn->emptiness == BODY_IS_EMPTY_POSSIBILITY_REC) {
+        if (NODE_TYPE(body) == NODE_BAG &&
+            BAG_(body)->type == BAG_MEMORY) {
+          MEM_STATUS_ON(env->bt_mem_end, BAG_(body)->m.regnum);
         }
       }
 #else
-      qn->body_empty_info = QUANT_BODY_IS_EMPTY;
+      qn->emptiness = BODY_IS_EMPTY_POSSIBILITY;
 #endif
     }
   }
 
-  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+  if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
     state |= IN_REAL_REPEAT;
   if (qn->lower != qn->upper)
     state |= IN_VAR_REPEAT;
@@ -4375,7 +4665,7 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
   /* expand string */
 #define EXPAND_STRING_MAX_LENGTH  100
   if (NODE_TYPE(body) == NODE_STRING) {
-    if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&
+    if (!IS_INFINITE_REPEAT(qn->lower) && qn->lower == qn->upper &&
         qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {
       int len = NODE_STRING_LEN(body);
       StrNode* sn = STR_(body);
@@ -4393,8 +4683,7 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
     }
   }
 
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT
-  if (qn->greedy && (qn->body_empty_info != QUANT_BODY_IS_NOT_EMPTY)) {
+  if (qn->greedy && (qn->emptiness == BODY_IS_NOT_EMPTY)) {
     if (NODE_TYPE(body) == NODE_QUANT) {
       QuantNode* tqn = QUANT_(body);
       if (IS_NOT_NULL(tqn->head_exact)) {
@@ -4406,13 +4695,12 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
       qn->head_exact = get_head_value_node(NODE_BODY(node), 1, reg);
     }
   }
-#endif
 
   return r;
 }
 
 /* setup_tree does the following work.
- 1. check empty loop. (set qn->body_empty_info)
+ 1. check empty loop. (set qn->emptiness)
  2. expand ignore-case in char class.
  3. set memory status bit flags. (reg->mem_stats)
  4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].
@@ -4446,7 +4734,7 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
 
   case NODE_STRING:
     if (IS_IGNORECASE(reg->options) && !NODE_STRING_IS_RAW(node)) {
-      r = expand_case_fold_string(node, reg);
+      r = expand_case_fold_string(node, reg, state);
     }
     break;
 
@@ -4469,21 +4757,21 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       switch (en->type) {
-      case ENCLOSURE_OPTION:
+      case BAG_OPTION:
         {
           OnigOptionType options = reg->options;
-          reg->options = ENCLOSURE_(node)->o.options;
+          reg->options = BAG_(node)->o.options;
           r = setup_tree(NODE_BODY(node), reg, state, env);
           reg->options = options;
         }
         break;
 
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
 #ifdef USE_CALL
         state |= en->m.called_state;
 #endif
@@ -4495,22 +4783,22 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
         r = setup_tree(NODE_BODY(node), reg, state, env);
         break;
 
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_STOP_BACKTRACK:
         {
           Node* target = NODE_BODY(node);
           r = setup_tree(target, reg, state, env);
           if (NODE_TYPE(target) == NODE_QUANT) {
             QuantNode* tqn = QUANT_(target);
-            if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&
+            if (IS_INFINITE_REPEAT(tqn->upper) && tqn->lower <= 1 &&
                 tqn->greedy != 0) {  /* (?>a*), a*+ etc... */
-              if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target)))
-                NODE_STATUS_ADD(node, STOP_BT_SIMPLE_REPEAT);
+              if (is_strict_real_node(NODE_BODY(target)))
+                NODE_STATUS_ADD(node, STRICT_REAL_REPEAT);
             }
           }
         }
         break;
 
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         r = setup_tree(NODE_BODY(node), reg, (state | IN_ALT), env);
         if (r != 0) return r;
         if (IS_NOT_NULL(en->te.Then)) {
@@ -4545,35 +4833,83 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
   return r;
 }
 
-/* set skip map for Boyer-Moore search */
 static int
-set_bm_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
-            UChar skip[], int** int_skip)
+set_sunday_quick_search_or_bmh_skip_table(regex_t* reg, int case_expand,
+                                          UChar* s, UChar* end,
+                                          UChar skip[], int* roffset)
 {
-  int i, len;
+  int i, j, k, len, offset;
+  int n, clen;
+  UChar* p;
+  OnigEncoding enc;
+  OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
+  UChar buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
+
+  enc = reg->enc;
+  offset = ENC_GET_SKIP_OFFSET(enc);
+  if (offset == ENC_SKIP_OFFSET_1_OR_0) {
+    UChar* p = s;
+    while (1) {
+      len = enclen(enc, p);
+      if (p + len >= end) {
+        if (len == 1) offset = 1;
+        else          offset = 0;
+        break;
+      }
+      p += len;
+    }
+  }
 
   len = (int )(end - s);
-  if (len < ONIG_CHAR_TABLE_SIZE) {
-    for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = len;
+  if (len + offset >= 255)
+    return ONIGERR_PARSER_BUG;
 
-    for (i = 0; i < len - 1; i++)
-      skip[s[i]] = len - 1 - i;
+  *roffset = offset;
+
+  for (i = 0; i < CHAR_MAP_SIZE; i++) {
+    skip[i] = (UChar )(len + offset);
   }
-  else {
-    if (IS_NULL(*int_skip)) {
-      *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
-      if (IS_NULL(*int_skip)) return ONIGERR_MEMORY;
+
+  for (p = s; p < end; ) {
+    int z;
+
+    clen = enclen(enc, p);
+    if (p + clen > end) clen = (int )(end - p);
+
+    len = (int )(end - p);
+    for (j = 0; j < clen; j++) {
+      z = len - j + (offset - 1);
+      if (z <= 0) break;
+      skip[p[j]] = z;
+    }
+
+    if (case_expand != 0) {
+      n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
+                                             p, end, items);
+      for (k = 0; k < n; k++) {
+        ONIGENC_CODE_TO_MBC(enc, items[k].code[0], buf);
+        for (j = 0; j < clen; j++) {
+          z = len - j + (offset - 1);
+          if (z <= 0) break;
+          if (skip[buf[j]] > z)
+            skip[buf[j]] = z;
+        }
+      }
     }
-    for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = len;
 
-    for (i = 0; i < len - 1; i++)
-      (*int_skip)[s[i]] = len - 1 - i;
+    p += clen;
   }
+
   return 0;
 }
 
+
 #define OPT_EXACT_MAXLEN   24
 
+#if OPT_EXACT_MAXLEN >= 255
+#error Too big OPT_EXACT_MAXLEN
+#endif
+
 typedef struct {
   OnigLen min;  /* min byte length */
   OnigLen max;  /* max byte length */
@@ -4596,26 +4932,27 @@ typedef struct {
   MinMax     mmd;   /* position */
   OptAnc     anc;
   int        reach_end;
-  int        ignore_case;
+  int        case_fold;
+  int        good_case_fold;
   int        len;
   UChar      s[OPT_EXACT_MAXLEN];
-} OptExact;
+} OptStr;
 
 typedef struct {
   MinMax    mmd;    /* position */
   OptAnc    anc;
   int       value;  /* weighted value */
-  UChar     map[ONIG_CHAR_TABLE_SIZE];
+  UChar     map[CHAR_MAP_SIZE];
 } OptMap;
 
 typedef struct {
-  MinMax    len;
-  OptAnc    anc;
-  OptExact  exb;     /* boundary */
-  OptExact  exm;     /* middle */
-  OptExact  expr;    /* prec read (?=...) */
-  OptMap    map;     /* boundary */
-} NodeOpt;
+  MinMax  len;
+  OptAnc  anc;
+  OptStr  sb;     /* boundary */
+  OptStr  sm;     /* middle */
+  OptStr  spr;    /* prec read (?=...) */
+  OptMap  map;    /* boundary */
+} OptNode;
 
 
 static int
@@ -4647,15 +4984,15 @@ distance_value(MinMax* mm)
 {
   /* 1000 / (min-max-dist + 1) */
   static const short int dist_vals[] = {
-    1000,  500,  333,  250,  200,  167,  143,  125,  111,  100, 
-      91,   83,   77,   71,   67,   63,   59,   56,   53,   50, 
-      48,   45,   43,   42,   40,   38,   37,   36,   34,   33, 
-      32,   31,   30,   29,   29,   28,   27,   26,   26,   25, 
-      24,   24,   23,   23,   22,   22,   21,   21,   20,   20, 
-      20,   19,   19,   19,   18,   18,   18,   17,   17,   17, 
-      16,   16,   16,   16,   15,   15,   15,   15,   14,   14, 
-      14,   14,   14,   14,   13,   13,   13,   13,   13,   13, 
-      12,   12,   12,   12,   12,   12,   11,   11,   11,   11, 
+    1000,  500,  333,  250,  200,  167,  143,  125,  111,  100,
+      91,   83,   77,   71,   67,   63,   59,   56,   53,   50,
+      48,   45,   43,   42,   40,   38,   37,   36,   34,   33,
+      32,   31,   30,   29,   29,   28,   27,   26,   26,   25,
+      24,   24,   23,   23,   22,   22,   21,   21,   20,   20,
+      20,   19,   19,   19,   18,   18,   18,   17,   17,   17,
+      16,   16,   16,   16,   15,   15,   15,   15,   14,   14,
+      14,   14,   14,   14,   13,   13,   13,   13,   13,   13,
+      12,   12,   12,   12,   12,   12,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   10,   10,   10,   10,   10
   };
 
@@ -4691,7 +5028,7 @@ comp_distance_value(MinMax* d1, MinMax* d2, int v1, int v2)
 static int
 is_equal_mml(MinMax* a, MinMax* b)
 {
-  return (a->min == b->min && a->max == b->max) ? 1 : 0;
+  return a->min == b->min && a->max == b->max;
 }
 
 static void
@@ -4763,15 +5100,15 @@ concat_opt_anc_info(OptAnc* to, OptAnc* left, OptAnc* right,
     to->right |= left->right;
   }
   else {
-    to->right |= (left->right & ANCHOR_PREC_READ_NOT);
+    to->right |= (left->right & ANCR_PREC_READ_NOT);
   }
 }
 
 static int
 is_left(int a)
 {
-  if (a == ANCHOR_END_BUF  || a == ANCHOR_SEMI_END_BUF ||
-      a == ANCHOR_END_LINE || a == ANCHOR_PREC_READ || a == ANCHOR_PREC_READ_NOT)
+  if (a == ANCR_END_BUF  || a == ANCR_SEMI_END_BUF ||
+      a == ANCR_END_LINE || a == ANCR_PREC_READ || a == ANCR_PREC_READ_NOT)
     return 0;
 
   return 1;
@@ -4811,39 +5148,47 @@ alt_merge_opt_anc_info(OptAnc* to, OptAnc* add)
 }
 
 static int
-is_full_opt_exact(OptExact* e)
+is_full_opt_exact(OptStr* e)
 {
-  return (e->len >= OPT_EXACT_MAXLEN ? 1 : 0);
+  return e->len >= OPT_EXACT_MAXLEN;
 }
 
 static void
-clear_opt_exact(OptExact* e)
+clear_opt_exact(OptStr* e)
 {
   clear_mml(&e->mmd);
   clear_opt_anc_info(&e->anc);
-  e->reach_end   = 0;
-  e->ignore_case = 0;
-  e->len         = 0;
-  e->s[0]        = '\0';
+  e->reach_end      = 0;
+  e->case_fold      = 0;
+  e->good_case_fold = 0;
+  e->len            = 0;
+  e->s[0]           = '\0';
 }
 
 static void
-copy_opt_exact(OptExact* to, OptExact* from)
+copy_opt_exact(OptStr* to, OptStr* from)
 {
   *to = *from;
 }
 
 static int
-concat_opt_exact(OptExact* to, OptExact* add, OnigEncoding enc)
+concat_opt_exact(OptStr* to, OptStr* add, OnigEncoding enc)
 {
   int i, j, len, r;
   UChar *p, *end;
   OptAnc tanc;
 
-  if (! to->ignore_case && add->ignore_case) {
-    if (to->len >= add->len) return 0;  /* avoid */
+  if (add->case_fold != 0) {
+    if (! to->case_fold) {
+      if (to->len > 1 || to->len >= add->len) return 0;  /* avoid */
 
-    to->ignore_case = 1;
+      to->case_fold = 1;
+    }
+    else {
+      if (to->good_case_fold != 0) {
+        if (add->good_case_fold == 0) return 0;
+      }
+    }
   }
 
   r = 0;
@@ -4870,7 +5215,7 @@ concat_opt_exact(OptExact* to, OptExact* add, OnigEncoding enc)
 }
 
 static void
-concat_opt_exact_str(OptExact* to, UChar* s, UChar* end, OnigEncoding enc)
+concat_opt_exact_str(OptStr* to, UChar* s, UChar* end, OnigEncoding enc)
 {
   int i, j, len;
   UChar *p;
@@ -4883,10 +5228,13 @@ concat_opt_exact_str(OptExact* to, UChar* s, UChar* end, OnigEncoding enc)
   }
 
   to->len = i;
+
+  if (p >= end && to->len == (int )(end - s))
+    to->reach_end = 1;
 }
 
 static void
-alt_merge_opt_exact(OptExact* to, OptExact* add, OptEnv* env)
+alt_merge_opt_exact(OptStr* to, OptStr* add, OptEnv* env)
 {
   int i, j, len;
 
@@ -4915,14 +5263,17 @@ alt_merge_opt_exact(OptExact* to, OptExact* add, OptEnv* env)
     to->reach_end = 0;
   }
   to->len = i;
-  to->ignore_case |= add->ignore_case;
+  if (add->case_fold != 0)
+    to->case_fold = 1;
+  if (add->good_case_fold == 0)
+    to->good_case_fold = 0;
 
   alt_merge_opt_anc_info(&to->anc, &add->anc);
   if (! to->reach_end) to->anc.right = 0;
 }
 
 static void
-select_opt_exact(OnigEncoding enc, OptExact* now, OptExact* alt)
+select_opt_exact(OnigEncoding enc, OptStr* now, OptStr* alt)
 {
   int vn, va;
 
@@ -4945,8 +5296,11 @@ select_opt_exact(OnigEncoding enc, OptExact* now, OptExact* alt)
     if (alt->len > 1) va += 5;
   }
 
-  if (now->ignore_case == 0) vn *= 2;
-  if (alt->ignore_case == 0) va *= 2;
+  if (now->case_fold == 0) vn *= 2;
+  if (alt->case_fold == 0) va *= 2;
+
+  if (now->good_case_fold != 0) vn *= 4;
+  if (alt->good_case_fold != 0) va *= 4;
 
   if (comp_distance_value(&now->mmd, &alt->mmd, vn, va) > 0)
     copy_opt_exact(now, alt);
@@ -5037,14 +5391,24 @@ select_opt_map(OptMap* now, OptMap* alt)
 }
 
 static int
-comp_opt_exact_or_map(OptExact* e, OptMap* m)
+comp_opt_exact_or_map(OptStr* e, OptMap* m)
 {
 #define COMP_EM_BASE  20
   int ae, am;
+  int case_value;
 
   if (m->value <= 0) return -1;
 
-  ae = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2);
+  if (e->case_fold != 0) {
+    if (e->good_case_fold != 0)
+      case_value = 2;
+    else
+      case_value = 1;
+  }
+  else
+    case_value = 3;
+
+  ae = COMP_EM_BASE * e->len * case_value;
   am = COMP_EM_BASE * 5 * 2 / m->value;
   return comp_distance_value(&e->mmd, &m->mmd, ae, am);
 }
@@ -5064,7 +5428,7 @@ alt_merge_opt_map(OnigEncoding enc, OptMap* to, OptMap* add)
   alt_merge_mml(&to->mmd, &add->mmd);
 
   val = 0;
-  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
+  for (i = 0; i < CHAR_MAP_SIZE; i++) {
     if (add->map[i])
       to->map[i] = 1;
 
@@ -5077,42 +5441,42 @@ alt_merge_opt_map(OnigEncoding enc, OptMap* to, OptMap* add)
 }
 
 static void
-set_bound_node_opt_info(NodeOpt* opt, MinMax* plen)
+set_bound_node_opt_info(OptNode* opt, MinMax* plen)
 {
-  copy_mml(&(opt->exb.mmd),  plen);
-  copy_mml(&(opt->expr.mmd), plen);
-  copy_mml(&(opt->map.mmd),  plen);
+  copy_mml(&(opt->sb.mmd),  plen);
+  copy_mml(&(opt->spr.mmd), plen);
+  copy_mml(&(opt->map.mmd), plen);
 }
 
 static void
-clear_node_opt_info(NodeOpt* opt)
+clear_node_opt_info(OptNode* opt)
 {
   clear_mml(&opt->len);
   clear_opt_anc_info(&opt->anc);
-  clear_opt_exact(&opt->exb);
-  clear_opt_exact(&opt->exm);
-  clear_opt_exact(&opt->expr);
+  clear_opt_exact(&opt->sb);
+  clear_opt_exact(&opt->sm);
+  clear_opt_exact(&opt->spr);
   clear_opt_map(&opt->map);
 }
 
 static void
-copy_node_opt_info(NodeOpt* to, NodeOpt* from)
+copy_node_opt_info(OptNode* to, OptNode* from)
 {
-  xmemcpy(to,from,sizeof(NodeOpt));
+  xmemcpy(to,from,sizeof(OptNode));
 }
 
 static void
-concat_left_node_opt_info(OnigEncoding enc, NodeOpt* to, NodeOpt* add)
+concat_left_node_opt_info(OnigEncoding enc, OptNode* to, OptNode* add)
 {
-  int exb_reach, exm_reach;
+  int sb_reach, sm_reach;
   OptAnc tanc;
 
   concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);
   copy_opt_anc_info(&to->anc, &tanc);
 
-  if (add->exb.len > 0 && to->len.max == 0) {
-    concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc, to->len.max, add->len.max);
-    copy_opt_anc_info(&add->exb.anc, &tanc);
+  if (add->sb.len > 0 && to->len.max == 0) {
+    concat_opt_anc_info(&tanc, &to->anc, &add->sb.anc, to->len.max, add->len.max);
+    copy_opt_anc_info(&add->sb.anc, &tanc);
   }
 
   if (add->map.value > 0 && to->len.max == 0) {
@@ -5120,38 +5484,38 @@ concat_left_node_opt_info(OnigEncoding enc, NodeOpt* to, NodeOpt* add)
       add->map.anc.left |= to->anc.left;
   }
 
-  exb_reach = to->exb.reach_end;
-  exm_reach = to->exm.reach_end;
+  sb_reach = to->sb.reach_end;
+  sm_reach = to->sm.reach_end;
 
   if (add->len.max != 0)
-    to->exb.reach_end = to->exm.reach_end = 0;
+    to->sb.reach_end = to->sm.reach_end = 0;
 
-  if (add->exb.len > 0) {
-    if (exb_reach) {
-      concat_opt_exact(&to->exb, &add->exb, enc);
-      clear_opt_exact(&add->exb);
+  if (add->sb.len > 0) {
+    if (sb_reach) {
+      concat_opt_exact(&to->sb, &add->sb, enc);
+      clear_opt_exact(&add->sb);
     }
-    else if (exm_reach) {
-      concat_opt_exact(&to->exm, &add->exb, enc);
-      clear_opt_exact(&add->exb);
+    else if (sm_reach) {
+      concat_opt_exact(&to->sm, &add->sb, enc);
+      clear_opt_exact(&add->sb);
     }
   }
-  select_opt_exact(enc, &to->exm, &add->exb);
-  select_opt_exact(enc, &to->exm, &add->exm);
+  select_opt_exact(enc, &to->sm, &add->sb);
+  select_opt_exact(enc, &to->sm, &add->sm);
 
-  if (to->expr.len > 0) {
+  if (to->spr.len > 0) {
     if (add->len.max > 0) {
-      if (to->expr.len > (int )add->len.max)
-        to->expr.len = add->len.max;
+      if (to->spr.len > (int )add->len.max)
+        to->spr.len = add->len.max;
 
-      if (to->expr.mmd.max == 0)
-        select_opt_exact(enc, &to->exb, &to->expr);
+      if (to->spr.mmd.max == 0)
+        select_opt_exact(enc, &to->sb, &to->spr);
       else
-        select_opt_exact(enc, &to->exm, &to->expr);
+        select_opt_exact(enc, &to->sm, &to->spr);
     }
   }
-  else if (add->expr.len > 0) {
-    copy_opt_exact(&to->expr, &add->expr);
+  else if (add->spr.len > 0) {
+    copy_opt_exact(&to->spr, &add->spr);
   }
 
   select_opt_map(&to->map, &add->map);
@@ -5159,12 +5523,12 @@ concat_left_node_opt_info(OnigEncoding enc, NodeOpt* to, NodeOpt* add)
 }
 
 static void
-alt_merge_node_opt_info(NodeOpt* to, NodeOpt* add, OptEnv* env)
+alt_merge_node_opt_info(OptNode* to, OptNode* add, OptEnv* env)
 {
   alt_merge_opt_anc_info(&to->anc, &add->anc);
-  alt_merge_opt_exact(&to->exb,  &add->exb, env);
-  alt_merge_opt_exact(&to->exm,  &add->exm, env);
-  alt_merge_opt_exact(&to->expr, &add->expr, env);
+  alt_merge_opt_exact(&to->sb,  &add->sb, env);
+  alt_merge_opt_exact(&to->sm,  &add->sm, env);
+  alt_merge_opt_exact(&to->spr, &add->spr, env);
   alt_merge_opt_map(env->enc, &to->map, &add->map);
 
   alt_merge_mml(&to->len, &add->len);
@@ -5174,11 +5538,11 @@ alt_merge_node_opt_info(NodeOpt* to, NodeOpt* add, OptEnv* env)
 #define MAX_NODE_OPT_INFO_REF_COUNT    5
 
 static int
-optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
+optimize_nodes(Node* node, OptNode* opt, OptEnv* env)
 {
   int i;
   int r;
-  NodeOpt xo;
+  OptNode xo;
   OnigEncoding enc;
 
   r = 0;
@@ -5224,7 +5588,7 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
       /* int is_raw = NODE_STRING_IS_RAW(node); */
 
       if (! NODE_STRING_IS_AMBIG(node)) {
-        concat_opt_exact_str(&opt->exb, sn->s, sn->end, enc);
+        concat_opt_exact_str(&opt->sb, sn->s, sn->end, enc);
         if (slen > 0) {
           add_char_opt_map(&opt->map, *(sn->s), enc);
         }
@@ -5238,8 +5602,10 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
           max = ONIGENC_MBC_MAXLEN_DIST(enc) * n;
         }
         else {
-          concat_opt_exact_str(&opt->exb, sn->s, sn->end, enc);
-          opt->exb.ignore_case = 1;
+          concat_opt_exact_str(&opt->sb, sn->s, sn->end, enc);
+          opt->sb.case_fold = 1;
+          if (NODE_STRING_IS_GOOD_AMBIG(node))
+            opt->sb.good_case_fold = 1;
 
           if (slen > 0) {
             r = add_char_amb_opt_map(&opt->map, sn->s, sn->end,
@@ -5252,9 +5618,6 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
 
         set_mml(&opt->len, slen, max);
       }
-
-      if (opt->exb.len == slen)
-        opt->exb.reach_end = 1;
     }
     break;
 
@@ -5328,27 +5691,27 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
 
   case NODE_ANCHOR:
     switch (ANCHOR_(node)->type) {
-    case ANCHOR_BEGIN_BUF:
-    case ANCHOR_BEGIN_POSITION:
-    case ANCHOR_BEGIN_LINE:
-    case ANCHOR_END_BUF:
-    case ANCHOR_SEMI_END_BUF:
-    case ANCHOR_END_LINE:
-    case ANCHOR_PREC_READ_NOT:
-    case ANCHOR_LOOK_BEHIND:
+    case ANCR_BEGIN_BUF:
+    case ANCR_BEGIN_POSITION:
+    case ANCR_BEGIN_LINE:
+    case ANCR_END_BUF:
+    case ANCR_SEMI_END_BUF:
+    case ANCR_END_LINE:
+    case ANCR_PREC_READ_NOT:
+    case ANCR_LOOK_BEHIND:
       add_opt_anc_info(&opt->anc, ANCHOR_(node)->type);
       break;
 
-    case ANCHOR_PREC_READ:
+    case ANCR_PREC_READ:
       {
         r = optimize_nodes(NODE_BODY(node), &xo, env);
         if (r == 0) {
-          if (xo.exb.len > 0)
-            copy_opt_exact(&opt->expr, &xo.exb);
-          else if (xo.exm.len > 0)
-            copy_opt_exact(&opt->expr, &xo.exm);
+          if (xo.sb.len > 0)
+            copy_opt_exact(&opt->spr, &xo.sb);
+          else if (xo.sm.len > 0)
+            copy_opt_exact(&opt->spr, &xo.sm);
 
-          opt->expr.reach_end = 0;
+          opt->spr.reach_end = 0;
 
           if (xo.map.value > 0)
             copy_opt_map(&opt->map, &xo.map);
@@ -5356,7 +5719,7 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
       }
       break;
 
-    case ANCHOR_LOOK_BEHIND_NOT:
+    case ANCR_LOOK_BEHIND_NOT:
       break;
     }
     break;
@@ -5391,7 +5754,7 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
       set_mml(&opt->len, 0, INFINITE_LEN);
     else {
       OnigOptionType save = env->options;
-      env->options = ENCLOSURE_(NODE_BODY(node))->o.options;
+      env->options = BAG_(NODE_BODY(node))->o.options;
       r = optimize_nodes(NODE_BODY(node), opt, env);
       env->options = save;
     }
@@ -5408,31 +5771,31 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
 
       if (qn->lower > 0) {
         copy_node_opt_info(opt, &xo);
-        if (xo.exb.len > 0) {
-          if (xo.exb.reach_end) {
-            for (i = 2; i <= qn->lower && ! is_full_opt_exact(&opt->exb); i++) {
-              int rc = concat_opt_exact(&opt->exb, &xo.exb, enc);
+        if (xo.sb.len > 0) {
+          if (xo.sb.reach_end) {
+            for (i = 2; i <= qn->lower && ! is_full_opt_exact(&opt->sb); i++) {
+              int rc = concat_opt_exact(&opt->sb, &xo.sb, enc);
               if (rc > 0) break;
             }
-            if (i < qn->lower) opt->exb.reach_end = 0;
+            if (i < qn->lower) opt->sb.reach_end = 0;
           }
         }
 
         if (qn->lower != qn->upper) {
-          opt->exb.reach_end = 0;
-          opt->exm.reach_end = 0;
+          opt->sb.reach_end = 0;
+          opt->sm.reach_end = 0;
         }
         if (qn->lower > 1)
-          opt->exm.reach_end = 0;
+          opt->sm.reach_end = 0;
       }
 
-      if (IS_REPEAT_INFINITE(qn->upper)) {
+      if (IS_INFINITE_REPEAT(qn->upper)) {
         if (env->mmd.max == 0 &&
             NODE_IS_ANYCHAR(NODE_BODY(node)) && qn->greedy != 0) {
           if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), env)))
-            add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_ML);
+            add_opt_anc_info(&opt->anc, ANCR_ANYCHAR_INF_ML);
           else
-            add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF);
+            add_opt_anc_info(&opt->anc, ANCR_ANYCHAR_INF);
         }
 
         max = (xo.len.max > 0 ? INFINITE_LEN : 0);
@@ -5446,12 +5809,12 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
     }
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     {
-      EnclosureNode* en = ENCLOSURE_(node);
+      BagNode* en = BAG_(node);
 
       switch (en->type) {
-      case ENCLOSURE_OPTION:
+      case BAG_OPTION:
         {
           OnigOptionType save = env->options;
 
@@ -5461,7 +5824,7 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
         }
         break;
 
-      case ENCLOSURE_MEMORY:
+      case BAG_MEMORY:
 #ifdef USE_CALL
         en->opt_count++;
         if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {
@@ -5477,23 +5840,23 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
 #endif
           {
             r = optimize_nodes(NODE_BODY(node), opt, env);
-            if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_MASK)) {
+            if (is_set_opt_anc_info(&opt->anc, ANCR_ANYCHAR_INF_MASK)) {
               if (MEM_STATUS_AT0(env->scan_env->backrefed_mem, en->m.regnum))
-                remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_MASK);
+                remove_opt_anc_info(&opt->anc, ANCR_ANYCHAR_INF_MASK);
             }
           }
         break;
 
-      case ENCLOSURE_STOP_BACKTRACK:
+      case BAG_STOP_BACKTRACK:
         r = optimize_nodes(NODE_BODY(node), opt, env);
         break;
 
-      case ENCLOSURE_IF_ELSE:
+      case BAG_IF_ELSE:
         {
           OptEnv nenv;
 
           copy_opt_env(&nenv, env);
-          r = optimize_nodes(NODE_ENCLOSURE_BODY(en), &xo, &nenv);
+          r = optimize_nodes(NODE_BAG_BODY(en), &xo, &nenv);
           if (r == 0) {
             add_mml(&nenv.mmd, &xo.len);
             concat_left_node_opt_info(enc, opt, &xo);
@@ -5531,39 +5894,47 @@ optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
 }
 
 static int
-set_optimize_exact(regex_t* reg, OptExact* e)
+set_optimize_exact(regex_t* reg, OptStr* e)
 {
   int r;
 
   if (e->len == 0) return 0;
 
-  if (e->ignore_case) {
-    reg->exact = (UChar* )xmalloc(e->len);
-    CHECK_NULL_RETURN_MEMERR(reg->exact);
-    xmemcpy(reg->exact, e->s, e->len);
-    reg->exact_end = reg->exact + e->len;
-    reg->optimize = OPTIMIZE_EXACT_IC;
+  reg->exact = (UChar* )xmalloc(e->len);
+  CHECK_NULL_RETURN_MEMERR(reg->exact);
+  xmemcpy(reg->exact, e->s, e->len);
+  reg->exact_end = reg->exact + e->len;
+
+  if (e->case_fold) {
+    reg->optimize = OPTIMIZE_STR_CASE_FOLD;
+    if (e->good_case_fold != 0) {
+      if (e->len >= 2) {
+        r = set_sunday_quick_search_or_bmh_skip_table(reg, 1,
+                             reg->exact, reg->exact_end,
+                             reg->map, &(reg->map_offset));
+        if (r != 0) return r;
+        reg->optimize = OPTIMIZE_STR_CASE_FOLD_FAST;
+      }
+    }
   }
   else {
     int allow_reverse;
 
-    reg->exact = onigenc_strdup(reg->enc, e->s, e->s + e->len);
-    CHECK_NULL_RETURN_MEMERR(reg->exact);
-    reg->exact_end = reg->exact + e->len;
- 
     allow_reverse =
       ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);
 
-    if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
-      r = set_bm_skip(reg->exact, reg->exact_end, reg->enc,
-                      reg->map, &(reg->int_map));
+    if (e->len >= 2 || (e->len >= 1 && allow_reverse)) {
+      r = set_sunday_quick_search_or_bmh_skip_table(reg, 0,
+                                         reg->exact, reg->exact_end,
+                                         reg->map, &(reg->map_offset));
       if (r != 0) return r;
 
       reg->optimize = (allow_reverse != 0
-                       ? OPTIMIZE_EXACT_BM : OPTIMIZE_EXACT_BM_NO_REV);
+                       ? OPTIMIZE_STR_FAST
+                       : OPTIMIZE_STR_FAST_STEP_FORWARD);
     }
     else {
-      reg->optimize = OPTIMIZE_EXACT;
+      reg->optimize = OPTIMIZE_STR;
     }
   }
 
@@ -5582,7 +5953,7 @@ set_optimize_map(regex_t* reg, OptMap* m)
 {
   int i;
 
-  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
+  for (i = 0; i < CHAR_MAP_SIZE; i++)
     reg->map[i] = m->map[i];
 
   reg->optimize   = OPTIMIZE_MAP;
@@ -5597,8 +5968,8 @@ set_optimize_map(regex_t* reg, OptMap* m)
 static void
 set_sub_anchor(regex_t* reg, OptAnc* anc)
 {
-  reg->sub_anchor |= anc->left  & ANCHOR_BEGIN_LINE;
-  reg->sub_anchor |= anc->right & ANCHOR_END_LINE;
+  reg->sub_anchor |= anc->left  & ANCR_BEGIN_LINE;
+  reg->sub_anchor |= anc->right & ANCR_END_LINE;
 }
 
 #if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
@@ -5609,7 +5980,7 @@ static int
 set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
 {
   int r;
-  NodeOpt opt;
+  OptNode opt;
   OptEnv env;
 
   env.enc            = reg->enc;
@@ -5621,29 +5992,29 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
   r = optimize_nodes(node, &opt, &env);
   if (r != 0) return r;
 
-  reg->anchor = opt.anc.left & (ANCHOR_BEGIN_BUF |
-        ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_INF | ANCHOR_ANYCHAR_INF_ML |
-        ANCHOR_LOOK_BEHIND);
+  reg->anchor = opt.anc.left & (ANCR_BEGIN_BUF |
+        ANCR_BEGIN_POSITION | ANCR_ANYCHAR_INF | ANCR_ANYCHAR_INF_ML |
+        ANCR_LOOK_BEHIND);
 
-  if ((opt.anc.left & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
-    reg->anchor &= ~ANCHOR_ANYCHAR_INF_ML;
+  if ((opt.anc.left & (ANCR_LOOK_BEHIND | ANCR_PREC_READ_NOT)) != 0)
+    reg->anchor &= ~ANCR_ANYCHAR_INF_ML;
 
-  reg->anchor |= opt.anc.right & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
-       ANCHOR_PREC_READ_NOT);
+  reg->anchor |= opt.anc.right & (ANCR_END_BUF | ANCR_SEMI_END_BUF |
+                                  ANCR_PREC_READ_NOT);
 
-  if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
+  if (reg->anchor & (ANCR_END_BUF | ANCR_SEMI_END_BUF)) {
     reg->anchor_dmin = opt.len.min;
     reg->anchor_dmax = opt.len.max;
   }
 
-  if (opt.exb.len > 0 || opt.exm.len > 0) {
-    select_opt_exact(reg->enc, &opt.exb, &opt.exm);
-    if (opt.map.value > 0 && comp_opt_exact_or_map(&opt.exb, &opt.map) > 0) {
+  if (opt.sb.len > 0 || opt.sm.len > 0) {
+    select_opt_exact(reg->enc, &opt.sb, &opt.sm);
+    if (opt.map.value > 0 && comp_opt_exact_or_map(&opt.sb, &opt.map) > 0) {
       goto set_map;
     }
     else {
-      r = set_optimize_exact(reg, &opt.exb);
-      set_sub_anchor(reg, &opt.exb.anc);
+      r = set_optimize_exact(reg, &opt.sb);
+      set_sub_anchor(reg, &opt.sb.anc);
     }
   }
   else if (opt.map.value > 0) {
@@ -5652,9 +6023,9 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
     set_sub_anchor(reg, &opt.map.anc);
   }
   else {
-    reg->sub_anchor |= opt.anc.left & ANCHOR_BEGIN_LINE;
+    reg->sub_anchor |= opt.anc.left & ANCR_BEGIN_LINE;
     if (opt.len.max == 0)
-      reg->sub_anchor |= opt.anc.right & ANCHOR_END_LINE;
+      reg->sub_anchor |= opt.anc.right & ANCR_END_LINE;
   }
 
 #if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
@@ -5672,6 +6043,7 @@ clear_optimize_info(regex_t* reg)
   reg->anchor_dmax   = 0;
   reg->sub_anchor    = 0;
   reg->exact_end     = (UChar* )NULL;
+  reg->map_offset    = 0;
   reg->threshold_len = 0;
   if (IS_NOT_NULL(reg->exact)) {
     xfree(reg->exact);
@@ -5740,41 +6112,41 @@ print_anchor(FILE* f, int anchor)
 
   fprintf(f, "[");
 
-  if (anchor & ANCHOR_BEGIN_BUF) {
+  if (anchor & ANCR_BEGIN_BUF) {
     fprintf(f, "begin-buf");
     q = 1;
   }
-  if (anchor & ANCHOR_BEGIN_LINE) {
+  if (anchor & ANCR_BEGIN_LINE) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "begin-line");
   }
-  if (anchor & ANCHOR_BEGIN_POSITION) {
+  if (anchor & ANCR_BEGIN_POSITION) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "begin-pos");
   }
-  if (anchor & ANCHOR_END_BUF) {
+  if (anchor & ANCR_END_BUF) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "end-buf");
   }
-  if (anchor & ANCHOR_SEMI_END_BUF) {
+  if (anchor & ANCR_SEMI_END_BUF) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "semi-end-buf");
   }
-  if (anchor & ANCHOR_END_LINE) {
+  if (anchor & ANCR_END_LINE) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "end-line");
   }
-  if (anchor & ANCHOR_ANYCHAR_INF) {
+  if (anchor & ANCR_ANYCHAR_INF) {
     if (q) fprintf(f, ", ");
     q = 1;
     fprintf(f, "anychar-inf");
   }
-  if (anchor & ANCHOR_ANYCHAR_INF_ML) {
+  if (anchor & ANCR_ANYCHAR_INF_ML) {
     if (q) fprintf(f, ", ");
     fprintf(f, "anychar-inf-ml");
   }
@@ -5785,12 +6157,13 @@ print_anchor(FILE* f, int anchor)
 static void
 print_optimize_info(FILE* f, regex_t* reg)
 {
-  static const char* on[] = { "NONE", "EXACT", "EXACT_BM", "EXACT_BM_NOT_REV",
-                              "EXACT_IC", "MAP" };
+  static const char* on[] = { "NONE", "STR",
+                              "STR_FAST", "STR_FAST_STEP_FORWARD",
+                              "STR_CASE_FOLD_FAST", "STR_CASE_FOLD", "MAP" };
 
   fprintf(f, "optimize: %s\n", on[reg->optimize]);
   fprintf(f, "  anchor: "); print_anchor(f, reg->anchor);
-  if ((reg->anchor & ANCHOR_END_BUF_MASK) != 0)
+  if ((reg->anchor & ANCR_END_BUF_MASK) != 0)
     print_distance_range(f, reg->anchor_dmin, reg->anchor_dmax);
   fprintf(f, "\n");
 
@@ -5811,14 +6184,14 @@ print_optimize_info(FILE* f, regex_t* reg)
   else if (reg->optimize & OPTIMIZE_MAP) {
     int c, i, n = 0;
 
-    for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
+    for (i = 0; i < CHAR_MAP_SIZE; i++)
       if (reg->map[i]) n++;
 
     fprintf(f, "map: n=%d\n", n);
     if (n > 0) {
       c = 0;
       fputc('[', f);
-      for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
+      for (i = 0; i < CHAR_MAP_SIZE; i++) {
         if (reg->map[i] != 0) {
           if (c > 0)  fputs(", ", f);
           c++;
@@ -5839,7 +6212,7 @@ print_optimize_info(FILE* f, regex_t* reg)
 extern RegexExt*
 onig_get_regex_ext(regex_t* reg)
 {
-  if (IS_NULL(REG_EXTP(reg))) {
+  if (IS_NULL(reg->extp)) {
     RegexExt* ext = (RegexExt* )xmalloc(sizeof(*ext));
     if (IS_NULL(ext)) return 0;
 
@@ -5852,10 +6225,10 @@ onig_get_regex_ext(regex_t* reg)
     ext->callout_list = 0;
 #endif
 
-    REG_EXTPL(reg) = (void* )ext;
+    reg->extp = ext;
   }
 
-  return REG_EXTP(reg);
+  return reg->extp;
 }
 
 static void
@@ -5895,19 +6268,20 @@ onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_en
   return ONIG_NORMAL;
 }
 
-
 extern void
 onig_free_body(regex_t* reg)
 {
   if (IS_NOT_NULL(reg)) {
-    if (IS_NOT_NULL(reg->p))                xfree(reg->p);
+    ops_free(reg);
+    if (IS_NOT_NULL(reg->string_pool)) {
+      xfree(reg->string_pool);
+      reg->string_pool_end = reg->string_pool = 0;
+    }
     if (IS_NOT_NULL(reg->exact))            xfree(reg->exact);
-    if (IS_NOT_NULL(reg->int_map))          xfree(reg->int_map);
-    if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);
     if (IS_NOT_NULL(reg->repeat_range))     xfree(reg->repeat_range);
-    if (IS_NOT_NULL(REG_EXTP(reg))) {
-      free_regex_ext(REG_EXTP(reg));
-      REG_EXTPL(reg) = 0;
+    if (IS_NOT_NULL(reg->extp)) {
+      free_regex_ext(reg->extp);
+      reg->extp = 0;
     }
 
     onig_names_free(reg);
@@ -5923,30 +6297,18 @@ onig_free(regex_t* reg)
   }
 }
 
-#define REGEX_TRANSFER(to,from) do {\
-  onig_free_body(to);\
-  xmemcpy(to, from, sizeof(regex_t));\
-  xfree(from);\
-} while (0)
-
-extern void
-onig_transfer(regex_t* to, regex_t* from)
-{
-  REGEX_TRANSFER(to, from);
-}
-
 
 #ifdef ONIG_DEBUG_PARSE
 static void print_tree P_((FILE* f, Node* node));
 #endif
 
+extern int onig_init_for_match_at(regex_t* reg);
+
 extern int
 onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
              OnigErrorInfo* einfo)
 {
-#define COMPILE_INIT_SIZE  20
-
-  int r, init_size;
+  int r;
   Node*  root;
   ScanEnv  scan_env;
 #ifdef USE_CALL
@@ -5963,15 +6325,15 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   print_enc_string(stderr, reg->enc, pattern, pattern_end);
 #endif
 
-  if (reg->alloc == 0) {
-    init_size = (int )(pattern_end - pattern) * 2;
-    if (init_size <= 0) init_size = COMPILE_INIT_SIZE;
-    r = BB_INIT(reg, init_size);
+  if (reg->ops_alloc == 0) {
+    r = ops_init(reg, OPS_INIT_SIZE);
     if (r != 0) goto end;
   }
   else
-    reg->used = 0;
+    reg->ops_used = 0;
 
+  reg->string_pool        = 0;
+  reg->string_pool_end    = 0;
   reg->num_mem            = 0;
   reg->num_repeat         = 0;
   reg->num_null_check     = 0;
@@ -6048,15 +6410,16 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   r = compile_tree(root, reg, &scan_env);
   if (r == 0) {
     if (scan_env.keep_num > 0) {
-      r = add_opcode(reg, OP_UPDATE_VAR);
-      if (r != 0) goto err;
-      r = add_update_var_type(reg, UPDATE_VAR_KEEP_FROM_STACK_LAST);
-      if (r != 0) goto err;
-      r = add_mem_num(reg, 0 /* not used */);
+      r = add_op(reg, OP_UPDATE_VAR);
       if (r != 0) goto err;
+
+      COP(reg)->update_var.type = UPDATE_VAR_KEEP_FROM_STACK_LAST;
+      COP(reg)->update_var.id   = 0; /* not used */
     }
 
-    r = add_opcode(reg, OP_END);
+    r = add_op(reg, OP_END);
+    if (r != 0) goto err;
+
 #ifdef USE_CALL
     if (scan_env.num_call > 0) {
       r = fix_unset_addr_list(&uslist, reg);
@@ -6067,7 +6430,7 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
 
     if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0)
 #ifdef USE_CALLOUT
-        || (IS_NOT_NULL(REG_EXTP(reg)) && REG_EXTP(reg)->callout_num != 0)
+        || (IS_NOT_NULL(reg->extp) && reg->extp->callout_num != 0)
 #endif
         )
       reg->stack_pop_level = STACK_POP_LEVEL_ALL;
@@ -6077,6 +6440,9 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
       else
         reg->stack_pop_level = STACK_POP_LEVEL_FREE;
     }
+
+    r = ops_make_string_pool(reg);
+    if (r != 0) goto err;
   }
 #ifdef USE_CALL
   else if (scan_env.num_call > 0) {
@@ -6090,6 +6456,11 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   onig_print_compiled_byte_code_list(stderr, reg);
 #endif
 
+#ifdef USE_DIRECT_THREADED_CODE
+  /* opcode -> opaddr */
+  onig_init_for_match_at(reg);
+#endif
+
  end:
   return r;
 
@@ -6159,13 +6530,12 @@ onig_reg_init(regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_fl
   (reg)->syntax           = syntax;
   (reg)->optimize         = 0;
   (reg)->exact            = (UChar* )NULL;
-  (reg)->int_map          = (int* )NULL;
-  (reg)->int_map_backward = (int* )NULL;
-  REG_EXTPL(reg) = NULL;
+  (reg)->extp             = (RegexExt* )NULL;
 
-  (reg)->p                = (UChar* )NULL;
-  (reg)->alloc            = 0;
-  (reg)->used             = 0;
+  (reg)->ops              = (Operation* )NULL;
+  (reg)->ops_curr         = (Operation* )NULL;
+  (reg)->ops_used         = 0;
+  (reg)->ops_alloc        = 0;
   (reg)->name_table       = (void* )NULL;
 
   (reg)->case_fold_flag   = case_fold_flag;
@@ -6316,11 +6686,11 @@ onig_is_code_in_cc_len(int elen, OnigCodePoint code, /* CClassNode* */ void* cc_
       found = 0;
     }
     else {
-      found = (onig_is_in_code_range(cc->mbuf->p, code) != 0 ? 1 : 0);
+      found = onig_is_in_code_range(cc->mbuf->p, code) != 0;
     }
   }
   else {
-    found = (BITSET_AT(cc->bs, code) == 0 ? 0 : 1);
+    found = BITSET_AT(cc->bs, code) != 0;
   }
 
   if (IS_NCCLASS_NOT(cc))
@@ -6339,6 +6709,7 @@ onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)
   }
   else {
     len = ONIGENC_CODE_TO_MBCLEN(enc, code);
+    if (len < 0) return 0;
   }
   return onig_is_code_in_cc_len(len, code, cc);
 }
@@ -6394,12 +6765,35 @@ print_indent_tree(FILE* f, Node* node, int indent)
     break;
 
   case NODE_STRING:
-    fprintf(f, "<string%s:%p>", (NODE_STRING_IS_RAW(node) ? "-raw" : ""), node);
-    for (p = STR_(node)->s; p < STR_(node)->end; p++) {
-      if (*p >= 0x20 && *p < 0x7f)
-        fputc(*p, f);
-      else {
-        fprintf(f, " 0x%02x", *p);
+    {
+      char* mode;
+      char* dont;
+      char* good;
+
+      if (NODE_STRING_IS_RAW(node))
+        mode = "-raw";
+      else if (NODE_STRING_IS_AMBIG(node))
+        mode = "-ambig";
+      else
+        mode = "";
+
+      if (NODE_STRING_IS_GOOD_AMBIG(node))
+        good = "-good";
+      else
+        good = "";
+
+      if (NODE_STRING_IS_DONT_GET_OPT_INFO(node))
+        dont = " (dont-opt)";
+      else
+        dont = "";
+
+      fprintf(f, "<string%s%s%s:%p>", mode, good, dont, node);
+      for (p = STR_(node)->s; p < STR_(node)->end; p++) {
+        if (*p >= 0x20 && *p < 0x7f)
+          fputc(*p, f);
+        else {
+          fprintf(f, " 0x%02x", *p);
+        }
       }
     }
     break;
@@ -6443,36 +6837,36 @@ print_indent_tree(FILE* f, Node* node, int indent)
   case NODE_ANCHOR:
     fprintf(f, "<anchor:%p> ", node);
     switch (ANCHOR_(node)->type) {
-    case ANCHOR_BEGIN_BUF:        fputs("begin buf",      f); break;
-    case ANCHOR_END_BUF:          fputs("end buf",        f); break;
-    case ANCHOR_BEGIN_LINE:       fputs("begin line",     f); break;
-    case ANCHOR_END_LINE:         fputs("end line",       f); break;
-    case ANCHOR_SEMI_END_BUF:     fputs("semi end buf",   f); break;
-    case ANCHOR_BEGIN_POSITION:   fputs("begin position", f); break;
-
-    case ANCHOR_WORD_BOUNDARY:    fputs("word boundary",     f); break;
-    case ANCHOR_NO_WORD_BOUNDARY: fputs("not word boundary", f); break;
+    case ANCR_BEGIN_BUF:        fputs("begin buf",      f); break;
+    case ANCR_END_BUF:          fputs("end buf",        f); break;
+    case ANCR_BEGIN_LINE:       fputs("begin line",     f); break;
+    case ANCR_END_LINE:         fputs("end line",       f); break;
+    case ANCR_SEMI_END_BUF:     fputs("semi end buf",   f); break;
+    case ANCR_BEGIN_POSITION:   fputs("begin position", f); break;
+
+    case ANCR_WORD_BOUNDARY:    fputs("word boundary",     f); break;
+    case ANCR_NO_WORD_BOUNDARY: fputs("not word boundary", f); break;
 #ifdef USE_WORD_BEGIN_END
-    case ANCHOR_WORD_BEGIN:       fputs("word begin", f);     break;
-    case ANCHOR_WORD_END:         fputs("word end", f);       break;
+    case ANCR_WORD_BEGIN:       fputs("word begin", f);     break;
+    case ANCR_WORD_END:         fputs("word end", f);       break;
 #endif
-    case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      fputs("extended-grapheme-cluster boundary", f); break;
-    case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      fputs("no-extended-grapheme-cluster boundary", f); break;
-    case ANCHOR_PREC_READ:
+    case ANCR_TEXT_SEGMENT_BOUNDARY:
+      fputs("text-segment boundary", f); break;
+    case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
+      fputs("no text-segment boundary", f); break;
+    case ANCR_PREC_READ:
       fprintf(f, "prec read\n");
       print_indent_tree(f, NODE_BODY(node), indent + add);
       break;
-    case ANCHOR_PREC_READ_NOT:
+    case ANCR_PREC_READ_NOT:
       fprintf(f, "prec read not\n");
       print_indent_tree(f, NODE_BODY(node), indent + add);
       break;
-    case ANCHOR_LOOK_BEHIND:
+    case ANCR_LOOK_BEHIND:
       fprintf(f, "look behind\n");
       print_indent_tree(f, NODE_BODY(node), indent + add);
       break;
-    case ANCHOR_LOOK_BEHIND_NOT:
+    case ANCR_LOOK_BEHIND_NOT:
       fprintf(f, "look behind not\n");
       print_indent_tree(f, NODE_BODY(node), indent + add);
       break;
@@ -6513,20 +6907,20 @@ print_indent_tree(FILE* f, Node* node, int indent)
     print_indent_tree(f, NODE_BODY(node), indent + add);
     break;
 
-  case NODE_ENCLOSURE:
-    fprintf(f, "<enclosure:%p> ", node);
-    switch (ENCLOSURE_(node)->type) {
-    case ENCLOSURE_OPTION:
-      fprintf(f, "option:%d", ENCLOSURE_(node)->o.options);
+  case NODE_BAG:
+    fprintf(f, "<bag:%p> ", node);
+    switch (BAG_(node)->type) {
+    case BAG_OPTION:
+      fprintf(f, "option:%d", BAG_(node)->o.options);
       break;
-    case ENCLOSURE_MEMORY:
-      fprintf(f, "memory:%d", ENCLOSURE_(node)->m.regnum);
+    case BAG_MEMORY:
+      fprintf(f, "memory:%d", BAG_(node)->m.regnum);
       break;
-    case ENCLOSURE_STOP_BACKTRACK:
+    case BAG_STOP_BACKTRACK:
       fprintf(f, "stop-bt");
       break;
-
-    default:
+    case BAG_IF_ELSE:
+      fprintf(f, "if-else");
       break;
     }
     fprintf(f, "\n");
@@ -6539,9 +6933,6 @@ print_indent_tree(FILE* f, Node* node, int indent)
     case GIMMICK_FAIL:
       fprintf(f, "fail");
       break;
-    case GIMMICK_KEEP:
-      fprintf(f, "keep:%d", GIMMICK_(node)->id);
-      break;
     case GIMMICK_SAVE:
       fprintf(f, "save:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);
       break;
@@ -6568,7 +6959,7 @@ print_indent_tree(FILE* f, Node* node, int indent)
   }
 
   if (type != NODE_LIST && type != NODE_ALT && type != NODE_QUANT &&
-      type != NODE_ENCLOSURE)
+      type != NODE_BAG)
     fprintf(f, "\n");
   fflush(f);
 }
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
index 90547d359e..079cd01f29 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
@@ -2,7 +2,7 @@
   regenc.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,6 +77,17 @@ enc_is_inited(OnigEncoding enc)
   return 0;
 }
 
+static int OnigEncInited;
+
+extern int
+onigenc_init(void)
+{
+  if (OnigEncInited != 0) return 0;
+
+  OnigEncInited = 1;
+  return 0;
+}
+
 extern int
 onigenc_end(void)
 {
@@ -86,15 +97,10 @@ onigenc_end(void)
     InitedList[i].enc    = 0;
     InitedList[i].inited = 0;
   }
-
   InitedListNum = 0;
-  return ONIG_NORMAL;
-}
 
-extern int
-onigenc_init(void)
-{
-  return 0;
+  OnigEncInited = 0;
+  return ONIG_NORMAL;
 }
 
 extern int
@@ -167,7 +173,7 @@ onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const U
 
 extern UChar*
 onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
-				   const UChar* start, const UChar* s, const UChar** prev)
+            const UChar* start, const UChar* s, const UChar** prev)
 {
   UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
 
@@ -231,7 +237,7 @@ onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end)
 {
   int n = 0;
   UChar* q = (UChar* )p;
-  
+
   while (q < end) {
     q += ONIGENC_MBC_ENC_LEN(enc, q);
     n++;
@@ -244,7 +250,7 @@ onigenc_strlen_null(OnigEncoding enc, const UChar* s)
 {
   int n = 0;
   UChar* p = (UChar* )s;
-  
+
   while (1) {
     if (*p == '\0') {
       UChar* q;
@@ -511,7 +517,7 @@ const OnigPairCaseFoldCodes OnigAsciiLowerMap[] = {
 
 extern int
 onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-				  OnigApplyAllCaseFoldFunc f, void* arg)
+                                  OnigApplyAllCaseFoldFunc f, void* arg)
 {
   OnigCodePoint code;
   int i, r;
@@ -533,8 +539,8 @@ onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
 
 extern int
 onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
-	 const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
-	 OnigCaseFoldCodeItem items[])
+    const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
+    OnigCaseFoldCodeItem items[])
 {
   if (0x41 <= *p && *p <= 0x5a) {
     items[0].byte_len = 1;
@@ -554,7 +560,7 @@ onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
 
 static int
 ss_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-		       OnigApplyAllCaseFoldFunc f, void* arg)
+                       OnigApplyAllCaseFoldFunc f, void* arg)
 {
   static OnigCodePoint ss[] = { 0x73, 0x73 };
 
@@ -600,7 +606,7 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p + 0x20);
     if (*p == 0x53 && ess_tsett_flag != 0 && end > p + 1
-	&& (*(p+1) == 0x53 || *(p+1) == 0x73)) {
+        && (*(p+1) == 0x53 || *(p+1) == 0x73)) {
       /* SS */
       items[1].byte_len = 2;
       items[1].code_len = 1;
@@ -615,7 +621,7 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p - 0x20);
     if (*p == 0x73 && ess_tsett_flag != 0 && end > p + 1
-	&& (*(p+1) == 0x73 || *(p+1) == 0x53)) {
+        && (*(p+1) == 0x73 || *(p+1) == 0x53)) {
       /* ss */
       items[1].byte_len = 2;
       items[1].code_len = 1;
@@ -653,16 +659,16 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
 
     for (i = 0; i < map_size; i++) {
       if (*p == map[i].from) {
-	items[0].byte_len = 1;
-	items[0].code_len = 1;
-	items[0].code[0] = map[i].to;
-	return 1;
+        items[0].byte_len = 1;
+        items[0].code_len = 1;
+        items[0].code[0] = map[i].to;
+        return 1;
       }
       else if (*p == map[i].to) {
-	items[0].byte_len = 1;
-	items[0].code_len = 1;
-	items[0].code[0] = map[i].from;
-	return 1;
+        items[0].byte_len = 1;
+        items[0].code_len = 1;
+        items[0].code[0] = map[i].from;
+        return 1;
       }
     }
   }
@@ -673,8 +679,8 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
 
 extern int
 onigenc_not_support_get_ctype_code_range(OnigCtype ctype ARG_UNUSED,
-	 OnigCodePoint* sb_out ARG_UNUSED,
-	 const OnigCodePoint* ranges[] ARG_UNUSED)
+                                         OnigCodePoint* sb_out ARG_UNUSED,
+                                         const OnigCodePoint* ranges[] ARG_UNUSED)
 {
   return ONIG_NO_SUPPORT_CONFIG;
 }
@@ -691,7 +697,7 @@ onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)
 /* for single byte encodings */
 extern int
 onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
-	    const UChar*end ARG_UNUSED, UChar* lower)
+                            const UChar*end ARG_UNUSED, UChar* lower)
 {
   *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);
 
@@ -702,7 +708,7 @@ onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
 #if 0
 extern int
 onigenc_ascii_is_mbc_ambiguous(OnigCaseFoldType flag,
-			       const UChar** pp, const UChar* end)
+                               const UChar** pp, const UChar* end)
 {
   const UChar* p = *pp;
 
@@ -738,35 +744,35 @@ onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 extern UChar*
 onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED,
-					  const UChar* s)
+                                          const UChar* s)
 {
   return (UChar* )s;
 }
 
 extern int
 onigenc_always_true_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-					     const UChar* end ARG_UNUSED)
+                                             const UChar* end ARG_UNUSED)
 {
   return TRUE;
 }
 
 extern int
 onigenc_always_false_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-					      const UChar* end ARG_UNUSED)
+                                              const UChar* end ARG_UNUSED)
 {
   return FALSE;
 }
 
 extern int
 onigenc_always_true_is_valid_mbc_string(const UChar* s   ARG_UNUSED,
-					const UChar* end ARG_UNUSED)
+                                        const UChar* end ARG_UNUSED)
 {
   return TRUE;
 }
 
 extern int
 onigenc_length_check_is_valid_mbc_string(OnigEncoding enc,
-					 const UChar* p, const UChar* end)
+                                         const UChar* p, const UChar* end)
 {
   while (p < end) {
     p += enclen(enc, p);
@@ -805,7 +811,7 @@ onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)
 extern int
 onigenc_mbn_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag ARG_UNUSED,
                           const UChar** pp, const UChar* end ARG_UNUSED,
-			  UChar* lower)
+                          UChar* lower)
 {
   int len;
   const UChar *p = *pp;
@@ -847,6 +853,8 @@ onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigCaseFoldType flag,
 extern int
 onigenc_mb2_code_to_mbclen(OnigCodePoint code)
 {
+  if ((code & (~0xffff)) != 0) return ONIGERR_INVALID_CODE_POINT_VALUE;
+
   if ((code & 0xff00) != 0) return 2;
   else return 1;
 }
@@ -946,7 +954,7 @@ onigenc_is_mbc_word_ascii(OnigEncoding enc, UChar* s, const UChar* end)
 
 extern int
 onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
-			  unsigned int ctype)
+                          unsigned int ctype)
 {
   if (code < 128)
     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
@@ -961,7 +969,7 @@ onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
 
 extern int
 onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
-			  unsigned int ctype)
+                          unsigned int ctype)
 {
   if (code < 128)
     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c
index d92b61e229..0dca34a8ad 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c
@@ -2,7 +2,7 @@
   regerror.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,13 +31,7 @@
 #if 0
 #include <stdio.h> /* for vsnprintf() */
 
-#ifdef HAVE_STDARG_PROTOTYPES
 #include <stdarg.h>
-#define va_init_list(a,b) va_start(a,b)
-#else
-#include <varargs.h>
-#define va_init_list(a,b) va_start(a)
-#endif
 #endif
 
 extern UChar*
@@ -213,13 +207,17 @@ static void sprint_byte_with_x(char* s, unsigned int v)
 }
 
 static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
-		    UChar buf[], int buf_size, int *is_over)
+                    UChar buf[], int buf_size, int *is_over)
 {
   int len;
   UChar *p;
   OnigCodePoint code;
 
-  if (ONIGENC_MBC_MINLEN(enc) > 1) {
+  if (!s) {
+    len = 0;
+    *is_over = 0;
+  }
+  else if (ONIGENC_MBC_MINLEN(enc) > 1) {
     p = s;
     len = 0;
     while (p < end) {
@@ -249,7 +247,7 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
       if (len >= buf_size) break;
     }
 
-    *is_over = ((p < end) ? 1 : 0);
+    *is_over = p < end;
   }
   else {
     len = MIN((int )(end - s), buf_size);
@@ -261,19 +259,27 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
 }
 
 
+extern int
+onig_is_error_code_needs_param(int code)
+{
+  switch (code) {
+  case ONIGERR_UNDEFINED_NAME_REFERENCE:
+  case ONIGERR_UNDEFINED_GROUP_REFERENCE:
+  case ONIGERR_MULTIPLEX_DEFINED_NAME:
+  case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
+  case ONIGERR_INVALID_GROUP_NAME:
+  case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
+  case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
+    return 1;
+  default:
+    return 0;
+  }
+}
+
 /* for ONIG_MAX_ERROR_MESSAGE_LEN */
 #define MAX_ERROR_PAR_LEN   30
 
-extern int
-EFIAPI
-#ifdef HAVE_STDARG_PROTOTYPES
-onig_error_code_to_str(UChar* s, int code, ...)
-#else
-onig_error_code_to_str(s, code, va_alist)
-  UChar* s;
-  int code;
-  va_dcl 
-#endif
+extern int EFIAPI onig_error_code_to_str(UChar* s, int code, ...)
 {
   UChar *p, *q;
   OnigErrorInfo* einfo;
@@ -333,21 +339,8 @@ onig_error_code_to_str(s, code, va_alist)
 }
 
 
-void
-EFIAPI
-#ifdef HAVE_STDARG_PROTOTYPES
-onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
-                           UChar* pat, UChar* pat_end, const UChar *fmt, ...)
-#else
-onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
-    UChar buf[];
-    int bufsize;
-    OnigEncoding enc;
-    UChar* pat;
-    UChar* pat_end;
-    const UChar *fmt;
-    va_dcl
-#endif
+void EFIAPI onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
+                                UChar* pat, UChar* pat_end, const UChar *fmt, ...)
 {
   int n, need, len;
   UChar *p, *s, *bp;
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c
index 6a55045d64..5ce859b39b 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c
@@ -2,7 +2,7 @@
   regexec.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -112,7 +112,6 @@ onig_set_callout_user_data_of_match_param(OnigMatchParam* param, void* user_data
 }
 
 
-
 typedef struct {
   void* stack_p;
   int   stack_n;
@@ -134,120 +133,118 @@ typedef struct {
 
 /* arguments type */
 typedef enum {
-  ARG_SPECIAL =  -1,
-  ARG_NON     =   0,
-  ARG_RELADDR =   1,
-  ARG_ABSADDR =   2,
-  ARG_LENGTH  =   3,
-  ARG_MEMNUM  =   4,
-  ARG_OPTION  =   5,
-  ARG_MODE    =   6
+  ARG_SPECIAL = -1,
+  ARG_NON     =  0,
+  ARG_RELADDR =  1,
+  ARG_ABSADDR =  2,
+  ARG_LENGTH  =  3,
+  ARG_MEMNUM  =  4,
+  ARG_OPTION  =  5,
+  ARG_MODE    =  6
 } OpArgType;
 
 typedef struct {
   short int opcode;
   char*     name;
-  OpArgType arg_type;
 } OpInfoType;
 
 static OpInfoType OpInfo[] = {
-  { OP_FINISH,            "finish",          ARG_NON },
-  { OP_END,               "end",             ARG_NON },
-  { OP_EXACT1,            "exact1",          ARG_SPECIAL },
-  { OP_EXACT2,            "exact2",          ARG_SPECIAL },
-  { OP_EXACT3,            "exact3",          ARG_SPECIAL },
-  { OP_EXACT4,            "exact4",          ARG_SPECIAL },
-  { OP_EXACT5,            "exact5",          ARG_SPECIAL },
-  { OP_EXACTN,            "exactn",          ARG_SPECIAL },
-  { OP_EXACTMB2N1,        "exactmb2-n1",     ARG_SPECIAL },
-  { OP_EXACTMB2N2,        "exactmb2-n2",     ARG_SPECIAL },
-  { OP_EXACTMB2N3,        "exactmb2-n3",     ARG_SPECIAL },
-  { OP_EXACTMB2N,         "exactmb2-n",      ARG_SPECIAL },
-  { OP_EXACTMB3N,         "exactmb3n"  ,     ARG_SPECIAL },
-  { OP_EXACTMBN,          "exactmbn",        ARG_SPECIAL },
-  { OP_EXACT1_IC,         "exact1-ic",       ARG_SPECIAL },
-  { OP_EXACTN_IC,         "exactn-ic",       ARG_SPECIAL },
-  { OP_CCLASS,            "cclass",          ARG_SPECIAL },
-  { OP_CCLASS_MB,         "cclass-mb",       ARG_SPECIAL },
-  { OP_CCLASS_MIX,        "cclass-mix",      ARG_SPECIAL },
-  { OP_CCLASS_NOT,        "cclass-not",      ARG_SPECIAL },
-  { OP_CCLASS_MB_NOT,     "cclass-mb-not",   ARG_SPECIAL },
-  { OP_CCLASS_MIX_NOT,    "cclass-mix-not",  ARG_SPECIAL },
-#ifdef USE_OP_CCLASS_NODE
-  { OP_CCLASS_NODE,       "cclass-node",     ARG_SPECIAL },
+  { OP_FINISH,            "finish" },
+  { OP_END,               "end"    },
+  { OP_EXACT1,            "exact1" },
+  { OP_EXACT2,            "exact2" },
+  { OP_EXACT3,            "exact3" },
+  { OP_EXACT4,            "exact4" },
+  { OP_EXACT5,            "exact5" },
+  { OP_EXACTN,            "exactn" },
+  { OP_EXACTMB2N1,        "exactmb2-n1" },
+  { OP_EXACTMB2N2,        "exactmb2-n2" },
+  { OP_EXACTMB2N3,        "exactmb2-n3" },
+  { OP_EXACTMB2N,         "exactmb2-n"  },
+  { OP_EXACTMB3N,         "exactmb3n"   },
+  { OP_EXACTMBN,          "exactmbn"    },
+  { OP_EXACT1_IC,         "exact1-ic"   },
+  { OP_EXACTN_IC,         "exactn-ic"   },
+  { OP_CCLASS,            "cclass"      },
+  { OP_CCLASS_MB,         "cclass-mb"   },
+  { OP_CCLASS_MIX,        "cclass-mix"  },
+  { OP_CCLASS_NOT,        "cclass-not"  },
+  { OP_CCLASS_MB_NOT,     "cclass-mb-not"  },
+  { OP_CCLASS_MIX_NOT,    "cclass-mix-not" },
+  { OP_ANYCHAR,               "anychar"     },
+  { OP_ANYCHAR_ML,            "anychar-ml"  },
+  { OP_ANYCHAR_STAR,          "anychar*"    },
+  { OP_ANYCHAR_ML_STAR,       "anychar-ml*" },
+  { OP_ANYCHAR_STAR_PEEK_NEXT,    "anychar*-peek-next" },
+  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next" },
+  { OP_WORD,                  "word"       },
+  { OP_WORD_ASCII,            "word-ascii" },
+  { OP_NO_WORD,               "not-word"   },
+  { OP_NO_WORD_ASCII,         "not-word-ascii" },
+  { OP_WORD_BOUNDARY,         "word-boundary"  },
+  { OP_NO_WORD_BOUNDARY,      "not-word-boundary" },
+  { OP_WORD_BEGIN,            "word-begin" },
+  { OP_WORD_END,              "word-end"   },
+  { OP_TEXT_SEGMENT_BOUNDARY, "text-segment-boundary" },
+  { OP_BEGIN_BUF,             "begin-buf"  },
+  { OP_END_BUF,               "end-buf"    },
+  { OP_BEGIN_LINE,            "begin-line" },
+  { OP_END_LINE,              "end-line"   },
+  { OP_SEMI_END_BUF,          "semi-end-buf"   },
+  { OP_BEGIN_POSITION,        "begin-position" },
+  { OP_BACKREF1,              "backref1"       },
+  { OP_BACKREF2,              "backref2"       },
+  { OP_BACKREF_N,             "backref-n"      },
+  { OP_BACKREF_N_IC,          "backref-n-ic"   },
+  { OP_BACKREF_MULTI,         "backref_multi"  },
+  { OP_BACKREF_MULTI_IC,      "backref_multi-ic"     },
+  { OP_BACKREF_WITH_LEVEL,    "backref_with_level"   },
+  { OP_BACKREF_WITH_LEVEL_IC, "backref_with_level-c" },
+  { OP_BACKREF_CHECK,         "backref_check"        },
+  { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level" },
+  { OP_MEMORY_START_PUSH,     "mem-start-push"        },
+  { OP_MEMORY_START,          "mem-start"             },
+  { OP_MEMORY_END_PUSH,       "mem-end-push"          },
+  { OP_MEMORY_END_PUSH_REC,   "mem-end-push-rec"      },
+  { OP_MEMORY_END,            "mem-end"               },
+  { OP_MEMORY_END_REC,        "mem-end-rec"           },
+  { OP_FAIL,                  "fail"                  },
+  { OP_JUMP,                  "jump"                  },
+  { OP_PUSH,                  "push"                  },
+  { OP_PUSH_SUPER,            "push-super"            },
+  { OP_POP_OUT,               "pop-out"               },
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+  { OP_PUSH_OR_JUMP_EXACT1,   "push-or-jump-e1"       },
 #endif
-  { OP_ANYCHAR,           "anychar",         ARG_NON },
-  { OP_ANYCHAR_ML,        "anychar-ml",      ARG_NON },
-  { OP_ANYCHAR_STAR,      "anychar*",        ARG_NON },
-  { OP_ANYCHAR_ML_STAR,   "anychar-ml*",     ARG_NON },
-  { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },
-  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },
-  { OP_WORD,                "word",            ARG_NON },
-  { OP_WORD_ASCII,          "word-ascii",      ARG_NON },
-  { OP_NO_WORD,             "not-word",        ARG_NON },
-  { OP_NO_WORD_ASCII,       "not-word-ascii",  ARG_NON },
-  { OP_WORD_BOUNDARY,       "word-boundary",     ARG_MODE },
-  { OP_NO_WORD_BOUNDARY,    "not-word-boundary", ARG_MODE },
-  { OP_WORD_BEGIN,          "word-begin",      ARG_MODE },
-  { OP_WORD_END,            "word-end",        ARG_MODE },
-  { OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "extended-grapheme-cluster-boundary", ARG_NON },
-  { OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "no-extended-grapheme-cluster-boundary", ARG_NON },
-  { OP_BEGIN_BUF,           "begin-buf",       ARG_NON },
-  { OP_END_BUF,             "end-buf",         ARG_NON },
-  { OP_BEGIN_LINE,          "begin-line",      ARG_NON },
-  { OP_END_LINE,            "end-line",        ARG_NON },
-  { OP_SEMI_END_BUF,        "semi-end-buf",    ARG_NON },
-  { OP_BEGIN_POSITION,      "begin-position",  ARG_NON },
-  { OP_BACKREF1,            "backref1",             ARG_NON },
-  { OP_BACKREF2,            "backref2",             ARG_NON },
-  { OP_BACKREF_N,            "backref-n",           ARG_MEMNUM  },
-  { OP_BACKREF_N_IC,         "backref-n-ic",        ARG_SPECIAL },
-  { OP_BACKREF_MULTI,       "backref_multi",        ARG_SPECIAL },
-  { OP_BACKREF_MULTI_IC,    "backref_multi-ic",     ARG_SPECIAL },
-  { OP_BACKREF_WITH_LEVEL,  "backref_with_level",   ARG_SPECIAL },
-  { OP_BACKREF_CHECK,       "backref_check",        ARG_SPECIAL },
-  { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level", ARG_SPECIAL },
-  { OP_MEMORY_START_PUSH,   "mem-start-push",       ARG_MEMNUM  },
-  { OP_MEMORY_START,        "mem-start",            ARG_MEMNUM  },
-  { OP_MEMORY_END_PUSH,     "mem-end-push",         ARG_MEMNUM  },
-  { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec",     ARG_MEMNUM  },
-  { OP_MEMORY_END,          "mem-end",              ARG_MEMNUM  },
-  { OP_MEMORY_END_REC,      "mem-end-rec",          ARG_MEMNUM  },
-  { OP_FAIL,                "fail",                 ARG_NON },
-  { OP_JUMP,                "jump",                 ARG_RELADDR },
-  { OP_PUSH,                "push",                 ARG_RELADDR },
-  { OP_PUSH_SUPER,          "push-super",           ARG_RELADDR },
-  { OP_POP_OUT,             "pop-out",              ARG_NON },
-  { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1",      ARG_SPECIAL },
-  { OP_PUSH_IF_PEEK_NEXT,   "push-if-peek-next",    ARG_SPECIAL },
-  { OP_REPEAT,              "repeat",               ARG_SPECIAL },
-  { OP_REPEAT_NG,           "repeat-ng",            ARG_SPECIAL },
-  { OP_REPEAT_INC,          "repeat-inc",           ARG_MEMNUM  },
-  { OP_REPEAT_INC_NG,       "repeat-inc-ng",        ARG_MEMNUM  },
-  { OP_REPEAT_INC_SG,       "repeat-inc-sg",        ARG_MEMNUM  },
-  { OP_REPEAT_INC_NG_SG,    "repeat-inc-ng-sg",     ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_START,   "empty-check-start",    ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END,     "empty-check-end",      ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END_MEMST,"empty-check-end-memst", ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push", ARG_MEMNUM  },
-  { OP_PREC_READ_START,      "push-pos",             ARG_NON },
-  { OP_PREC_READ_END,        "pop-pos",              ARG_NON },
-  { OP_PREC_READ_NOT_START,  "prec-read-not-start",  ARG_RELADDR },
-  { OP_PREC_READ_NOT_END,    "prec-read-not-end",    ARG_NON },
-  { OP_ATOMIC_START,         "atomic-start",         ARG_NON },
-  { OP_ATOMIC_END,           "atomic-end",           ARG_NON },
-  { OP_LOOK_BEHIND,          "look-behind",          ARG_SPECIAL },
-  { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start", ARG_SPECIAL },
-  { OP_LOOK_BEHIND_NOT_END,  "look-behind-not-end",  ARG_NON },
-  { OP_CALL,                 "call",                 ARG_ABSADDR },
-  { OP_RETURN,               "return",               ARG_NON },
-  { OP_PUSH_SAVE_VAL,        "push-save-val",        ARG_SPECIAL },
-  { OP_UPDATE_VAR,           "update-var",           ARG_SPECIAL },
+  { OP_PUSH_IF_PEEK_NEXT,     "push-if-peek-next"     },
+  { OP_REPEAT,                "repeat"                },
+  { OP_REPEAT_NG,             "repeat-ng"             },
+  { OP_REPEAT_INC,            "repeat-inc"            },
+  { OP_REPEAT_INC_NG,         "repeat-inc-ng"         },
+  { OP_REPEAT_INC_SG,         "repeat-inc-sg"         },
+  { OP_REPEAT_INC_NG_SG,      "repeat-inc-ng-sg"      },
+  { OP_EMPTY_CHECK_START,     "empty-check-start"     },
+  { OP_EMPTY_CHECK_END,       "empty-check-end"       },
+  { OP_EMPTY_CHECK_END_MEMST, "empty-check-end-memst" },
+  { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push" },
+  { OP_PREC_READ_START,       "push-pos"              },
+  { OP_PREC_READ_END,         "pop-pos"               },
+  { OP_PREC_READ_NOT_START,   "prec-read-not-start"   },
+  { OP_PREC_READ_NOT_END,     "prec-read-not-end"     },
+  { OP_ATOMIC_START,          "atomic-start"          },
+  { OP_ATOMIC_END,            "atomic-end"            },
+  { OP_LOOK_BEHIND,           "look-behind"           },
+  { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start" },
+  { OP_LOOK_BEHIND_NOT_END,   "look-behind-not-end"   },
+  { OP_CALL,                  "call"                  },
+  { OP_RETURN,                "return"                },
+  { OP_PUSH_SAVE_VAL,         "push-save-val"         },
+  { OP_UPDATE_VAR,            "update-var"            },
 #ifdef USE_CALLOUT
-  { OP_CALLOUT_CONTENTS,     "callout-contents",     ARG_SPECIAL },
-  { OP_CALLOUT_NAME,         "callout-name",         ARG_SPECIAL },
+  { OP_CALLOUT_CONTENTS,      "callout-contents"      },
+  { OP_CALLOUT_NAME,          "callout-name"          },
 #endif
-  { -1, "", ARG_NON }
+  { -1, "" }
 };
 
 static char*
@@ -256,22 +253,10 @@ op2name(int opcode)
   int i;
 
   for (i = 0; OpInfo[i].opcode >= 0; i++) {
-    if (opcode == OpInfo[i].opcode)
-      return OpInfo[i].name;
+    if (opcode == OpInfo[i].opcode) return OpInfo[i].name;
   }
-  return "";
-}
-
-static int
-op2arg_type(int opcode)
-{
-  int i;
 
-  for (i = 0; OpInfo[i].opcode >= 0; i++) {
-    if (opcode == OpInfo[i].opcode)
-      return OpInfo[i].arg_type;
-  }
-  return ARG_SPECIAL;
+  return "";
 }
 
 static void
@@ -291,7 +276,7 @@ p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)
 }
 
 static void
-p_rel_addr(FILE* f, RelAddrType rel_addr, UChar* p, UChar* start)
+p_rel_addr(FILE* f, RelAddrType rel_addr, Operation* p, Operation* start)
 {
   RelAddrType curr = (RelAddrType )(p - start);
 
@@ -307,288 +292,328 @@ bitset_on_num(BitSetRef bs)
   for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
     if (BITSET_AT(bs, i)) n++;
   }
+
   return n;
 }
 
-extern void
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,
-                              OnigEncoding enc)
+static void
+print_compiled_byte_code(FILE* f, regex_t* reg, int index,
+                         Operation* start, OnigEncoding enc)
 {
   int i, n;
-  OpArgType   arg_type;
   RelAddrType addr;
   LengthType  len;
   MemNumType  mem;
-  OnigCodePoint  code;
-  OnigOptionType option;
+  OnigCodePoint code;
   ModeType mode;
   UChar *q;
+  Operation* p;
+  enum OpCode opcode;
 
-  fprintf(f, "%s", op2name(*bp));
-  arg_type = op2arg_type(*bp);
-  if (arg_type != ARG_SPECIAL) {
-    bp++;
-    switch (arg_type) {
-    case ARG_NON:
-      break;
-    case ARG_RELADDR:
-      GET_RELADDR_INC(addr, bp);
-      fputc(':', f);
-      p_rel_addr(f, addr, bp, start);
-      break;
-    case ARG_ABSADDR:
-      GET_ABSADDR_INC(addr, bp);
-      fprintf(f, ":{/%d}", addr);
-      break;
-    case ARG_LENGTH:
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d", len);
-      break;
-    case ARG_MEMNUM:
-      mem = *((MemNumType* )bp);
-      bp += SIZE_MEMNUM;
-      fprintf(f, ":%d", mem);
-      break;
-    case ARG_OPTION:
-      {
-        OnigOptionType option = *((OnigOptionType* )bp);
-        bp += SIZE_OPTION;
-        fprintf(f, ":%d", option);
-      }
-      break;
-    case ARG_MODE:
-      mode = *((ModeType* )bp);
-      bp += SIZE_MODE;
-      fprintf(f, ":%d", mode);
-      break;
-    default:
-      break;
-    }
-  }
-  else {
-    switch (*bp++) {
-    case OP_EXACT1:
-    case OP_ANYCHAR_STAR_PEEK_NEXT:
-    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
-      p_string(f, 1, bp++); break;
-    case OP_EXACT2:
-      p_string(f, 2, bp); bp += 2; break;
-    case OP_EXACT3:
-      p_string(f, 3, bp); bp += 3; break;
-    case OP_EXACT4:
-      p_string(f, 4, bp); bp += 4; break;
-    case OP_EXACT5:
-      p_string(f, 5, bp); bp += 5; break;
-    case OP_EXACTN:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 1, bp);
-      bp += len;
-      break;
-
-    case OP_EXACTMB2N1:
-      p_string(f, 2, bp); bp += 2; break;
-    case OP_EXACTMB2N2:
-      p_string(f, 4, bp); bp += 4; break;
-    case OP_EXACTMB2N3:
-      p_string(f, 6, bp); bp += 6; break;
-    case OP_EXACTMB2N:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 2, bp);
-      bp += len * 2;
-      break;
-    case OP_EXACTMB3N:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 3, bp);
-      bp += len * 3;
-      break;
-    case OP_EXACTMBN:
-      {
-        int mb_len;
-
-        GET_LENGTH_INC(mb_len, bp);
-        GET_LENGTH_INC(len, bp);
-        fprintf(f, ":%d:%d:", mb_len, len);
-        n = len * mb_len;
-        while (n-- > 0) { fputc(*bp++, f); }
-      }
-      break;
+  p = reg->ops + index;
 
-    case OP_EXACT1_IC:
-      len = enclen(enc, bp);
-      p_string(f, len, bp);
-      bp += len;
-      break;
-    case OP_EXACTN_IC:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 1, bp);
-      bp += len;
-      break;
+#ifdef USE_DIRECT_THREADED_CODE
+  opcode = reg->ocs[index];
+#else
+  opcode = p->opcode;
+#endif
 
-    case OP_CCLASS:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      fprintf(f, ":%d", n);
-      break;
+  fprintf(f, "%s", op2name(opcode));
+  switch (opcode) {
+  case OP_EXACT1:
+    p_string(f, 1, p->exact.s); break;
+  case OP_EXACT2:
+    p_string(f, 2, p->exact.s); break;
+  case OP_EXACT3:
+    p_string(f, 3, p->exact.s); break;
+  case OP_EXACT4:
+    p_string(f, 4, p->exact.s); break;
+  case OP_EXACT5:
+    p_string(f, 5, p->exact.s); break;
+  case OP_EXACTN:
+    len = p->exact_n.n;
+    p_string(f, len, p->exact_n.s); break;
+  case OP_EXACTMB2N1:
+    p_string(f, 2, p->exact.s); break;
+  case OP_EXACTMB2N2:
+    p_string(f, 4, p->exact.s); break;
+  case OP_EXACTMB2N3:
+    p_string(f, 3, p->exact.s); break;
+  case OP_EXACTMB2N:
+    len = p->exact_n.n;
+    p_len_string(f, len, 2, p->exact_n.s); break;
+  case OP_EXACTMB3N:
+    len = p->exact_n.n;
+    p_len_string(f, len, 3, p->exact_n.s); break;
+  case OP_EXACTMBN:
+    {
+      int mb_len;
+
+      mb_len = p->exact_len_n.len;
+      len    = p->exact_len_n.n;
+      q      = p->exact_len_n.s;
+      fprintf(f, ":%d:%d:", mb_len, len);
+      n = len * mb_len;
+      while (n-- > 0) { fputc(*q++, f); }
+    }
+    break;
+  case OP_EXACT1_IC:
+    len = enclen(enc, p->exact.s);
+    p_string(f, len, p->exact.s);
+    break;
+  case OP_EXACTN_IC:
+    len = p->exact_n.n;
+    p_len_string(f, len, 1, p->exact_n.s);
+    break;
 
-    case OP_CCLASS_NOT:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      fprintf(f, ":%d", n);
-      break;
+  case OP_CCLASS:
+  case OP_CCLASS_NOT:
+    n = bitset_on_num(p->cclass.bsp);
+    fprintf(f, ":%d", n);
+    break;
+  case OP_CCLASS_MB:
+  case OP_CCLASS_MB_NOT:
+    {
+      OnigCodePoint ncode;
+      OnigCodePoint* codes;      
+
+      codes = (OnigCodePoint* )p->cclass_mb.mb;
+      GET_CODE_POINT(ncode, codes);
+      codes++;
+      GET_CODE_POINT(code, codes);
+      fprintf(f, ":%u:%u", code, ncode);
+    }
+    break;
+  case OP_CCLASS_MIX:
+  case OP_CCLASS_MIX_NOT:
+    {
+      OnigCodePoint ncode;
+      OnigCodePoint* codes;
 
-    case OP_CCLASS_MB:
-    case OP_CCLASS_MB_NOT:
-      GET_LENGTH_INC(len, bp);
-      q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-      ALIGNMENT_RIGHT(q);
-#endif
-      GET_CODE_POINT(code, q);
-      bp += len;
-      fprintf(f, ":%d:%d", (int )code, len);
-      break;
+      codes = (OnigCodePoint* )p->cclass_mix.mb;
+      n = bitset_on_num(p->cclass_mix.bsp);
 
-    case OP_CCLASS_MIX:
-    case OP_CCLASS_MIX_NOT:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      GET_LENGTH_INC(len, bp);
-      q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-      ALIGNMENT_RIGHT(q);
-#endif
-      GET_CODE_POINT(code, q);
-      bp += len;
-      fprintf(f, ":%d:%d:%d", n, (int )code, len);
-      break;
+      GET_CODE_POINT(ncode, codes);
+      codes++;
+      GET_CODE_POINT(code, codes);
+      fprintf(f, ":%d:%u:%u", n, code, ncode);
+    }
+    break;
 
-#ifdef USE_OP_CCLASS_NODE
-    case OP_CCLASS_NODE:
-      {
-        CClassNode *cc;
+  case OP_ANYCHAR_STAR_PEEK_NEXT:
+  case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
+    p_string(f, 1, &(p->anychar_star_peek_next.c));
+    break;
 
-        GET_POINTER_INC(cc, bp);
-        n = bitset_on_num(cc->bs);
-        fprintf(f, ":%p:%d", cc, n);
-      }
-      break;
-#endif
+  case OP_WORD_BOUNDARY:
+  case OP_NO_WORD_BOUNDARY:
+  case OP_WORD_BEGIN:
+  case OP_WORD_END:
+    mode = p->word_boundary.mode;
+    fprintf(f, ":%d", mode);
+    break;
 
-    case OP_BACKREF_N_IC:
-      mem = *((MemNumType* )bp);
-      bp += SIZE_MEMNUM;
-      fprintf(f, ":%d", mem);
-      break;
+  case OP_BACKREF_N:
+  case OP_BACKREF_N_IC:
+    mem = p->backref_n.n1;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_BACKREF_MULTI_IC:
+  case OP_BACKREF_MULTI:
+  case OP_BACKREF_CHECK:
+    fputs(" ", f);
+    n = p->backref_general.num;
+    for (i = 0; i < n; i++) {
+      mem = (n == 1) ? p->backref_general.n1 : p->backref_general.ns[i];
+      if (i > 0) fputs(", ", f);
+      fprintf(f, "%d", mem);
+    }
+    break;
+  case OP_BACKREF_WITH_LEVEL:
+  case OP_BACKREF_WITH_LEVEL_IC:
+  case OP_BACKREF_CHECK_WITH_LEVEL:
+    {
+      LengthType level;
 
-    case OP_BACKREF_MULTI_IC:
-    case OP_BACKREF_MULTI:
-    case OP_BACKREF_CHECK:
+      level = p->backref_general.nest_level;
+      fprintf(f, ":%d", level);
       fputs(" ", f);
-      GET_LENGTH_INC(len, bp);
-      for (i = 0; i < len; i++) {
-        GET_MEMNUM_INC(mem, bp);
+      n = p->backref_general.num;
+      for (i = 0; i < n; i++) {
+        mem = (n == 1) ? p->backref_general.n1 : p->backref_general.ns[i];
         if (i > 0) fputs(", ", f);
         fprintf(f, "%d", mem);
       }
-      break;
+    }
+    break;
 
-    case OP_BACKREF_WITH_LEVEL:
-      GET_OPTION_INC(option, bp);
-      fprintf(f, ":%d", option);
-      /* fall */
-    case OP_BACKREF_CHECK_WITH_LEVEL:
-      {
-        LengthType level;
+  case OP_MEMORY_START:
+  case OP_MEMORY_START_PUSH:
+    mem = p->memory_start.num;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_MEMORY_END_PUSH:
+  case OP_MEMORY_END_PUSH_REC:
+  case OP_MEMORY_END:
+  case OP_MEMORY_END_REC:
+    mem = p->memory_end.num;
+    fprintf(f, ":%d", mem);
+    break;
 
-        GET_LENGTH_INC(level, bp);
-        fprintf(f, ":%d", level);
+  case OP_JUMP:
+    addr = p->jump.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-        fputs(" ", f);
-        GET_LENGTH_INC(len, bp);
-        for (i = 0; i < len; i++) {
-          GET_MEMNUM_INC(mem, bp);
-          if (i > 0) fputs(", ", f);
-          fprintf(f, "%d", mem);
-        }
-      }
-      break;
+  case OP_PUSH:
+  case OP_PUSH_SUPER:
+    addr = p->push.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-    case OP_REPEAT:
-    case OP_REPEAT_NG:
-      {
-        mem = *((MemNumType* )bp);
-        bp += SIZE_MEMNUM;
-        addr = *((RelAddrType* )bp);
-        bp += SIZE_RELADDR;
-        fprintf(f, ":%d:%d", mem, addr);
-      }
-      break;
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+  case OP_PUSH_OR_JUMP_EXACT1:
+    addr = p->push_or_jump_exact1.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    p_string(f, 1, &(p->push_or_jump_exact1.c));
+    break;
+#endif
 
-    case OP_PUSH_OR_JUMP_EXACT1:
-    case OP_PUSH_IF_PEEK_NEXT:
-      addr = *((RelAddrType* )bp);
-      bp += SIZE_RELADDR;
-      fputc(':', f);
-      p_rel_addr(f, addr, bp, start);
-      p_string(f, 1, bp);
-      bp += 1;
-      break;
+  case OP_PUSH_IF_PEEK_NEXT:
+    addr = p->push_if_peek_next.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    p_string(f, 1, &(p->push_if_peek_next.c));
+    break;
 
-    case OP_LOOK_BEHIND:
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d", len);
-      break;
+  case OP_REPEAT:
+  case OP_REPEAT_NG:
+    mem = p->repeat.id;
+    addr = p->repeat.addr;
+    fprintf(f, ":%d:", mem);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-    case OP_LOOK_BEHIND_NOT_START:
-      GET_RELADDR_INC(addr, bp);
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d:", len);
-      p_rel_addr(f, addr, bp, start);
-      break;
+  case OP_REPEAT_INC:
+  case OP_REPEAT_INC_NG:
+  case OP_REPEAT_INC_SG:
+  case OP_REPEAT_INC_NG_SG:
+    mem = p->repeat.id;
+    fprintf(f, ":%d", mem);
+    break;
 
-    case OP_PUSH_SAVE_VAL:
-      {
-        SaveType type;
-        GET_SAVE_TYPE_INC(type, bp);
-        GET_MEMNUM_INC(mem, bp);
-        fprintf(f, ":%d:%d", type, mem);
-      }
-      break;
+  case OP_EMPTY_CHECK_START:
+    mem = p->empty_check_start.mem;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_EMPTY_CHECK_END:
+  case OP_EMPTY_CHECK_END_MEMST:
+  case OP_EMPTY_CHECK_END_MEMST_PUSH:
+    mem = p->empty_check_end.mem;
+    fprintf(f, ":%d", mem);
+    break;
 
-    case OP_UPDATE_VAR:
-      {
-        UpdateVarType type;
-        GET_UPDATE_VAR_TYPE_INC(type, bp);
-        GET_MEMNUM_INC(mem, bp);
-        fprintf(f, ":%d:%d", type, mem);
-      }
-      break;
+  case OP_PREC_READ_NOT_START:
+    addr = p->prec_read_not_start.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-#ifdef USE_CALLOUT
-    case OP_CALLOUT_CONTENTS:
-      {
-        GET_MEMNUM_INC(mem,  bp); /* number */
-        fprintf(f, ":%d", mem);
-      }
-      break;
+  case OP_LOOK_BEHIND:
+    len = p->look_behind.len;
+    fprintf(f, ":%d", len);
+    break;
 
-    case OP_CALLOUT_NAME:
-      {
-        int id;
+  case OP_LOOK_BEHIND_NOT_START:
+    addr = p->look_behind_not_start.addr;
+    len  = p->look_behind_not_start.len;
+    fprintf(f, ":%d:", len);
+    p_rel_addr(f, addr, p, start);
+    break;
+
+  case OP_CALL:
+    addr = p->call.addr;
+    fprintf(f, ":{/%d}", addr);
+    break;
 
-        GET_MEMNUM_INC(id,   bp); /* id */
-        GET_MEMNUM_INC(mem,  bp); /* number */
+  case OP_PUSH_SAVE_VAL:
+    {
+      SaveType type;
 
-        fprintf(f, ":%d:%d", id, mem);
-      }
-      break;
-#endif
+      type = p->push_save_val.type;
+      mem  = p->push_save_val.id;
+      fprintf(f, ":%d:%d", type, mem);
+    }
+    break;
 
-    default:
-      fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n", *--bp);
+  case OP_UPDATE_VAR:
+    {
+      UpdateVarType type;
+
+      type = p->update_var.type;
+      mem  = p->update_var.id;
+      fprintf(f, ":%d:%d", type, mem);
+    }
+    break;
+
+#ifdef USE_CALLOUT
+  case OP_CALLOUT_CONTENTS:
+    mem = p->callout_contents.num;
+    fprintf(f, ":%d", mem);
+    break;
+
+  case OP_CALLOUT_NAME:
+    {
+      int id;
+
+      id  = p->callout_name.id;
+      mem = p->callout_name.num;
+      fprintf(f, ":%d:%d", id, mem);
     }
+    break;
+#endif
+
+  case OP_TEXT_SEGMENT_BOUNDARY:
+    if (p->text_segment_boundary.not != 0)
+      fprintf(f, ":not");
+    break;
+
+  case OP_FINISH:
+  case OP_END:
+  case OP_ANYCHAR:
+  case OP_ANYCHAR_ML:
+  case OP_ANYCHAR_STAR:
+  case OP_ANYCHAR_ML_STAR:
+  case OP_WORD:
+  case OP_WORD_ASCII:
+  case OP_NO_WORD:
+  case OP_NO_WORD_ASCII:
+  case OP_BEGIN_BUF:
+  case OP_END_BUF:
+  case OP_BEGIN_LINE:
+  case OP_END_LINE:
+  case OP_SEMI_END_BUF:
+  case OP_BEGIN_POSITION:
+  case OP_BACKREF1:
+  case OP_BACKREF2:
+  case OP_FAIL:
+  case OP_POP_OUT:
+  case OP_PREC_READ_START:
+  case OP_PREC_READ_END:
+  case OP_PREC_READ_NOT_END:
+  case OP_ATOMIC_START:
+  case OP_ATOMIC_END:
+  case OP_LOOK_BEHIND_NOT_END:
+  case OP_RETURN:
+    break;
+
+  default:
+    fprintf(stderr, "print_compiled_byte_code: undefined code %d\n", opcode);
+    break;
   }
-  if (nextp) *nextp = bp;
 }
 #endif /* ONIG_DEBUG */
 
@@ -596,21 +621,22 @@ onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,
 extern void
 onig_print_compiled_byte_code_list(FILE* f, regex_t* reg)
 {
-  UChar* bp;
-  UChar* start = reg->p;
-  UChar* end   = reg->p + reg->used;
+  Operation* bp;
+  Operation* start = reg->ops;
+  Operation* end   = reg->ops + reg->ops_used;
 
   fprintf(f, "bt_mem_start: 0x%x, bt_mem_end: 0x%x\n",
           reg->bt_mem_start, reg->bt_mem_end);
-  fprintf(f, "code-length: %d\n", reg->used);
+  fprintf(f, "code-length: %d\n", reg->ops_used);
 
   bp = start;
   while (bp < end) {
     int pos = bp - start;
 
     fprintf(f, "%4d: ", pos);
-    onig_print_compiled_byte_code(f, bp, &bp, start, reg->enc);
+    print_compiled_byte_code(f, reg, pos, start, reg->enc);
     fprintf(f, "\n");
+    bp++;
   }
   fprintf(f, "\n");
 }
@@ -625,36 +651,38 @@ history_tree_clear(OnigCaptureTreeNode* node)
 {
   int i;
 
-  if (IS_NOT_NULL(node)) {
-    for (i = 0; i < node->num_childs; i++) {
-      if (IS_NOT_NULL(node->childs[i])) {
-        history_tree_free(node->childs[i]);
-      }
-    }
-    for (i = 0; i < node->allocated; i++) {
-      node->childs[i] = (OnigCaptureTreeNode* )0;
+  if (IS_NULL(node)) return ;
+
+  for (i = 0; i < node->num_childs; i++) {
+    if (IS_NOT_NULL(node->childs[i])) {
+      history_tree_free(node->childs[i]);
     }
-    node->num_childs = 0;
-    node->beg = ONIG_REGION_NOTPOS;
-    node->end = ONIG_REGION_NOTPOS;
-    node->group = -1;
   }
+  for (i = 0; i < node->allocated; i++) {
+    node->childs[i] = (OnigCaptureTreeNode* )0;
+  }
+  node->num_childs = 0;
+  node->beg = ONIG_REGION_NOTPOS;
+  node->end = ONIG_REGION_NOTPOS;
+  node->group = -1;
 }
 
 static void
 history_tree_free(OnigCaptureTreeNode* node)
 {
   history_tree_clear(node);
+  if (IS_NOT_NULL(node->childs)) xfree(node->childs);
+
   xfree(node);
 }
 
 static void
 history_root_free(OnigRegion* r)
 {
-  if (IS_NOT_NULL(r->history_root)) {
-    history_tree_free(r->history_root);
-    r->history_root = (OnigCaptureTreeNode* )0;
-  }
+  if (IS_NULL(r->history_root)) return ;
+
+  history_tree_free(r->history_root);
+  r->history_root = (OnigCaptureTreeNode* )0;
 }
 
 static OnigCaptureTreeNode*
@@ -664,9 +692,10 @@ history_node_new(void)
 
   node = (OnigCaptureTreeNode* )xmalloc(sizeof(OnigCaptureTreeNode));
   CHECK_NULL_RETURN(node);
+
   node->childs     = (OnigCaptureTreeNode** )0;
-  node->allocated  = 0;
-  node->num_childs = 0;
+  node->allocated  =  0;
+  node->num_childs =  0;
   node->group      = -1;
   node->beg        = ONIG_REGION_NOTPOS;
   node->end        = ONIG_REGION_NOTPOS;
@@ -685,14 +714,14 @@ history_tree_add_child(OnigCaptureTreeNode* parent, OnigCaptureTreeNode* child)
     if (IS_NULL(parent->childs)) {
       n = HISTORY_TREE_INIT_ALLOC_SIZE;
       parent->childs =
-        (OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n);
+        (OnigCaptureTreeNode** )xmalloc(sizeof(parent->childs[0]) * n);
     }
     else {
       n = parent->allocated * 2;
       parent->childs =
         (OnigCaptureTreeNode** )xrealloc(parent->childs,
-                                         sizeof(OnigCaptureTreeNode*) * n,
-                                         sizeof(OnigCaptureTreeNode*) * parent->allocated);
+                                         sizeof(parent->childs[0]) * n,
+                                         sizeof(parent->childs[0]) * parent->allocated);
     }
     CHECK_NULL_RETURN_MEMERR(parent->childs);
     for (i = parent->allocated; i < n; i++) {
@@ -783,13 +812,13 @@ static int
 onig_region_resize_clear(OnigRegion* region, int n)
 {
   int r;
-  
+
   r = onig_region_resize(region, n);
   if (r != 0) return r;
   onig_region_clear(region);
   return 0;
 }
-    
+
 extern int
 onig_region_set(OnigRegion* region, int at, int beg, int end)
 {
@@ -799,7 +828,7 @@ onig_region_set(OnigRegion* region, int at, int beg, int end)
     int r = onig_region_resize(region, at + 1);
     if (r < 0) return r;
   }
-  
+
   region->beg[at] = beg;
   region->end[at] = end;
   return 0;
@@ -952,6 +981,8 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
 #define STK_CALL_FRAME             0x0400
 #define STK_RETURN                 0x0500
 #define STK_SAVE_VAL               0x0600
+#define STK_PREC_READ_START        0x0700
+#define STK_PREC_READ_END          0x0800
 
 /* stack type check mask */
 #define STK_MASK_POP_USED          STK_ALT_FLAG
@@ -967,13 +998,13 @@ typedef struct _StackType {
   int zid;
   union {
     struct {
-      UChar *pcode;      /* byte code position */
-      UChar *pstr;       /* string position */
-      UChar *pstr_prev;  /* previous char position of pstr */
+      Operation* pcode;     /* byte code position */
+      UChar*     pstr;      /* string position */
+      UChar*     pstr_prev; /* previous char position of pstr */
     } state;
     struct {
-      int   count;       /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
-      UChar *pcode;      /* byte code position (head of repeated target) */
+      int        count;  /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
+      Operation* pcode;  /* byte code position (head of repeated target) */
     } repeat;
     struct {
       StackIndex si;     /* index of stack */
@@ -989,8 +1020,8 @@ typedef struct _StackType {
     } empty_check;
 #ifdef USE_CALL
     struct {
-      UChar *ret_addr;   /* byte code position */
-      UChar *pstr;       /* string position */
+      Operation *ret_addr; /* byte code position */
+      UChar *pstr;         /* string position */
     } call_frame;
 #endif
     struct {
@@ -1165,8 +1196,10 @@ onig_set_retry_limit_in_match(unsigned long size)
 #endif
 }
 
+#ifdef USE_CALLOUT
 static OnigCalloutFunc DefaultProgressCallout;
 static OnigCalloutFunc DefaultRetractionCallout;
+#endif
 
 extern OnigMatchParam*
 onig_new_match_param(void)
@@ -1208,10 +1241,10 @@ onig_initialize_match_param(OnigMatchParam* mp)
 #ifdef USE_RETRY_LIMIT_IN_MATCH
   mp->retry_limit_in_match = RetryLimitInMatch;
 #endif
-  mp->progress_callout_of_contents   = DefaultProgressCallout;
-  mp->retraction_callout_of_contents = DefaultRetractionCallout;
 
 #ifdef USE_CALLOUT
+  mp->progress_callout_of_contents   = DefaultProgressCallout;
+  mp->retraction_callout_of_contents = DefaultRetractionCallout;
   mp->match_at_call_counter  = 0;
   mp->callout_user_data      = 0;
   mp->callout_data           = 0;
@@ -1226,7 +1259,7 @@ onig_initialize_match_param(OnigMatchParam* mp)
 static int
 adjust_match_param(regex_t* reg, OnigMatchParam* mp)
 {
-  RegexExt* ext = REG_EXTP(reg);
+  RegexExt* ext = reg->extp;
 
   mp->match_at_call_counter = 0;
 
@@ -1514,8 +1547,8 @@ stack_double(int is_alloca, char** arg_alloc_base,
 
 #define STACK_PUSH_ALT(pat,s,sprev)       STACK_PUSH(STK_ALT,pat,s,sprev)
 #define STACK_PUSH_SUPER_ALT(pat,s,sprev) STACK_PUSH(STK_SUPER_ALT,pat,s,sprev)
-#define STACK_PUSH_POS(s,sprev) \
-  STACK_PUSH(STK_TO_VOID_START,NULL_UCHARP,s,sprev)
+#define STACK_PUSH_PREC_READ_START(s,sprev) \
+  STACK_PUSH(STK_PREC_READ_START,(Operation* )0,s,sprev)
 #define STACK_PUSH_ALT_PREC_READ_NOT(pat,s,sprev) \
   STACK_PUSH(STK_ALT_PREC_READ_NOT,pat,s,sprev)
 #define STACK_PUSH_TO_VOID_START        STACK_PUSH_TYPE(STK_TO_VOID_START)
@@ -1857,6 +1890,27 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while(0)
 
+#define STACK_GET_PREC_READ_START(k) do {\
+  int level = 0;\
+  k = stk;\
+  while (1) {\
+    k--;\
+    STACK_BASE_CHECK(k, "STACK_GET_PREC_READ_START");\
+    if (IS_TO_VOID_TARGET(k)) {\
+      k->type = STK_VOID;\
+    }\
+    else if (k->type == STK_PREC_READ_START) {\
+      if (level == 0) {\
+        break;\
+      }\
+      level--;\
+    }\
+    else if (k->type == STK_PREC_READ_END) {\
+      level++;\
+    }\
+  }\
+} while(0)
+
 #define STACK_EMPTY_CHECK(isnull,sid,s) do {\
   StackType* k = stk;\
   while (1) {\
@@ -1883,7 +1937,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while (0)
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
 #define STACK_EMPTY_CHECK_MEM(isnull,sid,s,reg) do {\
   StackType* k = stk;\
   while (1) {\
@@ -1897,9 +1951,10 @@ stack_double(int is_alloca, char** arg_alloc_base,
         }\
         else {\
           UChar* endp;\
+          int level = 0;\
           (isnull) = 1;\
           while (k < stk) {\
-            if (k->type == STK_MEM_START) {\
+            if (k->type == STK_MEM_START && level == 0) {\
               STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\
               if (endp == 0) {\
                 (isnull) = 0; break;\
@@ -1911,6 +1966,12 @@ stack_double(int is_alloca, char** arg_alloc_base,
                 (isnull) = -1; /* empty, but position changed */ \
               }\
             }\
+            else if (k->type == STK_PREC_READ_START) {\
+              level++;\
+            }\
+            else if (k->type == STK_PREC_READ_END) {\
+              level--;\
+            }\
             k++;\
           }\
           break;\
@@ -1935,10 +1996,11 @@ stack_double(int is_alloca, char** arg_alloc_base,
           }\
           else {\
             UChar* endp;\
+            int prec_level = 0;\
             (isnull) = 1;\
             while (k < stk) {\
               if (k->type == STK_MEM_START) {\
-                if (level == 0) {\
+                if (level == 0 && prec_level == 0) {\
                   STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\
                   if (endp == 0) {\
                     (isnull) = 0; break;\
@@ -1957,6 +2019,12 @@ stack_double(int is_alloca, char** arg_alloc_base,
               else if (k->type == STK_EMPTY_CHECK_END) {\
                 if (k->zid == (sid)) level--;\
               }\
+              else if (k->type == STK_PREC_READ_START) {\
+                prec_level++;\
+              }\
+              else if (k->type == STK_PREC_READ_END) {\
+                prec_level--;\
+              }\
               k++;\
             }\
             break;\
@@ -1993,7 +2061,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
     }\
   }\
 } while(0)
-#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */
+#endif /* USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT */
 
 #define STACK_GET_REPEAT(sid, k) do {\
   int level = 0;\
@@ -2140,14 +2208,12 @@ make_capture_history_tree(OnigCaptureTreeNode* node, StackType** kp,
 #endif
 
 #ifdef USE_BACKREF_WITH_LEVEL
-static int mem_is_in_memp(int mem, int num, UChar* memp)
+static int mem_is_in_memp(int mem, int num, MemNumType* memp)
 {
   int i;
-  MemNumType m;
 
   for (i = 0; i < num; i++) {
-    GET_MEMNUM_INC(m, memp);
-    if (mem == (int )m) return 1;
+    if (mem == (int )memp[i]) return 1;
   }
   return 0;
 }
@@ -2156,7 +2222,7 @@ static int
 backref_match_at_nested_level(regex_t* reg,
                               StackType* top, StackType* stk_base,
                               int ignore_case, int case_fold_flag,
-                              int nest, int mem_num, UChar* memp,
+                              int nest, int mem_num, MemNumType* memp,
                               UChar** s, const UChar* send)
 {
   UChar *ss, *p, *pstart, *pend = NULL_UCHARP;
@@ -2213,7 +2279,7 @@ backref_match_at_nested_level(regex_t* reg,
 static int
 backref_check_at_nested_level(regex_t* reg,
                               StackType* top, StackType* stk_base,
-                              int nest, int mem_num, UChar* memp)
+                              int nest, int mem_num, MemNumType* memp)
 {
   int level;
   StackType* k;
@@ -2338,6 +2404,85 @@ typedef struct {
   regoff_t  rm_eo;
 } posix_regmatch_t;
 
+
+
+#ifdef USE_THREADED_CODE
+
+#define BYTECODE_INTERPRETER_START      GOTO_OP;
+#define BYTECODE_INTERPRETER_END
+#define CASE_OP(x)   L_##x: SOP_IN(OP_##x); sbegin = s; MATCH_DEBUG_OUT(0)
+#define DEFAULT_OP   /* L_DEFAULT: */
+#define NEXT_OP      sprev = sbegin; JUMP_OP
+#define JUMP_OP      GOTO_OP
+#ifdef USE_DIRECT_THREADED_CODE
+#define GOTO_OP      goto *(p->opaddr)
+#else
+#define GOTO_OP      goto *opcode_to_label[p->opcode]
+#endif
+#define BREAK_OP     /* Nothing */
+
+#else
+
+#define BYTECODE_INTERPRETER_START \
+  while (1) {\
+  MATCH_DEBUG_OUT(0)\
+  sbegin = s;\
+  switch (p->opcode) {
+#define BYTECODE_INTERPRETER_END  } sprev = sbegin; }
+#define CASE_OP(x)   case OP_##x: SOP_IN(OP_##x);
+#define DEFAULT_OP   default:
+#define NEXT_OP      break
+#define JUMP_OP      GOTO_OP
+#define GOTO_OP      continue; break
+#define BREAK_OP     break
+
+#endif /* USE_THREADED_CODE */
+
+#define INC_OP       p++
+#define NEXT_OUT     SOP_OUT; NEXT_OP
+#define JUMP_OUT     SOP_OUT; JUMP_OP
+#define BREAK_OUT    SOP_OUT; BREAK_OP
+#define CHECK_INTERRUPT_JUMP_OUT  SOP_OUT; CHECK_INTERRUPT_IN_MATCH; JUMP_OP
+
+
+#ifdef ONIG_DEBUG_MATCH
+#define MATCH_DEBUG_OUT(offset) do {\
+      Operation *xp;\
+      UChar *q, *bp, buf[50];\
+      int len, spos;\
+      spos = IS_NOT_NULL(s) ? (int )(s - str) : -1;\
+      xp = p - (offset);\
+      fprintf(stderr, "%7u: %7ld: %4d> \"",\
+              counter, GET_STACK_INDEX(stk), spos);\
+      counter++;\
+      bp = buf;\
+      if (IS_NOT_NULL(s)) {\
+        for (i = 0, q = s; i < 7 && q < end; i++) {\
+          len = enclen(encode, q);\
+          while (len-- > 0) *bp++ = *q++;\
+        }\
+        if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }\
+        else         { xmemcpy(bp, "\"",    1); bp += 1; }\
+      }\
+      else {\
+        xmemcpy(bp, "\"", 1); bp += 1;\
+      }\
+      *bp = 0;\
+      fputs((char* )buf, stderr);\
+      for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);\
+      if (xp == FinishCode)\
+        fprintf(stderr, "----: finish");\
+      else {\
+        fprintf(stderr, "%4d: ", (int )(xp - reg->ops));\
+        print_compiled_byte_code(stderr, reg, (int )(xp - reg->ops), reg->ops, encode);\
+      }\
+      fprintf(stderr, "\n");\
+  } while(0);
+#else
+#define MATCH_DEBUG_OUT(offset)
+#endif
+
+
 /* match data(str - end) from position (sstart). */
 /* if sstart == str then set sprev to NULL. */
 static int
@@ -2345,13 +2490,118 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
          const UChar* in_right_range, const UChar* sstart, UChar* sprev,
          MatchArg* msa)
 {
-  static UChar FinishCode[] = { OP_FINISH };
+
+#if defined(USE_DIRECT_THREADED_CODE)
+  static Operation FinishCode[] = { { .opaddr=&&L_FINISH } };
+#else
+  static Operation FinishCode[] = { { OP_FINISH } };
+#endif
+
+#ifdef USE_THREADED_CODE
+  static const void *opcode_to_label[] = {
+  &&L_FINISH,
+  &&L_END,
+  &&L_EXACT1,
+  &&L_EXACT2,
+  &&L_EXACT3,
+  &&L_EXACT4,
+  &&L_EXACT5,
+  &&L_EXACTN,
+  &&L_EXACTMB2N1,
+  &&L_EXACTMB2N2,
+  &&L_EXACTMB2N3,
+  &&L_EXACTMB2N,
+  &&L_EXACTMB3N,
+  &&L_EXACTMBN,
+  &&L_EXACT1_IC,
+  &&L_EXACTN_IC,
+  &&L_CCLASS,
+  &&L_CCLASS_MB,
+  &&L_CCLASS_MIX,
+  &&L_CCLASS_NOT,
+  &&L_CCLASS_MB_NOT,
+  &&L_CCLASS_MIX_NOT,
+  &&L_ANYCHAR,
+  &&L_ANYCHAR_ML,
+  &&L_ANYCHAR_STAR,
+  &&L_ANYCHAR_ML_STAR,
+  &&L_ANYCHAR_STAR_PEEK_NEXT,
+  &&L_ANYCHAR_ML_STAR_PEEK_NEXT,
+  &&L_WORD,
+  &&L_WORD_ASCII,
+  &&L_NO_WORD,
+  &&L_NO_WORD_ASCII,
+  &&L_WORD_BOUNDARY,
+  &&L_NO_WORD_BOUNDARY,
+  &&L_WORD_BEGIN,
+  &&L_WORD_END,
+  &&L_TEXT_SEGMENT_BOUNDARY,
+  &&L_BEGIN_BUF,
+  &&L_END_BUF,
+  &&L_BEGIN_LINE,
+  &&L_END_LINE,
+  &&L_SEMI_END_BUF,
+  &&L_BEGIN_POSITION,
+  &&L_BACKREF1,
+  &&L_BACKREF2,
+  &&L_BACKREF_N,
+  &&L_BACKREF_N_IC,
+  &&L_BACKREF_MULTI,
+  &&L_BACKREF_MULTI_IC,
+  &&L_BACKREF_WITH_LEVEL,
+  &&L_BACKREF_WITH_LEVEL_IC,
+  &&L_BACKREF_CHECK,
+  &&L_BACKREF_CHECK_WITH_LEVEL,
+  &&L_MEMORY_START,
+  &&L_MEMORY_START_PUSH,
+  &&L_MEMORY_END_PUSH,
+  &&L_MEMORY_END_PUSH_REC,
+  &&L_MEMORY_END,
+  &&L_MEMORY_END_REC,
+  &&L_FAIL,
+  &&L_JUMP,
+  &&L_PUSH,
+  &&L_PUSH_SUPER,
+  &&L_POP_OUT,
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+  &&L_PUSH_OR_JUMP_EXACT1,
+#endif
+  &&L_PUSH_IF_PEEK_NEXT,
+  &&L_REPEAT,
+  &&L_REPEAT_NG,
+  &&L_REPEAT_INC,
+  &&L_REPEAT_INC_NG,
+  &&L_REPEAT_INC_SG,
+  &&L_REPEAT_INC_NG_SG,
+  &&L_EMPTY_CHECK_START,
+  &&L_EMPTY_CHECK_END,
+  &&L_EMPTY_CHECK_END_MEMST,
+  &&L_EMPTY_CHECK_END_MEMST_PUSH,
+  &&L_PREC_READ_START,
+  &&L_PREC_READ_END,
+  &&L_PREC_READ_NOT_START,
+  &&L_PREC_READ_NOT_END,
+  &&L_ATOMIC_START,
+  &&L_ATOMIC_END,
+  &&L_LOOK_BEHIND,
+  &&L_LOOK_BEHIND_NOT_START,
+  &&L_LOOK_BEHIND_NOT_END,
+  &&L_CALL,
+  &&L_RETURN,
+  &&L_PUSH_SAVE_VAL,
+  &&L_UPDATE_VAR,
+#ifdef USE_CALLOUT
+  &&L_CALLOUT_CONTENTS,
+  &&L_CALLOUT_NAME,
+#endif
+  };
+#endif
 
   int i, n, num_mem, best_len, pop_level;
   LengthType tlen, tlen2;
   MemNumType mem;
   RelAddrType addr;
-  UChar *s, *q, *sbegin;
+  UChar *s, *q, *ps, *sbegin;
   UChar *right_range;
   int is_alloca;
   char *alloc_base;
@@ -2370,11 +2620,27 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   int of;
 #endif
 
-  UChar *p = reg->p;
+  Operation* p = reg->ops;
   OnigOptionType option = reg->options;
   OnigEncoding encode = reg->enc;
   OnigCaseFoldType case_fold_flag = reg->case_fold_flag;
 
+#ifdef ONIG_DEBUG_MATCH
+  static unsigned int counter = 1;
+#endif
+
+#ifdef USE_DIRECT_THREADED_CODE
+  if (IS_NULL(msa)) {
+    for (i = 0; i < reg->ops_used; i++) {
+       const void* addr;
+       addr = opcode_to_label[reg->ocs[i]];
+       p->opaddr = addr;
+       p++;
+    }
+    return ONIG_NORMAL;
+  }
+#endif
+
 #ifdef USE_CALLOUT
   msa->mp->match_at_call_counter++;
 #endif
@@ -2407,40 +2673,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   retry_in_match_counter = 0;
 #endif
 
-  while (1) {
-#ifdef ONIG_DEBUG_MATCH
-    {
-      static unsigned int counter = 1;
-
-      UChar *q, *bp, buf[50];
-      int len;
-      fprintf(stderr, "%7u: %7ld: %4d> \"",
-              counter, GET_STACK_INDEX(stk), (int )(s - str));
-      counter++;
-
-      bp = buf;
-      for (i = 0, q = s; i < 7 && q < end; i++) {
-        len = enclen(encode, q);
-        while (len-- > 0) *bp++ = *q++;
-      }
-      if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }
-      else         { xmemcpy(bp, "\"",    1); bp += 1; }
-      *bp = 0;
-      fputs((char* )buf, stderr);
-
-      for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);
-      if (p == FinishCode)
-        fprintf(stderr, "----: ");
-      else
-        fprintf(stderr, "%4d: ", (int )(p - reg->p));
-      onig_print_compiled_byte_code(stderr, p, NULL, reg->p, encode);
-      fprintf(stderr, "\n");
-    }
-#endif
-
-    sbegin = s;
-    switch (*p++) {
-    case OP_END:  SOP_IN(OP_END);
+  BYTECODE_INTERPRETER_START {
+    CASE_OP(END)
       n = (int )(s - sstart);
       if (n > best_len) {
         OnigRegion* region;
@@ -2552,16 +2786,16 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 
       /* default behavior: return first-matching result. */
       goto finish;
-      break;
 
-    case OP_EXACT1:  SOP_IN(OP_EXACT1);
+    CASE_OP(EXACT1)
       DATA_ENSURE(1);
-      if (*p != *s) goto fail;
-      p++; s++;
-      SOP_OUT;
-      break;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_EXACT1_IC:  SOP_IN(OP_EXACT1_IC);
+    CASE_OP(EXACT1_IC)
       {
         int len;
         UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@@ -2573,92 +2807,91 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                                     &s, end, lowbuf);
         DATA_ENSURE(0);
         q = lowbuf;
+        ps = p->exact.s;
         while (len-- > 0) {
-          if (*p != *q) {
-            goto fail;
-          }
-          p++; q++;
+          if (*ps != *q) goto fail;
+          ps++; q++;
         }
       }
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_EXACT2:  SOP_IN(OP_EXACT2);
+    CASE_OP(EXACT2)
       DATA_ENSURE(2);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
+      s++;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACT3:  SOP_IN(OP_EXACT3);
+    CASE_OP(EXACT3)
       DATA_ENSURE(3);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
+      s++;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACT4:  SOP_IN(OP_EXACT4);
+    CASE_OP(EXACT4)
       DATA_ENSURE(4);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
+      s++;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACT5:  SOP_IN(OP_EXACT5);
+    CASE_OP(EXACT5)
       DATA_ENSURE(5);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
+      s++;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACTN:  SOP_IN(OP_EXACTN);
-      GET_LENGTH_INC(tlen, p);
+    CASE_OP(EXACTN)
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p++ != *s++) goto fail;
+        if (*ps++ != *s++) goto fail;
       }
       sprev = s - 1;
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACTN_IC:  SOP_IN(OP_EXACTN_IC);
+    CASE_OP(EXACTN_IC)
       {
         int len;
         UChar *q, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
 
-        GET_LENGTH_INC(tlen, p);
-        endp = p + tlen;
-
-        while (p < endp) {
+        tlen = p->exact_n.n;
+        ps   = p->exact_n.s;
+        endp = ps + tlen;
+        while (ps < endp) {
           sprev = s;
           DATA_ENSURE(1);
           len = ONIGENC_MBC_CASE_FOLD(encode,
@@ -2668,116 +2901,115 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           DATA_ENSURE(0);
           q = lowbuf;
           while (len-- > 0) {
-            if (*p != *q) goto fail;
-            p++; q++;
+            if (*ps != *q) goto fail;
+            ps++; q++;
           }
         }
       }
 
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACTMB2N1:  SOP_IN(OP_EXACTMB2N1);
+    CASE_OP(EXACTMB2N1)
       DATA_ENSURE(2);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      SOP_OUT;
-      break;
-
-    case OP_EXACTMB2N2:  SOP_IN(OP_EXACTMB2N2);
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
+      NEXT_OUT;
+
+    CASE_OP(EXACTMB2N2)
       DATA_ENSURE(4);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
       sprev = s;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
-
-    case OP_EXACTMB2N3:  SOP_IN(OP_EXACTMB2N3);
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
+      JUMP_OUT;
+
+    CASE_OP(EXACTMB2N3)
       DATA_ENSURE(6);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
       sprev = s;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      SOP_OUT;
-      continue;
-      break;
-
-    case OP_EXACTMB2N:  SOP_IN(OP_EXACTMB2N);
-      GET_LENGTH_INC(tlen, p);
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      INC_OP;
+      JUMP_OUT;
+
+    CASE_OP(EXACTMB2N)
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen * 2);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - 2;
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACTMB3N:  SOP_IN(OP_EXACTMB3N);
-      GET_LENGTH_INC(tlen, p);
+    CASE_OP(EXACTMB3N)
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen * 3);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - 3;
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EXACTMBN:  SOP_IN(OP_EXACTMBN);
-      GET_LENGTH_INC(tlen,  p);  /* mb-len */
-      GET_LENGTH_INC(tlen2, p);  /* string len */
+    CASE_OP(EXACTMBN)
+      tlen  = p->exact_len_n.len; /* mb byte len */
+      tlen2 = p->exact_len_n.n;   /* number of chars */
       tlen2 *= tlen;
       DATA_ENSURE(tlen2);
+      ps = p->exact_len_n.s;
       while (tlen2-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - tlen;
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_CCLASS:  SOP_IN(OP_CCLASS);
+    CASE_OP(CCLASS)
       DATA_ENSURE(1);
-      if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;
-      p += SIZE_BITSET;
-      s += enclen(encode, s);   /* OP_CCLASS can match mb-code. \D, \S */
-      SOP_OUT;
-      break;
+      if (BITSET_AT(p->cclass.bsp, *s) == 0) goto fail;
+      s++;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_CCLASS_MB:  SOP_IN(OP_CCLASS_MB);
+    CASE_OP(CCLASS_MB)
+      DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;
 
     cclass_mb:
-      GET_LENGTH_INC(tlen, p);
       {
         OnigCodePoint code;
         UChar *ss;
@@ -2789,56 +3021,40 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         ss = s;
         s += mb_len;
         code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-        if (! onig_is_in_code_range(p, code)) goto fail;
-#else
-        q = p;
-        ALIGNMENT_RIGHT(q);
-        if (! onig_is_in_code_range(q, code)) goto fail;
-#endif
+        if (! onig_is_in_code_range(p->cclass_mb.mb, code)) goto fail;
       }
-      p += tlen;
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_CCLASS_MIX:  SOP_IN(OP_CCLASS_MIX);
+    CASE_OP(CCLASS_MIX)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {
-        p += SIZE_BITSET;
         goto cclass_mb;
       }
       else {
-        if (BITSET_AT(((BitSetRef )p), *s) == 0)
+        if (BITSET_AT(p->cclass_mix.bsp, *s) == 0)
           goto fail;
 
-        p += SIZE_BITSET;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         s++;
       }
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_CCLASS_NOT:  SOP_IN(OP_CCLASS_NOT);
+    CASE_OP(CCLASS_NOT)
       DATA_ENSURE(1);
-      if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;
-      p += SIZE_BITSET;
+      if (BITSET_AT(p->cclass.bsp, *s) != 0) goto fail;
       s += enclen(encode, s);
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_CCLASS_MB_NOT:  SOP_IN(OP_CCLASS_MB_NOT);
+    CASE_OP(CCLASS_MB_NOT)
       DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) {
         s++;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         goto cc_mb_not_success;
       }
 
     cclass_mb_not:
-      GET_LENGTH_INC(tlen, p);
       {
         OnigCodePoint code;
         UChar *ss;
@@ -2847,85 +3063,52 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         if (! DATA_ENSURE_CHECK(mb_len)) {
           DATA_ENSURE(1);
           s = (UChar* )end;
-          p += tlen;
           goto cc_mb_not_success;
         }
 
         ss = s;
         s += mb_len;
         code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-        if (onig_is_in_code_range(p, code)) goto fail;
-#else
-        q = p;
-        ALIGNMENT_RIGHT(q);
-        if (onig_is_in_code_range(q, code)) goto fail;
-#endif
+        if (onig_is_in_code_range(p->cclass_mb.mb, code)) goto fail;
       }
-      p += tlen;
 
     cc_mb_not_success:
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_CCLASS_MIX_NOT:  SOP_IN(OP_CCLASS_MIX_NOT);
+    CASE_OP(CCLASS_MIX_NOT)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {
-        p += SIZE_BITSET;
         goto cclass_mb_not;
       }
       else {
-        if (BITSET_AT(((BitSetRef )p), *s) != 0)
+        if (BITSET_AT(p->cclass_mix.bsp, *s) != 0)
           goto fail;
 
-        p += SIZE_BITSET;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         s++;
       }
-      SOP_OUT;
-      break;
-
-#ifdef USE_OP_CCLASS_NODE
-    case OP_CCLASS_NODE:  SOP_IN(OP_CCLASS_NODE);
-      {
-        OnigCodePoint code;
-        void *node;
-        int mb_len;
-        UChar *ss;
-
-        DATA_ENSURE(1);
-        GET_POINTER_INC(node, p);
-        mb_len = enclen(encode, s);
-        ss = s;
-        s += mb_len;
-        DATA_ENSURE(0);
-        code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-        if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;
-      }
-      SOP_OUT;
-      break;
-#endif
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_ANYCHAR:  SOP_IN(OP_ANYCHAR);
+    CASE_OP(ANYCHAR)
       DATA_ENSURE(1);
       n = enclen(encode, s);
       DATA_ENSURE(n);
       if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;
       s += n;
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_ANYCHAR_ML:  SOP_IN(OP_ANYCHAR_ML);
+    CASE_OP(ANYCHAR_ML)
       DATA_ENSURE(1);
       n = enclen(encode, s);
       DATA_ENSURE(n);
       s += n;
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_ANYCHAR_STAR:  SOP_IN(OP_ANYCHAR_STAR);
+    CASE_OP(ANYCHAR_STAR)
+      INC_OP;
       while (DATA_ENSURE_CHECK1) {
         STACK_PUSH_ALT(p, s, sprev);
         n = enclen(encode, s);
@@ -2934,11 +3117,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         sprev = s;
         s += n;
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 
-    case OP_ANYCHAR_ML_STAR:  SOP_IN(OP_ANYCHAR_ML_STAR);
+    CASE_OP(ANYCHAR_ML_STAR)
+      INC_OP;
       while (DATA_ENSURE_CHECK1) {
         STACK_PUSH_ALT(p, s, sprev);
         n = enclen(encode, s);
@@ -2952,86 +3134,92 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           s++;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 
-    case OP_ANYCHAR_STAR_PEEK_NEXT:  SOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);
-      while (DATA_ENSURE_CHECK1) {
-        if (*p == *s) {
-          STACK_PUSH_ALT(p + 1, s, sprev);
-        }
-        n = enclen(encode, s);
-        DATA_ENSURE(n);
-        if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;
-        sprev = s;
-        s += n;
-      }
-      p++;
-      SOP_OUT;
-      break;
+    CASE_OP(ANYCHAR_STAR_PEEK_NEXT)
+      {
+        UChar c;
 
-    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:SOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);
-      while (DATA_ENSURE_CHECK1) {
-        if (*p == *s) {
-          STACK_PUSH_ALT(p + 1, s, sprev);
-        }
-        n = enclen(encode, s);
-        if (n > 1) {
+        c = p->anychar_star_peek_next.c;
+        INC_OP;
+        while (DATA_ENSURE_CHECK1) {
+          if (c == *s) {
+            STACK_PUSH_ALT(p, s, sprev);
+          }
+          n = enclen(encode, s);
           DATA_ENSURE(n);
+          if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;
           sprev = s;
           s += n;
         }
-        else {
-          sprev = s;
-          s++;
+      }
+      NEXT_OUT;
+
+    CASE_OP(ANYCHAR_ML_STAR_PEEK_NEXT)
+      {
+        UChar c;
+
+        c = p->anychar_star_peek_next.c;
+        INC_OP;
+        while (DATA_ENSURE_CHECK1) {
+          if (c == *s) {
+            STACK_PUSH_ALT(p, s, sprev);
+          }
+          n = enclen(encode, s);
+          if (n > 1) {
+            DATA_ENSURE(n);
+            sprev = s;
+            s += n;
+          }
+          else {
+            sprev = s;
+            s++;
+          }
         }
       }
-      p++;
-      SOP_OUT;
-      break;
+      NEXT_OUT;
 
-    case OP_WORD:  SOP_IN(OP_WORD);
+    CASE_OP(WORD)
       DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_WORD(encode, s, end))
         goto fail;
 
       s += enclen(encode, s);
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_WORD_ASCII:  SOP_IN(OP_WORD_ASCII);
+    CASE_OP(WORD_ASCII)
       DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))
         goto fail;
 
       s += enclen(encode, s);
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_NO_WORD:  SOP_IN(OP_NO_WORD);
+    CASE_OP(NO_WORD)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_WORD(encode, s, end))
         goto fail;
 
       s += enclen(encode, s);
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_NO_WORD_ASCII:  SOP_IN(OP_NO_WORD_ASCII);
+    CASE_OP(NO_WORD_ASCII)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))
         goto fail;
 
       s += enclen(encode, s);
-      SOP_OUT;
-      break;
+      INC_OP;
+      NEXT_OUT;
 
-    case OP_WORD_BOUNDARY:  SOP_IN(OP_WORD_BOUNDARY);
+    CASE_OP(WORD_BOUNDARY)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (ON_STR_BEGIN(s)) {
           DATA_ENSURE(1);
           if (! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
@@ -3047,15 +3235,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
             goto fail;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_NO_WORD_BOUNDARY:  SOP_IN(OP_NO_WORD_BOUNDARY);
+    CASE_OP(NO_WORD_BOUNDARY)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (ON_STR_BEGIN(s)) {
           if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
             goto fail;
@@ -3070,190 +3257,189 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
             goto fail;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
 #ifdef USE_WORD_BEGIN_END
-    case OP_WORD_BEGIN:  SOP_IN(OP_WORD_BEGIN);
+    CASE_OP(WORD_BEGIN)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
           if (ON_STR_BEGIN(s) || !IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
-            SOP_OUT;
-            continue;
+            INC_OP;
+            JUMP_OUT;
           }
         }
       }
       goto fail;
-      break;
 
-    case OP_WORD_END:  SOP_IN(OP_WORD_END);
+    CASE_OP(WORD_END)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (!ON_STR_BEGIN(s) && IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
           if (ON_STR_END(s) || ! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
-            SOP_OUT;
-            continue;
+            INC_OP;
+            JUMP_OUT;
           }
         }
       }
       goto fail;
-      break;
 #endif
 
-    case OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      SOP_IN(OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
-      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end)) {
-        SOP_OUT;
-        continue;
-      }
-      goto fail;
-      break;
+    CASE_OP(TEXT_SEGMENT_BOUNDARY)
+      {
+        int is_break;
 
-    case OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      SOP_IN(OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
-      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end))
-        goto fail;
+        switch (p->text_segment_boundary.type) {
+        case EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+          is_break = onigenc_egcb_is_break_position(encode, s, sprev, str, end);
+          break;
+#ifdef USE_UNICODE_WORD_BREAK
+        case WORD_BOUNDARY:
+          is_break = onigenc_wb_is_break_position(encode, s, sprev, str, end);
+          break;
+#endif
+        default:
+          goto bytecode_error;
+          break;
+        }
 
-      SOP_OUT;
-      continue;
-      break;
+        if (p->text_segment_boundary.not != 0)
+          is_break = ! is_break;
 
-    case OP_BEGIN_BUF:  SOP_IN(OP_BEGIN_BUF);
+        if (is_break != 0) {
+          INC_OP;
+          JUMP_OUT;
+        }
+        else {
+          goto fail;
+        }
+      }
+
+    CASE_OP(BEGIN_BUF)
       if (! ON_STR_BEGIN(s)) goto fail;
 
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_END_BUF:  SOP_IN(OP_END_BUF);
+    CASE_OP(END_BUF)
       if (! ON_STR_END(s)) goto fail;
 
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_BEGIN_LINE:  SOP_IN(OP_BEGIN_LINE);
+    CASE_OP(BEGIN_LINE)
       if (ON_STR_BEGIN(s)) {
         if (IS_NOTBOL(msa->options)) goto fail;
-        SOP_OUT;
-        continue;
+        INC_OP;
+        JUMP_OUT;
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) {
-        SOP_OUT;
-        continue;
+        INC_OP;
+        JUMP_OUT;
       }
       goto fail;
-      break;
 
-    case OP_END_LINE:  SOP_IN(OP_END_LINE);
+    CASE_OP(END_LINE)
       if (ON_STR_END(s)) {
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
 #endif
           if (IS_NOTEOL(msa->options)) goto fail;
-          SOP_OUT;
-          continue;
+          INC_OP;
+          JUMP_OUT;
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         }
 #endif
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {
-        SOP_OUT;
-        continue;
+        INC_OP;
+        JUMP_OUT;
       }
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
       else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {
-        SOP_OUT;
-        continue;
+        INC_OP;
+        JUMP_OUT;
       }
 #endif
       goto fail;
-      break;
 
-    case OP_SEMI_END_BUF:  SOP_IN(OP_SEMI_END_BUF);
+    CASE_OP(SEMI_END_BUF)
       if (ON_STR_END(s)) {
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
 #endif
           if (IS_NOTEOL(msa->options)) goto fail;
-          SOP_OUT;
-          continue;
+          INC_OP;
+          JUMP_OUT;
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         }
 #endif
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) &&
                ON_STR_END(s + enclen(encode, s))) {
-        SOP_OUT;
-        continue;
+        INC_OP;
+        JUMP_OUT;
       }
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
       else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {
         UChar* ss = s + enclen(encode, s);
         ss += enclen(encode, ss);
         if (ON_STR_END(ss)) {
-          SOP_OUT;
-          continue;
+          INC_OP;
+          JUMP_OUT;
         }
       }
 #endif
       goto fail;
-      break;
 
-    case OP_BEGIN_POSITION:  SOP_IN(OP_BEGIN_POSITION);
+    CASE_OP(BEGIN_POSITION)
       if (s != msa->start)
         goto fail;
 
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_MEMORY_START_PUSH:  SOP_IN(OP_MEMORY_START_PUSH);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_START_PUSH)
+      mem = p->memory_start.num;
       STACK_PUSH_MEM_START(mem, s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_MEMORY_START:  SOP_IN(OP_MEMORY_START);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_START)
+      mem = p->memory_start.num;
       mem_start_stk[mem] = (StackIndex )((void* )s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_MEMORY_END_PUSH:  SOP_IN(OP_MEMORY_END_PUSH);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_END_PUSH)
+      mem = p->memory_end.num;
       STACK_PUSH_MEM_END(mem, s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_MEMORY_END:  SOP_IN(OP_MEMORY_END);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_END)
+      mem = p->memory_end.num;
       mem_end_stk[mem] = (StackIndex )((void* )s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
 #ifdef USE_CALL
-    case OP_MEMORY_END_PUSH_REC:  SOP_IN(OP_MEMORY_END_PUSH_REC);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_END_PUSH_REC)
+      mem = p->memory_end.num;
       STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */
+      si = GET_STACK_INDEX(stkp);
       STACK_PUSH_MEM_END(mem, s);
-      mem_start_stk[mem] = GET_STACK_INDEX(stkp);
-      SOP_OUT;
-      continue;
-      break;
+      mem_start_stk[mem] = si;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_MEMORY_END_REC:  SOP_IN(OP_MEMORY_END_REC);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(MEMORY_END_REC)
+      mem = p->memory_end.num;
       mem_end_stk[mem] = (StackIndex )((void* )s);
       STACK_GET_MEM_START(mem, stkp);
 
@@ -3263,23 +3449,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr);
 
       STACK_PUSH_MEM_END_MARK(mem);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 #endif
 
-    case OP_BACKREF1:  SOP_IN(OP_BACKREF1);
+    CASE_OP(BACKREF1)
       mem = 1;
       goto backref;
-      break;
 
-    case OP_BACKREF2:  SOP_IN(OP_BACKREF2);
+    CASE_OP(BACKREF2)
       mem = 2;
       goto backref;
-      break;
 
-    case OP_BACKREF_N:  SOP_IN(OP_BACKREF_N);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(BACKREF_N)
+      mem = p->backref_n.n1;
     backref:
       {
         int len;
@@ -3297,19 +3480,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                 : (UChar* )((void* )mem_end_stk[mem]));
         n = (int )(pend - pstart);
-        DATA_ENSURE(n);
-        sprev = s;
-        STRING_CMP(pstart, s, n);
-        while (sprev + (len = enclen(encode, sprev)) < s)
-          sprev += len;
-
-        SOP_OUT;
-        continue;
+        if (n != 0) {
+          DATA_ENSURE(n);
+          sprev = s;
+          STRING_CMP(s, pstart, n);
+          while (sprev + (len = enclen(encode, sprev)) < s)
+            sprev += len;
+        }
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_BACKREF_N_IC:  SOP_IN(OP_BACKREF_N_IC);
-      GET_MEMNUM_INC(mem, p);
+    CASE_OP(BACKREF_N_IC)
+      mem = p->backref_n.n1;
       {
         int len;
         UChar *pstart, *pend;
@@ -3326,25 +3509,25 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                 : (UChar* )((void* )mem_end_stk[mem]));
         n = (int )(pend - pstart);
-        DATA_ENSURE(n);
-        sprev = s;
-        STRING_CMP_IC(case_fold_flag, pstart, &s, n);
-        while (sprev + (len = enclen(encode, sprev)) < s)
-          sprev += len;
-
-        SOP_OUT;
-        continue;
+        if (n != 0) {
+          DATA_ENSURE(n);
+          sprev = s;
+          STRING_CMP_IC(case_fold_flag, pstart, &s, n);
+          while (sprev + (len = enclen(encode, sprev)) < s)
+            sprev += len;
+        }
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_BACKREF_MULTI:  SOP_IN(OP_BACKREF_MULTI);
+    CASE_OP(BACKREF_MULTI)
       {
         int len, is_fail;
         UChar *pstart, *pend, *swork;
 
-        GET_LENGTH_INC(tlen, p);
+        tlen = p->backref_general.num;
         for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+          mem = tlen == 1 ? p->backref_general.n1 : p->backref_general.ns[i];
 
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
@@ -3358,32 +3541,31 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                   ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                   : (UChar* )((void* )mem_end_stk[mem]));
           n = (int )(pend - pstart);
-          DATA_ENSURE(n);
-          sprev = s;
-          swork = s;
-          STRING_CMP_VALUE(pstart, swork, n, is_fail);
-          if (is_fail) continue;
-          s = swork;
-          while (sprev + (len = enclen(encode, sprev)) < s)
-            sprev += len;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
+          if (n != 0) {
+            DATA_ENSURE(n);
+            sprev = s;
+            swork = s;
+            STRING_CMP_VALUE(swork, pstart, n, is_fail);
+            if (is_fail) continue;
+            s = swork;
+            while (sprev + (len = enclen(encode, sprev)) < s)
+              sprev += len;
+          }
           break; /* success */
         }
         if (i == tlen) goto fail;
-        SOP_OUT;
-        continue;
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_BACKREF_MULTI_IC:  SOP_IN(OP_BACKREF_MULTI_IC);
+    CASE_OP(BACKREF_MULTI_IC)
       {
         int len, is_fail;
         UChar *pstart, *pend, *swork;
 
-        GET_LENGTH_INC(tlen, p);
+        tlen = p->backref_general.num;
         for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+          mem = tlen == 1 ? p->backref_general.n1 : p->backref_general.ns[i];
 
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
@@ -3397,139 +3579,140 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                   ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                   : (UChar* )((void* )mem_end_stk[mem]));
           n = (int )(pend - pstart);
-          DATA_ENSURE(n);
-          sprev = s;
-          swork = s;
-          STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);
-          if (is_fail) continue;
-          s = swork;
-          while (sprev + (len = enclen(encode, sprev)) < s)
-            sprev += len;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
+          if (n != 0) {
+            DATA_ENSURE(n);
+            sprev = s;
+            swork = s;
+            STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);
+            if (is_fail) continue;
+            s = swork;
+            while (sprev + (len = enclen(encode, sprev)) < s)
+              sprev += len;
+          }
           break; /* success */
         }
         if (i == tlen) goto fail;
-        SOP_OUT;
-        continue;
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 
 #ifdef USE_BACKREF_WITH_LEVEL
-    case OP_BACKREF_WITH_LEVEL:
+    CASE_OP(BACKREF_WITH_LEVEL_IC)
+      n = 1; /* ignore case */
+      goto backref_with_level;
+    CASE_OP(BACKREF_WITH_LEVEL)
       {
         int len;
-        OnigOptionType ic;
-        LengthType level;
-
-        GET_OPTION_INC(ic,    p);
-        GET_LENGTH_INC(level, p);
-        GET_LENGTH_INC(tlen,  p);
-
-        sprev = s;
-        if (backref_match_at_nested_level(reg, stk, stk_base, ic
-                     , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {
-          if (sprev < end) {
+        int level;
+        MemNumType* mems;
+        UChar* ssave;
+
+        n = 0;
+      backref_with_level:
+        level = p->backref_general.nest_level;
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
+
+        ssave = s;
+        if (backref_match_at_nested_level(reg, stk, stk_base, n,
+                    case_fold_flag, level, (int )tlen, mems, &s, end)) {
+          if (ssave != s) {
+            sprev = ssave;
             while (sprev + (len = enclen(encode, sprev)) < s)
               sprev += len;
           }
-          p += (SIZE_MEMNUM * tlen);
         }
         else
           goto fail;
-
-        SOP_OUT;
-        continue;
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 #endif
 
-    case OP_BACKREF_CHECK:  SOP_IN(OP_BACKREF_CHECK);
+    CASE_OP(BACKREF_CHECK)
       {
-        GET_LENGTH_INC(tlen, p);
-        for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+        MemNumType* mems;
+
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
 
+        for (i = 0; i < tlen; i++) {
+          mem = mems[i];
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
           break; /* success */
         }
         if (i == tlen) goto fail;
-        SOP_OUT;
-        continue;
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 
 #ifdef USE_BACKREF_WITH_LEVEL
-    case OP_BACKREF_CHECK_WITH_LEVEL:
+    CASE_OP(BACKREF_CHECK_WITH_LEVEL)
       {
         LengthType level;
+        MemNumType* mems;
 
-        GET_LENGTH_INC(level, p);
-        GET_LENGTH_INC(tlen,  p);
+        level = p->backref_general.nest_level;
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
 
         if (backref_check_at_nested_level(reg, stk, stk_base,
-                                          (int )level, (int )tlen, p) != 0) {
-          p += (SIZE_MEMNUM * tlen);
-        }
-        else
+                                          (int )level, (int )tlen, mems) == 0)
           goto fail;
-
-        SOP_OUT;
-        continue;
       }
-      break;
+      INC_OP;
+      JUMP_OUT;
 #endif
 
-    case OP_EMPTY_CHECK_START:  SOP_IN(OP_EMPTY_CHECK_START);
-      GET_MEMNUM_INC(mem, p);    /* mem: null check id */
+    CASE_OP(EMPTY_CHECK_START)
+      mem = p->empty_check_start.mem;   /* mem: null check id */
       STACK_PUSH_EMPTY_CHECK_START(mem, s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_EMPTY_CHECK_END:  SOP_IN(OP_EMPTY_CHECK_END);
+    CASE_OP(EMPTY_CHECK_END)
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
+        mem = p->empty_check_end.mem;  /* mem: null check id */
         STACK_EMPTY_CHECK(is_empty, mem, s);
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END: skip  id:%d, s:%p\n", (int )mem, s);
 #endif
         empty_check_found:
           /* empty loop founded, skip next instruction */
-          switch (*p++) {
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
+          switch (p->opcode) {
           case OP_JUMP:
           case OP_PUSH:
-            p += SIZE_RELADDR;
-            break;
           case OP_REPEAT_INC:
           case OP_REPEAT_INC_NG:
           case OP_REPEAT_INC_SG:
           case OP_REPEAT_INC_NG_SG:
-            p += SIZE_MEMNUM;
+            INC_OP;
             break;
           default:
             goto unexpected_bytecode_error;
             break;
           }
+#else
+          INC_OP;
+#endif
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
-    case OP_EMPTY_CHECK_END_MEMST:  SOP_IN(OP_EMPTY_CHECK_END_MEMST);
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
+    CASE_OP(EMPTY_CHECK_END_MEMST)
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
+        mem = p->empty_check_end.mem;  /* mem: null check id */
         STACK_EMPTY_CHECK_MEM(is_empty, mem, s, reg);
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END_MEM: skip  id:%d, s:%p\n", (int)mem, s);
@@ -3538,23 +3721,21 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           goto empty_check_found;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 #endif
 
 #ifdef USE_CALL
-    case OP_EMPTY_CHECK_END_MEMST_PUSH:
-      SOP_IN(OP_EMPTY_CHECK_END_MEMST_PUSH);
+    CASE_OP(EMPTY_CHECK_END_MEMST_PUSH)
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
+        mem = p->empty_check_end.mem;  /* mem: null check id */
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
         STACK_EMPTY_CHECK_MEM_REC(is_empty, mem, s, reg);
 #else
         STACK_EMPTY_CHECK_REC(is_empty, mem, s);
 #endif
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END_MEM_PUSH: skip  id:%d, s:%p\n",
@@ -3567,113 +3748,108 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           STACK_PUSH_EMPTY_CHECK_END(mem);
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 #endif
 
-    case OP_JUMP:  SOP_IN(OP_JUMP);
-      GET_RELADDR_INC(addr, p);
+    CASE_OP(JUMP)
+      addr = p->jump.addr;
       p += addr;
-      SOP_OUT;
-      CHECK_INTERRUPT_IN_MATCH;
-      continue;
-      break;
+      CHECK_INTERRUPT_JUMP_OUT;
 
-    case OP_PUSH:  SOP_IN(OP_PUSH);
-      GET_RELADDR_INC(addr, p);
+    CASE_OP(PUSH)
+      addr = p->push.addr;
       STACK_PUSH_ALT(p + addr, s, sprev);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_PUSH_SUPER:  SOP_IN(OP_PUSH_SUPER);
-      GET_RELADDR_INC(addr, p);
+    CASE_OP(PUSH_SUPER)
+      addr = p->push.addr;
       STACK_PUSH_SUPER_ALT(p + addr, s, sprev);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_POP_OUT:  SOP_IN(OP_POP_OUT);
+    CASE_OP(POP_OUT)
       STACK_POP_ONE;
       /* for stop backtrack */
       /* CHECK_RETRY_LIMIT_IN_MATCH; */
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_PUSH_OR_JUMP_EXACT1:  SOP_IN(OP_PUSH_OR_JUMP_EXACT1);
-      GET_RELADDR_INC(addr, p);
-      if (*p == *s && DATA_ENSURE_CHECK1) {
-        p++;
-        STACK_PUSH_ALT(p + addr, s, sprev);
-        SOP_OUT;
-        continue;
-      }
-      p += (addr + 1);
-      SOP_OUT;
-      continue;
-      break;
+ #ifdef USE_OP_PUSH_OR_JUMP_EXACT
+    CASE_OP(PUSH_OR_JUMP_EXACT1)
+      {
+        UChar c;
 
-    case OP_PUSH_IF_PEEK_NEXT:  SOP_IN(OP_PUSH_IF_PEEK_NEXT);
-      GET_RELADDR_INC(addr, p);
-      if (*p == *s) {
-        p++;
-        STACK_PUSH_ALT(p + addr, s, sprev);
-        SOP_OUT;
-        continue;
+        addr = p->push_or_jump_exact1.addr;
+        c    = p->push_or_jump_exact1.c;
+        if (DATA_ENSURE_CHECK1 && c == *s) {
+          STACK_PUSH_ALT(p + addr, s, sprev);
+          INC_OP;
+          JUMP_OUT;
+        }
       }
-      p++;
-      SOP_OUT;
-      continue;
-      break;
+      p += addr;
+      JUMP_OUT;
+#endif
 
-    case OP_REPEAT:  SOP_IN(OP_REPEAT);
+    CASE_OP(PUSH_IF_PEEK_NEXT)
       {
-        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */
-        GET_RELADDR_INC(addr, p);
-
-        STACK_ENSURE(1);
-        repeat_stk[mem] = GET_STACK_INDEX(stk);
-        STACK_PUSH_REPEAT(mem, p);
+        UChar c;
 
-        if (reg->repeat_range[mem].lower == 0) {
+        addr = p->push_if_peek_next.addr;
+        c    = p->push_if_peek_next.c;
+        if (c == *s) {
           STACK_PUSH_ALT(p + addr, s, sprev);
+          INC_OP;
+          JUMP_OUT;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_REPEAT_NG:  SOP_IN(OP_REPEAT_NG);
-      {
-        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */
-        GET_RELADDR_INC(addr, p);
+    CASE_OP(REPEAT)
+      mem  = p->repeat.id;  /* mem: OP_REPEAT ID */
+      addr = p->repeat.addr;
 
-        STACK_ENSURE(1);
-        repeat_stk[mem] = GET_STACK_INDEX(stk);
-        STACK_PUSH_REPEAT(mem, p);
+      STACK_ENSURE(1);
+      repeat_stk[mem] = GET_STACK_INDEX(stk);
+      STACK_PUSH_REPEAT(mem, p + 1);
 
-        if (reg->repeat_range[mem].lower == 0) {
-          STACK_PUSH_ALT(p, s, sprev);
-          p += addr;
-        }
+      if (reg->repeat_range[mem].lower == 0) {
+        STACK_PUSH_ALT(p + addr, s, sprev);
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_REPEAT_INC:  SOP_IN(OP_REPEAT_INC);
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-      si = repeat_stk[mem];
+    CASE_OP(REPEAT_NG)
+      mem  = p->repeat.id;  /* mem: OP_REPEAT ID */
+      addr = p->repeat.addr;
+
+      STACK_ENSURE(1);
+      repeat_stk[mem] = GET_STACK_INDEX(stk);
+      STACK_PUSH_REPEAT(mem, p + 1);
+
+      if (reg->repeat_range[mem].lower == 0) {
+        STACK_PUSH_ALT(p + 1, s, sprev);
+        p += addr;
+      }
+      else
+        INC_OP;
+      JUMP_OUT;
+
+    CASE_OP(REPEAT_INC)
+      mem  = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
+      si   = repeat_stk[mem];
       stkp = STACK_AT(si);
 
     repeat_inc:
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count >= reg->repeat_range[mem].upper) {
         /* end of repeat. Nothing to do. */
+        INC_OP;
       }
       else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
+        INC_OP;
         STACK_PUSH_ALT(p, s, sprev);
         p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */
       }
@@ -3681,20 +3857,16 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         p = stkp->u.repeat.pcode;
       }
       STACK_PUSH_REPEAT_INC(si);
-      SOP_OUT;
-      CHECK_INTERRUPT_IN_MATCH;
-      continue;
-      break;
+      CHECK_INTERRUPT_JUMP_OUT;
 
-    case OP_REPEAT_INC_SG:  SOP_IN(OP_REPEAT_INC_SG);
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+    CASE_OP(REPEAT_INC_SG)
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       STACK_GET_REPEAT(mem, stkp);
       si = GET_STACK_INDEX(stkp);
       goto repeat_inc;
-      break;
 
-    case OP_REPEAT_INC_NG:  SOP_IN(OP_REPEAT_INC_NG);
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+    CASE_OP(REPEAT_INC_NG)
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       si = repeat_stk[mem];
       stkp = STACK_AT(si);
 
@@ -3702,10 +3874,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
         if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-          UChar* pcode = stkp->u.repeat.pcode;
+          Operation* pcode = stkp->u.repeat.pcode;
 
           STACK_PUSH_REPEAT_INC(si);
           STACK_PUSH_ALT(pcode, s, sprev);
+          INC_OP;
         }
         else {
           p = stkp->u.repeat.pcode;
@@ -3714,71 +3887,60 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       }
       else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
         STACK_PUSH_REPEAT_INC(si);
+        INC_OP;
       }
-      SOP_OUT;
-      CHECK_INTERRUPT_IN_MATCH;
-      continue;
-      break;
+      CHECK_INTERRUPT_JUMP_OUT;
 
-    case OP_REPEAT_INC_NG_SG:  SOP_IN(OP_REPEAT_INC_NG_SG);
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+    CASE_OP(REPEAT_INC_NG_SG)
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       STACK_GET_REPEAT(mem, stkp);
       si = GET_STACK_INDEX(stkp);
       goto repeat_inc_ng;
-      break;
-
-    case OP_PREC_READ_START:  SOP_IN(OP_PREC_READ_START);
-      STACK_PUSH_POS(s, sprev);
-      SOP_OUT;
-      continue;
-      break;
 
-    case OP_PREC_READ_END:  SOP_IN(OP_PREC_READ_END);
-      {
-        STACK_EXEC_TO_VOID(stkp);
-        s     = stkp->u.state.pstr;
-        sprev = stkp->u.state.pstr_prev;
-      }
-      SOP_OUT;
-      continue;
-      break;
-
-    case OP_PREC_READ_NOT_START:  SOP_IN(OP_PREC_READ_NOT_START);
-      GET_RELADDR_INC(addr, p);
+    CASE_OP(PREC_READ_START)
+      STACK_PUSH_PREC_READ_START(s, sprev);
+      INC_OP;
+      JUMP_OUT;
+
+    CASE_OP(PREC_READ_END)
+      STACK_GET_PREC_READ_START(stkp);
+      s     = stkp->u.state.pstr;
+      sprev = stkp->u.state.pstr_prev;
+      STACK_PUSH(STK_PREC_READ_END,0,0,0);
+      INC_OP;
+      JUMP_OUT;
+
+    CASE_OP(PREC_READ_NOT_START)
+      addr = p->prec_read_not_start.addr;
       STACK_PUSH_ALT_PREC_READ_NOT(p + addr, s, sprev);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_PREC_READ_NOT_END:  SOP_IN(OP_PREC_READ_NOT_END);
+    CASE_OP(PREC_READ_NOT_END)
       STACK_POP_TIL_ALT_PREC_READ_NOT;
       goto fail;
-      break;
 
-    case OP_ATOMIC_START:  SOP_IN(OP_ATOMIC_START);
+    CASE_OP(ATOMIC_START)
       STACK_PUSH_TO_VOID_START;
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_ATOMIC_END:  SOP_IN(OP_ATOMIC_END);
+    CASE_OP(ATOMIC_END)
       STACK_EXEC_TO_VOID(stkp);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_LOOK_BEHIND:  SOP_IN(OP_LOOK_BEHIND);
-      GET_LENGTH_INC(tlen, p);
+    CASE_OP(LOOK_BEHIND)
+      tlen = p->look_behind.len;
       s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
       if (IS_NULL(s)) goto fail;
       sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_LOOK_BEHIND_NOT_START:  SOP_IN(OP_LOOK_BEHIND_NOT_START);
-      GET_RELADDR_INC(addr, p);
-      GET_LENGTH_INC(tlen, p);
+    CASE_OP(LOOK_BEHIND_NOT_START)
+      addr = p->look_behind_not_start.addr;
+      tlen = p->look_behind_not_start.len;
       q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
       if (IS_NULL(q)) {
         /* too short case -> success. ex. /(?<!XXX)a/.match("a")
@@ -3790,38 +3952,34 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         STACK_PUSH_ALT_LOOK_BEHIND_NOT(p + addr, s, sprev);
         s = q;
         sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
+        INC_OP;
       }
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 
-    case OP_LOOK_BEHIND_NOT_END:  SOP_IN(OP_LOOK_BEHIND_NOT_END);
+    CASE_OP(LOOK_BEHIND_NOT_END)
       STACK_POP_TIL_ALT_LOOK_BEHIND_NOT;
+      INC_OP;
       goto fail;
-      break;
 
 #ifdef USE_CALL
-    case OP_CALL:  SOP_IN(OP_CALL);
-      GET_ABSADDR_INC(addr, p);
-      STACK_PUSH_CALL_FRAME(p);
-      p = reg->p + addr;
-      SOP_OUT;
-      continue;
-      break;
+    CASE_OP(CALL)
+      addr = p->call.addr;
+      INC_OP; STACK_PUSH_CALL_FRAME(p);
+      p = reg->ops + addr;
+      JUMP_OUT;
 
-    case OP_RETURN:  SOP_IN(OP_RETURN);
+    CASE_OP(RETURN)
       STACK_RETURN(p);
       STACK_PUSH_RETURN;
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 #endif
 
-    case OP_PUSH_SAVE_VAL: SOP_IN(OP_PUSH_SAVE_VAL);
+    CASE_OP(PUSH_SAVE_VAL)
       {
         SaveType type;
-        GET_SAVE_TYPE_INC(type, p);
-        GET_MEMNUM_INC(mem, p); /* mem: save id */
+
+        type = p->push_save_val.type;
+        mem  = p->push_save_val.id; /* mem: save id */
         switch ((enum SaveType )type) {
         case SAVE_KEEP:
           STACK_PUSH_SAVE_VAL(mem, type, s);
@@ -3836,17 +3994,17 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           break;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
-    case OP_UPDATE_VAR: SOP_IN(OP_UPDATE_VAR);
+    CASE_OP(UPDATE_VAR)
       {
         UpdateVarType type;
         enum SaveType save_type;
 
-        GET_UPDATE_VAR_TYPE_INC(type, p);
-        GET_MEMNUM_INC(mem, p); /* mem: save id */
+        type = p->update_var.type;
+        mem  = p->update_var.id; /* mem: save id */
+
         switch ((enum UpdateVarType )type) {
         case UPDATE_VAR_KEEP_FROM_STACK_LAST:
           STACK_GET_SAVE_VAL_TYPE_LAST(SAVE_KEEP, keep);
@@ -3868,38 +4026,34 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           break;
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 
 #ifdef USE_CALLOUT
-    case OP_CALLOUT_CONTENTS: SOP_IN(OP_CALLOUT_CONTENTS);
+    CASE_OP(CALLOUT_CONTENTS)
       of = ONIG_CALLOUT_OF_CONTENTS;
+      mem = p->callout_contents.num;
       goto callout_common_entry;
+      BREAK_OUT;
 
-      SOP_OUT;
-      continue;
-      break;
-
-    case OP_CALLOUT_NAME: SOP_IN(OP_CALLOUT_NAME);
+    CASE_OP(CALLOUT_NAME)
       {
         int call_result;
         int name_id;
-        int num;
         int in;
         CalloutListEntry* e;
         OnigCalloutFunc func;
         OnigCalloutArgs args;
 
         of = ONIG_CALLOUT_OF_NAME;
-        GET_MEMNUM_INC(name_id, p);
+        name_id = p->callout_name.id;
+        mem     = p->callout_name.num;
 
       callout_common_entry:
-        GET_MEMNUM_INC(num, p);
-        e = onig_reg_callout_list_at(reg, num);
+        e = onig_reg_callout_list_at(reg, mem);
         in = e->in;
         if (of == ONIG_CALLOUT_OF_NAME) {
-          func = onig_get_callout_start_func(reg, num);
+          func = onig_get_callout_start_func(reg, mem);
         }
         else {
           name_id = ONIG_NON_NAME_ID;
@@ -3908,7 +4062,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 
         if (IS_NOT_NULL(func) && (in & ONIG_CALLOUT_IN_PROGRESS) != 0) {
           CALLOUT_BODY(func, ONIG_CALLOUT_IN_PROGRESS, name_id,
-                       num, msa->mp->callout_user_data, args, call_result);
+                       (int )mem, msa->mp->callout_user_data, args, call_result);
           switch (call_result) {
           case ONIG_CALLOUT_FAIL:
             goto fail;
@@ -3930,46 +4084,47 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           if ((in & ONIG_CALLOUT_IN_RETRACTION) != 0) {
             if (of == ONIG_CALLOUT_OF_NAME) {
               if (IS_NOT_NULL(func)) {
-                STACK_PUSH_CALLOUT_NAME(name_id, num, func);
+                STACK_PUSH_CALLOUT_NAME(name_id, mem, func);
               }
             }
             else {
               func = msa->mp->retraction_callout_of_contents;
               if (IS_NOT_NULL(func)) {
-                STACK_PUSH_CALLOUT_CONTENTS(num, func);
+                STACK_PUSH_CALLOUT_CONTENTS(mem, func);
               }
             }
           }
         }
       }
-      SOP_OUT;
-      continue;
-      break;
+      INC_OP;
+      JUMP_OUT;
 #endif
 
-    case OP_FINISH:
+    CASE_OP(FINISH)
       goto finish;
-      break;
 
+#ifdef ONIG_DEBUG_STATISTICS
     fail:
       SOP_OUT;
-      /* fall */
-    case OP_FAIL:  SOP_IN(OP_FAIL);
+      goto fail2;
+#endif
+    CASE_OP(FAIL)
+#ifdef ONIG_DEBUG_STATISTICS
+    fail2:
+#else
+    fail:
+#endif
       STACK_POP;
       p     = stk->u.state.pcode;
       s     = stk->u.state.pstr;
       sprev = stk->u.state.pstr_prev;
       CHECK_RETRY_LIMIT_IN_MATCH;
-      SOP_OUT;
-      continue;
-      break;
+      JUMP_OUT;
 
-    default:
+    DEFAULT_OP
       goto bytecode_error;
 
-    } /* end of switch */
-    sprev = sbegin;
-  } /* end of while(1) */
+  } BYTECODE_INTERPRETER_END;
 
  finish:
   STACK_SAVE;
@@ -3985,9 +4140,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   STACK_SAVE;
   return ONIGERR_UNDEFINED_BYTECODE;
 
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
  unexpected_bytecode_error:
   STACK_SAVE;
   return ONIGERR_UNEXPECTED_BYTECODE;
+#endif
 
 #ifdef USE_RETRY_LIMIT_IN_MATCH
  retry_limit_in_match_over:
@@ -4136,150 +4293,143 @@ slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,
   return (UChar* )NULL;
 }
 
+
 static UChar*
-bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
-                 const UChar* text, const UChar* text_end,
-                 const UChar* text_range)
+sunday_quick_search_step_forward(regex_t* reg,
+                                 const UChar* target, const UChar* target_end,
+                                 const UChar* text, const UChar* text_end,
+                                 const UChar* text_range)
 {
   const UChar *s, *se, *t, *p, *end;
   const UChar *tail;
   int skip, tlen1;
+  int map_offset;
+  OnigEncoding enc;
 
 #ifdef ONIG_DEBUG_SEARCH
-  fprintf(stderr, "bm_search_notrev: text: %p, text_end: %p, text_range: %p\n",
-          text, text_end, text_range);
+  fprintf(stderr,
+          "sunday_quick_search_step_forward: text: %p, text_end: %p, text_range: %p\n", text, text_end, text_range);
 #endif
 
+  enc = reg->enc;
+
   tail = target_end - 1;
   tlen1 = (int )(tail - target);
   end = text_range;
   if (end + tlen1 > text_end)
     end = text_end - tlen1;
 
+  map_offset = reg->map_offset;
   s = text;
 
-  if (IS_NULL(reg->int_map)) {
-    while (s < end) {
-      p = se = s + tlen1;
-      t = tail;
-      while (*p == *t) {
-        if (t == target) return (UChar* )s;
-        p--; t--;
-      }
-      skip = reg->map[*se];
-      t = s;
-      do {
-        s += enclen(reg->enc, s);
-      } while ((s - t) < skip && s < end);
-    }
-  }
-  else {
-    while (s < end) {
-      p = se = s + tlen1;
-      t = tail;
-      while (*p == *t) {
-        if (t == target) return (UChar* )s;
-        p--; t--;
-      }
-      skip = reg->int_map[*se];
-      t = s;
-      do {
-        s += enclen(reg->enc, s);
-      } while ((s - t) < skip && s < end);
+  while (s < end) {
+    p = se = s + tlen1;
+    t = tail;
+    while (*p == *t) {
+      if (t == target) return (UChar* )s;
+      p--; t--;
     }
+    if (se + map_offset >= text_end) break;
+    skip = reg->map[*(se + map_offset)];
+#if 0
+    t = s;
+    do {
+      s += enclen(enc, s);
+    } while ((s - t) < skip && s < end);
+#else
+    s += skip;
+    if (s < end)
+      s = onigenc_get_right_adjust_char_head(enc, text, s);
+#endif
   }
 
   return (UChar* )NULL;
 }
 
 static UChar*
-bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
-          const UChar* text, const UChar* text_end, const UChar* text_range)
+sunday_quick_search(regex_t* reg, const UChar* target, const UChar* target_end,
+                    const UChar* text, const UChar* text_end,
+                    const UChar* text_range)
 {
   const UChar *s, *t, *p, *end;
   const UChar *tail;
+  int map_offset;
 
-  end = text_range + (target_end - target) - 1;
+  end = text_range + (target_end - target);
   if (end > text_end)
     end = text_end;
 
+  map_offset = reg->map_offset;
   tail = target_end - 1;
-  s = text + (target_end - target) - 1;
-  if (IS_NULL(reg->int_map)) {
-    while (s < end) {
-      p = s;
-      t = tail;
-      while (*p == *t) {
-        if (t == target) return (UChar* )p;
-        p--; t--;
-      }
-      s += reg->map[*s];
-    }
-  }
-  else { /* see int_map[] */
-    while (s < end) {
-      p = s;
-      t = tail;
-      while (*p == *t) {
-        if (t == target) return (UChar* )p;
-        p--; t--;
-      }
-      s += reg->int_map[*s];
+  s = text + (tail - target);
+
+  while (s < end) {
+    p = s;
+    t = tail;
+    while (*p == *t) {
+      if (t == target) return (UChar* )p;
+      p--; t--;
     }
+    if (s + map_offset >= text_end) break;
+    s += reg->map[*(s + map_offset)];
   }
+
   return (UChar* )NULL;
 }
 
-#ifdef USE_INT_MAP_BACKWARD
-static int
-set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED, int** skip)
+static UChar*
+sunday_quick_search_case_fold(regex_t* reg,
+                              const UChar* target, const UChar* target_end,
+                              const UChar* text,   const UChar* text_end,
+                              const UChar* text_range)
 {
-  int i, len;
-
-  if (IS_NULL(*skip)) {
-    *skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
-    if (IS_NULL(*skip)) return ONIGERR_MEMORY;
-  }
-
-  len = end - s;
-  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
-    (*skip)[i] = len;
+  const UChar *s, *se, *end;
+  const UChar *tail;
+  int skip, tlen1;
+  int map_offset;
+  int case_fold_flag;
+  OnigEncoding enc;
 
-  for (i = len - 1; i > 0; i--)
-    (*skip)[s[i]] = i;
+#ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr,
+          "sunday_quick_search_case_fold: text: %p, text_end: %p, text_range: %p\n", text, text_end, text_range);
+#endif
 
-  return 0;
-}
+  enc = reg->enc;
+  case_fold_flag = reg->case_fold_flag;
 
-static UChar*
-bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,
-                   const UChar* text, const UChar* adjust_text,
-                   const UChar* text_end, const UChar* text_start)
-{
-  const UChar *s, *t, *p;
+  tail = target_end - 1;
+  tlen1 = (int )(tail - target);
+  end = text_range;
+  if (end + tlen1 > text_end)
+    end = text_end - tlen1;
 
-  s = text_end - (target_end - target);
-  if (text_start < s)
-    s = text_start;
-  else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+  map_offset = reg->map_offset;
+  s = text;
 
-  while (s >= text) {
-    p = s;
-    t = target;
-    while (t < target_end && *p == *t) {
-      p++; t++;
-    }
-    if (t == target_end)
+  while (s < end) {
+    if (str_lower_case_match(enc, case_fold_flag, target, target_end,
+                             s, text_end))
       return (UChar* )s;
 
-    s -= reg->int_map_backward[*s];
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+    se = s + tlen1;
+    if (se + map_offset >= text_end) break;
+    skip = reg->map[*(se + map_offset)];
+#if 0
+    p = s;
+    do {
+      s += enclen(enc, s);
+    } while ((s - p) < skip && s < end);
+#else
+    /* This is faster than prev code for long text.  ex: /(?i)Twain/  */
+    s += skip;
+    if (s < end)
+      s = onigenc_get_right_adjust_char_head(enc, text, s);
+#endif
   }
 
   return (UChar* )NULL;
 }
-#endif
 
 static UChar*
 map_search(OnigEncoding enc, UChar map[],
@@ -4391,20 +4541,26 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
 
  retry:
   switch (reg->optimize) {
-  case OPTIMIZE_EXACT:
+  case OPTIMIZE_STR:
     p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range);
     break;
-  case OPTIMIZE_EXACT_IC:
+  case OPTIMIZE_STR_CASE_FOLD:
     p = slow_search_ic(reg->enc, reg->case_fold_flag,
                        reg->exact, reg->exact_end, p, end, range);
     break;
 
-  case OPTIMIZE_EXACT_BM:
-    p = bm_search(reg, reg->exact, reg->exact_end, p, end, range);
+  case OPTIMIZE_STR_CASE_FOLD_FAST:
+    p = sunday_quick_search_case_fold(reg, reg->exact, reg->exact_end, p, end,
+                                      range);
     break;
 
-  case OPTIMIZE_EXACT_BM_NO_REV:
-    p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range);
+  case OPTIMIZE_STR_FAST:
+    p = sunday_quick_search(reg, reg->exact, reg->exact_end, p, end, range);
+    break;
+
+  case OPTIMIZE_STR_FAST_STEP_FORWARD:
+    p = sunday_quick_search_step_forward(reg, reg->exact, reg->exact_end,
+                                         p, end, range);
     break;
 
   case OPTIMIZE_MAP:
@@ -4424,7 +4580,7 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
       UChar* prev;
 
       switch (reg->sub_anchor) {
-      case ANCHOR_BEGIN_LINE:
+      case ANCR_BEGIN_LINE:
         if (!ON_STR_BEGIN(p)) {
           prev = onigenc_get_prev_char_head(reg->enc,
                                             (pprev ? pprev : str), p);
@@ -4433,7 +4589,7 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
         }
         break;
 
-      case ANCHOR_END_LINE:
+      case ANCR_END_LINE:
         if (ON_STR_END(p)) {
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
           prev = (UChar* )onigenc_get_prev_char_head(reg->enc,
@@ -4501,50 +4657,36 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
 }
 
 
-#define BM_BACKWARD_SEARCH_LENGTH_THRESHOLD   100
-
 static int
 backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
                       UChar* s, const UChar* range, UChar* adjrange,
                       UChar** low, UChar** high)
 {
   UChar *p;
+
   if (range == 0) goto fail;
+
   range += reg->dmin;
   p = s;
 
  retry:
   switch (reg->optimize) {
-  case OPTIMIZE_EXACT:
+  case OPTIMIZE_STR:
   exact_method:
     p = slow_search_backward(reg->enc, reg->exact, reg->exact_end,
                              range, adjrange, end, p);
     break;
 
-  case OPTIMIZE_EXACT_IC:
+  case OPTIMIZE_STR_CASE_FOLD:
+  case OPTIMIZE_STR_CASE_FOLD_FAST:
     p = slow_search_backward_ic(reg->enc, reg->case_fold_flag,
                                 reg->exact, reg->exact_end,
                                 range, adjrange, end, p);
     break;
 
-  case OPTIMIZE_EXACT_BM:
-  case OPTIMIZE_EXACT_BM_NO_REV:
-#ifdef USE_INT_MAP_BACKWARD
-    if (IS_NULL(reg->int_map_backward)) {
-      int r;
-
-      if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)
-        goto exact_method;
-
-      r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc,
-                               &(reg->int_map_backward));
-      if (r != 0) return r;
-    }
-    p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,
-                           end, p);
-#else
+  case OPTIMIZE_STR_FAST:
+  case OPTIMIZE_STR_FAST_STEP_FORWARD:
     goto exact_method;
-#endif
     break;
 
   case OPTIMIZE_MAP:
@@ -4557,7 +4699,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
       UChar* prev;
 
       switch (reg->sub_anchor) {
-      case ANCHOR_BEGIN_LINE:
+      case ANCR_BEGIN_LINE:
         if (!ON_STR_BEGIN(p)) {
           prev = onigenc_get_prev_char_head(reg->enc, str, p);
           if (IS_NOT_NULL(prev) && !ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {
@@ -4567,7 +4709,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
         }
         break;
 
-      case ANCHOR_END_LINE:
+      case ANCR_END_LINE:
         if (ON_STR_END(p)) {
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
           prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);
@@ -4693,7 +4835,7 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
   if (reg->anchor != 0 && str < end) {
     UChar *min_semi_end, *max_semi_end;
 
-    if (reg->anchor & ANCHOR_BEGIN_POSITION) {
+    if (reg->anchor & ANCR_BEGIN_POSITION) {
       /* search start-position only */
     begin_position:
       if (range > start)
@@ -4701,7 +4843,7 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
       else
         range = start;
     }
-    else if (reg->anchor & ANCHOR_BEGIN_BUF) {
+    else if (reg->anchor & ANCR_BEGIN_BUF) {
       /* search str-position only */
       if (range > start) {
         if (start != str) goto mismatch_no_msa;
@@ -4716,7 +4858,7 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
           goto mismatch_no_msa;
       }
     }
-    else if (reg->anchor & ANCHOR_END_BUF) {
+    else if (reg->anchor & ANCR_END_BUF) {
       min_semi_end = max_semi_end = (UChar* )end;
 
     end_buf:
@@ -4748,8 +4890,7 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
         if (range > start) goto mismatch_no_msa;
       }
     }
-    else if (reg->anchor & ANCHOR_SEMI_END_BUF) {
-
+    else if (reg->anchor & ANCR_SEMI_END_BUF) {
       UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, 1);
 
       max_semi_end = (UChar* )end;
@@ -4776,7 +4917,7 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
         goto end_buf;
       }
     }
-    else if ((reg->anchor & ANCHOR_ANYCHAR_INF_ML)) {
+    else if ((reg->anchor & ANCR_ANYCHAR_INF_ML)) {
       goto begin_position;
     }
   }
@@ -4849,13 +4990,13 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
         if (! forward_search_range(reg, str, end, s, sch_range,
                                    &low, &high, (UChar** )NULL)) goto mismatch;
 
-        if ((reg->anchor & ANCHOR_ANYCHAR_INF) != 0) {
+        if ((reg->anchor & ANCR_ANYCHAR_INF) != 0) {
           do {
             MATCH_AND_RETURN_CHECK(orig_range);
             prev = s;
             s += enclen(reg->enc, s);
 
-            if ((reg->anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) == 0) {
+            if ((reg->anchor & (ANCR_LOOK_BEHIND | ANCR_PREC_READ_NOT)) == 0) {
               while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) {
                 prev = s;
                 s += enclen(reg->enc, s);
@@ -4878,6 +5019,8 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
     }
   }
   else {  /* backward search */
+    if (range < str) goto mismatch;
+
     if (orig_start < end)
       orig_start += enclen(reg->enc, orig_start); /* is upper range */
 
@@ -5092,6 +5235,16 @@ onig_copy_encoding(OnigEncoding to, OnigEncoding from)
   *to = *from;
 }
 
+#ifdef USE_DIRECT_THREADED_CODE
+extern int
+onig_init_for_match_at(regex_t* reg)
+{
+  return match_at(reg, (const UChar* )NULL, (const UChar* )NULL,
+                  (const UChar* )NULL, (const UChar* )NULL, (UChar* )NULL,
+                  (MatchArg* )NULL);
+}
+#endif
+
 
 /* for callout functions */
 
@@ -5362,6 +5515,9 @@ onig_builtin_error(OnigCalloutArgs* args, void* user_data ARG_UNUSED)
   if (n >= 0) {
     n = ONIGERR_INVALID_CALLOUT_BODY;
   }
+  else if (onig_is_error_code_needs_param(n)) {
+    n = ONIGERR_INVALID_CALLOUT_BODY;
+  }
 
   return n;
 }
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c
index fb1537eccb..25bcbc2a2f 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c
@@ -2,7 +2,7 @@
   reggnu.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,7 +39,7 @@ re_free_registers(OnigRegion* r)
 
 extern int
 re_adjust_startpos(regex_t* reg, const char* string, int size,
-		   int startpos, int range)
+                   int startpos, int range)
 {
   if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {
     UChar *p;
@@ -59,20 +59,20 @@ re_adjust_startpos(regex_t* reg, const char* string, int size,
 
 extern int
 re_match(regex_t* reg, const char* str, int size, int pos,
-	 struct re_registers* regs)
+         struct re_registers* regs)
 {
   return onig_match(reg, (UChar* )str, (UChar* )(str + size),
-		    (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
+                    (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
 }
 
 extern int
 re_search(regex_t* bufp, const char* string, int size, int startpos, int range,
-	  struct re_registers* regs)
+          struct re_registers* regs)
 {
   return onig_search(bufp, (UChar* )string, (UChar* )(string + size),
-		     (UChar* )(string + startpos),
-		     (UChar* )(string + startpos + range),
-		     regs, ONIG_OPTION_NONE);
+                     (UChar* )(string + startpos),
+                     (UChar* )(string + startpos + range),
+                     regs, ONIG_OPTION_NONE);
 }
 
 extern int
@@ -103,9 +103,9 @@ re_alloc_pattern(regex_t** reg)
   if (IS_NULL(*reg)) return ONIGERR_MEMORY;
 
   return onig_reg_init(*reg, ONIG_OPTION_DEFAULT,
-		       ONIGENC_CASE_FOLD_DEFAULT,
-		       OnigEncDefaultCharEncoding,
-		       OnigDefaultSyntax);
+                       ONIGENC_CASE_FOLD_DEFAULT,
+                       OnigEncDefaultCharEncoding,
+                       OnigDefaultSyntax);
 }
 
 extern void
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c
index 0a2d6f89e5..4605d40bd1 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c
@@ -2,7 +2,7 @@
   regparse.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -54,13 +54,13 @@ OnigSyntaxType OnigSyntaxOniguruma = {
      ONIG_SYN_OP_ESC_C_CONTROL )
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
-      ONIG_SYN_OP2_OPTION_RUBY |
+      ONIG_SYN_OP2_OPTION_ONIGURUMA |
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
       ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
@@ -71,12 +71,13 @@ OnigSyntaxType OnigSyntaxOniguruma = {
       ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |
       ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |
       ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )
-  , ( SYN_GNU_REGEX_BV | 
+  , ( SYN_GNU_REGEX_BV |
       ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
       ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |
       ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
       ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |
+      ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC |
       ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
       ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
   , ONIG_OPTION_NONE
@@ -103,7 +104,7 @@ OnigSyntaxType OnigSyntaxRuby = {
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
       ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
@@ -113,7 +114,7 @@ OnigSyntaxType OnigSyntaxRuby = {
       ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |
       ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |
       ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )
-  , ( SYN_GNU_REGEX_BV | 
+  , ( SYN_GNU_REGEX_BV |
       ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
       ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |
       ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
@@ -199,14 +200,20 @@ onig_set_parse_depth_limit(unsigned int depth)
 }
 
 static int
-positive_int_multiply(int x, int y)
+bbuf_init(BBuf* buf, int size)
 {
-  if (x == 0 || y == 0) return 0;
+  if (size <= 0) {
+    size   = 0;
+    buf->p = NULL;
+  }
+  else {
+    buf->p = (UChar* )xmalloc(size);
+    if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
+  }
 
-  if (x < INT_MAX / y)
-    return x * y;
-  else
-    return -1;
+  buf->alloc = size;
+  buf->used  = 0;
+  return 0;
 }
 
 static void
@@ -523,6 +530,8 @@ onig_st_insert_strend(hash_table_type* table, const UChar* str_key,
 }
 
 
+#ifdef USE_CALLOUT
+
 typedef struct {
   OnigEncoding enc;
   int    type; /* callout type: single or not */
@@ -621,6 +630,7 @@ st_insert_callout_name_table(hash_table_type* table,
   }
   return result;
 }
+#endif
 
 #endif /* USE_ST_LIBRARY */
 
@@ -1084,6 +1094,35 @@ onig_name_to_group_numbers(regex_t* reg, const UChar* name,
   return e->back_num;
 }
 
+static int
+name_to_group_numbers(ScanEnv* env, const UChar* name, const UChar* name_end,
+                      int** nums)
+{
+  regex_t* reg;
+  NameEntry* e;
+
+  reg = env->reg;
+  e = name_find(reg, name, name_end);
+
+  if (IS_NULL(e)) {
+    onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,
+                                   (UChar* )name, (UChar* )name_end);
+    return ONIGERR_UNDEFINED_NAME_REFERENCE;
+  }
+
+  switch (e->back_num) {
+  case 0:
+    break;
+  case 1:
+    *nums = &(e->back_ref1);
+    break;
+  default:
+    *nums = e->back_refs;
+    break;
+  }
+  return e->back_num;
+}
+
 extern int
 onig_name_to_backref_number(regex_t* reg, const UChar* name,
                             const UChar* name_end, OnigRegion *region)
@@ -1574,8 +1613,13 @@ onig_set_callout_of_name(OnigEncoding enc, OnigCalloutType callout_type,
   for (i = arg_num - opt_arg_num, j = 0; i < arg_num; i++, j++) {
     if(IS_NULL(opt_defaults))return ONIGERR_INVALID_ARGUMENT;
     if (fe->arg_types[i] == ONIG_TYPE_STRING) {
-      OnigValue* val = opt_defaults + j;
-      UChar* ds = onigenc_strdup(enc, val->s.start, val->s.end);
+      OnigValue* val;
+      UChar* ds;
+
+      if (IS_NULL(opt_defaults)) return ONIGERR_INVALID_ARGUMENT;
+
+      val = opt_defaults + j;
+      ds = onigenc_strdup(enc, val->s.start, val->s.end);
       CHECK_NULL_RETURN_MEMERR(ds);
 
       fe->opt_defaults[i].s.start = ds;
@@ -1742,7 +1786,7 @@ setup_ext_callout_list_values(regex_t* reg)
   int i, j;
   RegexExt* ext;
 
-  ext = REG_EXTP(reg);
+  ext = reg->extp;
   if (IS_NOT_NULL(ext->tag_table)) {
     onig_st_foreach((CalloutTagTable *)ext->tag_table, i_callout_callout_list_set,
                     (st_data_t )ext);
@@ -1772,13 +1816,13 @@ setup_ext_callout_list_values(regex_t* reg)
 extern int
 onig_callout_tag_is_exist_at_callout_num(regex_t* reg, int callout_num)
 {
-  RegexExt* ext = REG_EXTP(reg);
+  RegexExt* ext = reg->extp;
 
   if (IS_NULL(ext) || IS_NULL(ext->callout_list)) return 0;
   if (callout_num > ext->callout_num) return 0;
 
   return (ext->callout_list[callout_num].flag &
-          CALLOUT_TAG_LIST_FLAG_TAG_EXIST) != 0  ? 1 : 0;
+          CALLOUT_TAG_LIST_FLAG_TAG_EXIST) != 0;
 }
 
 static int
@@ -1820,7 +1864,7 @@ onig_get_callout_num_by_tag(regex_t* reg,
   RegexExt* ext;
   CalloutTagVal e;
 
-  ext = REG_EXTP(reg);
+  ext = reg->extp;
   if (IS_NULL(ext) || IS_NULL(ext->tag_table))
     return ONIGERR_INVALID_CALLOUT_TAG_NAME;
 
@@ -1856,8 +1900,8 @@ callout_tag_table_new(CalloutTagTable** rt)
 }
 
 static int
-callout_tag_entry_raw(CalloutTagTable* t, UChar* name, UChar* name_end,
-                      CalloutTagVal entry_val)
+callout_tag_entry_raw(ScanEnv* env, CalloutTagTable* t, UChar* name,
+                      UChar* name_end, CalloutTagVal entry_val)
 {
   int r;
   CalloutTagVal val;
@@ -1866,8 +1910,11 @@ callout_tag_entry_raw(CalloutTagTable* t, UChar* name, UChar* name_end,
     return ONIGERR_INVALID_CALLOUT_TAG_NAME;
 
   val = callout_tag_find(t, name, name_end);
-  if (val >= 0)
+  if (val >= 0) {
+    onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,
+                                   name, name_end);
     return ONIGERR_MULTIPLEX_DEFINED_NAME;
+  }
 
   r = onig_st_insert_strend(t, name, name_end, (HashDataType )entry_val);
   if (r < 0) return r;
@@ -1896,7 +1943,7 @@ ext_ensure_tag_table(regex_t* reg)
 }
 
 static int
-callout_tag_entry(regex_t* reg, UChar* name, UChar* name_end,
+callout_tag_entry(ScanEnv* env, regex_t* reg, UChar* name, UChar* name_end,
                   CalloutTagVal entry_val)
 {
   int r;
@@ -1908,7 +1955,7 @@ callout_tag_entry(regex_t* reg, UChar* name, UChar* name_end,
 
   ext = onig_get_regex_ext(reg);
   CHECK_NULL_RETURN_MEMERR(ext);
-  r = callout_tag_entry_raw(ext->tag_table, name, name_end, entry_val);
+  r = callout_tag_entry_raw(env, ext->tag_table, name, name_end, entry_val);
 
   e = onig_reg_callout_list_at(reg, (int )entry_val);
   CHECK_NULL_RETURN_MEMERR(e);
@@ -2016,7 +2063,7 @@ onig_node_free(Node* node)
 
   switch (NODE_TYPE(node)) {
   case NODE_STRING:
-    if (STR_(node)->capa != 0 &&
+    if (STR_(node)->capacity != 0 &&
         IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {
       xfree(STR_(node)->s);
     }
@@ -2048,13 +2095,13 @@ onig_node_free(Node* node)
       xfree(BACKREF_(node)->back_dynamic);
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     if (NODE_BODY(node))
       onig_node_free(NODE_BODY(node));
 
     {
-      EnclosureNode* en = ENCLOSURE_(node);
-      if (en->type == ENCLOSURE_IF_ELSE) {
+      BagNode* en = BAG_(node);
+      if (en->type == BAG_IF_ELSE) {
         onig_node_free(en->te.Then);
         onig_node_free(en->te.Else);
       }
@@ -2378,10 +2425,10 @@ node_new_quantifier(int lower, int upper, int by_number)
   CHECK_NULL_RETURN(node);
 
   NODE_SET_TYPE(node, NODE_QUANT);
-  QUANT_(node)->lower  = lower;
-  QUANT_(node)->upper  = upper;
-  QUANT_(node)->greedy = 1;
-  QUANT_(node)->body_empty_info = QUANT_BODY_IS_NOT_EMPTY;
+  QUANT_(node)->lower           = lower;
+  QUANT_(node)->upper           = upper;
+  QUANT_(node)->greedy          = 1;
+  QUANT_(node)->emptiness       = BODY_IS_NOT_EMPTY;
   QUANT_(node)->head_exact      = NULL_NODE;
   QUANT_(node)->next_head_exact = NULL_NODE;
   QUANT_(node)->is_refered      = 0;
@@ -2392,62 +2439,62 @@ node_new_quantifier(int lower, int upper, int by_number)
 }
 
 static Node*
-node_new_enclosure(enum EnclosureType type)
+node_new_bag(enum BagType type)
 {
   Node* node = node_new();
   CHECK_NULL_RETURN(node);
 
-  NODE_SET_TYPE(node, NODE_ENCLOSURE);
-  ENCLOSURE_(node)->type = type;
+  NODE_SET_TYPE(node, NODE_BAG);
+  BAG_(node)->type = type;
 
   switch (type) {
-  case ENCLOSURE_MEMORY:
-    ENCLOSURE_(node)->m.regnum       =  0;
-    ENCLOSURE_(node)->m.called_addr  = -1;
-    ENCLOSURE_(node)->m.entry_count  =  1;
-    ENCLOSURE_(node)->m.called_state =  0;
+  case BAG_MEMORY:
+    BAG_(node)->m.regnum       =  0;
+    BAG_(node)->m.called_addr  = -1;
+    BAG_(node)->m.entry_count  =  1;
+    BAG_(node)->m.called_state =  0;
     break;
 
-  case ENCLOSURE_OPTION:
-    ENCLOSURE_(node)->o.options =  0;
+  case BAG_OPTION:
+    BAG_(node)->o.options =  0;
     break;
 
-  case ENCLOSURE_STOP_BACKTRACK:
+  case BAG_STOP_BACKTRACK:
     break;
 
-  case ENCLOSURE_IF_ELSE:
-    ENCLOSURE_(node)->te.Then = 0;
-    ENCLOSURE_(node)->te.Else = 0;
+  case BAG_IF_ELSE:
+    BAG_(node)->te.Then = 0;
+    BAG_(node)->te.Else = 0;
     break;
   }
 
-  ENCLOSURE_(node)->opt_count = 0;
+  BAG_(node)->opt_count = 0;
   return node;
 }
 
 extern Node*
-onig_node_new_enclosure(int type)
+onig_node_new_bag(enum BagType type)
 {
-  return node_new_enclosure(type);
+  return node_new_bag(type);
 }
 
 static Node*
-node_new_enclosure_if_else(Node* cond, Node* Then, Node* Else)
+node_new_bag_if_else(Node* cond, Node* Then, Node* Else)
 {
   Node* n;
-  n = node_new_enclosure(ENCLOSURE_IF_ELSE);
+  n = node_new_bag(BAG_IF_ELSE);
   CHECK_NULL_RETURN(n);
 
   NODE_BODY(n) = cond;
-  ENCLOSURE_(n)->te.Then = Then;
-  ENCLOSURE_(n)->te.Else = Else;
+  BAG_(n)->te.Then = Then;
+  BAG_(n)->te.Else = Else;
   return n;
 }
 
 static Node*
 node_new_memory(int is_named)
 {
-  Node* node = node_new_enclosure(ENCLOSURE_MEMORY);
+  Node* node = node_new_bag(BAG_MEMORY);
   CHECK_NULL_RETURN(node);
   if (is_named != 0)
     NODE_STATUS_ADD(node, NAMED_GROUP);
@@ -2458,12 +2505,37 @@ node_new_memory(int is_named)
 static Node*
 node_new_option(OnigOptionType option)
 {
-  Node* node = node_new_enclosure(ENCLOSURE_OPTION);
+  Node* node = node_new_bag(BAG_OPTION);
+  CHECK_NULL_RETURN(node);
+  BAG_(node)->o.options = option;
+  return node;
+}
+
+static Node*
+node_new_group(Node* content)
+{
+  Node* node;
+
+  node = node_new();
   CHECK_NULL_RETURN(node);
-  ENCLOSURE_(node)->o.options = option;
+  NODE_SET_TYPE(node, NODE_LIST);
+  NODE_CAR(node) = content;
+  NODE_CDR(node) = NULL_NODE;
+
   return node;
 }
 
+static Node*
+node_drop_group(Node* group)
+{
+  Node* content;
+
+  content = NODE_CAR(group);
+  NODE_CAR(group) = NULL_NODE;
+  onig_node_free(group);
+  return content;
+}
+
 static int
 node_new_fail(Node** node, ScanEnv* env)
 {
@@ -2554,7 +2626,7 @@ onig_free_reg_callout_list(int n, CalloutListEntry* list)
 extern CalloutListEntry*
 onig_reg_callout_list_at(regex_t* reg, int num)
 {
-  RegexExt* ext = REG_EXTP(reg);
+  RegexExt* ext = reg->extp;
   CHECK_NULL_RETURN(ext);
 
   if (num <= 0 || num > ext->callout_num)
@@ -2634,7 +2706,7 @@ node_new_callout(Node** node, OnigCalloutOf callout_of, int num, int id,
 #endif
 
 static int
-make_extended_grapheme_cluster(Node** node, ScanEnv* env)
+make_text_segment(Node** node, ScanEnv* env)
 {
   int r;
   int i;
@@ -2646,7 +2718,7 @@ make_extended_grapheme_cluster(Node** node, ScanEnv* env)
   ns[1] = NULL_NODE;
 
   r = ONIGERR_MEMORY;
-  ns[0] = onig_node_new_anchor(ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, 0);
+  ns[0] = onig_node_new_anchor(ANCR_NO_TEXT_SEGMENT_BOUNDARY, 0);
   if (IS_NULL(ns[0])) goto err;
 
   r = node_new_true_anychar(&ns[1], env);
@@ -2657,7 +2729,7 @@ make_extended_grapheme_cluster(Node** node, ScanEnv* env)
   ns[0] = x;
   ns[1] = NULL_NODE;
 
-  x = node_new_quantifier(0, REPEAT_INFINITE, 1);
+  x = node_new_quantifier(0, INFINITE_REPEAT, 1);
   if (IS_NULL(x)) goto err;
 
   NODE_BODY(x) = ns[0];
@@ -2673,7 +2745,7 @@ make_extended_grapheme_cluster(Node** node, ScanEnv* env)
   ns[0] = x;
   ns[1] = NULL_NODE;
 
-  x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+  x = node_new_bag(BAG_STOP_BACKTRACK);
   if (IS_NULL(x)) goto err;
 
   NODE_BODY(x) = ns[0];
@@ -2733,7 +2805,7 @@ make_absent_engine(Node** node, int pre_save_right_id, Node* absent,
   ns[0] = x;
 
   if (possessive != 0) {
-    x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+    x = node_new_bag(BAG_STOP_BACKTRACK);
     if (IS_NULL(x)) goto err0;
 
     NODE_BODY(x) = ns[0];
@@ -2885,11 +2957,11 @@ is_simple_one_char_repeat(Node* node, Node** rquant, Node** rbody,
     quant = node;
   }
   else {
-    if (NODE_TYPE(node) == NODE_ENCLOSURE) {
-      EnclosureNode* en = ENCLOSURE_(node);
-      if (en->type == ENCLOSURE_STOP_BACKTRACK) {
+    if (NODE_TYPE(node) == NODE_BAG) {
+      BagNode* en = BAG_(node);
+      if (en->type == BAG_STOP_BACKTRACK) {
         *is_possessive = 1;
-        quant = NODE_ENCLOSURE_BODY(en);
+        quant = NODE_BAG_BODY(en);
         if (NODE_TYPE(quant) != NODE_QUANT)
           return 0;
       }
@@ -3007,7 +3079,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
 
     if (expr == NULL_NODE) {
       /* default expr \O* */
-      quant = node_new_quantifier(0, REPEAT_INFINITE, 0);
+      quant = node_new_quantifier(0, INFINITE_REPEAT, 0);
       if (IS_NULL(quant)) goto err0;
 
       r = node_new_true_anychar(&body, env);
@@ -3049,7 +3121,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
   if (r != 0) goto err;
 
   possessive = 1;
-  r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, REPEAT_INFINITE,
+  r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, INFINITE_REPEAT,
                          possessive, is_range_cutter, env);
   if (r != 0) goto err;
 
@@ -3066,7 +3138,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
   else {
     r = make_absent_tail(&ns[5], &ns[6], id1, env);
     if (r != 0) goto err;
-  
+
     x = make_list(7, ns);
     if (IS_NULL(x)) goto err0;
   }
@@ -3078,7 +3150,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
   r = ONIGERR_MEMORY;
  err:
   for (i = 0; i < 7; i++) onig_node_free(ns[i]);
-  return r;  
+  return r;
 }
 
 extern int
@@ -3089,11 +3161,11 @@ onig_node_str_cat(Node* node, const UChar* s, const UChar* end)
   if (addlen > 0) {
     int len  = (int )(STR_(node)->end - STR_(node)->s);
 
-    if (STR_(node)->capa > 0 || (len + addlen > NODE_STRING_BUF_SIZE - 1)) {
+    if (STR_(node)->capacity > 0 || (len + addlen > NODE_STRING_BUF_SIZE - 1)) {
       UChar* p;
       int capa = len + addlen + NODE_STRING_MARGIN;
 
-      if (capa <= STR_(node)->capa) {
+      if (capa <= STR_(node)->capacity) {
         onig_strcpy(STR_(node)->s + len, s, end);
       }
       else {
@@ -3101,11 +3173,11 @@ onig_node_str_cat(Node* node, const UChar* s, const UChar* end)
           p = strcat_capa_from_static(STR_(node)->s, STR_(node)->end,
                                       s, end, capa);
         else
-          p = strcat_capa(STR_(node)->s, STR_(node)->end, s, end, capa, STR_(node)->capa);
+          p = strcat_capa(STR_(node)->s, STR_(node)->end, s, end, capa, STR_(node)->capacity);
 
         CHECK_NULL_RETURN_MEMERR(p);
-        STR_(node)->s    = p;
-        STR_(node)->capa = capa;
+        STR_(node)->s        = p;
+        STR_(node)->capacity = capa;
       }
     }
     else {
@@ -3137,24 +3209,24 @@ extern void
 onig_node_conv_to_str_node(Node* node, int flag)
 {
   NODE_SET_TYPE(node, NODE_STRING);
-  STR_(node)->flag = flag;
-  STR_(node)->capa = 0;
-  STR_(node)->s    = STR_(node)->buf;
-  STR_(node)->end  = STR_(node)->buf;
+  STR_(node)->flag     = flag;
+  STR_(node)->capacity = 0;
+  STR_(node)->s        = STR_(node)->buf;
+  STR_(node)->end      = STR_(node)->buf;
 }
 
 extern void
 onig_node_str_clear(Node* node)
 {
-  if (STR_(node)->capa != 0 &&
+  if (STR_(node)->capacity != 0 &&
       IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {
     xfree(STR_(node)->s);
   }
 
-  STR_(node)->capa = 0;
-  STR_(node)->flag = 0;
-  STR_(node)->s    = STR_(node)->buf;
-  STR_(node)->end  = STR_(node)->buf;
+  STR_(node)->capacity = 0;
+  STR_(node)->flag     = 0;
+  STR_(node)->s        = STR_(node)->buf;
+  STR_(node)->end      = STR_(node)->buf;
 }
 
 static Node*
@@ -3164,10 +3236,10 @@ node_new_str(const UChar* s, const UChar* end)
   CHECK_NULL_RETURN(node);
 
   NODE_SET_TYPE(node, NODE_STRING);
-  STR_(node)->capa = 0;
-  STR_(node)->flag = 0;
-  STR_(node)->s    = STR_(node)->buf;
-  STR_(node)->end  = STR_(node)->buf;
+  STR_(node)->capacity = 0;
+  STR_(node)->flag     = 0;
+  STR_(node)->s        = STR_(node)->buf;
+  STR_(node)->end      = STR_(node)->buf;
   if (onig_node_str_cat(node, s, end)) {
     onig_node_free(node);
     return NULL;
@@ -3199,10 +3271,18 @@ node_new_empty(void)
 static Node*
 node_new_str_raw_char(UChar c)
 {
+  int i;
   UChar p[1];
+  Node* node;
 
   p[0] = c;
-  return node_new_str_raw(p, p + 1);
+  node = node_new_str_raw(p, p + 1);
+
+  /* clear buf tail */
+  for (i = 1; i < NODE_STRING_BUF_SIZE; i++)
+    STR_(node)->buf[i] = '\0';
+
+  return node;
 }
 
 static Node*
@@ -3238,24 +3318,6 @@ str_node_can_be_split(Node* node, OnigEncoding enc)
   return 0;
 }
 
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR
-static int
-node_str_head_pad(StrNode* sn, int num, UChar val)
-{
-  UChar buf[NODE_STRING_BUF_SIZE];
-  int i, len;
-
-  len = sn->end - sn->s;
-  onig_strcpy(buf, sn->s, sn->end);
-  onig_strcpy(&(sn->s[num]), buf, buf + len);
-  sn->end += num;
-
-  for (i = 0; i < num; i++) {
-    sn->s[i] = val;
-  }
-}
-#endif
-
 extern int
 onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)
 {
@@ -3809,7 +3871,7 @@ is_invalid_quantifier_target(Node* node)
     return 1;
     break;
 
-  case NODE_ENCLOSURE:
+  case NODE_BAG:
     /* allow enclosed elements */
     /* return is_invalid_quantifier_target(NODE_BODY(node)); */
     break;
@@ -3840,19 +3902,19 @@ quantifier_type_num(QuantNode* q)
   if (q->greedy) {
     if (q->lower == 0) {
       if (q->upper == 1) return 0;
-      else if (IS_REPEAT_INFINITE(q->upper)) return 1;
+      else if (IS_INFINITE_REPEAT(q->upper)) return 1;
     }
     else if (q->lower == 1) {
-      if (IS_REPEAT_INFINITE(q->upper)) return 2;
+      if (IS_INFINITE_REPEAT(q->upper)) return 2;
     }
   }
   else {
     if (q->lower == 0) {
       if (q->upper == 1) return 3;
-      else if (IS_REPEAT_INFINITE(q->upper)) return 4;
+      else if (IS_INFINITE_REPEAT(q->upper)) return 4;
     }
     else if (q->lower == 1) {
-      if (IS_REPEAT_INFINITE(q->upper)) return 5;
+      if (IS_INFINITE_REPEAT(q->upper)) return 5;
     }
   }
   return -1;
@@ -3889,9 +3951,9 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
   pnum = quantifier_type_num(p);
   cnum = quantifier_type_num(c);
   if (pnum < 0 || cnum < 0) {
-    if ((p->lower == p->upper) && ! IS_REPEAT_INFINITE(p->upper)) {
-      if ((c->lower == c->upper) && ! IS_REPEAT_INFINITE(c->upper)) {
-        int n = positive_int_multiply(p->lower, c->lower);
+    if ((p->lower == p->upper) && ! IS_INFINITE_REPEAT(p->upper)) {
+      if ((c->lower == c->upper) && ! IS_INFINITE_REPEAT(c->upper)) {
+        int n = onig_positive_int_multiply(p->lower, c->lower);
         if (n >= 0) {
           p->lower = p->upper = n;
           NODE_BODY(pnode) = NODE_BODY(cnode);
@@ -3909,11 +3971,11 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
     break;
   case RQ_A:
     NODE_BODY(pnode) = NODE_BODY(cnode);
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 1;
+    p->lower  = 0;  p->upper = INFINITE_REPEAT;  p->greedy = 1;
     break;
   case RQ_AQ:
     NODE_BODY(pnode) = NODE_BODY(cnode);
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 0;
+    p->lower  = 0;  p->upper = INFINITE_REPEAT;  p->greedy = 0;
     break;
   case RQ_QQ:
     NODE_BODY(pnode) = NODE_BODY(cnode);
@@ -3922,13 +3984,13 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
   case RQ_P_QQ:
     NODE_BODY(pnode) = cnode;
     p->lower  = 0;  p->upper = 1;  p->greedy = 0;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 1;
+    c->lower  = 1;  c->upper = INFINITE_REPEAT;  c->greedy = 1;
     return ;
     break;
   case RQ_PQ_Q:
     NODE_BODY(pnode) = cnode;
     p->lower  = 0;  p->upper = 1;  p->greedy = 1;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 0;
+    c->lower  = 1;  c->upper = INFINITE_REPEAT;  c->greedy = 0;
     return ;
     break;
   case RQ_ASIS:
@@ -3986,7 +4048,7 @@ node_new_general_newline(Node** node, ScanEnv* env)
     if (r != 0) goto err1;
   }
 
-  x = node_new_enclosure_if_else(crnl, 0, ncc);
+  x = node_new_bag_if_else(crnl, 0, ncc);
   if (IS_NULL(x)) goto err1;
 
   *node = x;
@@ -4004,7 +4066,7 @@ enum TokenSyms {
   TK_BACKREF,
   TK_CALL,
   TK_ANCHOR,
-  TK_OP_REPEAT,
+  TK_REPEAT,
   TK_INTERVAL,
   TK_ANYCHAR_ANYTIME,  /* SQL '%' == .* */
   TK_ALT,
@@ -4017,7 +4079,7 @@ enum TokenSyms {
   TK_GENERAL_NEWLINE,  /* \R */
   TK_NO_NEWLINE,       /* \N */
   TK_TRUE_ANYCHAR,     /* \O */
-  TK_EXTENDED_GRAPHEME_CLUSTER, /* \X */
+  TK_TEXT_SEGMENT,     /* \X */
 
   /* in cc */
   TK_CC_CLOSE,
@@ -4065,11 +4127,11 @@ typedef struct {
       int not;
     } prop;
   } u;
-} OnigToken;
+} PToken;
 
 
 static int
-fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
+fetch_interval_quantifier(UChar** src, UChar* end, PToken* tok, ScanEnv* env)
 {
   int low, up, syn_allow, non_low = 0;
   int r = 0;
@@ -4121,7 +4183,7 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
     if (p == prev) {
       if (non_low != 0)
         goto invalid;
-      up = REPEAT_INFINITE;  /* {n,} : {n,infinite} */
+      up = INFINITE_REPEAT;  /* {n,} : {n,infinite} */
     }
   }
   else {
@@ -4141,9 +4203,19 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
   }
   if (c != '}') goto invalid;
 
-  if (!IS_REPEAT_INFINITE(up) && low > up) {
-    return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;
+  if (!IS_INFINITE_REPEAT(up) && low > up) {
+    /* {n,m}+ supported case */
+    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL))
+      return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;
+
+    tok->u.repeat.possessive = 1;
+    {
+      int tmp;
+      tmp = low; low = up; up = tmp;
+    }
   }
+  else
+    tok->u.repeat.possessive = 0;
 
   tok->type = TK_INTERVAL;
   tok->u.repeat.lower = low;
@@ -4232,7 +4304,7 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env, OnigCodePoint* val)
   return 0;
 }
 
-static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env);
+static int fetch_token(PToken* tok, UChar** src, UChar* end, ScanEnv* env);
 
 static OnigCodePoint
 get_name_end_code_point(OnigCodePoint start)
@@ -4566,7 +4638,7 @@ find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
   OnigCodePoint x;
   UChar *q;
   UChar *p = from;
-  
+
   while (p < to) {
     x = ONIGENC_MBC_TO_CODE(enc, p, to);
     q = p + enclen(enc, p);
@@ -4626,7 +4698,7 @@ str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
 }
 
 static int
-fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+fetch_token_in_cc(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int num;
   OnigCodePoint c, c2;
@@ -4715,12 +4787,12 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
           IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {
         PINC;
         tok->type = TK_CHAR_PROPERTY;
-        tok->u.prop.not = (c == 'P' ? 1 : 0);
+        tok->u.prop.not = c == 'P';
 
         if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
           PFETCH(c2);
           if (c2 == '^') {
-            tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);
+            tok->u.prop.not = tok->u.prop.not == 0;
           }
           else
             PUNFETCH;
@@ -4878,7 +4950,7 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 }
 
 static int
-fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+fetch_token(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, num;
   OnigCodePoint c;
@@ -4910,60 +4982,60 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
     switch (c) {
     case '*':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
     case '+':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 1;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
     case '?':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
       tok->u.repeat.upper = 1;
     greedy_check:
+      tok->u.repeat.possessive = 0;
+    greedy_check2:
       if (!PEND && PPEEK_IS('?') &&
-          IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {
+          IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY) &&
+          tok->u.repeat.possessive == 0) {
         PFETCH(c);
-        tok->u.repeat.greedy     = 0;
+        tok->u.repeat.greedy = 0;
         tok->u.repeat.possessive = 0;
       }
       else {
       possessive_check:
+        tok->u.repeat.greedy = 1;
         if (!PEND && PPEEK_IS('+') &&
             ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&
               tok->type != TK_INTERVAL)  ||
              (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&
-              tok->type == TK_INTERVAL))) {
+              tok->type == TK_INTERVAL)) &&
+          tok->u.repeat.possessive == 0) {
           PFETCH(c);
-          tok->u.repeat.greedy     = 1;
           tok->u.repeat.possessive = 1;
         }
-        else {
-          tok->u.repeat.greedy     = 1;
-          tok->u.repeat.possessive = 0;
-        }
       }
       break;
 
     case '{':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break;
-      r = fetch_range_quantifier(&p, end, tok, env);
+      r = fetch_interval_quantifier(&p, end, tok, env);
       if (r < 0) return r;  /* error */
-      if (r == 0) goto greedy_check;
+      if (r == 0) goto greedy_check2;
       else if (r == 2) { /* {n} */
         if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
           goto possessive_check;
 
-        goto greedy_check;
+        goto greedy_check2;
       }
       /* r == 1 : normal char */
       break;
@@ -5000,38 +5072,38 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
     case 'b':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_WORD_BOUNDARY;
+      tok->u.anchor = ANCR_WORD_BOUNDARY;
       break;
 
     case 'B':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_NO_WORD_BOUNDARY;
+      tok->u.anchor = ANCR_NO_WORD_BOUNDARY;
       break;
 
     case 'y':
-      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+      tok->u.anchor = ANCR_TEXT_SEGMENT_BOUNDARY;
       break;
 
     case 'Y':
-      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+      tok->u.anchor = ANCR_NO_TEXT_SEGMENT_BOUNDARY;
       break;
 
 #ifdef USE_WORD_BEGIN_END
     case '<':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_WORD_BEGIN;
+      tok->u.anchor = ANCR_WORD_BEGIN;
       break;
 
     case '>':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCHOR_WORD_END;
+      tok->u.anchor = ANCR_WORD_END;
       break;
 #endif
 
@@ -5098,34 +5170,34 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       break;
 
     case 'X':
-      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
-      tok->type = TK_EXTENDED_GRAPHEME_CLUSTER;
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
+      tok->type = TK_TEXT_SEGMENT;
       break;
 
     case 'A':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
     begin_buf:
       tok->type = TK_ANCHOR;
-      tok->u.subtype = ANCHOR_BEGIN_BUF;
+      tok->u.subtype = ANCR_BEGIN_BUF;
       break;
 
     case 'Z':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
       tok->type = TK_ANCHOR;
-      tok->u.subtype = ANCHOR_SEMI_END_BUF;
+      tok->u.subtype = ANCR_SEMI_END_BUF;
       break;
 
     case 'z':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
     end_buf:
       tok->type = TK_ANCHOR;
-      tok->u.subtype = ANCHOR_END_BUF;
+      tok->u.subtype = ANCR_END_BUF;
       break;
 
     case 'G':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR)) break;
       tok->type = TK_ANCHOR;
-      tok->u.subtype = ANCHOR_BEGIN_POSITION;
+      tok->u.subtype = ANCR_BEGIN_POSITION;
       break;
 
     case '`':
@@ -5228,7 +5300,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
         goto skip_backref;
       }
 
-      if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) && 
+      if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) &&
           (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */
         if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
           if (num > env->num_mem || IS_NULL(SCANENV_MEMENV(env)[num].node))
@@ -5311,10 +5383,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
             tok->u.backref.ref1 = back_num;
           }
           else {
-            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
+            num = name_to_group_numbers(env, prev, name_end, &backs);
             if (num <= 0) {
-              onig_scan_env_set_error_string(env,
-                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
               return ONIGERR_UNDEFINED_NAME_REFERENCE;
             }
             if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
@@ -5396,13 +5466,13 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
           IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {
         PINC;
         tok->type = TK_CHAR_PROPERTY;
-        tok->u.prop.not = (c == 'P' ? 1 : 0);
+        tok->u.prop.not = c == 'P';
 
         if (!PEND &&
             IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
           PFETCH(c);
           if (c == '^') {
-            tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);
+            tok->u.prop.not = tok->u.prop.not == 0;
           }
           else
             PUNFETCH;
@@ -5465,9 +5535,9 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     anytime:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
@@ -5476,9 +5546,9 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     one_or_more_time:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 1;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
@@ -5487,7 +5557,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     zero_or_one_time:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
       tok->u.repeat.upper = 1;
       goto greedy_check;
@@ -5495,14 +5565,14 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 
     case '{':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break;
-      r = fetch_range_quantifier(&p, end, tok, env);
+      r = fetch_interval_quantifier(&p, end, tok, env);
       if (r < 0) return r;  /* error */
-      if (r == 0) goto greedy_check;
+      if (r == 0) goto greedy_check2;
       else if (r == 2) { /* {n} */
         if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
           goto possessive_check;
 
-        goto greedy_check;
+        goto greedy_check2;
       }
       /* r == 1 : normal char */
       break;
@@ -5561,7 +5631,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
               tok->u.call.gnum      = 0;
               tok->u.call.name      = p;
               PINC;
-              if (! PPEEK_IS(')')) return ONIGERR_INVALID_GROUP_NAME;
+              if (! PPEEK_IS(')')) return ONIGERR_UNDEFINED_GROUP_OPTION;
               tok->u.call.name_end  = p;
               break;
 
@@ -5620,14 +5690,14 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
       tok->type = TK_ANCHOR;
       tok->u.subtype = (IS_SINGLELINE(env->options)
-                        ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
+                        ? ANCR_BEGIN_BUF : ANCR_BEGIN_LINE);
       break;
 
     case '$':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
       tok->type = TK_ANCHOR;
       tok->u.subtype = (IS_SINGLELINE(env->options)
-                        ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);
+                        ? ANCR_SEMI_END_BUF : ANCR_END_LINE);
       break;
 
     case '[':
@@ -6035,7 +6105,7 @@ fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
 }
 
 static int
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+parse_char_property(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, ctype;
   CClassNode* cc;
@@ -6185,7 +6255,7 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
 }
 
 static int
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+parse_char_class(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, neg, len, fetched, and_start;
   OnigCodePoint v, vs;
@@ -6202,6 +6272,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
   env->parse_depth++;
   if (env->parse_depth > ParseDepthLimit)
     return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
+
   prev_cc = (CClassNode* )NULL;
   r = fetch_token_in_cc(tok, src, end, env);
   if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {
@@ -6254,10 +6325,11 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
     case TK_RAW_BYTE:
       /* tok->base != 0 : octal or hexadec. */
       if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) {
+        int i, j;
         UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
         UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;
         UChar* psave = p;
-        int i, base = tok->base;
+        int base = tok->base;
 
         buf[0] = tok->u.c;
         for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {
@@ -6275,6 +6347,9 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
           goto err;
         }
 
+        /* clear buf tail */
+        for (j = i; j < ONIGENC_CODE_TO_MBC_MAXLEN; j++) buf[j] = '\0';
+
         len = enclen(env->enc, buf);
         if (i < len) {
           r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
@@ -6312,8 +6387,13 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
     val_entry:
       len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);
       if (len < 0) {
-        r = len;
-        goto err;
+        if (state != CCS_RANGE ||
+            ! IS_SYNTAX_BV(env->syntax,
+                           ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC) ||
+            v < 0x100 || ONIGENC_MBC_MAXLEN(env->enc) == 1) {
+          r = len;
+          goto err;
+        }
       }
       in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);
     val_entry2:
@@ -6522,8 +6602,8 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
   return r;
 }
 
-static int parse_subexp(Node** top, OnigToken* tok, int term,
-                        UChar** src, UChar* end, ScanEnv* env);
+static int parse_subexp(Node** top, PToken* tok, int term,
+                        UChar** src, UChar* end, ScanEnv* env, int group_head);
 
 #ifdef USE_CALLOUT
 
@@ -6580,7 +6660,7 @@ parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv
   PFETCH_S(c);
   if (c == '[') {
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-    tag_start = p;
+    tag_end = tag_start = p;
     while (! PEND) {
       if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
       tag_end = p;
@@ -6626,7 +6706,7 @@ parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv
   }
 
   if (tag_start != tag_end) {
-    r = callout_tag_entry(env->reg, tag_start, tag_end, num);
+    r = callout_tag_entry(env, env->reg, tag_start, tag_end, num);
     if (r != ONIG_NORMAL) return r;
   }
 
@@ -6870,7 +6950,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
 
   if (c == '[') {
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-    tag_start = p;
+    tag_end = tag_start = p;
     while (! PEND) {
       if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
       tag_end = p;
@@ -6947,7 +7027,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
   }
 
   if (tag_start != tag_end) {
-    r = callout_tag_entry(env->reg, tag_start, tag_end, num);
+    r = callout_tag_entry(env, env->reg, tag_start, tag_end, num);
     if (r != ONIG_NORMAL) return r;
   }
 
@@ -6980,8 +7060,8 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
 #endif
 
 static int
-parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
-                ScanEnv* env)
+parse_bag(Node** np, PToken* tok, int term, UChar** src, UChar* end,
+          ScanEnv* env)
 {
   int r, num;
   Node *target;
@@ -7008,20 +7088,20 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     group:
       r = fetch_token(tok, &p, end, env);
       if (r < 0) return r;
-      r = parse_subexp(np, tok, term, &p, end, env);
+      r = parse_subexp(np, tok, term, &p, end, env, 0);
       if (r < 0) return r;
       *src = p;
       return 1; /* group */
       break;
 
     case '=':
-      *np = onig_node_new_anchor(ANCHOR_PREC_READ, 0);
+      *np = onig_node_new_anchor(ANCR_PREC_READ, 0);
       break;
     case '!':  /*         preceding read */
-      *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT, 0);
+      *np = onig_node_new_anchor(ANCR_PREC_READ_NOT, 0);
       break;
     case '>':            /* (?>...) stop backtrack */
-      *np = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+      *np = node_new_bag(BAG_STOP_BACKTRACK);
       break;
 
     case '\'':
@@ -7036,9 +7116,9 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
       PFETCH(c);
       if (c == '=')
-        *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND, 0);
+        *np = onig_node_new_anchor(ANCR_LOOK_BEHIND, 0);
       else if (c == '!')
-        *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT, 0);
+        *np = onig_node_new_anchor(ANCR_LOOK_BEHIND_NOT, 0);
       else {
         if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
           UChar *name;
@@ -7066,7 +7146,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           if (r != 0) return r;
           *np = node_new_memory(1);
           CHECK_NULL_RETURN_MEMERR(*np);
-          ENCLOSURE_(*np)->m.regnum = num;
+          BAG_(*np)->m.regnum = num;
           if (list_capture != 0)
             MEM_STATUS_ON_SIMPLE(env->capture_history, num);
           env->num_named++;
@@ -7103,7 +7183,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 
         r = fetch_token(tok, &p, end, env);
         if (r < 0) return r;
-        r = parse_subexp(&absent, tok, term, &p, end, env);
+        r = parse_subexp(&absent, tok, term, &p, end, env, 1);
         if (r < 0) {
           onig_node_free(absent);
           return r;
@@ -7224,10 +7304,8 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             int num;
             int* backs;
 
-            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
+            num = name_to_group_numbers(env, prev, name_end, &backs);
             if (num <= 0) {
-              onig_scan_env_set_error_string(env,
-                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
               return ONIGERR_UNDEFINED_NAME_REFERENCE;
             }
             if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
@@ -7281,14 +7359,16 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           condition_is_checker = 0;
           r = fetch_token(tok, &p, end, env);
           if (r < 0) return r;
-          r = parse_subexp(&condition, tok, term, &p, end, env);
+          r = parse_subexp(&condition, tok, term, &p, end, env, 0);
           if (r < 0) {
             onig_node_free(condition);
             return r;
           }
         }
 
+#ifdef USE_CALLOUT
       end_condition:
+#endif
         CHECK_NULL_RETURN_MEMERR(condition);
 
         if (PEND) {
@@ -7309,9 +7389,9 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           int then_is_empty;
           Node *Then, *Else;
 
+          Then = 0;
           if (PPEEK_IS('|')) {
             PFETCH(c);
-            Then = 0;
             then_is_empty = 1;
           }
           else
@@ -7322,7 +7402,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             onig_node_free(condition);
             return r;
           }
-          r = parse_subexp(&target, tok, term, &p, end, env);
+          r = parse_subexp(&target, tok, term, &p, end, env, 1);
           if (r < 0) {
             onig_node_free(condition);
             onig_node_free(target);
@@ -7350,7 +7430,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             }
           }
 
-          *np = node_new_enclosure_if_else(condition, Then, Else);
+          *np = node_new_bag_if_else(condition, Then, Else);
           if (IS_NULL(*np)) {
             onig_node_free(condition);
             onig_node_free(Then);
@@ -7365,6 +7445,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
       break;
 
+#ifdef USE_CAPTURE_HISTORY
     case '@':
       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
         if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
@@ -7385,19 +7466,21 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
         else if (num >= (int )MEM_STATUS_BITS_NUM) {
           return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
         }
-        ENCLOSURE_(*np)->m.regnum = num;
+        BAG_(*np)->m.regnum = num;
         MEM_STATUS_ON_SIMPLE(env->capture_history, num);
       }
       else {
         return ONIGERR_UNDEFINED_GROUP_OPTION;
       }
       break;
+#endif
 
 #ifdef USE_POSIXLINE_OPTION
     case 'p':
 #endif
     case '-': case 'i': case 'm': case 's': case 'x':
     case 'W': case 'D': case 'S': case 'P':
+    case 'y':
       {
         int neg = 0;
 
@@ -7422,7 +7505,8 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
               OPTION_NEGATE(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
             }
-            else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
+            else if (IS_SYNTAX_OP2(env->syntax,
+                        ONIG_SYN_OP2_OPTION_ONIGURUMA|ONIG_SYN_OP2_OPTION_RUBY)) {
               OPTION_NEGATE(option, ONIG_OPTION_MULTILINE,  neg);
             }
             else
@@ -7438,6 +7522,46 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           case 'S': OPTION_NEGATE(option, ONIG_OPTION_SPACE_IS_ASCII, neg); break;
           case 'P': OPTION_NEGATE(option, ONIG_OPTION_POSIX_IS_ASCII, neg); break;
 
+          case 'y': /* y{g}, y{w} */
+            {
+              if (! IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_ONIGURUMA))
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+              if (neg != 0) return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              if (! PPEEK_IS('{')) return ONIGERR_UNDEFINED_GROUP_OPTION;
+              PFETCH(c);
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              PFETCH(c);
+              switch (c) {
+              case 'g':
+                if (! ONIGENC_IS_UNICODE_ENCODING(enc))
+                  return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 0);
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 1);
+                break;
+#ifdef USE_UNICODE_WORD_BREAK
+              case 'w':
+                if (! ONIGENC_IS_UNICODE_ENCODING(enc))
+                  return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 0);
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 1);
+                break;
+#endif
+              default:
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+                break;
+              }
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              PFETCH(c);
+              if (c != '}')
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+              break;
+            } /* case 'y' */
+
           default:
             return ONIGERR_UNDEFINED_GROUP_OPTION;
           }
@@ -7454,7 +7578,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             env->options = option;
             r = fetch_token(tok, &p, end, env);
             if (r < 0) return r;
-            r = parse_subexp(&target, tok, term, &p, end, env);
+            r = parse_subexp(&target, tok, term, &p, end, env, 0);
             env->options = prev;
             if (r < 0) {
               onig_node_free(target);
@@ -7469,7 +7593,7 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 
           if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
           PFETCH(c);
-        }
+        } /* while (1) */
       }
       break;
 
@@ -7495,13 +7619,13 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     CHECK_NULL_RETURN_MEMERR(*np);
     num = scan_env_add_mem_entry(env);
     if (num < 0) return num;
-    ENCLOSURE_(*np)->m.regnum = num;
+    BAG_(*np)->m.regnum = num;
   }
 
   CHECK_NULL_RETURN_MEMERR(*np);
   r = fetch_token(tok, &p, end, env);
   if (r < 0) return r;
-  r = parse_subexp(&target, tok, term, &p, end, env);
+  r = parse_subexp(&target, tok, term, &p, end, env, 0);
   if (r < 0) {
     onig_node_free(target);
     return r;
@@ -7509,10 +7633,10 @@ parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 
   NODE_BODY(*np) = target;
 
-  if (NODE_TYPE(*np) == NODE_ENCLOSURE) {
-    if (ENCLOSURE_(*np)->type == ENCLOSURE_MEMORY) {
+  if (NODE_TYPE(*np) == NODE_BAG) {
+    if (BAG_(*np)->type == BAG_MEMORY) {
       /* Don't move this to previous of parse_subexp() */
-      r = scan_env_set_mem_node(env, ENCLOSURE_(*np)->m.regnum, *np);
+      r = scan_env_set_mem_node(env, BAG_(*np)->m.regnum, *np);
       if (r != 0) return r;
     }
   }
@@ -7541,7 +7665,7 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
 
   switch (NODE_TYPE(target)) {
   case NODE_STRING:
-    if (! group) {
+    if (group == 0) {
       if (str_node_can_be_split(target, env->enc)) {
         Node* n = str_node_split_last_char(target, env->enc);
         if (IS_NOT_NULL(n)) {
@@ -7597,7 +7721,7 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
       if (targetq_num >= 0 && nestq_num < 0) {
         if (targetq_num == 1 || targetq_num == 2) { /* * or + */
           /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */
-          if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {
+          if (! IS_INFINITE_REPEAT(qn->upper) && qn->upper > 1 && qn->greedy) {
             qn->upper = (qn->lower == 0 ? 1 : qn->lower);
           }
         }
@@ -7732,17 +7856,21 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[], int to_len, void* arg)
 }
 
 static int
-parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
-          ScanEnv* env)
+parse_exp(Node** np, PToken* tok, int term, UChar** src, UChar* end,
+          ScanEnv* env, int group_head)
 {
-  int r, len, group = 0;
+  int r, len, group;
   Node* qn;
-  Node** targetp;
+  Node** tp;
+  unsigned int parse_depth;
 
+  group = 0;
   *np = NULL;
   if (tok->type == (enum TokenSyms )term)
     goto end_of_token;
 
+  parse_depth = env->parse_depth;
+
   switch (tok->type) {
   case TK_ALT:
   case TK_EOT:
@@ -7753,17 +7881,29 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
   break;
 
   case TK_SUBEXP_OPEN:
-    r = parse_enclosure(np, tok, TK_SUBEXP_CLOSE, src, end, env);
+    r = parse_bag(np, tok, TK_SUBEXP_CLOSE, src, end, env);
     if (r < 0) return r;
-    if (r == 1) group = 1;
+    if (r == 1) { /* group */
+      if (group_head == 0)
+        group = 1;
+      else {
+        Node* target = *np;
+        *np = node_new_group(target);
+        if (IS_NULL(*np)) {
+          onig_node_free(target);
+          return ONIGERR_MEMORY;
+        }
+        group = 2;
+      }
+    }
     else if (r == 2) { /* option only */
       Node* target;
       OnigOptionType prev = env->options;
 
-      env->options = ENCLOSURE_(*np)->o.options;
+      env->options = BAG_(*np)->o.options;
       r = fetch_token(tok, src, end, env);
       if (r < 0) return r;
-      r = parse_subexp(&target, tok, term, src, end, env);
+      r = parse_subexp(&target, tok, term, src, end, env, 0);
       env->options = prev;
       if (r < 0) {
         onig_node_free(target);
@@ -7798,7 +7938,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
 
     string_end:
-      targetp = np;
+      tp = np;
       goto repeat;
     }
     break;
@@ -7811,48 +7951,41 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       len = 1;
       while (1) {
         if (len >= ONIGENC_MBC_MINLEN(env->enc)) {
-          if (len == enclen(env->enc, STR_(*np)->s)) {/* should not enclen_end() */
+          if (len == enclen(env->enc, STR_(*np)->s)) {
             r = fetch_token(tok, src, end, env);
-            NODE_STRING_CLEAR_RAW(*np);
-            goto string_end;
+            goto tk_raw_byte_end;
           }
         }
 
         r = fetch_token(tok, src, end, env);
         if (r < 0) return r;
-        if (r != TK_RAW_BYTE) {
-          /* Don't use this, it is wrong for little endian encodings. */
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR
-          int rem;
-          if (len < ONIGENC_MBC_MINLEN(env->enc)) {
-            rem = ONIGENC_MBC_MINLEN(env->enc) - len;
-            (void )node_str_head_pad(STR_(*np), rem, (UChar )0);
-            if (len + rem == enclen(env->enc, STR_(*np)->s)) {
-              NODE_STRING_CLEAR_RAW(*np);
-              goto string_end;
-            }
-          }
-#endif
+        if (r != TK_RAW_BYTE)
           return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
-        }
 
         r = node_str_cat_char(*np, (UChar )tok->u.c);
         if (r < 0) return r;
 
         len++;
       }
+
+    tk_raw_byte_end:
+      if (! ONIGENC_IS_VALID_MBC_STRING(env->enc, STR_(*np)->s, STR_(*np)->end))
+        return ONIGERR_INVALID_WIDE_CHAR_VALUE;
+
+      NODE_STRING_CLEAR_RAW(*np);
+      goto string_end;
     }
     break;
 
   case TK_CODE_POINT:
     {
       UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
-      int num = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);
-      if (num < 0) return num;
+      len = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);
+      if (len < 0) return len;
 #ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
-      *np = node_new_str_raw(buf, buf + num);
+      *np = node_new_str_raw(buf, buf + len);
 #else
-      *np = node_new_str(buf, buf + num);
+      *np = node_new_str(buf, buf + len);
 #endif
       CHECK_NULL_RETURN_MEMERR(*np);
     }
@@ -7952,7 +8085,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
   case TK_ANYCHAR_ANYTIME:
     *np = node_new_anychar();
     CHECK_NULL_RETURN_MEMERR(*np);
-    qn = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    qn = node_new_quantifier(0, INFINITE_REPEAT, 0);
     CHECK_NULL_RETURN_MEMERR(qn);
     NODE_BODY(qn) = *np;
     *np = qn;
@@ -7992,11 +8125,11 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       int ascii_mode =
         IS_WORD_ASCII(env->options) && IS_WORD_ANCHOR_TYPE(tok->u.anchor) ? 1 : 0;
       *np = onig_node_new_anchor(tok->u.anchor, ascii_mode);
-	  CHECK_NULL_RETURN_MEMERR(*np);
+      CHECK_NULL_RETURN_MEMERR(*np);
     }
     break;
 
-  case TK_OP_REPEAT:
+  case TK_REPEAT:
   case TK_INTERVAL:
     if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {
       if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))
@@ -8031,8 +8164,8 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     if (r < 0) return r;
     break;
 
-  case TK_EXTENDED_GRAPHEME_CLUSTER:
-    r = make_extended_grapheme_cluster(np, env);
+  case TK_TEXT_SEGMENT:
+    r = make_text_segment(np, env);
     if (r < 0) return r;
     break;
 
@@ -8042,22 +8175,35 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
   }
 
   {
-    targetp = np;
+    tp = np;
 
   re_entry:
     r = fetch_token(tok, src, end, env);
     if (r < 0) return r;
 
   repeat:
-    if (r == TK_OP_REPEAT || r == TK_INTERVAL) {
-      if (is_invalid_quantifier_target(*targetp))
+    if (r == TK_REPEAT || r == TK_INTERVAL) {
+      Node* target;
+
+      if (is_invalid_quantifier_target(*tp))
         return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;
 
+      parse_depth++;
+      if (parse_depth > ParseDepthLimit)
+        return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
+
       qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,
-                               (r == TK_INTERVAL ? 1 : 0));
+                               r == TK_INTERVAL);
       CHECK_NULL_RETURN_MEMERR(qn);
       QUANT_(qn)->greedy = tok->u.repeat.greedy;
-      r = set_quantifier(qn, *targetp, group, env);
+      if (group == 2) {
+        target = node_drop_group(*tp);
+        *tp = NULL_NODE;
+      }
+      else {
+        target = *tp;
+      }
+      r = set_quantifier(qn, target, group, env);
       if (r < 0) {
         onig_node_free(qn);
         return r;
@@ -8065,7 +8211,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 
       if (tok->u.repeat.possessive != 0) {
         Node* en;
-        en = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+        en = node_new_bag(BAG_STOP_BACKTRACK);
         if (IS_NULL(en)) {
           onig_node_free(qn);
           return ONIGERR_MEMORY;
@@ -8075,26 +8221,28 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
 
       if (r == 0) {
-        *targetp = qn;
+        *tp = qn;
       }
-      else if (r == 1) {
+      else if (r == 1) { /* x{1,1} ==> x */
         onig_node_free(qn);
+        *tp = target;
       }
       else if (r == 2) { /* split case: /abc+/ */
         Node *tmp;
 
-        *targetp = node_new_list(*targetp, NULL);
-        if (IS_NULL(*targetp)) {
+        *tp = node_new_list(*tp, NULL);
+        if (IS_NULL(*tp)) {
           onig_node_free(qn);
           return ONIGERR_MEMORY;
         }
-        tmp = NODE_CDR(*targetp) = node_new_list(qn, NULL);
+        tmp = NODE_CDR(*tp) = node_new_list(qn, NULL);
         if (IS_NULL(tmp)) {
           onig_node_free(qn);
           return ONIGERR_MEMORY;
         }
-        targetp = &(NODE_CAR(tmp));
+        tp = &(NODE_CAR(tmp));
       }
+      group = 0;
       goto re_entry;
     }
   }
@@ -8103,14 +8251,14 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 }
 
 static int
-parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
-             ScanEnv* env)
+parse_branch(Node** top, PToken* tok, int term, UChar** src, UChar* end,
+             ScanEnv* env, int group_head)
 {
   int r;
   Node *node, **headp;
 
   *top = NULL;
-  r = parse_exp(&node, tok, term, src, end, env);
+  r = parse_exp(&node, tok, term, src, end, env, group_head);
   if (r < 0) {
     onig_node_free(node);
     return r;
@@ -8128,7 +8276,7 @@ parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
 
     headp = &(NODE_CDR(*top));
     while (r != TK_EOT && r != term && r != TK_ALT) {
-      r = parse_exp(&node, tok, term, src, end, env);
+      r = parse_exp(&node, tok, term, src, end, env, 0);
       if (r < 0) {
         onig_node_free(node);
         return r;
@@ -8151,8 +8299,8 @@ parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
 
 /* term_tok: TK_EOT or TK_SUBEXP_CLOSE */
 static int
-parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
-             ScanEnv* env)
+parse_subexp(Node** top, PToken* tok, int term, UChar** src, UChar* end,
+             ScanEnv* env, int group_head)
 {
   int r;
   Node *node, **headp;
@@ -8162,7 +8310,7 @@ parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
   if (env->parse_depth > ParseDepthLimit)
     return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
 
-  r = parse_branch(&node, tok, term, src, end, env);
+  r = parse_branch(&node, tok, term, src, end, env, group_head);
   if (r < 0) {
     onig_node_free(node);
     return r;
@@ -8182,7 +8330,7 @@ parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
     while (r == TK_ALT) {
       r = fetch_token(tok, src, end, env);
       if (r < 0) return r;
-      r = parse_branch(&node, tok, term, src, end, env);
+      r = parse_branch(&node, tok, term, src, end, env, 0);
       if (r < 0) {
         onig_node_free(node);
         return r;
@@ -8217,11 +8365,11 @@ static int
 parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)
 {
   int r;
-  OnigToken tok;
+  PToken tok;
 
   r = fetch_token(&tok, src, end, env);
   if (r < 0) return r;
-  r = parse_subexp(top, &tok, TK_EOT, src, end, env);
+  r = parse_subexp(top, &tok, TK_EOT, src, end, env, 0);
   if (r < 0) return r;
 
   return 0;
@@ -8237,7 +8385,7 @@ make_call_zero_body(Node* node, ScanEnv* env, Node** rnode)
   CHECK_NULL_RETURN_MEMERR(x);
 
   NODE_BODY(x) = node;
-  ENCLOSURE_(x)->m.regnum = 0;
+  BAG_(x)->m.regnum = 0;
   r = scan_env_set_mem_node(env, 0, x);
   if (r != 0) {
     onig_node_free(x);
@@ -8293,7 +8441,7 @@ onig_parse_tree(Node** root, const UChar* pattern, const UChar* end,
   reg->num_mem = env->num_mem;
 
 #ifdef USE_CALLOUT
-  ext = REG_EXTP(reg);
+  ext = reg->extp;
   if (IS_NOT_NULL(ext) && ext->callout_num > 0) {
     r = setup_ext_callout_list_values(reg);
   }
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c
index a396df2acf..55b01fba4b 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c
@@ -2,7 +2,7 @@
   regposerr.c - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,13 +37,7 @@
 //#include "config.h"
 #include "onigposix.h"
 
-#if 0
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#endif
+//#include <string.h>
 
 #if defined(__GNUC__)
 #  define ARG_UNUSED  __attribute__ ((unused))
@@ -86,7 +80,7 @@ static char* ESTRING[] = {
 
 extern size_t
 regerror(int posix_ecode, const regex_t* reg ARG_UNUSED, char* buf,
-	 size_t size)
+         size_t size)
 {
   char* s;
   char tbuf[35];
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c
index 54d456424d..2bfe073ad0 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c
@@ -2,7 +2,7 @@
   regposix.c - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,7 @@
 #define regex_t   onig_regex_t
 #include "regint.h"
 #undef regex_t
+
 #include "onigposix.h"
 
 #define ONIG_C(reg)    ((onig_regex_t* )((reg)->onig))
@@ -148,6 +149,8 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
   OnigSyntaxType* syntax = OnigDefaultSyntax;
   OnigOptionType options;
 
+  reg->onig = (void* )0;
+
   if ((posix_options & REG_EXTENDED) == 0)
     syntax = ONIG_SYNTAX_POSIX_BASIC;
 
@@ -163,8 +166,8 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
 
   ENC_STRING_LEN(OnigEncDefaultCharEncoding, pattern, len);
   r = onig_new(PONIG_C(reg), (UChar* )pattern, (UChar* )(pattern + len),
-	       options, OnigEncDefaultCharEncoding, syntax,
-	       (OnigErrorInfo* )NULL);
+               options, OnigEncDefaultCharEncoding, syntax,
+               (OnigErrorInfo* )NULL);
   if (r != ONIG_NORMAL) {
     return onig2posix_error_code(r);
   }
@@ -175,7 +178,7 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
 
 extern int
 regexec(regex_t* reg, const char* str, size_t nmatch,
-	regmatch_t pmatch[], int posix_options)
+        regmatch_t pmatch[], int posix_options)
 {
   int r, i, len;
   UChar* end;
@@ -203,7 +206,7 @@ regexec(regex_t* reg, const char* str, size_t nmatch,
   ENC_STRING_LEN(ONIG_C(reg)->enc, str, len);
   end = (UChar* )(str + len);
   r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
-		  (OnigRegion* )pm, options);
+                  (OnigRegion* )pm, options);
 
   if (r >= 0) {
     r = 0; /* Match */
@@ -235,6 +238,7 @@ extern void
 regfree(regex_t* reg)
 {
   onig_free(ONIG_C(reg));
+  reg->onig = (void* )0;
 }
 
 
@@ -272,7 +276,7 @@ typedef struct {
 
 static int
 i_wrapper(const UChar* name, const UChar* name_end, int ng, int* gs,
-	  onig_regex_t* reg ARG_UNUSED, void* arg)
+          onig_regex_t* reg ARG_UNUSED, void* arg)
 {
   i_wrap* warg = (i_wrap* )arg;
 
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c
index 95a4434e64..c9506d49bf 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c
@@ -2,7 +2,7 @@
   regsyntax.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,8 +67,8 @@ OnigSyntaxType OnigSyntaxPosixExtended = {
     ONIG_SYN_OP_BRACE_INTERVAL |
     ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )
   , 0
-  , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | 
-      ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | 
+  , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
+      ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
       ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |
       ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
@@ -174,11 +174,12 @@ OnigSyntaxType OnigSyntaxPerl = {
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+      ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
@@ -207,11 +208,12 @@ OnigSyntaxType OnigSyntaxPerl_NG = {
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+      ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       |
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c
index 16c34b62ce..d252090917 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c
@@ -2,7 +2,7 @@
   unicode.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -504,6 +504,281 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
 #endif
 
 
+#ifdef USE_UNICODE_WORD_BREAK
+
+enum WB_TYPE {
+  WB_Any = 0,
+  WB_ALetter,
+  WB_CR,
+  WB_Double_Quote,
+  WB_Extend,
+  WB_ExtendNumLet,
+  WB_Format,
+  WB_Hebrew_Letter,
+  WB_Katakana,
+  WB_LF,
+  WB_MidLetter,
+  WB_MidNum,
+  WB_MidNumLet,
+  WB_Newline,
+  WB_Numeric,
+  WB_Regional_Indicator,
+  WB_Single_Quote,
+  WB_WSegSpace,
+  WB_ZWJ,
+};
+
+typedef struct {
+  OnigCodePoint start;
+  OnigCodePoint end;
+  enum WB_TYPE  type;
+} WB_RANGE_TYPE;
+
+#include "unicode_wb_data.c"
+
+static enum WB_TYPE
+wb_get_type(OnigCodePoint code)
+{
+  OnigCodePoint low, high, x;
+  enum WB_TYPE type;
+
+  for (low = 0, high = (OnigCodePoint )WB_RANGE_NUM; low < high; ) {
+    x = (low + high) >> 1;
+    if (code > WB_RANGES[x].end)
+      low = x + 1;
+    else
+      high = x;
+  }
+
+  type = (low < (OnigCodePoint )WB_RANGE_NUM &&
+          code >= WB_RANGES[low].start) ?
+    WB_RANGES[low].type : WB_Any;
+
+  return type;
+}
+
+#define IS_WB_IGNORE_TAIL(t)  ((t) == WB_Extend || (t) == WB_Format || (t) == WB_ZWJ)
+#define IS_WB_AHLetter(t)     ((t) == WB_ALetter || (t) == WB_Hebrew_Letter)
+#define IS_WB_MidNumLetQ(t)   ((t) == WB_MidNumLet || (t) == WB_Single_Quote)
+
+static int
+wb_get_next_main_code(OnigEncoding enc, UChar* p, const UChar* end,
+                      OnigCodePoint* rcode, enum WB_TYPE* rtype)
+{
+  OnigCodePoint code;
+  enum WB_TYPE type;
+
+  while (TRUE) {
+    p += enclen(enc, p);
+    if (p >= end) break;
+
+    code = ONIGENC_MBC_TO_CODE(enc, p, end);
+    type = wb_get_type(code);
+    if (! IS_WB_IGNORE_TAIL(type)) {
+      *rcode = code;
+      *rtype = type;
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+extern int
+onigenc_wb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,
+                             const UChar* start, const UChar* end)
+{
+  int r;
+  UChar* pp;
+  OnigCodePoint cfrom;
+  OnigCodePoint cfrom2;
+  OnigCodePoint cto;
+  OnigCodePoint cto2;
+  enum WB_TYPE from;
+  enum WB_TYPE from2;
+  enum WB_TYPE to;
+  enum WB_TYPE to2;
+
+  /* WB1: sot / Any */
+  if (p == start) return TRUE;
+  /* WB2: Any / eot */
+  if (p == end)   return TRUE;
+
+  if (IS_NULL(prev)) {
+    prev = onigenc_get_prev_char_head(enc, start, p);
+    if (IS_NULL(prev)) return TRUE;
+  }
+
+  cfrom = ONIGENC_MBC_TO_CODE(enc, prev, end);
+  cto   = ONIGENC_MBC_TO_CODE(enc, p, end);
+
+  from = wb_get_type(cfrom);
+  to   = wb_get_type(cto);
+
+  /* short cut */
+  if (from == 0 && to == 0) goto WB999;
+
+  /* WB3: CR + LF */
+  if (from == WB_CR && to == WB_LF) return FALSE;
+
+  /* WB3a: (Newline|CR|LF) /  */
+  if (from == WB_Newline || from == WB_CR || from == WB_LF) return TRUE;
+  /* WB3b: / (Newline|CR|LF) */
+  if (to == WB_Newline || to == WB_CR || to == WB_LF) return TRUE;
+
+  /* WB3c: ZWJ + {Extended_Pictographic} */
+  if (from == WB_ZWJ) {
+    if (onigenc_unicode_is_code_ctype(cto, PROP_INDEX_EXTENDEDPICTOGRAPHIC))
+      return FALSE;
+  }
+
+  /* WB3d: WSegSpace + WSegSpace */
+  if (from == WB_WSegSpace && to == WB_WSegSpace) return FALSE;
+
+  /* WB4:  X (Extend|Format|ZWJ)* -> X */
+  if (IS_WB_IGNORE_TAIL(to)) return FALSE;
+  if (IS_WB_IGNORE_TAIL(from)) {
+    while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+      prev = pp;
+      cfrom = ONIGENC_MBC_TO_CODE(enc, prev, end);
+      from = wb_get_type(cfrom);
+      if (! IS_WB_IGNORE_TAIL(from))
+        break;
+    }
+  }
+
+  if (IS_WB_AHLetter(from)) {
+    /* WB5: AHLetter + AHLetter */
+    if (IS_WB_AHLetter(to)) return FALSE;
+
+    /* WB6: AHLetter + (MidLetter | MidNumLetQ) AHLetter */
+    if (to == WB_MidLetter || IS_WB_MidNumLetQ(to)) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (IS_WB_AHLetter(to2)) return FALSE;
+      }
+    }
+  }
+
+  /* WB7: AHLetter (MidLetter | MidNumLetQ) + AHLetter */
+  if (from == WB_MidLetter || IS_WB_MidNumLetQ(from)) {
+    if (IS_WB_AHLetter(to)) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (IS_WB_AHLetter(from2)) return FALSE;
+    }
+  }
+
+  if (from == WB_Hebrew_Letter) {
+    /* WB7a: Hebrew_Letter + Single_Quote */
+    if (to == WB_Single_Quote) return FALSE;
+
+    /* WB7b: Hebrew_Letter + Double_Quote Hebrew_Letter */
+    if (to == WB_Double_Quote) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (to2 == WB_Hebrew_Letter) return FALSE;
+      }
+    }
+  }
+
+  /* WB7c: Hebrew_Letter Double_Quote + Hebrew_Letter */
+  if (from == WB_Double_Quote) {
+    if (to == WB_Hebrew_Letter) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (from2 == WB_Hebrew_Letter) return FALSE;
+    }
+  }
+
+  if (to == WB_Numeric) {
+    /* WB8: Numeric + Numeric */
+    if (from == WB_Numeric) return FALSE;
+
+    /* WB9: AHLetter + Numeric */
+    if (IS_WB_AHLetter(from)) return FALSE;
+
+    /* WB11: Numeric (MidNum | MidNumLetQ) + Numeric */
+    if (from == WB_MidNum || IS_WB_MidNumLetQ(from)) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (from2 == WB_Numeric) return FALSE;
+    }
+  }
+
+  if (from == WB_Numeric) {
+    /* WB10: Numeric + AHLetter */
+    if (IS_WB_AHLetter(to)) return FALSE;
+
+    /* WB12: Numeric + (MidNum | MidNumLetQ) Numeric */
+    if (to == WB_MidNum || IS_WB_MidNumLetQ(to)) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (to2 == WB_Numeric) return FALSE;
+      }
+    }
+  }
+
+  /* WB13: Katakana + Katakana */
+  if (from == WB_Katakana && to == WB_Katakana) return FALSE;
+
+  /* WB13a: (AHLetter | Numeric | Katakana | ExtendNumLet) + ExtendNumLet */
+  if (IS_WB_AHLetter(from) || from == WB_Numeric || from == WB_Katakana
+      || from == WB_ExtendNumLet) {
+    if (to == WB_ExtendNumLet) return FALSE;
+  }
+
+  /* WB13b: ExtendNumLet + (AHLetter | Numeric | Katakana) */
+  if (from == WB_ExtendNumLet) {
+    if (IS_WB_AHLetter(to) || to == WB_Numeric || to == WB_Katakana)
+      return FALSE;
+  }
+
+
+  /* WB15:   sot (RI RI)* RI + RI */
+  /* WB16: [^RI] (RI RI)* RI + RI */
+  if (from == WB_Regional_Indicator && to == WB_Regional_Indicator) {
+    int n = 0;
+    while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+      cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+      from2  = wb_get_type(cfrom2);
+      if (from2 != WB_Regional_Indicator)
+        break;
+
+      n++;
+    }
+    if ((n % 2) == 0) return FALSE;
+  }
+
+ WB999:
+  /* WB999: Any / Any */
+  return TRUE;
+}
+
+#endif /* USE_UNICODE_WORD_BREAK */
+
+
 #ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
 
 enum EGCB_BREAK_TYPE {
@@ -657,8 +932,7 @@ onigenc_egcb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,
 
 #ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
   if (! ONIGENC_IS_UNICODE_ENCODING(enc)) {
-    if (from == 0x000d && to == 0x000a) return 0;
-    else return 1;
+    return from != 0x000d || to != 0x000a;
   }
 
   btype = unicode_egcb_is_break_2code(from, to);
@@ -701,8 +975,7 @@ onigenc_egcb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,
   return 1;
 
 #else
-  if (from == 0x000d && to == 0x000a) return 0;
-  else return 1;
+  return from != 0x000d || to != 0x000a;
 #endif /* USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER */
 }
 
@@ -729,6 +1002,7 @@ onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges)
   int len;
   int c;
   char* s;
+  UChar* uname;
 
   if (UserDefinedPropertyNum >= USER_DEFINED_PROPERTY_MAX_NUM)
     return ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS;
@@ -741,10 +1015,11 @@ onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges)
   if (s == 0)
     return ONIGERR_MEMORY;
 
+  uname = (UChar* )name;
   n = 0;
   for (i = 0; i < len; i++) {
-    c = name[i];
-    if (c <= 0 || c >= 0x80) {
+    c = uname[i];
+    if (c < 0x20 || c >= 0x80) {
       xfree(s);
       return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
     }
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c
index d1edb1cae2..6a7503a4fd 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 
-#define GRAPHEME_BREAK_PROPERTY_VERSION  11_0_0
+#define GRAPHEME_BREAK_PROPERTY_VERSION  12_1_0
 
 /*
 CR
@@ -43,7 +43,7 @@ V
 ZWJ
 */
 
-static int EGCB_RANGE_NUM = 1321;
+static int EGCB_RANGE_NUM = 1326;
 static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x000000, 0x000009, EGCB_Control },
  {0x00000a, 0x00000a, EGCB_LF },
@@ -197,8 +197,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x000e47, 0x000e4e, EGCB_Extend },
  {0x000eb1, 0x000eb1, EGCB_Extend },
  {0x000eb3, 0x000eb3, EGCB_SpacingMark },
- {0x000eb4, 0x000eb9, EGCB_Extend },
- {0x000ebb, 0x000ebc, EGCB_Extend },
+ {0x000eb4, 0x000ebc, EGCB_Extend },
  {0x000ec8, 0x000ecd, EGCB_Extend },
  {0x000f18, 0x000f19, EGCB_Extend },
  {0x000f35, 0x000f35, EGCB_Extend },
@@ -271,9 +270,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x001ab0, 0x001abe, EGCB_Extend },
  {0x001b00, 0x001b03, EGCB_Extend },
  {0x001b04, 0x001b04, EGCB_SpacingMark },
- {0x001b34, 0x001b34, EGCB_Extend },
- {0x001b35, 0x001b35, EGCB_SpacingMark },
- {0x001b36, 0x001b3a, EGCB_Extend },
+ {0x001b34, 0x001b3a, EGCB_Extend },
  {0x001b3b, 0x001b3b, EGCB_SpacingMark },
  {0x001b3c, 0x001b3c, EGCB_Extend },
  {0x001b3d, 0x001b41, EGCB_SpacingMark },
@@ -305,7 +302,6 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x001ce1, 0x001ce1, EGCB_SpacingMark },
  {0x001ce2, 0x001ce8, EGCB_Extend },
  {0x001ced, 0x001ced, EGCB_Extend },
- {0x001cf2, 0x001cf3, EGCB_SpacingMark },
  {0x001cf4, 0x001cf4, EGCB_Extend },
  {0x001cf7, 0x001cf7, EGCB_SpacingMark },
  {0x001cf8, 0x001cf9, EGCB_Extend },
@@ -348,8 +344,8 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x00a9b4, 0x00a9b5, EGCB_SpacingMark },
  {0x00a9b6, 0x00a9b9, EGCB_Extend },
  {0x00a9ba, 0x00a9bb, EGCB_SpacingMark },
- {0x00a9bc, 0x00a9bc, EGCB_Extend },
- {0x00a9bd, 0x00a9c0, EGCB_SpacingMark },
+ {0x00a9bc, 0x00a9bd, EGCB_Extend },
+ {0x00a9be, 0x00a9c0, EGCB_SpacingMark },
  {0x00a9e5, 0x00a9e5, EGCB_Extend },
  {0x00aa29, 0x00aa2e, EGCB_Extend },
  {0x00aa2f, 0x00aa30, EGCB_SpacingMark },
@@ -1177,7 +1173,6 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x00d789, 0x00d7a3, EGCB_LVT },
  {0x00d7b0, 0x00d7c6, EGCB_V },
  {0x00d7cb, 0x00d7fb, EGCB_T },
- {0x00d800, 0x00dfff, EGCB_Control },
  {0x00fb1e, 0x00fb1e, EGCB_Extend },
  {0x00fe00, 0x00fe0f, EGCB_Extend },
  {0x00fe20, 0x00fe2f, EGCB_Extend },
@@ -1291,6 +1286,12 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x01182f, 0x011837, EGCB_Extend },
  {0x011838, 0x011838, EGCB_SpacingMark },
  {0x011839, 0x01183a, EGCB_Extend },
+ {0x0119d1, 0x0119d3, EGCB_SpacingMark },
+ {0x0119d4, 0x0119d7, EGCB_Extend },
+ {0x0119da, 0x0119db, EGCB_Extend },
+ {0x0119dc, 0x0119df, EGCB_SpacingMark },
+ {0x0119e0, 0x0119e0, EGCB_Extend },
+ {0x0119e4, 0x0119e4, EGCB_SpacingMark },
  {0x011a01, 0x011a0a, EGCB_Extend },
  {0x011a33, 0x011a38, EGCB_Extend },
  {0x011a39, 0x011a39, EGCB_SpacingMark },
@@ -1300,7 +1301,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x011a51, 0x011a56, EGCB_Extend },
  {0x011a57, 0x011a58, EGCB_SpacingMark },
  {0x011a59, 0x011a5b, EGCB_Extend },
- {0x011a86, 0x011a89, EGCB_Prepend },
+ {0x011a84, 0x011a89, EGCB_Prepend },
  {0x011a8a, 0x011a96, EGCB_Extend },
  {0x011a97, 0x011a97, EGCB_SpacingMark },
  {0x011a98, 0x011a99, EGCB_Extend },
@@ -1330,9 +1331,11 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x011d97, 0x011d97, EGCB_Extend },
  {0x011ef3, 0x011ef4, EGCB_Extend },
  {0x011ef5, 0x011ef6, EGCB_SpacingMark },
+ {0x013430, 0x013438, EGCB_Control },
  {0x016af0, 0x016af4, EGCB_Extend },
  {0x016b30, 0x016b36, EGCB_Extend },
- {0x016f51, 0x016f7e, EGCB_SpacingMark },
+ {0x016f4f, 0x016f4f, EGCB_Extend },
+ {0x016f51, 0x016f87, EGCB_SpacingMark },
  {0x016f8f, 0x016f92, EGCB_Extend },
  {0x01bc9d, 0x01bc9e, EGCB_Extend },
  {0x01bca0, 0x01bca3, EGCB_Control },
@@ -1357,6 +1360,8 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x01e01b, 0x01e021, EGCB_Extend },
  {0x01e023, 0x01e024, EGCB_Extend },
  {0x01e026, 0x01e02a, EGCB_Extend },
+ {0x01e130, 0x01e136, EGCB_Extend },
+ {0x01e2ec, 0x01e2ef, EGCB_Extend },
  {0x01e8d0, 0x01e8d6, EGCB_Extend },
  {0x01e944, 0x01e94a, EGCB_Extend },
  {0x01f1e6, 0x01f1ff, EGCB_Regional_Indicator },
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c
index 553f0e748c..7dbd6a5995 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold1_key unicode_fold1_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold1_key unicode_fold1_key.gperf  */
 /* Computed positions: -k'1-3' */
 
 
@@ -36,12 +36,12 @@
 //#include <string.h>
 #include "regenc.h"
 
-#define TOTAL_KEYWORDS 1346
+#define TOTAL_KEYWORDS 1353
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 3
 #define MIN_HASH_VALUE 3
-#define MAX_HASH_VALUE 1765
-/* maximum key range = 1763, duplicates = 0 */
+#define MAX_HASH_VALUE 1791
+/* maximum key range = 1789, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -56,32 +56,32 @@ hash(OnigCodePoint codes[])
 {
   static const unsigned short asso_values[] =
     {
-         4,    2,  147,   16,    1,   13, 1233,  682, 1225,  643,
-      1208,   95,    9,   89, 1391,   82,    8,   80, 1383,    6,
-      1201,  638, 1191,  602,  151,   75, 1377,   68, 1374,  464,
-         0,   11, 1369,    3, 1352,  278,   23,  424,  660,  320,
-       640,   20,  635,   34,    5,   29,  860,   27,  630,    0,
-       854, 1352,  870, 1336,  470, 1322,  623, 1319,  610,  230,
-      1184, 1309, 1159,  779, 1042,  980,  836,  844,  456,  597,
-       285,  158,  590,  477,  583,   42,  576, 1442,  447, 1119,
-       440,  922,  426, 1434,  400, 1433,  327, 1428,  567, 1417,
-       386, 1443,  458,  856,  704, 1435, 1010,   66,  232,  413,
-       204, 1417,  226, 1412,  190, 1095,  379, 1253,  198, 1211,
-       175,  209,  561,  362,  528, 1296,  257, 1169,  240, 1291,
-       508, 1163,  484, 1228,  699,  735,  831,  488,  679,  513,
-       420,  639, 1148,   83,  683,  806, 1152,   77, 1170,  537,
-      1213,    3, 1285,  166, 1410, 1766, 1394, 1766, 1206,  460,
-       757, 1766,  367, 1766, 1339, 1766,  908,   57, 1321, 1766,
-       384,  345,  686,   52, 1145,   40,  218,  180, 1135,   33,
-      1292,  276, 1282,   14, 1408,  719, 1128,  701, 1275,  129,
-      1116,  610, 1255, 1343, 1109,  874, 1097,  448,  823,  346,
-       877,  181, 1089,    0, 1077,  786, 1080,  768, 1068, 1180,
-      1060, 1056, 1048,  798,  811,  177, 1045, 1022, 1030,  993,
-      1020,  789,  353,  990,  548,  982,  517,  970,  334,  765,
-       166,  753,  138,  743,  100,  963,   87,  720,   49,  957,
-        75,  951,   62,  411,  126,  945,  113, 1266,  317,  935,
-       304,  925,  293, 1244,  714,  912,  275,  490,  263,  469,
-       395, 1297,  896,  208,  887,   80,  542,   11,  246
+         4,    2,  147,   16,    1,   13, 1228,  725, 1224,  638,
+      1204,   95,    9,   82, 1403,   80,    8,   68, 1391,    6,
+      1203,  602, 1200,  320,  151,   67, 1385,   61, 1384,  158,
+         0,   11, 1252,    3,  733,  278,   23,  425,  660,  424,
+       640,   20,  635,  105,    5,   29,  916,   34,  630,    0,
+       906, 1378,  899, 1377,  470, 1363,  623,  902,  610,  230,
+      1193, 1358, 1190,  779,  986, 1336,  890,  883,  456,  597,
+       285,  158,  590,  477,  583,   42,  576, 1447,  447, 1440,
+       440, 1353,  426, 1429,  400, 1417,  327, 1407,  567, 1389,
+       386, 1207,  458,  724,  854,  979, 1016,   66,  232,  413,
+       204, 1431,  226, 1317,  190, 1167,  379, 1319,  198, 1270,
+       175,  209,  561,  362,  528, 1323,  257, 1099,  240, 1309,
+       508, 1172,  484, 1306,  699,  865,  850,  488,  679,  755,
+       420,  639, 1149,  105,  691,  789, 1125,   46,  809,  652,
+      1293,    3, 1262,  166, 1426,    0, 1424, 1792, 1220,  460,
+       706,    1,  367, 1792, 1341, 1792, 1151,   56, 1235, 1792,
+       384,  345,  965,   40, 1168,   33,  218,  180, 1159,   20,
+      1296,  276, 1243,   14, 1401,  777, 1142,  682, 1284,  129,
+      1135,  610, 1181,  871, 1123,  858, 1042,  510,  842,  499,
+       999,  346,  830,    0,  823, 1288, 1115,  768,  732, 1272,
+      1101, 1098, 1082, 1270,  811,  177, 1078, 1074, 1061, 1058,
+      1050,  789,  353, 1018,  548, 1006,  517,  988,  334,  765,
+       166,  753,  138,  743,  100,  969,   87,  720,   49,  975,
+        75,  965,   62,  411,  126,  955,  113, 1262,  317,  943,
+       304,  679,  293, 1252,  714,  937,  275,  490,  263,  469,
+       395, 1345,  931,  208,  921,   80,  542,   11,  246
     };
   return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+3] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];
 }
@@ -93,549 +93,550 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
     {
       -1, -1, -1,
 
-      3408,
+      3429,
 
-      1900,
+      1906,
 
-      1861,
+      1867,
 
       210,
 
       171,
 
-      3393,
+      3414,
 
-      1921,
+      1927,
 
-      1687,
+      1690,
 
       231,
 
-      1879,
+      1885,
 
-      1873,
+      1879,
 
       189,
 
       183,
 
-      2234,
+      2240,
 
-      1312,
+      1315,
 
-      1273,
+      1276,
 
       165,
 
-      789,
+      792,
 
-      2255,
+      2261,
 
-      1333,
+      1336,
 
-      1591,
+      1594,
 
-      1627,
+      1630,
 
-      1291,
+      1294,
 
-      1285,
+      1288,
 
-      1909,
+      1915,
 
-      2237,
+      2243,
 
       219,
 
-      3402,
+      1618,
 
-      2231,
+      2237,
 
-      3396,
+      3417,
 
-      2975,
+      2981,
 
-      2897,
+      2903,
 
-      2291,
+      2297,
 
-      2984,
+      2990,
 
-      3390,
+      3423,
 
-      2276,
+      2282,
 
-      2942,
+      2948,
 
-      1321,
+      1324,
 
-      2933,
+      2939,
 
-      2921,
+      2927,
 
-      1615,
+      1606,
 
-      2978,
+      2984,
 
-      3486,
+      3507,
 
-      2900,
+      2906,
 
-      971,
+      974,
 
       273,
 
-      2894,
+      2900,
 
-      1603,
+      1600,
 
-      2642,
+      2648,
 
-      3537,
+      3558,
 
-      2183,
+      2189,
 
-      1225,
+      1228,
 
       459,
 
-      2993,
+      2999,
 
       80,
 
-      2879,
-
-      1792,
+      2885,
 
-      3717,
+      1795,
 
-      1510,
+      3738,
 
-      1597,
+      1513,
 
       378,
 
-      2432,
+      1459,
 
-      3549,
+      2438,
 
-      2189,
+      3570,
 
-      1231,
+      2195,
+
+      1234,
 
       465,
 
-      857,
+      860,
 
       92,
 
-      1038,
+      1041,
 
-      1804,
+      1807,
 
-      3729,
+      3750,
 
-      1522,
+      1525,
 
-      2708,
+      2714,
 
-      2543,
+      2549,
 
-      2435,
+      2441,
 
-      3543,
+      3564,
 
-      2186,
+      2192,
 
-      1228,
+      1231,
 
       462,
 
-      863,
+      866,
 
       86,
 
-      2882,
+      2888,
 
-      1798,
+      1801,
 
-      3723,
+      3744,
 
-      1516,
+      1519,
 
       159,
 
-      2555,
+      2561,
 
-      3531,
+      3552,
 
-      2180,
+      2186,
 
-      1222,
+      1225,
 
       456,
 
-      1456,
-
-      860,
+      2972,
 
-      2876,
+      863,
 
-      1786,
+      2882,
 
-      3711,
+      1789,
 
-      1504,
+      3732,
 
-      1444,
+      1507,
 
       2966,
 
-      2549,
+      2942,
 
-      3525,
+      2555,
 
-      2177,
+      3546,
 
-      1219,
+      2183,
+
+      1222,
 
       453,
 
-      854,
+      857,
 
-      2960,
+      3411,
 
-      2873,
+      2879,
 
-      1780,
+      1783,
 
-      3705,
+      3726,
 
-      1498,
+      1501,
 
       2936,
 
-      2537,
+      2543,
 
       2930,
 
-      3561,
+      3582,
 
-      2195,
+      2201,
 
-      1237,
+      1240,
 
       471,
 
-      851,
+      854,
 
       105,
 
-      2924,
+      1447,
 
-      1816,
+      1819,
 
-      3741,
+      3762,
 
-      1534,
+      1537,
 
-      3333,
+      3354,
 
-      2531,
+      2537,
 
-      2918,
+      2924,
 
-      3555,
+      3576,
 
-      2192,
+      2198,
 
-      1234,
+      1237,
 
       468,
 
-      869,
+      872,
 
       99,
 
       399,
 
-      1810,
+      1813,
 
-      3735,
+      3756,
 
-      1528,
+      1531,
 
-      1645,
+      1648,
 
-      2567,
+      2573,
 
-      3519,
+      3540,
 
-      2174,
+      2180,
 
-      1216,
+      1219,
 
-      2417,
+      2423,
       -1,
 
-      866,
+      869,
 
-      2870,
+      2876,
 
-      1774,
+      1777,
 
-      3699,
+      3720,
 
-      1492,
+      1495,
 
       541,
 
       502,
 
-      2561,
+      2567,
 
-      694,
+      697,
 
-      1891,
+      1897,
 
       559,
 
       201,
 
-      848,
+      851,
 
       520,
 
       514,
 
-      3474,
-      -1,
+      3495,
 
-      959,
+      1864,
+
+      962,
 
       267,
 
-      2525,
+      2531,
 
-      2270,
+      2276,
 
-      2630,
+      2636,
 
-      1303,
+      1306,
 
-      3513,
+      3534,
 
-      2171,
+      2177,
 
-      1213,
+      1216,
 
       366,
 
-      2333,
+      2339,
       -1,
 
-      2867,
+      2873,
 
-      1768,
+      1771,
 
-      3693,
+      3714,
 
-      1486,
+      1489,
 
-      2021,
+      2027,
 
-      1060,
+      1063,
 
       324,
 
-      1189,
+      1192,
 
       27,
 
-      2957,
-      -1,
+      2963,
 
-      845,
+      3276,
 
-      1723,
+      848,
 
-      3648,
+      1726,
 
-      3135,
+      3669,
 
-      1609,
+      3141,
 
-      1681,
+      1612,
 
-      1375,
+      2978,
 
-      2519,
+      1378,
+
+      2525,
 
-      2012,
+      2018,
 
-      1051,
+      1054,
 
       315,
 
-      827,
+      830,
 
       12,
 
-      2714,
-      -1,
-
-      782,
+      2720,
+      -1, -1,
 
-      2018,
+      2024,
 
-      1057,
+      1060,
 
       321,
 
-      2366,
+      2372,
 
-      4065,
+      4086,
 
-      1357,
+      1360,
 
-      2005,
+      2011,
 
-      1044,
+      1047,
 
       309,
 
-      3612,
+      3633,
 
       0,
 
-      2711,
+      2717,
       -1,
 
-      1369,
+      1372,
 
       153,
 
       31,
 
-      2726,
+      2732,
 
-      2354,
+      2360,
 
-      1585,
+      1588,
 
-      1345,
+      1348,
 
-      2090,
+      2096,
 
-      1132,
+      1135,
 
       387,
       -1,
 
-      1378,
+      1381,
 
-      2786,
+      2792,
 
-      1606,
+      1609,
       -1,
 
-      2009,
+      2015,
 
-      1047,
+      1050,
 
       312,
 
-      3438,
+      3459,
 
       6,
 
-      919,
+      922,
 
-      2002,
+      2008,
 
-      1041,
+      1044,
 
       306,
 
-      2594,
+      2600,
 
-      3864,
+      3885,
 
-      2360,
+      2366,
 
-      3321,
+      3342,
 
-      1351,
+      1354,
 
-      2033,
+      2039,
 
-      1072,
+      1075,
 
       336,
 
-      2450,
+      2456,
 
       52,
 
-      2729,
+      2735,
 
-      2228,
+      2234,
 
-      1270,
+      1273,
 
       499,
 
-      3858,
+      3879,
 
       168,
 
-      2384,
-      -1,
+      2390,
 
-      1399,
+      682,
 
-      1594,
+      1402,
+
+      1597,
       -1,
 
-      715,
+      718,
 
-      2030,
+      2036,
 
-      1069,
+      1072,
 
       333,
 
-      2444,
+      2450,
 
       46,
 
-      3597,
+      3618,
 
-      2213,
+      2219,
 
-      1255,
+      1258,
 
       487,
       -1,
 
       141,
 
-      2378,
+      2384,
 
-      1852,
+      1855,
 
-      1393,
+      1396,
 
-      1570,
+      1573,
       -1,
 
-      712,
+      715,
 
-      3591,
+      3612,
 
-      2210,
+      2216,
 
-      1252,
+      1255,
 
       483,
 
@@ -643,377 +644,376 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
 
       135,
 
-      2891,
+      2897,
 
-      1846,
+      1849,
 
-      1621,
+      1624,
 
-      1564,
+      1567,
 
-      3471,
+      3492,
 
-      1960,
+      1966,
 
-      956,
+      959,
 
-      3852,
+      3873,
       -1,
 
-      2273,
+      2279,
 
-      2627,
+      2633,
 
-      884,
+      887,
 
-      3579,
+      3600,
 
-      2204,
+      2210,
 
-      1246,
+      1249,
 
       480,
 
-      2330,
+      2336,
 
       123,
 
       532,
 
-      1834,
+      1837,
 
-      3759,
+      3780,
 
-      1552,
+      1555,
       -1,
 
-      3573,
+      3594,
 
-      2201,
+      2207,
 
-      1243,
+      1246,
 
       477,
 
-      2990,
+      2996,
 
       117,
 
-      878,
+      881,
 
-      1828,
+      1831,
 
-      3753,
+      3774,
 
-      1546,
+      1549,
 
-      700,
+      703,
       -1,
 
-      3846,
+      3867,
 
-      3567,
+      3588,
 
-      2198,
+      2204,
 
-      1240,
+      1243,
 
       474,
 
-      875,
+      878,
 
       111,
 
       658,
 
-      1822,
+      1825,
 
-      3747,
+      3768,
 
-      1540,
+      1543,
 
-      3801,
+      3822,
 
-      1984,
+      1990,
 
-      1005,
+      1008,
 
       288,
       -1,
 
-      2285,
+      2273,
 
-      2675,
+      2681,
 
-      872,
+      875,
 
-      2168,
+      2174,
 
-      1210,
+      1213,
       -1,
 
       643,
 
-      2342,
+      2348,
 
-      2864,
+      2870,
 
-      1762,
+      1765,
 
-      3687,
+      3708,
 
-      1480,
+      1483,
       -1, -1,
 
       652,
 
-      3261,
+      3267,
 
       381,
 
-      3900,
+      3921,
 
-      3002,
+      2960,
 
-      842,
+      845,
 
       637,
 
-      1675,
+      1684,
 
-      2159,
+      2165,
 
-      1201,
+      1204,
 
-      3231,
+      3237,
 
       661,
 
-      2513,
+      2519,
 
-      2855,
+      2861,
 
-      1744,
+      1747,
 
-      3669,
+      3690,
 
-      1462,
+      1465,
 
-      775,
+      785,
 
-      3882,
+      3903,
 
-      2426,
+      2432,
 
-      3318,
+      3339,
 
       37,
 
-      2084,
+      2090,
 
-      1111,
+      1114,
 
       372,
 
-      3222,
+      3228,
 
-      3894,
+      3915,
 
-      2765,
+      2771,
 
       640,
       -1,
 
-      1384,
+      1387,
 
-      2495,
+      2501,
 
-      3870,
+      3891,
 
-      3228,
+      3234,
 
-      2015,
+      2021,
 
-      1054,
+      1057,
 
       318,
 
-      3903,
+      3924,
 
       18,
 
-      3216,
+      3222,
 
-      1123,
+      1126,
 
-      1990,
+      1996,
 
-      1017,
+      1020,
 
       294,
 
-      2777,
+      2783,
 
-      2372,
+      2378,
 
-      2687,
+      2693,
 
-      1363,
+      1366,
 
-      3078,
+      3084,
 
-      3603,
+      3624,
 
-      2216,
+      2222,
 
-      1258,
+      1261,
 
-      2348,
+      2354,
 
-      3288,
+      3297,
 
-      3876,
+      3897,
 
-      1981,
+      1987,
 
-      999,
+      1002,
 
       285,
 
-      1576,
+      1579,
 
       667,
 
-      2669,
+      2675,
 
-      3219,
+      3225,
 
-      3366,
+      3387,
 
-      3069,
+      3075,
 
-      3999,
+      4020,
 
-      3552,
+      3573,
 
-      2339,
+      2345,
 
-      3213,
+      3219,
 
-      3924,
+      3945,
 
-      3984,
+      4005,
 
       96,
 
-      3075,
+      3081,
 
-      1807,
+      1810,
 
-      3732,
+      3753,
 
-      1525,
+      1528,
 
-      2051,
+      2057,
 
-      1090,
+      1093,
 
-      3063,
+      3069,
 
-      2486,
+      2492,
 
-      2351,
+      2357,
 
-      3507,
+      3528,
 
-      1978,
+      1984,
 
-      993,
+      996,
 
       282,
 
-      3975,
+      3996,
 
-      3918,
+      3939,
 
-      2663,
+      2669,
       -1,
 
-      1435,
+      1438,
 
-      2558,
+      2564,
 
-      2279,
+      2291,
 
-      3993,
+      2285,
       -1,
 
-      3987,
+      4008,
 
-      3501,
+      3522,
 
-      1975,
+      1981,
 
-      987,
+      990,
 
       279,
 
-      3981,
+      4014,
 
-      3066,
+      3072,
 
-      2657,
+      2663,
 
-      3495,
+      3516,
 
-      1972,
+      1978,
 
-      981,
+      984,
 
       276,
 
-      3060,
+      3066,
       -1,
 
-      2651,
+      2657,
 
-      2996,
+      3008,
 
-      1669,
+      3002,
 
-      3465,
+      3486,
 
-      1957,
+      1963,
 
-      947,
+      950,
 
-      1993,
+      1999,
 
-      1023,
+      1026,
 
       297,
 
-      2621,
+      2627,
 
       369,
 
-      2693,
-
-      765,
+      2699,
+      -1,
 
-      3171,
+      3177,
 
-      3378,
+      3399,
 
-      2324,
+      2330,
 
-      3600,
+      3621,
 
-      3423,
+      3444,
 
-      1936,
+      1942,
 
-      903,
+      906,
 
       243,
 
@@ -1021,1923 +1021,1931 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
 
       613,
 
-      2579,
+      2585,
 
-      3480,
+      3501,
 
-      1573,
+      1576,
 
-      965,
+      968,
 
       270,
 
-      3360,
+      3381,
 
-      2306,
+      2312,
 
-      2636,
+      2642,
 
-      3840,
+      3861,
 
-      2039,
+      2045,
 
-      1078,
+      1081,
 
       342,
 
-      2462,
+      2468,
 
       65,
 
-      3594,
+      3615,
 
       348,
 
-      2477,
-
-      709,
+      2483,
 
-      2972,
+      712,
+      -1,
 
       138,
 
-      2396,
+      2402,
 
-      1849,
+      1852,
 
-      1411,
+      1414,
 
-      1567,
+      1570,
 
-      2411,
+      2417,
 
-      718,
+      721,
 
-      1426,
+      1429,
 
-      3822,
+      3843,
 
-      3017,
+      3023,
 
-      724,
-      -1,
+      727,
 
-      3354,
+      1678,
 
-      3195,
+      3375,
 
-      2036,
+      3201,
 
-      1075,
+      2042,
+
+      1078,
 
       339,
 
-      2456,
+      2462,
 
       59,
-      -1, -1,
+      -1,
 
-      351,
+      4002,
 
-      2483,
+      778,
 
-      2165,
+      1672,
 
-      1207,
+      2171,
 
-      2390,
+      1210,
 
-      3348,
+      2396,
 
-      1405,
+      3369,
 
-      2861,
+      1408,
 
-      1756,
+      2867,
 
-      3681,
+      1759,
 
-      1474,
+      3702,
 
-      1432,
+      1477,
 
-      3342,
+      768,
 
-      2027,
+      3363,
 
-      1066,
+      2033,
+
+      1069,
 
       330,
 
-      706,
+      709,
 
       40,
 
       622,
       -1,
 
-      3909,
+      3930,
 
-      3312,
+      3333,
       -1,
 
-      3384,
-
-      363,
+      3405,
+      -1,
 
-      2507,
+      2513,
 
-      1387,
+      1390,
 
-      2225,
+      2231,
 
-      1267,
+      1270,
 
       496,
 
-      3042,
+      3048,
 
       162,
 
       607,
 
-      2162,
+      2168,
 
-      1204,
+      1207,
 
-      1588,
+      1591,
       -1,
 
-      3888,
+      3909,
 
-      2858,
+      2864,
 
-      1750,
+      1753,
 
-      3675,
+      3696,
 
-      1468,
+      1471,
 
-      3327,
+      3348,
       -1,
 
-      3225,
+      3231,
 
       634,
 
-      2024,
+      2030,
 
-      1063,
+      1066,
 
       327,
 
-      3279,
+      3288,
 
       34,
 
-      3201,
+      3207,
 
-      1987,
+      1993,
 
-      1011,
+      1014,
 
       291,
       -1,
 
-      2501,
+      2507,
 
-      2681,
+      2687,
 
       601,
 
-      1381,
+      1384,
 
-      3489,
+      3510,
 
-      1969,
+      1975,
 
-      974,
+      977,
 
-      2345,
+      2351,
       -1,
 
-      3192,
+      3198,
 
-      2645,
+      2651,
 
-      3483,
+      3504,
 
-      1966,
+      1972,
 
-      968,
+      971,
 
-      3114,
+      3120,
 
-      3867,
+      3888,
 
       598,
 
-      2639,
+      2645,
 
-      3477,
+      3498,
 
-      1963,
+      1969,
 
-      962,
+      965,
       -1,
 
-      3960,
+      3981,
 
       595,
 
-      2633,
+      2639,
 
-      3468,
+      3489,
 
-      3072,
+      3078,
 
-      951,
+      954,
 
       264,
 
-      3246,
+      3252,
 
-      2336,
+      2342,
 
-      2624,
+      2630,
 
-      3309,
+      3330,
 
-      3048,
+      3054,
 
       625,
 
-      3189,
+      3195,
 
-      703,
+      706,
 
-      2327,
+      2333,
 
-      3435,
+      3456,
 
-      1942,
+      1948,
 
-      916,
+      919,
 
       249,
 
       2267,
       -1,
 
-      2591,
+      2597,
 
-      1651,
+      1654,
 
       574,
 
-      3039,
+      3045,
       -1,
 
-      3186,
+      3192,
 
-      2318,
+      2324,
 
-      3429,
+      3450,
 
-      1939,
+      1945,
 
-      910,
+      913,
 
       246,
 
-      745,
+      748,
 
-      3183,
+      3189,
 
-      2585,
+      2591,
 
-      3405,
+      3426,
 
-      1927,
+      1933,
 
       2954,
 
       237,
       -1,
 
-      2312,
+      2318,
 
-      1918,
+      1924,
 
-      3168,
+      3174,
 
       228,
 
-      3204,
+      3210,
 
-      4029,
+      4050,
 
-      1915,
+      1921,
 
       354,
 
       225,
 
-      1339,
+      1342,
 
-      3036,
+      3042,
       -1,
 
-      2294,
+      2300,
 
-      3372,
+      3393,
 
-      1330,
+      1333,
 
-      2261,
+      2255,
 
-      3147,
+      3153,
 
-      2288,
+      2294,
 
-      1438,
+      1441,
 
-      1327,
+      1330,
 
-      2249,
+      363,
 
       673,
 
-      3336,
+      3357,
 
-      3936,
+      3957,
 
-      3033,
+      3039,
 
-      3011,
+      3017,
 
-      1912,
+      1918,
 
-      3951,
+      3972,
 
       222,
 
-      3330,
+      3351,
 
-      3008,
+      3014,
 
-      3029,
+      3035,
 
-      3834,
+      3855,
 
-      2948,
+      2918,
 
-      3243,
+      3249,
 
-      3005,
-
-      3324,
+      3011,
 
-      2282,
+      3345,
 
-      2912,
+      2288,
+      -1,
 
-      1324,
+      1327,
 
-      3014,
+      3020,
 
       664,
 
-      3051,
-
-      3315,
-      -1,
+      3057,
 
-      2048,
+      3336,
 
-      1087,
+      3597,
 
-      3930,
+      2054,
 
-      2480,
+      1090,
 
-      2057,
+      3951,
 
-      688,
+      2486,
 
-      357,
+      120,
 
-      3957,
+      2894,
 
-      1126,
+      1834,
 
-      2738,
+      3777,
 
-      2999,
+      1552,
 
-      2414,
+      1642,
 
-      2780,
+      3005,
 
-      1429,
+      2420,
 
-      2243,
+      2063,
 
-      4062,
+      1432,
 
-      727,
+      357,
 
-      1447,
+      4083,
 
-      3828,
-      -1,
+      730,
 
-      2042,
+      2744,
 
-      1081,
+      3849,
 
-      3912,
+      739,
 
-      2468,
+      2048,
 
-      71,
+      1084,
 
-      1996,
+      3933,
 
-      1029,
+      2474,
 
-      300,
+      71,
 
-      1639,
+      1450,
+      -1,
 
-      3237,
+      2087,
 
-      2699,
+      1111,
 
-      2402,
+      3243,
+      -1,
 
-      2906,
+      2408,
 
-      1417,
+      2768,
 
-      3585,
+      1420,
 
-      2207,
+      3606,
 
-      1249,
-      -1,
+      2213,
 
-      736,
+      1252,
+      -1, -1,
 
       129,
 
-      3534,
+      3555,
 
-      1840,
+      1843,
 
-      3765,
+      3786,
 
-      1558,
+      1561,
 
       592,
 
       77,
 
-      1633,
+      1029,
 
-      1789,
+      1792,
 
-      3714,
+      3735,
 
-      1507,
+      1510,
 
-      3969,
+      2702,
 
       589,
 
-      2429,
-      -1, -1,
+      2435,
 
-      3906,
+      2144,
 
-      730,
-      -1,
+      1912,
 
-      345,
+      3927,
 
-      2471,
+      216,
 
-      74,
+      2249,
+
+      2840,
+
+      1705,
+
+      3648,
       -1,
 
-      3234,
+      3240,
 
-      3522,
+      3543,
 
-      2540,
+      2546,
 
       586,
 
       450,
 
-      2405,
+      1321,
 
-      3198,
+      3204,
 
-      1420,
+      806,
 
-      1777,
+      1780,
 
-      3702,
+      3723,
 
-      1495,
+      1498,
 
-      3516,
-      -1, -1,
+      3537,
+      -1,
+
+      2912,
 
       447,
 
-      3180,
+      3186,
 
-      2081,
+      351,
 
-      1108,
+      2489,
 
-      1771,
+      1774,
 
-      3696,
+      3717,
 
-      1489,
+      1492,
 
-      2762,
+      2993,
 
-      3177,
+      3183,
 
-      3510,
+      3531,
       -1,
 
-      2528,
+      2534,
 
       444,
-      -1,
 
-      1177,
+      1435,
 
-      3174,
+      1180,
 
-      1765,
+      3180,
 
-      3690,
+      1768,
 
-      1483,
+      3711,
 
-      1699,
+      1486,
 
-      3624,
+      1702,
 
-      2522,
+      3645,
+
+      2528,
 
       565,
 
-      3450,
+      3471,
 
-      3081,
+      3087,
 
-      931,
+      934,
 
       255,
 
       556,
-      -1,
 
-      2606,
+      1636,
 
-      3045,
+      2612,
+
+      3051,
 
       679,
 
       553,
 
-      2516,
+      2522,
       -1,
 
-      3153,
+      3159,
 
       432,
 
-      1693,
+      2495,
 
-      3618,
+      733,
 
-      3026,
+      3032,
 
-      1741,
+      1744,
 
-      3666,
+      3687,
 
-      1459,
+      1462,
       -1,
 
-      1186,
-
-      2423,
+      691,
 
-      3023,
+      2429,
 
-      795,
+      3029,
 
-      3150,
+      1453,
 
-      1717,
+      3156,
 
-      3642,
-      -1,
+      3408,
+      -1, -1,
 
       550,
 
-      3020,
+      3026,
 
-      2489,
+      2069,
 
-      3141,
+      3147,
 
-      2147,
+      2153,
 
-      2492,
+      2498,
 
       421,
 
-      820,
+      2750,
 
-      3132,
+      3138,
 
-      2843,
+      2849,
 
-      1720,
-
-      3645,
+      1723,
 
-      1450,
+      3666,
+      -1,
 
-      3129,
+      3135,
       -1, -1,
 
-      2123,
+      2138,
 
-      1165,
+      1177,
 
-      408,
+      414,
 
       676,
 
-      823,
-
-      2819,
+      826,
 
-      1672,
+      2834,
 
-      682,
+      1693,
 
-      2045,
+      2135,
 
-      1084,
+      1174,
 
-      3963,
+      411,
 
-      2474,
+      3990,
 
-      3459,
+      3984,
 
-      1954,
+      2831,
 
-      941,
-      -1,
+      1687,
 
-      770,
+      1861,
 
-      3126,
+      685,
 
-      2615,
+      795,
 
-      2408,
+      3132,
+      -1,
 
-      3462,
+      2129,
 
-      1423,
+      1168,
 
-      944,
+      408,
+      -1,
 
-      261,
+      789,
 
-      721,
-      -1,
+      2825,
 
-      2618,
+      1675,
       -1,
 
-      628,
+      2051,
 
-      3954,
+      1087,
 
-      3411,
+      3975,
 
-      1930,
+      2480,
 
-      2321,
+      2002,
 
-      240,
+      1032,
 
-      1026,
-      -1,
+      300,
 
-      3399,
+      1858,
 
-      1924,
+      773,
 
-      2696,
+      2705,
 
-      234,
+      405,
 
-      3252,
+      2414,
       -1,
 
-      4056,
-
-      3282,
+      1426,
 
-      1342,
-      -1,
+      1666,
 
-      3417,
+      4077,
 
-      1933,
+      724,
 
-      896,
+      345,
 
-      3942,
+      2477,
 
-      1336,
+      74,
       -1,
 
-      2573,
+      3258,
 
-      405,
+      3963,
 
-      2126,
+      402,
 
-      1168,
+      762,
+      -1,
 
-      4014,
+      2411,
 
-      1663,
+      1660,
 
-      2300,
+      1423,
 
-      2822,
+      4035,
 
-      1678,
+      547,
 
-      3207,
+      3801,
+
+      3483,
       -1,
 
-      3615,
+      947,
 
-      2222,
+      261,
 
-      1264,
+      3273,
 
-      493,
+      755,
 
-      759,
+      2624,
 
-      156,
+      3480,
 
-      3855,
+      1960,
+
+      944,
 
-      779,
+      3876,
       -1,
 
-      3609,
+      2327,
 
-      2219,
+      2621,
+      -1, -1,
 
-      1261,
+      3438,
 
-      490,
-      -1,
+      1939,
 
-      150,
+      899,
 
-      3087,
+      3453,
 
-      3849,
+      3870,
 
-      890,
+      916,
 
-      1582,
-      -1, -1, -1,
+      2579,
 
-      3945,
+      3432,
 
-      1117,
+      1936,
 
-      375,
+      2594,
 
-      3588,
-      -1,
+      240,
 
-      2771,
+      3093,
 
-      3843,
+      2306,
+      -1,
 
-      3240,
+      3327,
 
-      132,
+      2321,
 
-      3777,
+      3864,
 
-      1843,
+      3420,
 
-      3768,
+      1930,
 
-      1561,
+      3798,
 
-      3504,
+      234,
 
-      3054,
+      1345,
 
-      990,
+      3636,
 
-      3576,
+      2228,
 
-      2438,
+      1267,
 
-      577,
+      493,
 
-      2660,
+      3117,
 
-      881,
+      156,
 
-      120,
+      577,
+      -1,
 
-      2888,
+      3978,
 
-      1831,
+      1339,
 
-      3756,
+      3630,
 
-      1549,
+      2225,
 
-      3570,
+      1264,
 
-      3771,
+      490,
+      -1,
 
-      3387,
+      150,
 
-      3267,
+      3609,
 
-      3819,
+      893,
 
-      114,
+      3840,
 
-      2885,
+      1585,
+      -1,
 
-      1825,
+      132,
 
-      3750,
+      3591,
 
-      1543,
+      1846,
 
-      3558,
-      -1, -1,
+      3789,
 
-      3795,
+      1564,
       -1,
 
-      102,
+      114,
 
-      3546,
+      2891,
 
-      1813,
+      1828,
 
-      3738,
+      3771,
 
-      1531,
+      1546,
       -1,
 
-      89,
+      884,
 
-      3540,
+      3579,
+      -1,
 
-      1801,
+      688,
+      -1, -1,
 
-      3726,
-
-      1519,
-
-      3798,
-
-      83,
+      102,
 
-      3528,
+      3819,
 
-      1795,
+      1816,
 
-      3720,
+      3759,
 
-      1513,
-      -1, -1,
+      1534,
 
-      2564,
+      3567,
+      -1,
 
-      1783,
+      1129,
+      -1,
 
-      3708,
+      3549,
 
-      1501,
+      89,
 
-      441,
-      -1,
+      2786,
 
-      2552,
+      1804,
 
-      3111,
+      3747,
 
-      1759,
+      1522,
 
-      3684,
+      3561,
 
-      1477,
+      1786,
 
-      3456,
+      3729,
 
-      2546,
+      1504,
 
-      937,
+      2570,
 
-      258,
+      83,
 
-      580,
+      1035,
 
-      438,
+      1798,
 
-      2612,
+      3741,
 
-      2534,
-      -1,
+      1516,
 
-      1753,
+      2708,
 
-      3678,
+      3474,
 
-      1471,
+      1957,
 
-      583,
+      937,
 
-      435,
+      2558,
 
-      2510,
+      3264,
 
-      1195,
+      441,
 
-      429,
+      2615,
 
-      1747,
+      2540,
+      -1,
 
-      3672,
+      1762,
 
-      1465,
+      3705,
 
-      1735,
+      1480,
+      -1,
 
-      3660,
+      2552,
 
-      568,
+      2132,
 
-      3351,
+      1171,
 
-      3306,
+      628,
+      -1,
 
-      3948,
+      3324,
 
-      2504,
+      2828,
 
-      4059,
+      1681,
 
-      562,
+      4080,
       -1,
 
-      839,
+      438,
+      -1,
 
-      1999,
+      3321,
 
-      1035,
+      2516,
 
-      303,
+      1756,
 
-      2498,
-      -1,
+      3699,
 
-      2705,
+      1474,
 
-      3165,
+      782,
 
-      571,
-      -1,
+      2005,
 
-      4026,
+      1038,
 
-      2156,
+      303,
 
-      1198,
-      -1,
+      4047,
 
-      1192,
+      435,
 
-      425,
+      2711,
 
-      2852,
+      3315,
 
-      1738,
+      3969,
 
-      3663,
+      1750,
 
-      1729,
+      3693,
 
-      3654,
+      1468,
 
-      2153,
+      3099,
       -1,
 
-      4020,
+      2510,
+
+      583,
       -1,
 
-      3144,
+      4041,
+      -1,
 
-      2849,
+      3213,
+      -1, -1,
 
-      1732,
+      580,
 
-      3657,
+      3966,
 
-      833,
+      4017,
+      -1,
 
-      3996,
+      2504,
 
-      3138,
+      2126,
 
-      3453,
+      1165,
 
-      1951,
+      3999,
 
-      934,
+      3246,
 
-      3978,
+      571,
 
-      2150,
+      2822,
 
-      836,
+      1669,
 
-      2609,
+      3993,
 
-      2144,
+      2162,
 
-      3972,
+      1201,
+      -1,
 
-      2846,
+      568,
+      -1,
 
-      1726,
+      2858,
 
-      3651,
+      1741,
 
-      2840,
+      3684,
 
-      1714,
+      765,
 
-      3639,
-      -1,
+      1198,
 
-      1183,
+      429,
 
-      417,
+      2159,
       -1,
 
-      2141,
+      562,
 
-      830,
+      1738,
 
-      1711,
+      3681,
 
-      3636,
+      2855,
 
-      817,
+      1735,
 
-      2837,
+      3678,
 
-      1708,
+      3987,
 
-      3633,
+      3171,
+      -1,
 
-      2138,
+      3060,
+      -1,
 
-      3966,
-      -1, -1,
+      842,
 
-      813,
+      1195,
 
-      2834,
+      425,
 
-      1702,
+      839,
 
-      3627,
+      2156,
+      -1,
 
-      810,
+      1732,
 
-      2132,
+      3675,
 
-      1174,
+      2150,
 
-      414,
+      2852,
 
-      2135,
-      -1,
+      1729,
 
-      2828,
+      3672,
 
-      1690,
+      3150,
 
-      803,
+      2846,
 
-      2831,
+      1717,
 
-      1696,
+      3660,
 
-      3621,
+      836,
+      -1, -1, -1,
 
-      3273,
+      833,
+      -1,
 
-      2129,
+      3144,
+      -1,
 
-      1171,
+      820,
 
-      411,
-      -1,
+      1186,
 
-      792,
+      417,
 
-      2825,
+      2147,
 
-      1684,
+      2453,
+
+      49,
 
-      799,
+      1714,
 
-      2120,
+      3657,
 
-      1162,
+      2843,
 
-      15,
+      1711,
 
-      2717,
+      3654,
       -1,
 
-      2816,
+      2387,
+      -1,
 
-      1666,
+      1399,
       -1,
 
-      786,
+      816,
 
-      2369,
+      2141,
       -1,
 
-      1360,
-
-      2117,
+      813,
 
-      1159,
+      3882,
       -1,
 
-      3861,
+      2837,
 
-      762,
+      1699,
 
-      2813,
+      3642,
 
-      1660,
+      2123,
 
-      2111,
+      1162,
 
-      1153,
+      2066,
 
-      3498,
+      631,
 
-      3837,
+      360,
 
-      984,
+      2819,
 
-      2807,
+      1663,
 
-      1648,
-      -1,
+      2747,
 
-      2654,
+      802,
+      -1, -1, -1,
 
-      755,
+      2117,
 
-      3120,
+      1156,
 
-      2420,
+      3858,
 
-      2105,
+      1456,
 
-      1147,
+      758,
 
-      396,
+      2813,
 
-      3831,
+      1651,
 
-      742,
+      2111,
 
-      2801,
+      1150,
 
-      1636,
+      396,
 
-      2093,
+      3291,
 
-      1135,
+      2426,
 
-      390,
-      -1,
+      2807,
 
-      3825,
+      1639,
 
-      2789,
+      2060,
 
-      1612,
+      1096,
 
-      3813,
+      745,
 
-      1858,
+      1120,
 
-      733,
+      375,
 
-      2087,
+      2741,
 
-      1129,
+      3852,
 
-      384,
+      2777,
+      -1,
 
-      2054,
+      736,
 
-      1093,
+      2099,
 
-      2783,
+      1138,
 
-      1600,
+      390,
 
-      2060,
+      1444,
+      -1,
 
-      2735,
+      2795,
 
-      360,
-      -1, -1,
+      1615,
 
-      2741,
+      3168,
 
-      3447,
+      3846,
 
-      1948,
+      2093,
 
-      928,
+      1132,
 
-      1441,
-      -1,
+      384,
 
-      1855,
+      15,
 
-      2603,
+      2723,
 
-      1453,
+      2789,
 
-      2459,
+      1603,
+
+      2465,
 
       62,
 
-      2732,
+      2738,
 
-      3816,
+      2375,
 
-      2063,
+      3318,
 
-      3807,
+      1363,
 
-      2447,
+      2120,
 
-      49,
+      1159,
 
-      2393,
+      2399,
+      -1,
 
-      2744,
+      1411,
 
-      1408,
-      -1, -1,
+      2816,
 
-      3810,
+      1657,
 
-      2381,
+      4062,
 
-      1180,
+      3468,
 
-      1396,
+      1954,
 
-      3441,
+      931,
 
-      1945,
+      3462,
 
-      922,
+      1951,
 
-      1705,
+      925,
 
-      3630,
+      2609,
 
-      4041,
+      3216,
 
-      2597,
+      752,
 
-      3210,
+      2603,
 
-      1888,
+      3837,
+
+      1894,
       -1,
 
       198,
 
-      3804,
-      -1,
+      1891,
 
-      807,
+      1876,
 
-      3792,
-      -1,
+      195,
 
-      3345,
+      180,
+
+      3834,
+
+      1023,
       -1,
 
-      1885,
+      3831,
+
+      2270,
+
+      2696,
+
+      1303,
 
       2264,
 
-      195,
+      2258,
 
       1300,
 
-      3789,
+      1285,
+      -1, -1,
 
-      2078,
+      2084,
 
-      1105,
+      1108,
 
-      1870,
+      3312,
 
-      3786,
+      3828,
 
-      180,
+      1873,
 
-      2759,
+      2765,
 
-      2258,
+      177,
 
-      2066,
+      3825,
 
-      1297,
+      1870,
 
-      24,
+      2957,
 
-      2723,
+      174,
 
-      3780,
+      3813,
 
-      2747,
+      2951,
+
+      2921,
+
+      3063,
 
       2252,
 
-      2951,
+      1123,
 
       1282,
-
-      3162,
       -1,
 
-      1372,
+      2246,
 
-      1867,
+      2780,
+
+      1279,
       -1,
 
-      177,
+      2105,
 
-      3057,
+      1144,
+      -1,
 
-      3774,
+      670,
 
-      2945,
+      3810,
 
-      2465,
+      2801,
 
-      68,
+      1627,
 
-      1864,
-      -1,
+      3807,
 
-      174,
+      3603,
 
-      2246,
+      1909,
 
       2915,
 
-      1279,
-
-      2399,
+      213,
       -1,
 
-      1414,
+      126,
 
-      646,
+      2909,
 
-      3582,
+      1840,
 
-      2240,
+      3783,
 
-      4050,
+      1558,
 
-      1276,
-      -1,
+      3585,
 
-      126,
-      -1,
+      2075,
 
-      1837,
+      1099,
 
-      3762,
+      3795,
 
-      1555,
+      1318,
 
-      4053,
+      108,
 
-      2909,
+      2756,
 
-      2114,
+      1822,
 
-      1156,
+      3765,
 
-      21,
+      1540,
 
-      2720,
-      -1,
+      1189,
 
-      2810,
+      3942,
 
-      1654,
+      1183,
 
-      2903,
+      24,
 
-      4002,
-      -1,
+      2729,
 
-      3564,
+      1720,
 
-      1366,
-      -1,
+      3663,
 
-      3885,
+      1708,
 
-      3990,
+      3651,
+      -1,
 
-      108,
+      2987,
+      -1,
 
-      749,
+      1375,
 
-      1819,
+      2114,
 
-      3744,
+      1153,
 
-      1537,
+      823,
 
-      2108,
+      3402,
 
-      1150,
+      810,
 
-      3303,
+      2810,
+
+      1645,
       -1,
 
-      4008,
+      4074,
 
-      2804,
+      2072,
 
-      1642,
+      1696,
 
-      2099,
+      3639,
 
-      1141,
-      -1,
+      2102,
 
-      2069,
+      1141,
 
-      1096,
+      2753,
 
-      2795,
+      4071,
 
-      1624,
+      742,
 
-      3300,
+      2798,
 
-      2750,
+      1621,
 
-      739,
+      3309,
 
-      2096,
+      798,
 
-      1138,
+      3261,
+      -1, -1,
 
-      2453,
+      4029,
 
-      56,
+      2471,
 
-      3606,
+      68,
 
-      2792,
+      4044,
 
-      1618,
+      2459,
 
-      2441,
+      56,
 
-      43,
+      646,
 
-      147,
+      4023,
+      -1,
 
-      2387,
+      2405,
       -1,
 
-      1402,
+      1417,
 
-      1579,
-      -1,
+      2393,
 
-      2375,
+      9,
 
-      3444,
+      1405,
 
-      1390,
+      21,
 
-      925,
+      2726,
 
-      252,
-      -1,
+      4011,
 
-      887,
+      2447,
 
-      2600,
+      43,
 
-      3291,
+      2369,
 
-      670,
+      3255,
 
-      685,
+      1357,
 
-      3432,
+      3282,
+
+      1369,
       -1,
 
-      913,
+      2381,
 
-      3426,
+      3477,
 
-      1120,
+      1393,
 
-      906,
+      940,
 
-      2588,
+      258,
 
-      3285,
+      3300,
 
-      2774,
+      3906,
 
-      2582,
+      2618,
 
-      3249,
+      1117,
 
-      3783,
+      3096,
 
-      2315,
-      -1,
+      3627,
 
-      3255,
+      3954,
 
-      2309,
-      -1,
+      2774,
 
-      3420,
+      529,
 
-      3933,
+      3294,
 
-      899,
+      147,
 
-      529,
+      526,
 
-      3159,
+      511,
 
-      1114,
+      3525,
 
-      2576,
+      1582,
 
-      3921,
+      993,
       -1,
 
-      2768,
+      2444,
 
-      402,
-      -1,
+      3465,
 
-      2303,
+      2666,
 
-      526,
+      928,
 
-      1657,
+      252,
 
-      3258,
+      890,
 
-      3414,
+      3447,
 
-      1906,
+      2606,
 
-      893,
+      909,
+      -1, -1,
 
-      216,
+      3090,
 
-      511,
-      -1,
+      2588,
 
-      2570,
+      3126,
 
-      655,
+      3165,
 
-      752,
+      508,
+      -1,
 
-      691,
-      -1, -1,
+      3162,
 
-      2297,
+      2315,
 
-      3156,
+      505,
 
-      1318,
+      3441,
 
-      3084,
-      -1, -1,
+      3435,
 
-      1903,
+      902,
 
-      3090,
+      896,
+      -1, -1,
 
-      213,
+      2582,
 
-      508,
-      -1,
+      2576,
+
+      1903,
 
-      1897,
-      -1,
+      1900,
 
       207,
 
-      1894,
-      -1,
-
       204,
 
-      505,
-
-      2987,
+      2309,
 
-      1315,
+      2303,
 
-      1882,
+      1017,
 
-      3897,
+      1888,
+      -1,
 
       192,
 
-      3264,
+      2690,
+
+      4065,
+      -1,
+
+      1312,
 
       1309,
 
-      3093,
+      544,
 
-      4047,
+      3270,
 
-      1306,
+      2108,
 
-      1876,
-      -1,
+      1147,
 
-      186,
+      1882,
 
-      2075,
+      1297,
 
-      1102,
+      186,
 
-      1294,
-      -1,
+      2804,
 
-      2981,
+      1633,
 
-      2756,
+      1011,
 
-      649,
+      700,
+      -1, -1,
 
-      3939,
-      -1,
+      2684,
+
+      2975,
 
       2969,
 
-      1288,
-      -1,
+      3285,
 
-      2963,
-      -1,
+      1291,
 
-      2102,
+      655,
 
-      1144,
+      1005,
 
-      2072,
+      3816,
 
-      1099,
+      2945,
 
-      2939,
+      3804,
 
-      2798,
+      2678,
 
-      1630,
+      3306,
 
-      2753,
+      2081,
 
-      9,
-      -1,
+      1105,
 
-      1014,
+      2078,
+
+      1102,
       -1,
 
-      2927,
+      2762,
 
-      3,
+      999,
 
-      2684,
+      2759,
 
-      2363,
+      2933,
 
-      3108,
+      3372,
 
-      1354,
+      2672,
 
-      3891,
+      3,
       -1,
 
-      2357,
-
-      1008,
+      3792,
 
-      1348,
+      3114,
 
-      3096,
+      3519,
 
-      697,
+      694,
 
-      2678,
+      987,
 
-      1002,
+      2363,
 
-      996,
+      3918,
 
-      1032,
-      -1,
+      1351,
 
-      2672,
+      2660,
 
-      2666,
+      3513,
+      -1,
 
-      2702,
+      980,
+      -1, -1, -1,
 
-      3492,
-      -1,
+      2654,
 
-      977,
+      3129,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
 
-      1020,
+      649,
       -1, -1,
 
-      2648,
+      3396,
+      -1, -1, -1, -1, -1, -1,
 
-      2690,
+      3303,
       -1, -1,
 
-      4044,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1,
+      3960,
 
-      3297,
+      3105,
       -1,
 
-      3927,
+      3948,
       -1, -1, -1, -1,
 
-      3915,
+      3390,
       -1, -1,
 
-      3294,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-
-      3375,
-      -1,
-
-      547,
-      -1,
-
-      3276,
+      3900,
       -1,
 
-      3099,
-      -1, -1, -1, -1,
+      3912,
+      -1, -1, -1,
 
-      3369,
-      -1, -1, -1, -1,
+      3936,
 
-      3363,
+      3384,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
 
-      3357,
+      3378,
       -1,
 
-      544,
+      3102,
+      -1, -1, -1, -1, -1, -1,
       -1, -1,
 
-      3270,
-      -1,
+      3366,
 
-      538,
+      3279,
+      -1, -1, -1, -1, -1,
 
-      3339,
+      3360,
+      -1, -1, -1,
 
-      3381,
+      538,
 
       535,
-      -1, -1, -1, -1, -1,
+      -1, -1, -1,
 
-      523,
-      -1, -1, -1, -1, -1, -1,
+      619,
       -1,
 
-      517,
-
-      3123,
-      -1, -1, -1, -1, -1, -1,
+      523,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1,
 
-      3117,
-      -1, -1, -1, -1, -1, -1,
-
-      619,
+      517,
       -1, -1, -1,
 
-      4038,
-      -1, -1, -1, -1, -1, -1,
-
       616,
       -1, -1, -1, -1,
 
+      3123,
+      -1, -1, -1, -1,
+
       610,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
 
       604,
-
-      631,
-      -1, -1,
-
-      3879,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
 
-      3873,
+      4059,
       -1, -1,
 
-      4032,
+      4053,
+      -1,
+
+      3894,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-
-      3105,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
 
-      3102,
+      3111,
+      -1,
+
+      3108,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
@@ -2952,26 +2960,27 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
 
-      4035,
+      4068,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1,
 
-      4023,
-      -1, -1,
+      4056,
+      -1, -1, -1, -1,
 
-      4017,
+      4038,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1,
 
-      4011,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
+      4032,
 
-      4005
+      4026
     };
 
   if (0 == 0)
@@ -2988,5 +2997,3 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
     }
   return -1;
 }
-
-
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c
index 1926b2569f..3d93e2417a 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold2_key unicode_fold2_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold2_key unicode_fold2_key.gperf  */
 /* Computed positions: -k'3,6' */
 
 
@@ -225,5 +225,3 @@ onigenc_unicode_fold2_key(OnigCodePoint codes[])
     }
   return -1;
 }
-
-
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c
index 9c4415af59..bdd5667c6a 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold3_key unicode_fold3_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold3_key unicode_fold3_key.gperf  */
 /* Computed positions: -k'3,6,9' */
 
 
@@ -135,5 +135,3 @@ onigenc_unicode_fold3_key(OnigCodePoint codes[])
     }
   return -1;
 }
-
-
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c
index 87d0be7e73..400975b523 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c
@@ -1,7 +1,7 @@
 /* This file was generated by make_unicode_fold_data.py. */
 #include "regenc.h"
 
-#define UNICODE_CASEFOLD_VERSION  11_0_0
+#define UNICODE_CASEFOLD_VERSION  12_1_0
 
 
 OnigCodePoint OnigUnicodeFolds1[] = {
@@ -230,1130 +230,1137 @@ OnigCodePoint OnigUnicodeFolds1[] = {
  /* 673*/    0x0275,  1,   0x019f, /* LATIN CAPITAL LETTER O WITH MIDDL.. */
  /* 676*/    0x027d,  1,   0x2c64, /* LATIN CAPITAL LETTER R WITH TAIL */
  /* 679*/    0x0280,  1,   0x01a6, /* LATIN LETTER YR */
- /* 682*/    0x0283,  1,   0x01a9, /* LATIN CAPITAL LETTER ESH */
- /* 685*/    0x0287,  1,   0xa7b1, /* LATIN CAPITAL LETTER TURNED T */
- /* 688*/    0x0288,  1,   0x01ae, /* LATIN CAPITAL LETTER T WITH RETRO.. */
- /* 691*/    0x0289,  1,   0x0244, /* LATIN CAPITAL LETTER U BAR */
- /* 694*/    0x028a,  1,   0x01b1, /* LATIN CAPITAL LETTER UPSILON */
- /* 697*/    0x028b,  1,   0x01b2, /* LATIN CAPITAL LETTER V WITH HOOK */
- /* 700*/    0x028c,  1,   0x0245, /* LATIN CAPITAL LETTER TURNED V */
- /* 703*/    0x0292,  1,   0x01b7, /* LATIN CAPITAL LETTER EZH */
- /* 706*/    0x029d,  1,   0xa7b2, /* LATIN CAPITAL LETTER J WITH CROSS.. */
- /* 709*/    0x029e,  1,   0xa7b0, /* LATIN CAPITAL LETTER TURNED K */
- /* 712*/    0x0371,  1,   0x0370, /* GREEK CAPITAL LETTER HETA */
- /* 715*/    0x0373,  1,   0x0372, /* GREEK CAPITAL LETTER ARCHAIC SAMPI */
- /* 718*/    0x0377,  1,   0x0376, /* GREEK CAPITAL LETTER PAMPHYLIAN D.. */
- /* 721*/    0x037b,  1,   0x03fd, /* GREEK CAPITAL REVERSED LUNATE SIG.. */
- /* 724*/    0x037c,  1,   0x03fe, /* GREEK CAPITAL DOTTED LUNATE SIGMA.. */
- /* 727*/    0x037d,  1,   0x03ff, /* GREEK CAPITAL REVERSED DOTTED LUN.. */
- /* 730*/    0x03ac,  1,   0x0386, /* GREEK CAPITAL LETTER ALPHA WITH T.. */
- /* 733*/    0x03ad,  1,   0x0388, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /* 736*/    0x03ae,  1,   0x0389, /* GREEK CAPITAL LETTER ETA WITH TON.. */
- /* 739*/    0x03af,  1,   0x038a, /* GREEK CAPITAL LETTER IOTA WITH TO.. */
- /* 742*/    0x03b1,  1,   0x0391, /* GREEK CAPITAL LETTER ALPHA */
- /* 745*/    0x03b2,  2,   0x0392,   0x03d0, /* GREEK CAPITAL LETTER BETA */
- /* 749*/    0x03b3,  1,   0x0393, /* GREEK CAPITAL LETTER GAMMA */
- /* 752*/    0x03b4,  1,   0x0394, /* GREEK CAPITAL LETTER DELTA */
- /* 755*/    0x03b5,  2,   0x0395,   0x03f5, /* GREEK CAPITAL LETTER EPSILON */
- /* 759*/    0x03b6,  1,   0x0396, /* GREEK CAPITAL LETTER ZETA */
- /* 762*/    0x03b7,  1,   0x0397, /* GREEK CAPITAL LETTER ETA */
- /* 765*/    0x03b8,  3,   0x0398,   0x03d1,   0x03f4, /* GREEK CAPITAL LETTER THETA */
- /* 770*/    0x03b9,  3,   0x0345,   0x0399,   0x1fbe, /* COMBINING GREEK YPOGEGRAMMENI */
- /* 775*/    0x03ba,  2,   0x039a,   0x03f0, /* GREEK CAPITAL LETTER KAPPA */
- /* 779*/    0x03bb,  1,   0x039b, /* GREEK CAPITAL LETTER LAMDA */
- /* 782*/    0x03bc,  2,   0x00b5,   0x039c, /* MICRO SIGN */
- /* 786*/    0x03bd,  1,   0x039d, /* GREEK CAPITAL LETTER NU */
- /* 789*/    0x03be,  1,   0x039e, /* GREEK CAPITAL LETTER XI */
- /* 792*/    0x03bf,  1,   0x039f, /* GREEK CAPITAL LETTER OMICRON */
- /* 795*/    0x03c0,  2,   0x03a0,   0x03d6, /* GREEK CAPITAL LETTER PI */
- /* 799*/    0x03c1,  2,   0x03a1,   0x03f1, /* GREEK CAPITAL LETTER RHO */
- /* 803*/    0x03c3,  2,   0x03a3,   0x03c2, /* GREEK CAPITAL LETTER SIGMA */
- /* 807*/    0x03c4,  1,   0x03a4, /* GREEK CAPITAL LETTER TAU */
- /* 810*/    0x03c5,  1,   0x03a5, /* GREEK CAPITAL LETTER UPSILON */
- /* 813*/    0x03c6,  2,   0x03a6,   0x03d5, /* GREEK CAPITAL LETTER PHI */
- /* 817*/    0x03c7,  1,   0x03a7, /* GREEK CAPITAL LETTER CHI */
- /* 820*/    0x03c8,  1,   0x03a8, /* GREEK CAPITAL LETTER PSI */
- /* 823*/    0x03c9,  2,   0x03a9,   0x2126, /* GREEK CAPITAL LETTER OMEGA */
- /* 827*/    0x03ca,  1,   0x03aa, /* GREEK CAPITAL LETTER IOTA WITH DI.. */
- /* 830*/    0x03cb,  1,   0x03ab, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /* 833*/    0x03cc,  1,   0x038c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /* 836*/    0x03cd,  1,   0x038e, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /* 839*/    0x03ce,  1,   0x038f, /* GREEK CAPITAL LETTER OMEGA WITH T.. */
- /* 842*/    0x03d7,  1,   0x03cf, /* GREEK CAPITAL KAI SYMBOL */
- /* 845*/    0x03d9,  1,   0x03d8, /* GREEK LETTER ARCHAIC KOPPA */
- /* 848*/    0x03db,  1,   0x03da, /* GREEK LETTER STIGMA */
- /* 851*/    0x03dd,  1,   0x03dc, /* GREEK LETTER DIGAMMA */
- /* 854*/    0x03df,  1,   0x03de, /* GREEK LETTER KOPPA */
- /* 857*/    0x03e1,  1,   0x03e0, /* GREEK LETTER SAMPI */
- /* 860*/    0x03e3,  1,   0x03e2, /* COPTIC CAPITAL LETTER SHEI */
- /* 863*/    0x03e5,  1,   0x03e4, /* COPTIC CAPITAL LETTER FEI */
- /* 866*/    0x03e7,  1,   0x03e6, /* COPTIC CAPITAL LETTER KHEI */
- /* 869*/    0x03e9,  1,   0x03e8, /* COPTIC CAPITAL LETTER HORI */
- /* 872*/    0x03eb,  1,   0x03ea, /* COPTIC CAPITAL LETTER GANGIA */
- /* 875*/    0x03ed,  1,   0x03ec, /* COPTIC CAPITAL LETTER SHIMA */
- /* 878*/    0x03ef,  1,   0x03ee, /* COPTIC CAPITAL LETTER DEI */
- /* 881*/    0x03f2,  1,   0x03f9, /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
- /* 884*/    0x03f3,  1,   0x037f, /* GREEK CAPITAL LETTER YOT */
- /* 887*/    0x03f8,  1,   0x03f7, /* GREEK CAPITAL LETTER SHO */
- /* 890*/    0x03fb,  1,   0x03fa, /* GREEK CAPITAL LETTER SAN */
- /* 893*/    0x0430,  1,   0x0410, /* CYRILLIC CAPITAL LETTER A */
- /* 896*/    0x0431,  1,   0x0411, /* CYRILLIC CAPITAL LETTER BE */
- /* 899*/    0x0432,  2,   0x0412,   0x1c80, /* CYRILLIC CAPITAL LETTER VE */
- /* 903*/    0x0433,  1,   0x0413, /* CYRILLIC CAPITAL LETTER GHE */
- /* 906*/    0x0434,  2,   0x0414,   0x1c81, /* CYRILLIC CAPITAL LETTER DE */
- /* 910*/    0x0435,  1,   0x0415, /* CYRILLIC CAPITAL LETTER IE */
- /* 913*/    0x0436,  1,   0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
- /* 916*/    0x0437,  1,   0x0417, /* CYRILLIC CAPITAL LETTER ZE */
- /* 919*/    0x0438,  1,   0x0418, /* CYRILLIC CAPITAL LETTER I */
- /* 922*/    0x0439,  1,   0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
- /* 925*/    0x043a,  1,   0x041a, /* CYRILLIC CAPITAL LETTER KA */
- /* 928*/    0x043b,  1,   0x041b, /* CYRILLIC CAPITAL LETTER EL */
- /* 931*/    0x043c,  1,   0x041c, /* CYRILLIC CAPITAL LETTER EM */
- /* 934*/    0x043d,  1,   0x041d, /* CYRILLIC CAPITAL LETTER EN */
- /* 937*/    0x043e,  2,   0x041e,   0x1c82, /* CYRILLIC CAPITAL LETTER O */
- /* 941*/    0x043f,  1,   0x041f, /* CYRILLIC CAPITAL LETTER PE */
- /* 944*/    0x0440,  1,   0x0420, /* CYRILLIC CAPITAL LETTER ER */
- /* 947*/    0x0441,  2,   0x0421,   0x1c83, /* CYRILLIC CAPITAL LETTER ES */
- /* 951*/    0x0442,  3,   0x0422,   0x1c84,   0x1c85, /* CYRILLIC CAPITAL LETTER TE */
- /* 956*/    0x0443,  1,   0x0423, /* CYRILLIC CAPITAL LETTER U */
- /* 959*/    0x0444,  1,   0x0424, /* CYRILLIC CAPITAL LETTER EF */
- /* 962*/    0x0445,  1,   0x0425, /* CYRILLIC CAPITAL LETTER HA */
- /* 965*/    0x0446,  1,   0x0426, /* CYRILLIC CAPITAL LETTER TSE */
- /* 968*/    0x0447,  1,   0x0427, /* CYRILLIC CAPITAL LETTER CHE */
- /* 971*/    0x0448,  1,   0x0428, /* CYRILLIC CAPITAL LETTER SHA */
- /* 974*/    0x0449,  1,   0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */
- /* 977*/    0x044a,  2,   0x042a,   0x1c86, /* CYRILLIC CAPITAL LETTER HARD SIGN */
- /* 981*/    0x044b,  1,   0x042b, /* CYRILLIC CAPITAL LETTER YERU */
- /* 984*/    0x044c,  1,   0x042c, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
- /* 987*/    0x044d,  1,   0x042d, /* CYRILLIC CAPITAL LETTER E */
- /* 990*/    0x044e,  1,   0x042e, /* CYRILLIC CAPITAL LETTER YU */
- /* 993*/    0x044f,  1,   0x042f, /* CYRILLIC CAPITAL LETTER YA */
- /* 996*/    0x0450,  1,   0x0400, /* CYRILLIC CAPITAL LETTER IE WITH G.. */
- /* 999*/    0x0451,  1,   0x0401, /* CYRILLIC CAPITAL LETTER IO */
- /*1002*/    0x0452,  1,   0x0402, /* CYRILLIC CAPITAL LETTER DJE */
- /*1005*/    0x0453,  1,   0x0403, /* CYRILLIC CAPITAL LETTER GJE */
- /*1008*/    0x0454,  1,   0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN.. */
- /*1011*/    0x0455,  1,   0x0405, /* CYRILLIC CAPITAL LETTER DZE */
- /*1014*/    0x0456,  1,   0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSS.. */
- /*1017*/    0x0457,  1,   0x0407, /* CYRILLIC CAPITAL LETTER YI */
- /*1020*/    0x0458,  1,   0x0408, /* CYRILLIC CAPITAL LETTER JE */
- /*1023*/    0x0459,  1,   0x0409, /* CYRILLIC CAPITAL LETTER LJE */
- /*1026*/    0x045a,  1,   0x040a, /* CYRILLIC CAPITAL LETTER NJE */
- /*1029*/    0x045b,  1,   0x040b, /* CYRILLIC CAPITAL LETTER TSHE */
- /*1032*/    0x045c,  1,   0x040c, /* CYRILLIC CAPITAL LETTER KJE */
- /*1035*/    0x045d,  1,   0x040d, /* CYRILLIC CAPITAL LETTER I WITH GR.. */
- /*1038*/    0x045e,  1,   0x040e, /* CYRILLIC CAPITAL LETTER SHORT U */
- /*1041*/    0x045f,  1,   0x040f, /* CYRILLIC CAPITAL LETTER DZHE */
- /*1044*/    0x0461,  1,   0x0460, /* CYRILLIC CAPITAL LETTER OMEGA */
- /*1047*/    0x0463,  2,   0x0462,   0x1c87, /* CYRILLIC CAPITAL LETTER YAT */
- /*1051*/    0x0465,  1,   0x0464, /* CYRILLIC CAPITAL LETTER IOTIFIED E */
- /*1054*/    0x0467,  1,   0x0466, /* CYRILLIC CAPITAL LETTER LITTLE YUS */
- /*1057*/    0x0469,  1,   0x0468, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*1060*/    0x046b,  1,   0x046a, /* CYRILLIC CAPITAL LETTER BIG YUS */
- /*1063*/    0x046d,  1,   0x046c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*1066*/    0x046f,  1,   0x046e, /* CYRILLIC CAPITAL LETTER KSI */
- /*1069*/    0x0471,  1,   0x0470, /* CYRILLIC CAPITAL LETTER PSI */
- /*1072*/    0x0473,  1,   0x0472, /* CYRILLIC CAPITAL LETTER FITA */
- /*1075*/    0x0475,  1,   0x0474, /* CYRILLIC CAPITAL LETTER IZHITSA */
- /*1078*/    0x0477,  1,   0x0476, /* CYRILLIC CAPITAL LETTER IZHITSA W.. */
- /*1081*/    0x0479,  1,   0x0478, /* CYRILLIC CAPITAL LETTER UK */
- /*1084*/    0x047b,  1,   0x047a, /* CYRILLIC CAPITAL LETTER ROUND OME.. */
- /*1087*/    0x047d,  1,   0x047c, /* CYRILLIC CAPITAL LETTER OMEGA WIT.. */
- /*1090*/    0x047f,  1,   0x047e, /* CYRILLIC CAPITAL LETTER OT */
- /*1093*/    0x0481,  1,   0x0480, /* CYRILLIC CAPITAL LETTER KOPPA */
- /*1096*/    0x048b,  1,   0x048a, /* CYRILLIC CAPITAL LETTER SHORT I W.. */
- /*1099*/    0x048d,  1,   0x048c, /* CYRILLIC CAPITAL LETTER SEMISOFT .. */
- /*1102*/    0x048f,  1,   0x048e, /* CYRILLIC CAPITAL LETTER ER WITH T.. */
- /*1105*/    0x0491,  1,   0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1108*/    0x0493,  1,   0x0492, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1111*/    0x0495,  1,   0x0494, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1114*/    0x0497,  1,   0x0496, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1117*/    0x0499,  1,   0x0498, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
- /*1120*/    0x049b,  1,   0x049a, /* CYRILLIC CAPITAL LETTER KA WITH D.. */
- /*1123*/    0x049d,  1,   0x049c, /* CYRILLIC CAPITAL LETTER KA WITH V.. */
- /*1126*/    0x049f,  1,   0x049e, /* CYRILLIC CAPITAL LETTER KA WITH S.. */
- /*1129*/    0x04a1,  1,   0x04a0, /* CYRILLIC CAPITAL LETTER BASHKIR KA */
- /*1132*/    0x04a3,  1,   0x04a2, /* CYRILLIC CAPITAL LETTER EN WITH D.. */
- /*1135*/    0x04a5,  1,   0x04a4, /* CYRILLIC CAPITAL LIGATURE EN GHE */
- /*1138*/    0x04a7,  1,   0x04a6, /* CYRILLIC CAPITAL LETTER PE WITH M.. */
- /*1141*/    0x04a9,  1,   0x04a8, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1144*/    0x04ab,  1,   0x04aa, /* CYRILLIC CAPITAL LETTER ES WITH D.. */
- /*1147*/    0x04ad,  1,   0x04ac, /* CYRILLIC CAPITAL LETTER TE WITH D.. */
- /*1150*/    0x04af,  1,   0x04ae, /* CYRILLIC CAPITAL LETTER STRAIGHT U */
- /*1153*/    0x04b1,  1,   0x04b0, /* CYRILLIC CAPITAL LETTER STRAIGHT .. */
- /*1156*/    0x04b3,  1,   0x04b2, /* CYRILLIC CAPITAL LETTER HA WITH D.. */
- /*1159*/    0x04b5,  1,   0x04b4, /* CYRILLIC CAPITAL LIGATURE TE TSE */
- /*1162*/    0x04b7,  1,   0x04b6, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1165*/    0x04b9,  1,   0x04b8, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1168*/    0x04bb,  1,   0x04ba, /* CYRILLIC CAPITAL LETTER SHHA */
- /*1171*/    0x04bd,  1,   0x04bc, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1174*/    0x04bf,  1,   0x04be, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1177*/    0x04c2,  1,   0x04c1, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1180*/    0x04c4,  1,   0x04c3, /* CYRILLIC CAPITAL LETTER KA WITH H.. */
- /*1183*/    0x04c6,  1,   0x04c5, /* CYRILLIC CAPITAL LETTER EL WITH T.. */
- /*1186*/    0x04c8,  1,   0x04c7, /* CYRILLIC CAPITAL LETTER EN WITH H.. */
- /*1189*/    0x04ca,  1,   0x04c9, /* CYRILLIC CAPITAL LETTER EN WITH T.. */
- /*1192*/    0x04cc,  1,   0x04cb, /* CYRILLIC CAPITAL LETTER KHAKASSIA.. */
- /*1195*/    0x04ce,  1,   0x04cd, /* CYRILLIC CAPITAL LETTER EM WITH T.. */
- /*1198*/    0x04cf,  1,   0x04c0, /* CYRILLIC LETTER PALOCHKA */
- /*1201*/    0x04d1,  1,   0x04d0, /* CYRILLIC CAPITAL LETTER A WITH BR.. */
- /*1204*/    0x04d3,  1,   0x04d2, /* CYRILLIC CAPITAL LETTER A WITH DI.. */
- /*1207*/    0x04d5,  1,   0x04d4, /* CYRILLIC CAPITAL LIGATURE A IE */
- /*1210*/    0x04d7,  1,   0x04d6, /* CYRILLIC CAPITAL LETTER IE WITH B.. */
- /*1213*/    0x04d9,  1,   0x04d8, /* CYRILLIC CAPITAL LETTER SCHWA */
- /*1216*/    0x04db,  1,   0x04da, /* CYRILLIC CAPITAL LETTER SCHWA WIT.. */
- /*1219*/    0x04dd,  1,   0x04dc, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1222*/    0x04df,  1,   0x04de, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
- /*1225*/    0x04e1,  1,   0x04e0, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1228*/    0x04e3,  1,   0x04e2, /* CYRILLIC CAPITAL LETTER I WITH MA.. */
- /*1231*/    0x04e5,  1,   0x04e4, /* CYRILLIC CAPITAL LETTER I WITH DI.. */
- /*1234*/    0x04e7,  1,   0x04e6, /* CYRILLIC CAPITAL LETTER O WITH DI.. */
- /*1237*/    0x04e9,  1,   0x04e8, /* CYRILLIC CAPITAL LETTER BARRED O */
- /*1240*/    0x04eb,  1,   0x04ea, /* CYRILLIC CAPITAL LETTER BARRED O .. */
- /*1243*/    0x04ed,  1,   0x04ec, /* CYRILLIC CAPITAL LETTER E WITH DI.. */
- /*1246*/    0x04ef,  1,   0x04ee, /* CYRILLIC CAPITAL LETTER U WITH MA.. */
- /*1249*/    0x04f1,  1,   0x04f0, /* CYRILLIC CAPITAL LETTER U WITH DI.. */
- /*1252*/    0x04f3,  1,   0x04f2, /* CYRILLIC CAPITAL LETTER U WITH DO.. */
- /*1255*/    0x04f5,  1,   0x04f4, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1258*/    0x04f7,  1,   0x04f6, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1261*/    0x04f9,  1,   0x04f8, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
- /*1264*/    0x04fb,  1,   0x04fa, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1267*/    0x04fd,  1,   0x04fc, /* CYRILLIC CAPITAL LETTER HA WITH H.. */
- /*1270*/    0x04ff,  1,   0x04fe, /* CYRILLIC CAPITAL LETTER HA WITH S.. */
- /*1273*/    0x0501,  1,   0x0500, /* CYRILLIC CAPITAL LETTER KOMI DE */
- /*1276*/    0x0503,  1,   0x0502, /* CYRILLIC CAPITAL LETTER KOMI DJE */
- /*1279*/    0x0505,  1,   0x0504, /* CYRILLIC CAPITAL LETTER KOMI ZJE */
- /*1282*/    0x0507,  1,   0x0506, /* CYRILLIC CAPITAL LETTER KOMI DZJE */
- /*1285*/    0x0509,  1,   0x0508, /* CYRILLIC CAPITAL LETTER KOMI LJE */
- /*1288*/    0x050b,  1,   0x050a, /* CYRILLIC CAPITAL LETTER KOMI NJE */
- /*1291*/    0x050d,  1,   0x050c, /* CYRILLIC CAPITAL LETTER KOMI SJE */
- /*1294*/    0x050f,  1,   0x050e, /* CYRILLIC CAPITAL LETTER KOMI TJE */
- /*1297*/    0x0511,  1,   0x0510, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*1300*/    0x0513,  1,   0x0512, /* CYRILLIC CAPITAL LETTER EL WITH H.. */
- /*1303*/    0x0515,  1,   0x0514, /* CYRILLIC CAPITAL LETTER LHA */
- /*1306*/    0x0517,  1,   0x0516, /* CYRILLIC CAPITAL LETTER RHA */
- /*1309*/    0x0519,  1,   0x0518, /* CYRILLIC CAPITAL LETTER YAE */
- /*1312*/    0x051b,  1,   0x051a, /* CYRILLIC CAPITAL LETTER QA */
- /*1315*/    0x051d,  1,   0x051c, /* CYRILLIC CAPITAL LETTER WE */
- /*1318*/    0x051f,  1,   0x051e, /* CYRILLIC CAPITAL LETTER ALEUT KA */
- /*1321*/    0x0521,  1,   0x0520, /* CYRILLIC CAPITAL LETTER EL WITH M.. */
- /*1324*/    0x0523,  1,   0x0522, /* CYRILLIC CAPITAL LETTER EN WITH M.. */
- /*1327*/    0x0525,  1,   0x0524, /* CYRILLIC CAPITAL LETTER PE WITH D.. */
- /*1330*/    0x0527,  1,   0x0526, /* CYRILLIC CAPITAL LETTER SHHA WITH.. */
- /*1333*/    0x0529,  1,   0x0528, /* CYRILLIC CAPITAL LETTER EN WITH L.. */
- /*1336*/    0x052b,  1,   0x052a, /* CYRILLIC CAPITAL LETTER DZZHE */
- /*1339*/    0x052d,  1,   0x052c, /* CYRILLIC CAPITAL LETTER DCHE */
- /*1342*/    0x052f,  1,   0x052e, /* CYRILLIC CAPITAL LETTER EL WITH D.. */
- /*1345*/    0x0561,  1,   0x0531, /* ARMENIAN CAPITAL LETTER AYB */
- /*1348*/    0x0562,  1,   0x0532, /* ARMENIAN CAPITAL LETTER BEN */
- /*1351*/    0x0563,  1,   0x0533, /* ARMENIAN CAPITAL LETTER GIM */
- /*1354*/    0x0564,  1,   0x0534, /* ARMENIAN CAPITAL LETTER DA */
- /*1357*/    0x0565,  1,   0x0535, /* ARMENIAN CAPITAL LETTER ECH */
- /*1360*/    0x0566,  1,   0x0536, /* ARMENIAN CAPITAL LETTER ZA */
- /*1363*/    0x0567,  1,   0x0537, /* ARMENIAN CAPITAL LETTER EH */
- /*1366*/    0x0568,  1,   0x0538, /* ARMENIAN CAPITAL LETTER ET */
- /*1369*/    0x0569,  1,   0x0539, /* ARMENIAN CAPITAL LETTER TO */
- /*1372*/    0x056a,  1,   0x053a, /* ARMENIAN CAPITAL LETTER ZHE */
- /*1375*/    0x056b,  1,   0x053b, /* ARMENIAN CAPITAL LETTER INI */
- /*1378*/    0x056c,  1,   0x053c, /* ARMENIAN CAPITAL LETTER LIWN */
- /*1381*/    0x056d,  1,   0x053d, /* ARMENIAN CAPITAL LETTER XEH */
- /*1384*/    0x056e,  1,   0x053e, /* ARMENIAN CAPITAL LETTER CA */
- /*1387*/    0x056f,  1,   0x053f, /* ARMENIAN CAPITAL LETTER KEN */
- /*1390*/    0x0570,  1,   0x0540, /* ARMENIAN CAPITAL LETTER HO */
- /*1393*/    0x0571,  1,   0x0541, /* ARMENIAN CAPITAL LETTER JA */
- /*1396*/    0x0572,  1,   0x0542, /* ARMENIAN CAPITAL LETTER GHAD */
- /*1399*/    0x0573,  1,   0x0543, /* ARMENIAN CAPITAL LETTER CHEH */
- /*1402*/    0x0574,  1,   0x0544, /* ARMENIAN CAPITAL LETTER MEN */
- /*1405*/    0x0575,  1,   0x0545, /* ARMENIAN CAPITAL LETTER YI */
- /*1408*/    0x0576,  1,   0x0546, /* ARMENIAN CAPITAL LETTER NOW */
- /*1411*/    0x0577,  1,   0x0547, /* ARMENIAN CAPITAL LETTER SHA */
- /*1414*/    0x0578,  1,   0x0548, /* ARMENIAN CAPITAL LETTER VO */
- /*1417*/    0x0579,  1,   0x0549, /* ARMENIAN CAPITAL LETTER CHA */
- /*1420*/    0x057a,  1,   0x054a, /* ARMENIAN CAPITAL LETTER PEH */
- /*1423*/    0x057b,  1,   0x054b, /* ARMENIAN CAPITAL LETTER JHEH */
- /*1426*/    0x057c,  1,   0x054c, /* ARMENIAN CAPITAL LETTER RA */
- /*1429*/    0x057d,  1,   0x054d, /* ARMENIAN CAPITAL LETTER SEH */
- /*1432*/    0x057e,  1,   0x054e, /* ARMENIAN CAPITAL LETTER VEW */
- /*1435*/    0x057f,  1,   0x054f, /* ARMENIAN CAPITAL LETTER TIWN */
- /*1438*/    0x0580,  1,   0x0550, /* ARMENIAN CAPITAL LETTER REH */
- /*1441*/    0x0581,  1,   0x0551, /* ARMENIAN CAPITAL LETTER CO */
- /*1444*/    0x0582,  1,   0x0552, /* ARMENIAN CAPITAL LETTER YIWN */
- /*1447*/    0x0583,  1,   0x0553, /* ARMENIAN CAPITAL LETTER PIWR */
- /*1450*/    0x0584,  1,   0x0554, /* ARMENIAN CAPITAL LETTER KEH */
- /*1453*/    0x0585,  1,   0x0555, /* ARMENIAN CAPITAL LETTER OH */
- /*1456*/    0x0586,  1,   0x0556, /* ARMENIAN CAPITAL LETTER FEH */
- /*1459*/    0x10d0,  1,   0x1c90, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1462*/    0x10d1,  1,   0x1c91, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1465*/    0x10d2,  1,   0x1c92, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1468*/    0x10d3,  1,   0x1c93, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1471*/    0x10d4,  1,   0x1c94, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1474*/    0x10d5,  1,   0x1c95, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1477*/    0x10d6,  1,   0x1c96, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1480*/    0x10d7,  1,   0x1c97, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1483*/    0x10d8,  1,   0x1c98, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1486*/    0x10d9,  1,   0x1c99, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1489*/    0x10da,  1,   0x1c9a, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1492*/    0x10db,  1,   0x1c9b, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1495*/    0x10dc,  1,   0x1c9c, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1498*/    0x10dd,  1,   0x1c9d, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1501*/    0x10de,  1,   0x1c9e, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1504*/    0x10df,  1,   0x1c9f, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1507*/    0x10e0,  1,   0x1ca0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1510*/    0x10e1,  1,   0x1ca1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1513*/    0x10e2,  1,   0x1ca2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1516*/    0x10e3,  1,   0x1ca3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1519*/    0x10e4,  1,   0x1ca4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1522*/    0x10e5,  1,   0x1ca5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1525*/    0x10e6,  1,   0x1ca6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1528*/    0x10e7,  1,   0x1ca7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1531*/    0x10e8,  1,   0x1ca8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1534*/    0x10e9,  1,   0x1ca9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1537*/    0x10ea,  1,   0x1caa, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1540*/    0x10eb,  1,   0x1cab, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1543*/    0x10ec,  1,   0x1cac, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1546*/    0x10ed,  1,   0x1cad, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1549*/    0x10ee,  1,   0x1cae, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1552*/    0x10ef,  1,   0x1caf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1555*/    0x10f0,  1,   0x1cb0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1558*/    0x10f1,  1,   0x1cb1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1561*/    0x10f2,  1,   0x1cb2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1564*/    0x10f3,  1,   0x1cb3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1567*/    0x10f4,  1,   0x1cb4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1570*/    0x10f5,  1,   0x1cb5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1573*/    0x10f6,  1,   0x1cb6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1576*/    0x10f7,  1,   0x1cb7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1579*/    0x10f8,  1,   0x1cb8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1582*/    0x10f9,  1,   0x1cb9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1585*/    0x10fa,  1,   0x1cba, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1588*/    0x10fd,  1,   0x1cbd, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1591*/    0x10fe,  1,   0x1cbe, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1594*/    0x10ff,  1,   0x1cbf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1597*/    0x13a0,  1,   0xab70, /* CHEROKEE SMALL LETTER A */
- /*1600*/    0x13a1,  1,   0xab71, /* CHEROKEE SMALL LETTER E */
- /*1603*/    0x13a2,  1,   0xab72, /* CHEROKEE SMALL LETTER I */
- /*1606*/    0x13a3,  1,   0xab73, /* CHEROKEE SMALL LETTER O */
- /*1609*/    0x13a4,  1,   0xab74, /* CHEROKEE SMALL LETTER U */
- /*1612*/    0x13a5,  1,   0xab75, /* CHEROKEE SMALL LETTER V */
- /*1615*/    0x13a6,  1,   0xab76, /* CHEROKEE SMALL LETTER GA */
- /*1618*/    0x13a7,  1,   0xab77, /* CHEROKEE SMALL LETTER KA */
- /*1621*/    0x13a8,  1,   0xab78, /* CHEROKEE SMALL LETTER GE */
- /*1624*/    0x13a9,  1,   0xab79, /* CHEROKEE SMALL LETTER GI */
- /*1627*/    0x13aa,  1,   0xab7a, /* CHEROKEE SMALL LETTER GO */
- /*1630*/    0x13ab,  1,   0xab7b, /* CHEROKEE SMALL LETTER GU */
- /*1633*/    0x13ac,  1,   0xab7c, /* CHEROKEE SMALL LETTER GV */
- /*1636*/    0x13ad,  1,   0xab7d, /* CHEROKEE SMALL LETTER HA */
- /*1639*/    0x13ae,  1,   0xab7e, /* CHEROKEE SMALL LETTER HE */
- /*1642*/    0x13af,  1,   0xab7f, /* CHEROKEE SMALL LETTER HI */
- /*1645*/    0x13b0,  1,   0xab80, /* CHEROKEE SMALL LETTER HO */
- /*1648*/    0x13b1,  1,   0xab81, /* CHEROKEE SMALL LETTER HU */
- /*1651*/    0x13b2,  1,   0xab82, /* CHEROKEE SMALL LETTER HV */
- /*1654*/    0x13b3,  1,   0xab83, /* CHEROKEE SMALL LETTER LA */
- /*1657*/    0x13b4,  1,   0xab84, /* CHEROKEE SMALL LETTER LE */
- /*1660*/    0x13b5,  1,   0xab85, /* CHEROKEE SMALL LETTER LI */
- /*1663*/    0x13b6,  1,   0xab86, /* CHEROKEE SMALL LETTER LO */
- /*1666*/    0x13b7,  1,   0xab87, /* CHEROKEE SMALL LETTER LU */
- /*1669*/    0x13b8,  1,   0xab88, /* CHEROKEE SMALL LETTER LV */
- /*1672*/    0x13b9,  1,   0xab89, /* CHEROKEE SMALL LETTER MA */
- /*1675*/    0x13ba,  1,   0xab8a, /* CHEROKEE SMALL LETTER ME */
- /*1678*/    0x13bb,  1,   0xab8b, /* CHEROKEE SMALL LETTER MI */
- /*1681*/    0x13bc,  1,   0xab8c, /* CHEROKEE SMALL LETTER MO */
- /*1684*/    0x13bd,  1,   0xab8d, /* CHEROKEE SMALL LETTER MU */
- /*1687*/    0x13be,  1,   0xab8e, /* CHEROKEE SMALL LETTER NA */
- /*1690*/    0x13bf,  1,   0xab8f, /* CHEROKEE SMALL LETTER HNA */
- /*1693*/    0x13c0,  1,   0xab90, /* CHEROKEE SMALL LETTER NAH */
- /*1696*/    0x13c1,  1,   0xab91, /* CHEROKEE SMALL LETTER NE */
- /*1699*/    0x13c2,  1,   0xab92, /* CHEROKEE SMALL LETTER NI */
- /*1702*/    0x13c3,  1,   0xab93, /* CHEROKEE SMALL LETTER NO */
- /*1705*/    0x13c4,  1,   0xab94, /* CHEROKEE SMALL LETTER NU */
- /*1708*/    0x13c5,  1,   0xab95, /* CHEROKEE SMALL LETTER NV */
- /*1711*/    0x13c6,  1,   0xab96, /* CHEROKEE SMALL LETTER QUA */
- /*1714*/    0x13c7,  1,   0xab97, /* CHEROKEE SMALL LETTER QUE */
- /*1717*/    0x13c8,  1,   0xab98, /* CHEROKEE SMALL LETTER QUI */
- /*1720*/    0x13c9,  1,   0xab99, /* CHEROKEE SMALL LETTER QUO */
- /*1723*/    0x13ca,  1,   0xab9a, /* CHEROKEE SMALL LETTER QUU */
- /*1726*/    0x13cb,  1,   0xab9b, /* CHEROKEE SMALL LETTER QUV */
- /*1729*/    0x13cc,  1,   0xab9c, /* CHEROKEE SMALL LETTER SA */
- /*1732*/    0x13cd,  1,   0xab9d, /* CHEROKEE SMALL LETTER S */
- /*1735*/    0x13ce,  1,   0xab9e, /* CHEROKEE SMALL LETTER SE */
- /*1738*/    0x13cf,  1,   0xab9f, /* CHEROKEE SMALL LETTER SI */
- /*1741*/    0x13d0,  1,   0xaba0, /* CHEROKEE SMALL LETTER SO */
- /*1744*/    0x13d1,  1,   0xaba1, /* CHEROKEE SMALL LETTER SU */
- /*1747*/    0x13d2,  1,   0xaba2, /* CHEROKEE SMALL LETTER SV */
- /*1750*/    0x13d3,  1,   0xaba3, /* CHEROKEE SMALL LETTER DA */
- /*1753*/    0x13d4,  1,   0xaba4, /* CHEROKEE SMALL LETTER TA */
- /*1756*/    0x13d5,  1,   0xaba5, /* CHEROKEE SMALL LETTER DE */
- /*1759*/    0x13d6,  1,   0xaba6, /* CHEROKEE SMALL LETTER TE */
- /*1762*/    0x13d7,  1,   0xaba7, /* CHEROKEE SMALL LETTER DI */
- /*1765*/    0x13d8,  1,   0xaba8, /* CHEROKEE SMALL LETTER TI */
- /*1768*/    0x13d9,  1,   0xaba9, /* CHEROKEE SMALL LETTER DO */
- /*1771*/    0x13da,  1,   0xabaa, /* CHEROKEE SMALL LETTER DU */
- /*1774*/    0x13db,  1,   0xabab, /* CHEROKEE SMALL LETTER DV */
- /*1777*/    0x13dc,  1,   0xabac, /* CHEROKEE SMALL LETTER DLA */
- /*1780*/    0x13dd,  1,   0xabad, /* CHEROKEE SMALL LETTER TLA */
- /*1783*/    0x13de,  1,   0xabae, /* CHEROKEE SMALL LETTER TLE */
- /*1786*/    0x13df,  1,   0xabaf, /* CHEROKEE SMALL LETTER TLI */
- /*1789*/    0x13e0,  1,   0xabb0, /* CHEROKEE SMALL LETTER TLO */
- /*1792*/    0x13e1,  1,   0xabb1, /* CHEROKEE SMALL LETTER TLU */
- /*1795*/    0x13e2,  1,   0xabb2, /* CHEROKEE SMALL LETTER TLV */
- /*1798*/    0x13e3,  1,   0xabb3, /* CHEROKEE SMALL LETTER TSA */
- /*1801*/    0x13e4,  1,   0xabb4, /* CHEROKEE SMALL LETTER TSE */
- /*1804*/    0x13e5,  1,   0xabb5, /* CHEROKEE SMALL LETTER TSI */
- /*1807*/    0x13e6,  1,   0xabb6, /* CHEROKEE SMALL LETTER TSO */
- /*1810*/    0x13e7,  1,   0xabb7, /* CHEROKEE SMALL LETTER TSU */
- /*1813*/    0x13e8,  1,   0xabb8, /* CHEROKEE SMALL LETTER TSV */
- /*1816*/    0x13e9,  1,   0xabb9, /* CHEROKEE SMALL LETTER WA */
- /*1819*/    0x13ea,  1,   0xabba, /* CHEROKEE SMALL LETTER WE */
- /*1822*/    0x13eb,  1,   0xabbb, /* CHEROKEE SMALL LETTER WI */
- /*1825*/    0x13ec,  1,   0xabbc, /* CHEROKEE SMALL LETTER WO */
- /*1828*/    0x13ed,  1,   0xabbd, /* CHEROKEE SMALL LETTER WU */
- /*1831*/    0x13ee,  1,   0xabbe, /* CHEROKEE SMALL LETTER WV */
- /*1834*/    0x13ef,  1,   0xabbf, /* CHEROKEE SMALL LETTER YA */
- /*1837*/    0x13f0,  1,   0x13f8, /* CHEROKEE SMALL LETTER YE */
- /*1840*/    0x13f1,  1,   0x13f9, /* CHEROKEE SMALL LETTER YI */
- /*1843*/    0x13f2,  1,   0x13fa, /* CHEROKEE SMALL LETTER YO */
- /*1846*/    0x13f3,  1,   0x13fb, /* CHEROKEE SMALL LETTER YU */
- /*1849*/    0x13f4,  1,   0x13fc, /* CHEROKEE SMALL LETTER YV */
- /*1852*/    0x13f5,  1,   0x13fd, /* CHEROKEE SMALL LETTER MV */
- /*1855*/    0x1d79,  1,   0xa77d, /* LATIN CAPITAL LETTER INSULAR G */
- /*1858*/    0x1d7d,  1,   0x2c63, /* LATIN CAPITAL LETTER P WITH STROKE */
- /*1861*/    0x1e01,  1,   0x1e00, /* LATIN CAPITAL LETTER A WITH RING .. */
- /*1864*/    0x1e03,  1,   0x1e02, /* LATIN CAPITAL LETTER B WITH DOT A.. */
- /*1867*/    0x1e05,  1,   0x1e04, /* LATIN CAPITAL LETTER B WITH DOT B.. */
- /*1870*/    0x1e07,  1,   0x1e06, /* LATIN CAPITAL LETTER B WITH LINE .. */
- /*1873*/    0x1e09,  1,   0x1e08, /* LATIN CAPITAL LETTER C WITH CEDIL.. */
- /*1876*/    0x1e0b,  1,   0x1e0a, /* LATIN CAPITAL LETTER D WITH DOT A.. */
- /*1879*/    0x1e0d,  1,   0x1e0c, /* LATIN CAPITAL LETTER D WITH DOT B.. */
- /*1882*/    0x1e0f,  1,   0x1e0e, /* LATIN CAPITAL LETTER D WITH LINE .. */
- /*1885*/    0x1e11,  1,   0x1e10, /* LATIN CAPITAL LETTER D WITH CEDIL.. */
- /*1888*/    0x1e13,  1,   0x1e12, /* LATIN CAPITAL LETTER D WITH CIRCU.. */
- /*1891*/    0x1e15,  1,   0x1e14, /* LATIN CAPITAL LETTER E WITH MACRO.. */
- /*1894*/    0x1e17,  1,   0x1e16, /* LATIN CAPITAL LETTER E WITH MACRO.. */
- /*1897*/    0x1e19,  1,   0x1e18, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*1900*/    0x1e1b,  1,   0x1e1a, /* LATIN CAPITAL LETTER E WITH TILDE.. */
- /*1903*/    0x1e1d,  1,   0x1e1c, /* LATIN CAPITAL LETTER E WITH CEDIL.. */
- /*1906*/    0x1e1f,  1,   0x1e1e, /* LATIN CAPITAL LETTER F WITH DOT A.. */
- /*1909*/    0x1e21,  1,   0x1e20, /* LATIN CAPITAL LETTER G WITH MACRON */
- /*1912*/    0x1e23,  1,   0x1e22, /* LATIN CAPITAL LETTER H WITH DOT A.. */
- /*1915*/    0x1e25,  1,   0x1e24, /* LATIN CAPITAL LETTER H WITH DOT B.. */
- /*1918*/    0x1e27,  1,   0x1e26, /* LATIN CAPITAL LETTER H WITH DIAER.. */
- /*1921*/    0x1e29,  1,   0x1e28, /* LATIN CAPITAL LETTER H WITH CEDIL.. */
- /*1924*/    0x1e2b,  1,   0x1e2a, /* LATIN CAPITAL LETTER H WITH BREVE.. */
- /*1927*/    0x1e2d,  1,   0x1e2c, /* LATIN CAPITAL LETTER I WITH TILDE.. */
- /*1930*/    0x1e2f,  1,   0x1e2e, /* LATIN CAPITAL LETTER I WITH DIAER.. */
- /*1933*/    0x1e31,  1,   0x1e30, /* LATIN CAPITAL LETTER K WITH ACUTE */
- /*1936*/    0x1e33,  1,   0x1e32, /* LATIN CAPITAL LETTER K WITH DOT B.. */
- /*1939*/    0x1e35,  1,   0x1e34, /* LATIN CAPITAL LETTER K WITH LINE .. */
- /*1942*/    0x1e37,  1,   0x1e36, /* LATIN CAPITAL LETTER L WITH DOT B.. */
- /*1945*/    0x1e39,  1,   0x1e38, /* LATIN CAPITAL LETTER L WITH DOT B.. */
- /*1948*/    0x1e3b,  1,   0x1e3a, /* LATIN CAPITAL LETTER L WITH LINE .. */
- /*1951*/    0x1e3d,  1,   0x1e3c, /* LATIN CAPITAL LETTER L WITH CIRCU.. */
- /*1954*/    0x1e3f,  1,   0x1e3e, /* LATIN CAPITAL LETTER M WITH ACUTE */
- /*1957*/    0x1e41,  1,   0x1e40, /* LATIN CAPITAL LETTER M WITH DOT A.. */
- /*1960*/    0x1e43,  1,   0x1e42, /* LATIN CAPITAL LETTER M WITH DOT B.. */
- /*1963*/    0x1e45,  1,   0x1e44, /* LATIN CAPITAL LETTER N WITH DOT A.. */
- /*1966*/    0x1e47,  1,   0x1e46, /* LATIN CAPITAL LETTER N WITH DOT B.. */
- /*1969*/    0x1e49,  1,   0x1e48, /* LATIN CAPITAL LETTER N WITH LINE .. */
- /*1972*/    0x1e4b,  1,   0x1e4a, /* LATIN CAPITAL LETTER N WITH CIRCU.. */
- /*1975*/    0x1e4d,  1,   0x1e4c, /* LATIN CAPITAL LETTER O WITH TILDE.. */
- /*1978*/    0x1e4f,  1,   0x1e4e, /* LATIN CAPITAL LETTER O WITH TILDE.. */
- /*1981*/    0x1e51,  1,   0x1e50, /* LATIN CAPITAL LETTER O WITH MACRO.. */
- /*1984*/    0x1e53,  1,   0x1e52, /* LATIN CAPITAL LETTER O WITH MACRO.. */
- /*1987*/    0x1e55,  1,   0x1e54, /* LATIN CAPITAL LETTER P WITH ACUTE */
- /*1990*/    0x1e57,  1,   0x1e56, /* LATIN CAPITAL LETTER P WITH DOT A.. */
- /*1993*/    0x1e59,  1,   0x1e58, /* LATIN CAPITAL LETTER R WITH DOT A.. */
- /*1996*/    0x1e5b,  1,   0x1e5a, /* LATIN CAPITAL LETTER R WITH DOT B.. */
- /*1999*/    0x1e5d,  1,   0x1e5c, /* LATIN CAPITAL LETTER R WITH DOT B.. */
- /*2002*/    0x1e5f,  1,   0x1e5e, /* LATIN CAPITAL LETTER R WITH LINE .. */
- /*2005*/    0x1e61,  2,   0x1e60,   0x1e9b, /* LATIN CAPITAL LETTER S WITH DOT A.. */
- /*2009*/    0x1e63,  1,   0x1e62, /* LATIN CAPITAL LETTER S WITH DOT B.. */
- /*2012*/    0x1e65,  1,   0x1e64, /* LATIN CAPITAL LETTER S WITH ACUTE.. */
- /*2015*/    0x1e67,  1,   0x1e66, /* LATIN CAPITAL LETTER S WITH CARON.. */
- /*2018*/    0x1e69,  1,   0x1e68, /* LATIN CAPITAL LETTER S WITH DOT B.. */
- /*2021*/    0x1e6b,  1,   0x1e6a, /* LATIN CAPITAL LETTER T WITH DOT A.. */
- /*2024*/    0x1e6d,  1,   0x1e6c, /* LATIN CAPITAL LETTER T WITH DOT B.. */
- /*2027*/    0x1e6f,  1,   0x1e6e, /* LATIN CAPITAL LETTER T WITH LINE .. */
- /*2030*/    0x1e71,  1,   0x1e70, /* LATIN CAPITAL LETTER T WITH CIRCU.. */
- /*2033*/    0x1e73,  1,   0x1e72, /* LATIN CAPITAL LETTER U WITH DIAER.. */
- /*2036*/    0x1e75,  1,   0x1e74, /* LATIN CAPITAL LETTER U WITH TILDE.. */
- /*2039*/    0x1e77,  1,   0x1e76, /* LATIN CAPITAL LETTER U WITH CIRCU.. */
- /*2042*/    0x1e79,  1,   0x1e78, /* LATIN CAPITAL LETTER U WITH TILDE.. */
- /*2045*/    0x1e7b,  1,   0x1e7a, /* LATIN CAPITAL LETTER U WITH MACRO.. */
- /*2048*/    0x1e7d,  1,   0x1e7c, /* LATIN CAPITAL LETTER V WITH TILDE */
- /*2051*/    0x1e7f,  1,   0x1e7e, /* LATIN CAPITAL LETTER V WITH DOT B.. */
- /*2054*/    0x1e81,  1,   0x1e80, /* LATIN CAPITAL LETTER W WITH GRAVE */
- /*2057*/    0x1e83,  1,   0x1e82, /* LATIN CAPITAL LETTER W WITH ACUTE */
- /*2060*/    0x1e85,  1,   0x1e84, /* LATIN CAPITAL LETTER W WITH DIAER.. */
- /*2063*/    0x1e87,  1,   0x1e86, /* LATIN CAPITAL LETTER W WITH DOT A.. */
- /*2066*/    0x1e89,  1,   0x1e88, /* LATIN CAPITAL LETTER W WITH DOT B.. */
- /*2069*/    0x1e8b,  1,   0x1e8a, /* LATIN CAPITAL LETTER X WITH DOT A.. */
- /*2072*/    0x1e8d,  1,   0x1e8c, /* LATIN CAPITAL LETTER X WITH DIAER.. */
- /*2075*/    0x1e8f,  1,   0x1e8e, /* LATIN CAPITAL LETTER Y WITH DOT A.. */
- /*2078*/    0x1e91,  1,   0x1e90, /* LATIN CAPITAL LETTER Z WITH CIRCU.. */
- /*2081*/    0x1e93,  1,   0x1e92, /* LATIN CAPITAL LETTER Z WITH DOT B.. */
- /*2084*/    0x1e95,  1,   0x1e94, /* LATIN CAPITAL LETTER Z WITH LINE .. */
- /*2087*/    0x1ea1,  1,   0x1ea0, /* LATIN CAPITAL LETTER A WITH DOT B.. */
- /*2090*/    0x1ea3,  1,   0x1ea2, /* LATIN CAPITAL LETTER A WITH HOOK .. */
- /*2093*/    0x1ea5,  1,   0x1ea4, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2096*/    0x1ea7,  1,   0x1ea6, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2099*/    0x1ea9,  1,   0x1ea8, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2102*/    0x1eab,  1,   0x1eaa, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2105*/    0x1ead,  1,   0x1eac, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2108*/    0x1eaf,  1,   0x1eae, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2111*/    0x1eb1,  1,   0x1eb0, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2114*/    0x1eb3,  1,   0x1eb2, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2117*/    0x1eb5,  1,   0x1eb4, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2120*/    0x1eb7,  1,   0x1eb6, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2123*/    0x1eb9,  1,   0x1eb8, /* LATIN CAPITAL LETTER E WITH DOT B.. */
- /*2126*/    0x1ebb,  1,   0x1eba, /* LATIN CAPITAL LETTER E WITH HOOK .. */
- /*2129*/    0x1ebd,  1,   0x1ebc, /* LATIN CAPITAL LETTER E WITH TILDE */
- /*2132*/    0x1ebf,  1,   0x1ebe, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2135*/    0x1ec1,  1,   0x1ec0, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2138*/    0x1ec3,  1,   0x1ec2, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2141*/    0x1ec5,  1,   0x1ec4, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2144*/    0x1ec7,  1,   0x1ec6, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2147*/    0x1ec9,  1,   0x1ec8, /* LATIN CAPITAL LETTER I WITH HOOK .. */
- /*2150*/    0x1ecb,  1,   0x1eca, /* LATIN CAPITAL LETTER I WITH DOT B.. */
- /*2153*/    0x1ecd,  1,   0x1ecc, /* LATIN CAPITAL LETTER O WITH DOT B.. */
- /*2156*/    0x1ecf,  1,   0x1ece, /* LATIN CAPITAL LETTER O WITH HOOK .. */
- /*2159*/    0x1ed1,  1,   0x1ed0, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2162*/    0x1ed3,  1,   0x1ed2, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2165*/    0x1ed5,  1,   0x1ed4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2168*/    0x1ed7,  1,   0x1ed6, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2171*/    0x1ed9,  1,   0x1ed8, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2174*/    0x1edb,  1,   0x1eda, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2177*/    0x1edd,  1,   0x1edc, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2180*/    0x1edf,  1,   0x1ede, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2183*/    0x1ee1,  1,   0x1ee0, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2186*/    0x1ee3,  1,   0x1ee2, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2189*/    0x1ee5,  1,   0x1ee4, /* LATIN CAPITAL LETTER U WITH DOT B.. */
- /*2192*/    0x1ee7,  1,   0x1ee6, /* LATIN CAPITAL LETTER U WITH HOOK .. */
- /*2195*/    0x1ee9,  1,   0x1ee8, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2198*/    0x1eeb,  1,   0x1eea, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2201*/    0x1eed,  1,   0x1eec, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2204*/    0x1eef,  1,   0x1eee, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2207*/    0x1ef1,  1,   0x1ef0, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2210*/    0x1ef3,  1,   0x1ef2, /* LATIN CAPITAL LETTER Y WITH GRAVE */
- /*2213*/    0x1ef5,  1,   0x1ef4, /* LATIN CAPITAL LETTER Y WITH DOT B.. */
- /*2216*/    0x1ef7,  1,   0x1ef6, /* LATIN CAPITAL LETTER Y WITH HOOK .. */
- /*2219*/    0x1ef9,  1,   0x1ef8, /* LATIN CAPITAL LETTER Y WITH TILDE */
- /*2222*/    0x1efb,  1,   0x1efa, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
- /*2225*/    0x1efd,  1,   0x1efc, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
- /*2228*/    0x1eff,  1,   0x1efe, /* LATIN CAPITAL LETTER Y WITH LOOP */
- /*2231*/    0x1f00,  1,   0x1f08, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2234*/    0x1f01,  1,   0x1f09, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2237*/    0x1f02,  1,   0x1f0a, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2240*/    0x1f03,  1,   0x1f0b, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2243*/    0x1f04,  1,   0x1f0c, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2246*/    0x1f05,  1,   0x1f0d, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2249*/    0x1f06,  1,   0x1f0e, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2252*/    0x1f07,  1,   0x1f0f, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2255*/    0x1f10,  1,   0x1f18, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2258*/    0x1f11,  1,   0x1f19, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2261*/    0x1f12,  1,   0x1f1a, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2264*/    0x1f13,  1,   0x1f1b, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2267*/    0x1f14,  1,   0x1f1c, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2270*/    0x1f15,  1,   0x1f1d, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2273*/    0x1f20,  1,   0x1f28, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2276*/    0x1f21,  1,   0x1f29, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2279*/    0x1f22,  1,   0x1f2a, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2282*/    0x1f23,  1,   0x1f2b, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2285*/    0x1f24,  1,   0x1f2c, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2288*/    0x1f25,  1,   0x1f2d, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2291*/    0x1f26,  1,   0x1f2e, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2294*/    0x1f27,  1,   0x1f2f, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2297*/    0x1f30,  1,   0x1f38, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2300*/    0x1f31,  1,   0x1f39, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2303*/    0x1f32,  1,   0x1f3a, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2306*/    0x1f33,  1,   0x1f3b, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2309*/    0x1f34,  1,   0x1f3c, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2312*/    0x1f35,  1,   0x1f3d, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2315*/    0x1f36,  1,   0x1f3e, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2318*/    0x1f37,  1,   0x1f3f, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2321*/    0x1f40,  1,   0x1f48, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2324*/    0x1f41,  1,   0x1f49, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2327*/    0x1f42,  1,   0x1f4a, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2330*/    0x1f43,  1,   0x1f4b, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2333*/    0x1f44,  1,   0x1f4c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2336*/    0x1f45,  1,   0x1f4d, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2339*/    0x1f51,  1,   0x1f59, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2342*/    0x1f53,  1,   0x1f5b, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2345*/    0x1f55,  1,   0x1f5d, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2348*/    0x1f57,  1,   0x1f5f, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2351*/    0x1f60,  1,   0x1f68, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2354*/    0x1f61,  1,   0x1f69, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2357*/    0x1f62,  1,   0x1f6a, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2360*/    0x1f63,  1,   0x1f6b, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2363*/    0x1f64,  1,   0x1f6c, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2366*/    0x1f65,  1,   0x1f6d, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2369*/    0x1f66,  1,   0x1f6e, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2372*/    0x1f67,  1,   0x1f6f, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2375*/    0x1f70,  1,   0x1fba, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
- /*2378*/    0x1f71,  1,   0x1fbb, /* GREEK CAPITAL LETTER ALPHA WITH O.. */
- /*2381*/    0x1f72,  1,   0x1fc8, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2384*/    0x1f73,  1,   0x1fc9, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2387*/    0x1f74,  1,   0x1fca, /* GREEK CAPITAL LETTER ETA WITH VAR.. */
- /*2390*/    0x1f75,  1,   0x1fcb, /* GREEK CAPITAL LETTER ETA WITH OXIA */
- /*2393*/    0x1f76,  1,   0x1fda, /* GREEK CAPITAL LETTER IOTA WITH VA.. */
- /*2396*/    0x1f77,  1,   0x1fdb, /* GREEK CAPITAL LETTER IOTA WITH OX.. */
- /*2399*/    0x1f78,  1,   0x1ff8, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2402*/    0x1f79,  1,   0x1ff9, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2405*/    0x1f7a,  1,   0x1fea, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2408*/    0x1f7b,  1,   0x1feb, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2411*/    0x1f7c,  1,   0x1ffa, /* GREEK CAPITAL LETTER OMEGA WITH V.. */
- /*2414*/    0x1f7d,  1,   0x1ffb, /* GREEK CAPITAL LETTER OMEGA WITH O.. */
- /*2417*/    0x1fb0,  1,   0x1fb8, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
- /*2420*/    0x1fb1,  1,   0x1fb9, /* GREEK CAPITAL LETTER ALPHA WITH M.. */
- /*2423*/    0x1fd0,  1,   0x1fd8, /* GREEK CAPITAL LETTER IOTA WITH VR.. */
- /*2426*/    0x1fd1,  1,   0x1fd9, /* GREEK CAPITAL LETTER IOTA WITH MA.. */
- /*2429*/    0x1fe0,  1,   0x1fe8, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2432*/    0x1fe1,  1,   0x1fe9, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2435*/    0x1fe5,  1,   0x1fec, /* GREEK CAPITAL LETTER RHO WITH DAS.. */
- /*2438*/    0x214e,  1,   0x2132, /* TURNED CAPITAL F */
- /*2441*/    0x2170,  1,   0x2160, /* ROMAN NUMERAL ONE */
- /*2444*/    0x2171,  1,   0x2161, /* ROMAN NUMERAL TWO */
- /*2447*/    0x2172,  1,   0x2162, /* ROMAN NUMERAL THREE */
- /*2450*/    0x2173,  1,   0x2163, /* ROMAN NUMERAL FOUR */
- /*2453*/    0x2174,  1,   0x2164, /* ROMAN NUMERAL FIVE */
- /*2456*/    0x2175,  1,   0x2165, /* ROMAN NUMERAL SIX */
- /*2459*/    0x2176,  1,   0x2166, /* ROMAN NUMERAL SEVEN */
- /*2462*/    0x2177,  1,   0x2167, /* ROMAN NUMERAL EIGHT */
- /*2465*/    0x2178,  1,   0x2168, /* ROMAN NUMERAL NINE */
- /*2468*/    0x2179,  1,   0x2169, /* ROMAN NUMERAL TEN */
- /*2471*/    0x217a,  1,   0x216a, /* ROMAN NUMERAL ELEVEN */
- /*2474*/    0x217b,  1,   0x216b, /* ROMAN NUMERAL TWELVE */
- /*2477*/    0x217c,  1,   0x216c, /* ROMAN NUMERAL FIFTY */
- /*2480*/    0x217d,  1,   0x216d, /* ROMAN NUMERAL ONE HUNDRED */
- /*2483*/    0x217e,  1,   0x216e, /* ROMAN NUMERAL FIVE HUNDRED */
- /*2486*/    0x217f,  1,   0x216f, /* ROMAN NUMERAL ONE THOUSAND */
- /*2489*/    0x2184,  1,   0x2183, /* ROMAN NUMERAL REVERSED ONE HUNDRED */
- /*2492*/    0x24d0,  1,   0x24b6, /* CIRCLED LATIN CAPITAL LETTER A */
- /*2495*/    0x24d1,  1,   0x24b7, /* CIRCLED LATIN CAPITAL LETTER B */
- /*2498*/    0x24d2,  1,   0x24b8, /* CIRCLED LATIN CAPITAL LETTER C */
- /*2501*/    0x24d3,  1,   0x24b9, /* CIRCLED LATIN CAPITAL LETTER D */
- /*2504*/    0x24d4,  1,   0x24ba, /* CIRCLED LATIN CAPITAL LETTER E */
- /*2507*/    0x24d5,  1,   0x24bb, /* CIRCLED LATIN CAPITAL LETTER F */
- /*2510*/    0x24d6,  1,   0x24bc, /* CIRCLED LATIN CAPITAL LETTER G */
- /*2513*/    0x24d7,  1,   0x24bd, /* CIRCLED LATIN CAPITAL LETTER H */
- /*2516*/    0x24d8,  1,   0x24be, /* CIRCLED LATIN CAPITAL LETTER I */
- /*2519*/    0x24d9,  1,   0x24bf, /* CIRCLED LATIN CAPITAL LETTER J */
- /*2522*/    0x24da,  1,   0x24c0, /* CIRCLED LATIN CAPITAL LETTER K */
- /*2525*/    0x24db,  1,   0x24c1, /* CIRCLED LATIN CAPITAL LETTER L */
- /*2528*/    0x24dc,  1,   0x24c2, /* CIRCLED LATIN CAPITAL LETTER M */
- /*2531*/    0x24dd,  1,   0x24c3, /* CIRCLED LATIN CAPITAL LETTER N */
- /*2534*/    0x24de,  1,   0x24c4, /* CIRCLED LATIN CAPITAL LETTER O */
- /*2537*/    0x24df,  1,   0x24c5, /* CIRCLED LATIN CAPITAL LETTER P */
- /*2540*/    0x24e0,  1,   0x24c6, /* CIRCLED LATIN CAPITAL LETTER Q */
- /*2543*/    0x24e1,  1,   0x24c7, /* CIRCLED LATIN CAPITAL LETTER R */
- /*2546*/    0x24e2,  1,   0x24c8, /* CIRCLED LATIN CAPITAL LETTER S */
- /*2549*/    0x24e3,  1,   0x24c9, /* CIRCLED LATIN CAPITAL LETTER T */
- /*2552*/    0x24e4,  1,   0x24ca, /* CIRCLED LATIN CAPITAL LETTER U */
- /*2555*/    0x24e5,  1,   0x24cb, /* CIRCLED LATIN CAPITAL LETTER V */
- /*2558*/    0x24e6,  1,   0x24cc, /* CIRCLED LATIN CAPITAL LETTER W */
- /*2561*/    0x24e7,  1,   0x24cd, /* CIRCLED LATIN CAPITAL LETTER X */
- /*2564*/    0x24e8,  1,   0x24ce, /* CIRCLED LATIN CAPITAL LETTER Y */
- /*2567*/    0x24e9,  1,   0x24cf, /* CIRCLED LATIN CAPITAL LETTER Z */
- /*2570*/    0x2c30,  1,   0x2c00, /* GLAGOLITIC CAPITAL LETTER AZU */
- /*2573*/    0x2c31,  1,   0x2c01, /* GLAGOLITIC CAPITAL LETTER BUKY */
- /*2576*/    0x2c32,  1,   0x2c02, /* GLAGOLITIC CAPITAL LETTER VEDE */
- /*2579*/    0x2c33,  1,   0x2c03, /* GLAGOLITIC CAPITAL LETTER GLAGOLI */
- /*2582*/    0x2c34,  1,   0x2c04, /* GLAGOLITIC CAPITAL LETTER DOBRO */
- /*2585*/    0x2c35,  1,   0x2c05, /* GLAGOLITIC CAPITAL LETTER YESTU */
- /*2588*/    0x2c36,  1,   0x2c06, /* GLAGOLITIC CAPITAL LETTER ZHIVETE */
- /*2591*/    0x2c37,  1,   0x2c07, /* GLAGOLITIC CAPITAL LETTER DZELO */
- /*2594*/    0x2c38,  1,   0x2c08, /* GLAGOLITIC CAPITAL LETTER ZEMLJA */
- /*2597*/    0x2c39,  1,   0x2c09, /* GLAGOLITIC CAPITAL LETTER IZHE */
- /*2600*/    0x2c3a,  1,   0x2c0a, /* GLAGOLITIC CAPITAL LETTER INITIAL.. */
- /*2603*/    0x2c3b,  1,   0x2c0b, /* GLAGOLITIC CAPITAL LETTER I */
- /*2606*/    0x2c3c,  1,   0x2c0c, /* GLAGOLITIC CAPITAL LETTER DJERVI */
- /*2609*/    0x2c3d,  1,   0x2c0d, /* GLAGOLITIC CAPITAL LETTER KAKO */
- /*2612*/    0x2c3e,  1,   0x2c0e, /* GLAGOLITIC CAPITAL LETTER LJUDIJE */
- /*2615*/    0x2c3f,  1,   0x2c0f, /* GLAGOLITIC CAPITAL LETTER MYSLITE */
- /*2618*/    0x2c40,  1,   0x2c10, /* GLAGOLITIC CAPITAL LETTER NASHI */
- /*2621*/    0x2c41,  1,   0x2c11, /* GLAGOLITIC CAPITAL LETTER ONU */
- /*2624*/    0x2c42,  1,   0x2c12, /* GLAGOLITIC CAPITAL LETTER POKOJI */
- /*2627*/    0x2c43,  1,   0x2c13, /* GLAGOLITIC CAPITAL LETTER RITSI */
- /*2630*/    0x2c44,  1,   0x2c14, /* GLAGOLITIC CAPITAL LETTER SLOVO */
- /*2633*/    0x2c45,  1,   0x2c15, /* GLAGOLITIC CAPITAL LETTER TVRIDO */
- /*2636*/    0x2c46,  1,   0x2c16, /* GLAGOLITIC CAPITAL LETTER UKU */
- /*2639*/    0x2c47,  1,   0x2c17, /* GLAGOLITIC CAPITAL LETTER FRITU */
- /*2642*/    0x2c48,  1,   0x2c18, /* GLAGOLITIC CAPITAL LETTER HERU */
- /*2645*/    0x2c49,  1,   0x2c19, /* GLAGOLITIC CAPITAL LETTER OTU */
- /*2648*/    0x2c4a,  1,   0x2c1a, /* GLAGOLITIC CAPITAL LETTER PE */
- /*2651*/    0x2c4b,  1,   0x2c1b, /* GLAGOLITIC CAPITAL LETTER SHTA */
- /*2654*/    0x2c4c,  1,   0x2c1c, /* GLAGOLITIC CAPITAL LETTER TSI */
- /*2657*/    0x2c4d,  1,   0x2c1d, /* GLAGOLITIC CAPITAL LETTER CHRIVI */
- /*2660*/    0x2c4e,  1,   0x2c1e, /* GLAGOLITIC CAPITAL LETTER SHA */
- /*2663*/    0x2c4f,  1,   0x2c1f, /* GLAGOLITIC CAPITAL LETTER YERU */
- /*2666*/    0x2c50,  1,   0x2c20, /* GLAGOLITIC CAPITAL LETTER YERI */
- /*2669*/    0x2c51,  1,   0x2c21, /* GLAGOLITIC CAPITAL LETTER YATI */
- /*2672*/    0x2c52,  1,   0x2c22, /* GLAGOLITIC CAPITAL LETTER SPIDERY.. */
- /*2675*/    0x2c53,  1,   0x2c23, /* GLAGOLITIC CAPITAL LETTER YU */
- /*2678*/    0x2c54,  1,   0x2c24, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
- /*2681*/    0x2c55,  1,   0x2c25, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
- /*2684*/    0x2c56,  1,   0x2c26, /* GLAGOLITIC CAPITAL LETTER YO */
- /*2687*/    0x2c57,  1,   0x2c27, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
- /*2690*/    0x2c58,  1,   0x2c28, /* GLAGOLITIC CAPITAL LETTER BIG YUS */
- /*2693*/    0x2c59,  1,   0x2c29, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
- /*2696*/    0x2c5a,  1,   0x2c2a, /* GLAGOLITIC CAPITAL LETTER FITA */
- /*2699*/    0x2c5b,  1,   0x2c2b, /* GLAGOLITIC CAPITAL LETTER IZHITSA */
- /*2702*/    0x2c5c,  1,   0x2c2c, /* GLAGOLITIC CAPITAL LETTER SHTAPIC */
- /*2705*/    0x2c5d,  1,   0x2c2d, /* GLAGOLITIC CAPITAL LETTER TROKUTA.. */
- /*2708*/    0x2c5e,  1,   0x2c2e, /* GLAGOLITIC CAPITAL LETTER LATINAT.. */
- /*2711*/    0x2c61,  1,   0x2c60, /* LATIN CAPITAL LETTER L WITH DOUBL.. */
- /*2714*/    0x2c65,  1,   0x023a, /* LATIN CAPITAL LETTER A WITH STROKE */
- /*2717*/    0x2c66,  1,   0x023e, /* LATIN CAPITAL LETTER T WITH DIAGO.. */
- /*2720*/    0x2c68,  1,   0x2c67, /* LATIN CAPITAL LETTER H WITH DESCE.. */
- /*2723*/    0x2c6a,  1,   0x2c69, /* LATIN CAPITAL LETTER K WITH DESCE.. */
- /*2726*/    0x2c6c,  1,   0x2c6b, /* LATIN CAPITAL LETTER Z WITH DESCE.. */
- /*2729*/    0x2c73,  1,   0x2c72, /* LATIN CAPITAL LETTER W WITH HOOK */
- /*2732*/    0x2c76,  1,   0x2c75, /* LATIN CAPITAL LETTER HALF H */
- /*2735*/    0x2c81,  1,   0x2c80, /* COPTIC CAPITAL LETTER ALFA */
- /*2738*/    0x2c83,  1,   0x2c82, /* COPTIC CAPITAL LETTER VIDA */
- /*2741*/    0x2c85,  1,   0x2c84, /* COPTIC CAPITAL LETTER GAMMA */
- /*2744*/    0x2c87,  1,   0x2c86, /* COPTIC CAPITAL LETTER DALDA */
- /*2747*/    0x2c89,  1,   0x2c88, /* COPTIC CAPITAL LETTER EIE */
- /*2750*/    0x2c8b,  1,   0x2c8a, /* COPTIC CAPITAL LETTER SOU */
- /*2753*/    0x2c8d,  1,   0x2c8c, /* COPTIC CAPITAL LETTER ZATA */
- /*2756*/    0x2c8f,  1,   0x2c8e, /* COPTIC CAPITAL LETTER HATE */
- /*2759*/    0x2c91,  1,   0x2c90, /* COPTIC CAPITAL LETTER THETHE */
- /*2762*/    0x2c93,  1,   0x2c92, /* COPTIC CAPITAL LETTER IAUDA */
- /*2765*/    0x2c95,  1,   0x2c94, /* COPTIC CAPITAL LETTER KAPA */
- /*2768*/    0x2c97,  1,   0x2c96, /* COPTIC CAPITAL LETTER LAULA */
- /*2771*/    0x2c99,  1,   0x2c98, /* COPTIC CAPITAL LETTER MI */
- /*2774*/    0x2c9b,  1,   0x2c9a, /* COPTIC CAPITAL LETTER NI */
- /*2777*/    0x2c9d,  1,   0x2c9c, /* COPTIC CAPITAL LETTER KSI */
- /*2780*/    0x2c9f,  1,   0x2c9e, /* COPTIC CAPITAL LETTER O */
- /*2783*/    0x2ca1,  1,   0x2ca0, /* COPTIC CAPITAL LETTER PI */
- /*2786*/    0x2ca3,  1,   0x2ca2, /* COPTIC CAPITAL LETTER RO */
- /*2789*/    0x2ca5,  1,   0x2ca4, /* COPTIC CAPITAL LETTER SIMA */
- /*2792*/    0x2ca7,  1,   0x2ca6, /* COPTIC CAPITAL LETTER TAU */
- /*2795*/    0x2ca9,  1,   0x2ca8, /* COPTIC CAPITAL LETTER UA */
- /*2798*/    0x2cab,  1,   0x2caa, /* COPTIC CAPITAL LETTER FI */
- /*2801*/    0x2cad,  1,   0x2cac, /* COPTIC CAPITAL LETTER KHI */
- /*2804*/    0x2caf,  1,   0x2cae, /* COPTIC CAPITAL LETTER PSI */
- /*2807*/    0x2cb1,  1,   0x2cb0, /* COPTIC CAPITAL LETTER OOU */
- /*2810*/    0x2cb3,  1,   0x2cb2, /* COPTIC CAPITAL LETTER DIALECT-P A.. */
- /*2813*/    0x2cb5,  1,   0x2cb4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2816*/    0x2cb7,  1,   0x2cb6, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2819*/    0x2cb9,  1,   0x2cb8, /* COPTIC CAPITAL LETTER DIALECT-P K.. */
- /*2822*/    0x2cbb,  1,   0x2cba, /* COPTIC CAPITAL LETTER DIALECT-P NI */
- /*2825*/    0x2cbd,  1,   0x2cbc, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2828*/    0x2cbf,  1,   0x2cbe, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2831*/    0x2cc1,  1,   0x2cc0, /* COPTIC CAPITAL LETTER SAMPI */
- /*2834*/    0x2cc3,  1,   0x2cc2, /* COPTIC CAPITAL LETTER CROSSED SHEI */
- /*2837*/    0x2cc5,  1,   0x2cc4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2840*/    0x2cc7,  1,   0x2cc6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2843*/    0x2cc9,  1,   0x2cc8, /* COPTIC CAPITAL LETTER AKHMIMIC KH.. */
- /*2846*/    0x2ccb,  1,   0x2cca, /* COPTIC CAPITAL LETTER DIALECT-P H.. */
- /*2849*/    0x2ccd,  1,   0x2ccc, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2852*/    0x2ccf,  1,   0x2cce, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2855*/    0x2cd1,  1,   0x2cd0, /* COPTIC CAPITAL LETTER L-SHAPED HA */
- /*2858*/    0x2cd3,  1,   0x2cd2, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2861*/    0x2cd5,  1,   0x2cd4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2864*/    0x2cd7,  1,   0x2cd6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2867*/    0x2cd9,  1,   0x2cd8, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2870*/    0x2cdb,  1,   0x2cda, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2873*/    0x2cdd,  1,   0x2cdc, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2876*/    0x2cdf,  1,   0x2cde, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2879*/    0x2ce1,  1,   0x2ce0, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2882*/    0x2ce3,  1,   0x2ce2, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2885*/    0x2cec,  1,   0x2ceb, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2888*/    0x2cee,  1,   0x2ced, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2891*/    0x2cf3,  1,   0x2cf2, /* COPTIC CAPITAL LETTER BOHAIRIC KH.. */
- /*2894*/    0x2d00,  1,   0x10a0, /* GEORGIAN CAPITAL LETTER AN */
- /*2897*/    0x2d01,  1,   0x10a1, /* GEORGIAN CAPITAL LETTER BAN */
- /*2900*/    0x2d02,  1,   0x10a2, /* GEORGIAN CAPITAL LETTER GAN */
- /*2903*/    0x2d03,  1,   0x10a3, /* GEORGIAN CAPITAL LETTER DON */
- /*2906*/    0x2d04,  1,   0x10a4, /* GEORGIAN CAPITAL LETTER EN */
- /*2909*/    0x2d05,  1,   0x10a5, /* GEORGIAN CAPITAL LETTER VIN */
- /*2912*/    0x2d06,  1,   0x10a6, /* GEORGIAN CAPITAL LETTER ZEN */
- /*2915*/    0x2d07,  1,   0x10a7, /* GEORGIAN CAPITAL LETTER TAN */
- /*2918*/    0x2d08,  1,   0x10a8, /* GEORGIAN CAPITAL LETTER IN */
- /*2921*/    0x2d09,  1,   0x10a9, /* GEORGIAN CAPITAL LETTER KAN */
- /*2924*/    0x2d0a,  1,   0x10aa, /* GEORGIAN CAPITAL LETTER LAS */
- /*2927*/    0x2d0b,  1,   0x10ab, /* GEORGIAN CAPITAL LETTER MAN */
- /*2930*/    0x2d0c,  1,   0x10ac, /* GEORGIAN CAPITAL LETTER NAR */
- /*2933*/    0x2d0d,  1,   0x10ad, /* GEORGIAN CAPITAL LETTER ON */
- /*2936*/    0x2d0e,  1,   0x10ae, /* GEORGIAN CAPITAL LETTER PAR */
- /*2939*/    0x2d0f,  1,   0x10af, /* GEORGIAN CAPITAL LETTER ZHAR */
- /*2942*/    0x2d10,  1,   0x10b0, /* GEORGIAN CAPITAL LETTER RAE */
- /*2945*/    0x2d11,  1,   0x10b1, /* GEORGIAN CAPITAL LETTER SAN */
- /*2948*/    0x2d12,  1,   0x10b2, /* GEORGIAN CAPITAL LETTER TAR */
- /*2951*/    0x2d13,  1,   0x10b3, /* GEORGIAN CAPITAL LETTER UN */
- /*2954*/    0x2d14,  1,   0x10b4, /* GEORGIAN CAPITAL LETTER PHAR */
- /*2957*/    0x2d15,  1,   0x10b5, /* GEORGIAN CAPITAL LETTER KHAR */
- /*2960*/    0x2d16,  1,   0x10b6, /* GEORGIAN CAPITAL LETTER GHAN */
- /*2963*/    0x2d17,  1,   0x10b7, /* GEORGIAN CAPITAL LETTER QAR */
- /*2966*/    0x2d18,  1,   0x10b8, /* GEORGIAN CAPITAL LETTER SHIN */
- /*2969*/    0x2d19,  1,   0x10b9, /* GEORGIAN CAPITAL LETTER CHIN */
- /*2972*/    0x2d1a,  1,   0x10ba, /* GEORGIAN CAPITAL LETTER CAN */
- /*2975*/    0x2d1b,  1,   0x10bb, /* GEORGIAN CAPITAL LETTER JIL */
- /*2978*/    0x2d1c,  1,   0x10bc, /* GEORGIAN CAPITAL LETTER CIL */
- /*2981*/    0x2d1d,  1,   0x10bd, /* GEORGIAN CAPITAL LETTER CHAR */
- /*2984*/    0x2d1e,  1,   0x10be, /* GEORGIAN CAPITAL LETTER XAN */
- /*2987*/    0x2d1f,  1,   0x10bf, /* GEORGIAN CAPITAL LETTER JHAN */
- /*2990*/    0x2d20,  1,   0x10c0, /* GEORGIAN CAPITAL LETTER HAE */
- /*2993*/    0x2d21,  1,   0x10c1, /* GEORGIAN CAPITAL LETTER HE */
- /*2996*/    0x2d22,  1,   0x10c2, /* GEORGIAN CAPITAL LETTER HIE */
- /*2999*/    0x2d23,  1,   0x10c3, /* GEORGIAN CAPITAL LETTER WE */
- /*3002*/    0x2d24,  1,   0x10c4, /* GEORGIAN CAPITAL LETTER HAR */
- /*3005*/    0x2d25,  1,   0x10c5, /* GEORGIAN CAPITAL LETTER HOE */
- /*3008*/    0x2d27,  1,   0x10c7, /* GEORGIAN CAPITAL LETTER YN */
- /*3011*/    0x2d2d,  1,   0x10cd, /* GEORGIAN CAPITAL LETTER AEN */
- /*3014*/    0xa641,  1,   0xa640, /* CYRILLIC CAPITAL LETTER ZEMLYA */
- /*3017*/    0xa643,  1,   0xa642, /* CYRILLIC CAPITAL LETTER DZELO */
- /*3020*/    0xa645,  1,   0xa644, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3023*/    0xa647,  1,   0xa646, /* CYRILLIC CAPITAL LETTER IOTA */
- /*3026*/    0xa649,  1,   0xa648, /* CYRILLIC CAPITAL LETTER DJERV */
- /*3029*/    0xa64b,  2,   0x1c88,   0xa64a, /* CYRILLIC SMALL LETTER UNBLENDED UK */
- /*3033*/    0xa64d,  1,   0xa64c, /* CYRILLIC CAPITAL LETTER BROAD OME.. */
- /*3036*/    0xa64f,  1,   0xa64e, /* CYRILLIC CAPITAL LETTER NEUTRAL Y.. */
- /*3039*/    0xa651,  1,   0xa650, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
- /*3042*/    0xa653,  1,   0xa652, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*3045*/    0xa655,  1,   0xa654, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3048*/    0xa657,  1,   0xa656, /* CYRILLIC CAPITAL LETTER IOTIFIED A */
- /*3051*/    0xa659,  1,   0xa658, /* CYRILLIC CAPITAL LETTER CLOSED LI.. */
- /*3054*/    0xa65b,  1,   0xa65a, /* CYRILLIC CAPITAL LETTER BLENDED Y.. */
- /*3057*/    0xa65d,  1,   0xa65c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*3060*/    0xa65f,  1,   0xa65e, /* CYRILLIC CAPITAL LETTER YN */
- /*3063*/    0xa661,  1,   0xa660, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3066*/    0xa663,  1,   0xa662, /* CYRILLIC CAPITAL LETTER SOFT DE */
- /*3069*/    0xa665,  1,   0xa664, /* CYRILLIC CAPITAL LETTER SOFT EL */
- /*3072*/    0xa667,  1,   0xa666, /* CYRILLIC CAPITAL LETTER SOFT EM */
- /*3075*/    0xa669,  1,   0xa668, /* CYRILLIC CAPITAL LETTER MONOCULAR.. */
- /*3078*/    0xa66b,  1,   0xa66a, /* CYRILLIC CAPITAL LETTER BINOCULAR.. */
- /*3081*/    0xa66d,  1,   0xa66c, /* CYRILLIC CAPITAL LETTER DOUBLE MO.. */
- /*3084*/    0xa681,  1,   0xa680, /* CYRILLIC CAPITAL LETTER DWE */
- /*3087*/    0xa683,  1,   0xa682, /* CYRILLIC CAPITAL LETTER DZWE */
- /*3090*/    0xa685,  1,   0xa684, /* CYRILLIC CAPITAL LETTER ZHWE */
- /*3093*/    0xa687,  1,   0xa686, /* CYRILLIC CAPITAL LETTER CCHE */
- /*3096*/    0xa689,  1,   0xa688, /* CYRILLIC CAPITAL LETTER DZZE */
- /*3099*/    0xa68b,  1,   0xa68a, /* CYRILLIC CAPITAL LETTER TE WITH M.. */
- /*3102*/    0xa68d,  1,   0xa68c, /* CYRILLIC CAPITAL LETTER TWE */
- /*3105*/    0xa68f,  1,   0xa68e, /* CYRILLIC CAPITAL LETTER TSWE */
- /*3108*/    0xa691,  1,   0xa690, /* CYRILLIC CAPITAL LETTER TSSE */
- /*3111*/    0xa693,  1,   0xa692, /* CYRILLIC CAPITAL LETTER TCHE */
- /*3114*/    0xa695,  1,   0xa694, /* CYRILLIC CAPITAL LETTER HWE */
- /*3117*/    0xa697,  1,   0xa696, /* CYRILLIC CAPITAL LETTER SHWE */
- /*3120*/    0xa699,  1,   0xa698, /* CYRILLIC CAPITAL LETTER DOUBLE O */
- /*3123*/    0xa69b,  1,   0xa69a, /* CYRILLIC CAPITAL LETTER CROSSED O */
- /*3126*/    0xa723,  1,   0xa722, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
- /*3129*/    0xa725,  1,   0xa724, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
- /*3132*/    0xa727,  1,   0xa726, /* LATIN CAPITAL LETTER HENG */
- /*3135*/    0xa729,  1,   0xa728, /* LATIN CAPITAL LETTER TZ */
- /*3138*/    0xa72b,  1,   0xa72a, /* LATIN CAPITAL LETTER TRESILLO */
- /*3141*/    0xa72d,  1,   0xa72c, /* LATIN CAPITAL LETTER CUATRILLO */
- /*3144*/    0xa72f,  1,   0xa72e, /* LATIN CAPITAL LETTER CUATRILLO WI.. */
- /*3147*/    0xa733,  1,   0xa732, /* LATIN CAPITAL LETTER AA */
- /*3150*/    0xa735,  1,   0xa734, /* LATIN CAPITAL LETTER AO */
- /*3153*/    0xa737,  1,   0xa736, /* LATIN CAPITAL LETTER AU */
- /*3156*/    0xa739,  1,   0xa738, /* LATIN CAPITAL LETTER AV */
- /*3159*/    0xa73b,  1,   0xa73a, /* LATIN CAPITAL LETTER AV WITH HORI.. */
- /*3162*/    0xa73d,  1,   0xa73c, /* LATIN CAPITAL LETTER AY */
- /*3165*/    0xa73f,  1,   0xa73e, /* LATIN CAPITAL LETTER REVERSED C W.. */
- /*3168*/    0xa741,  1,   0xa740, /* LATIN CAPITAL LETTER K WITH STROKE */
- /*3171*/    0xa743,  1,   0xa742, /* LATIN CAPITAL LETTER K WITH DIAGO.. */
- /*3174*/    0xa745,  1,   0xa744, /* LATIN CAPITAL LETTER K WITH STROK.. */
- /*3177*/    0xa747,  1,   0xa746, /* LATIN CAPITAL LETTER BROKEN L */
- /*3180*/    0xa749,  1,   0xa748, /* LATIN CAPITAL LETTER L WITH HIGH .. */
- /*3183*/    0xa74b,  1,   0xa74a, /* LATIN CAPITAL LETTER O WITH LONG .. */
- /*3186*/    0xa74d,  1,   0xa74c, /* LATIN CAPITAL LETTER O WITH LOOP */
- /*3189*/    0xa74f,  1,   0xa74e, /* LATIN CAPITAL LETTER OO */
- /*3192*/    0xa751,  1,   0xa750, /* LATIN CAPITAL LETTER P WITH STROK.. */
- /*3195*/    0xa753,  1,   0xa752, /* LATIN CAPITAL LETTER P WITH FLOUR.. */
- /*3198*/    0xa755,  1,   0xa754, /* LATIN CAPITAL LETTER P WITH SQUIR.. */
- /*3201*/    0xa757,  1,   0xa756, /* LATIN CAPITAL LETTER Q WITH STROK.. */
- /*3204*/    0xa759,  1,   0xa758, /* LATIN CAPITAL LETTER Q WITH DIAGO.. */
- /*3207*/    0xa75b,  1,   0xa75a, /* LATIN CAPITAL LETTER R ROTUNDA */
- /*3210*/    0xa75d,  1,   0xa75c, /* LATIN CAPITAL LETTER RUM ROTUNDA */
- /*3213*/    0xa75f,  1,   0xa75e, /* LATIN CAPITAL LETTER V WITH DIAGO.. */
- /*3216*/    0xa761,  1,   0xa760, /* LATIN CAPITAL LETTER VY */
- /*3219*/    0xa763,  1,   0xa762, /* LATIN CAPITAL LETTER VISIGOTHIC Z */
- /*3222*/    0xa765,  1,   0xa764, /* LATIN CAPITAL LETTER THORN WITH S.. */
- /*3225*/    0xa767,  1,   0xa766, /* LATIN CAPITAL LETTER THORN WITH S.. */
- /*3228*/    0xa769,  1,   0xa768, /* LATIN CAPITAL LETTER VEND */
- /*3231*/    0xa76b,  1,   0xa76a, /* LATIN CAPITAL LETTER ET */
- /*3234*/    0xa76d,  1,   0xa76c, /* LATIN CAPITAL LETTER IS */
- /*3237*/    0xa76f,  1,   0xa76e, /* LATIN CAPITAL LETTER CON */
- /*3240*/    0xa77a,  1,   0xa779, /* LATIN CAPITAL LETTER INSULAR D */
- /*3243*/    0xa77c,  1,   0xa77b, /* LATIN CAPITAL LETTER INSULAR F */
- /*3246*/    0xa77f,  1,   0xa77e, /* LATIN CAPITAL LETTER TURNED INSUL.. */
- /*3249*/    0xa781,  1,   0xa780, /* LATIN CAPITAL LETTER TURNED L */
- /*3252*/    0xa783,  1,   0xa782, /* LATIN CAPITAL LETTER INSULAR R */
- /*3255*/    0xa785,  1,   0xa784, /* LATIN CAPITAL LETTER INSULAR S */
- /*3258*/    0xa787,  1,   0xa786, /* LATIN CAPITAL LETTER INSULAR T */
- /*3261*/    0xa78c,  1,   0xa78b, /* LATIN CAPITAL LETTER SALTILLO */
- /*3264*/    0xa791,  1,   0xa790, /* LATIN CAPITAL LETTER N WITH DESCE.. */
- /*3267*/    0xa793,  1,   0xa792, /* LATIN CAPITAL LETTER C WITH BAR */
- /*3270*/    0xa797,  1,   0xa796, /* LATIN CAPITAL LETTER B WITH FLOUR.. */
- /*3273*/    0xa799,  1,   0xa798, /* LATIN CAPITAL LETTER F WITH STROKE */
- /*3276*/    0xa79b,  1,   0xa79a, /* LATIN CAPITAL LETTER VOLAPUK AE */
- /*3279*/    0xa79d,  1,   0xa79c, /* LATIN CAPITAL LETTER VOLAPUK OE */
- /*3282*/    0xa79f,  1,   0xa79e, /* LATIN CAPITAL LETTER VOLAPUK UE */
- /*3285*/    0xa7a1,  1,   0xa7a0, /* LATIN CAPITAL LETTER G WITH OBLIQ.. */
- /*3288*/    0xa7a3,  1,   0xa7a2, /* LATIN CAPITAL LETTER K WITH OBLIQ.. */
- /*3291*/    0xa7a5,  1,   0xa7a4, /* LATIN CAPITAL LETTER N WITH OBLIQ.. */
- /*3294*/    0xa7a7,  1,   0xa7a6, /* LATIN CAPITAL LETTER R WITH OBLIQ.. */
- /*3297*/    0xa7a9,  1,   0xa7a8, /* LATIN CAPITAL LETTER S WITH OBLIQ.. */
- /*3300*/    0xa7b5,  1,   0xa7b4, /* LATIN CAPITAL LETTER BETA */
- /*3303*/    0xa7b7,  1,   0xa7b6, /* LATIN CAPITAL LETTER OMEGA */
- /*3306*/    0xa7b9,  1,   0xa7b8, /* LATIN CAPITAL LETTER U WITH STROKE */
- /*3309*/    0xab53,  1,   0xa7b3, /* LATIN CAPITAL LETTER CHI */
- /*3312*/    0xff41,  1,   0xff21, /* FULLWIDTH LATIN CAPITAL LETTER A */
- /*3315*/    0xff42,  1,   0xff22, /* FULLWIDTH LATIN CAPITAL LETTER B */
- /*3318*/    0xff43,  1,   0xff23, /* FULLWIDTH LATIN CAPITAL LETTER C */
- /*3321*/    0xff44,  1,   0xff24, /* FULLWIDTH LATIN CAPITAL LETTER D */
- /*3324*/    0xff45,  1,   0xff25, /* FULLWIDTH LATIN CAPITAL LETTER E */
- /*3327*/    0xff46,  1,   0xff26, /* FULLWIDTH LATIN CAPITAL LETTER F */
- /*3330*/    0xff47,  1,   0xff27, /* FULLWIDTH LATIN CAPITAL LETTER G */
- /*3333*/    0xff48,  1,   0xff28, /* FULLWIDTH LATIN CAPITAL LETTER H */
- /*3336*/    0xff49,  1,   0xff29, /* FULLWIDTH LATIN CAPITAL LETTER I */
- /*3339*/    0xff4a,  1,   0xff2a, /* FULLWIDTH LATIN CAPITAL LETTER J */
- /*3342*/    0xff4b,  1,   0xff2b, /* FULLWIDTH LATIN CAPITAL LETTER K */
- /*3345*/    0xff4c,  1,   0xff2c, /* FULLWIDTH LATIN CAPITAL LETTER L */
- /*3348*/    0xff4d,  1,   0xff2d, /* FULLWIDTH LATIN CAPITAL LETTER M */
- /*3351*/    0xff4e,  1,   0xff2e, /* FULLWIDTH LATIN CAPITAL LETTER N */
- /*3354*/    0xff4f,  1,   0xff2f, /* FULLWIDTH LATIN CAPITAL LETTER O */
- /*3357*/    0xff50,  1,   0xff30, /* FULLWIDTH LATIN CAPITAL LETTER P */
- /*3360*/    0xff51,  1,   0xff31, /* FULLWIDTH LATIN CAPITAL LETTER Q */
- /*3363*/    0xff52,  1,   0xff32, /* FULLWIDTH LATIN CAPITAL LETTER R */
- /*3366*/    0xff53,  1,   0xff33, /* FULLWIDTH LATIN CAPITAL LETTER S */
- /*3369*/    0xff54,  1,   0xff34, /* FULLWIDTH LATIN CAPITAL LETTER T */
- /*3372*/    0xff55,  1,   0xff35, /* FULLWIDTH LATIN CAPITAL LETTER U */
- /*3375*/    0xff56,  1,   0xff36, /* FULLWIDTH LATIN CAPITAL LETTER V */
- /*3378*/    0xff57,  1,   0xff37, /* FULLWIDTH LATIN CAPITAL LETTER W */
- /*3381*/    0xff58,  1,   0xff38, /* FULLWIDTH LATIN CAPITAL LETTER X */
- /*3384*/    0xff59,  1,   0xff39, /* FULLWIDTH LATIN CAPITAL LETTER Y */
- /*3387*/    0xff5a,  1,   0xff3a, /* FULLWIDTH LATIN CAPITAL LETTER Z */
- /*3390*/  0x010428,  1, 0x010400, /* DESERET CAPITAL LETTER LONG I */
- /*3393*/  0x010429,  1, 0x010401, /* DESERET CAPITAL LETTER LONG E */
- /*3396*/  0x01042a,  1, 0x010402, /* DESERET CAPITAL LETTER LONG A */
- /*3399*/  0x01042b,  1, 0x010403, /* DESERET CAPITAL LETTER LONG AH */
- /*3402*/  0x01042c,  1, 0x010404, /* DESERET CAPITAL LETTER LONG O */
- /*3405*/  0x01042d,  1, 0x010405, /* DESERET CAPITAL LETTER LONG OO */
- /*3408*/  0x01042e,  1, 0x010406, /* DESERET CAPITAL LETTER SHORT I */
- /*3411*/  0x01042f,  1, 0x010407, /* DESERET CAPITAL LETTER SHORT E */
- /*3414*/  0x010430,  1, 0x010408, /* DESERET CAPITAL LETTER SHORT A */
- /*3417*/  0x010431,  1, 0x010409, /* DESERET CAPITAL LETTER SHORT AH */
- /*3420*/  0x010432,  1, 0x01040a, /* DESERET CAPITAL LETTER SHORT O */
- /*3423*/  0x010433,  1, 0x01040b, /* DESERET CAPITAL LETTER SHORT OO */
- /*3426*/  0x010434,  1, 0x01040c, /* DESERET CAPITAL LETTER AY */
- /*3429*/  0x010435,  1, 0x01040d, /* DESERET CAPITAL LETTER OW */
- /*3432*/  0x010436,  1, 0x01040e, /* DESERET CAPITAL LETTER WU */
- /*3435*/  0x010437,  1, 0x01040f, /* DESERET CAPITAL LETTER YEE */
- /*3438*/  0x010438,  1, 0x010410, /* DESERET CAPITAL LETTER H */
- /*3441*/  0x010439,  1, 0x010411, /* DESERET CAPITAL LETTER PEE */
- /*3444*/  0x01043a,  1, 0x010412, /* DESERET CAPITAL LETTER BEE */
- /*3447*/  0x01043b,  1, 0x010413, /* DESERET CAPITAL LETTER TEE */
- /*3450*/  0x01043c,  1, 0x010414, /* DESERET CAPITAL LETTER DEE */
- /*3453*/  0x01043d,  1, 0x010415, /* DESERET CAPITAL LETTER CHEE */
- /*3456*/  0x01043e,  1, 0x010416, /* DESERET CAPITAL LETTER JEE */
- /*3459*/  0x01043f,  1, 0x010417, /* DESERET CAPITAL LETTER KAY */
- /*3462*/  0x010440,  1, 0x010418, /* DESERET CAPITAL LETTER GAY */
- /*3465*/  0x010441,  1, 0x010419, /* DESERET CAPITAL LETTER EF */
- /*3468*/  0x010442,  1, 0x01041a, /* DESERET CAPITAL LETTER VEE */
- /*3471*/  0x010443,  1, 0x01041b, /* DESERET CAPITAL LETTER ETH */
- /*3474*/  0x010444,  1, 0x01041c, /* DESERET CAPITAL LETTER THEE */
- /*3477*/  0x010445,  1, 0x01041d, /* DESERET CAPITAL LETTER ES */
- /*3480*/  0x010446,  1, 0x01041e, /* DESERET CAPITAL LETTER ZEE */
- /*3483*/  0x010447,  1, 0x01041f, /* DESERET CAPITAL LETTER ESH */
- /*3486*/  0x010448,  1, 0x010420, /* DESERET CAPITAL LETTER ZHEE */
- /*3489*/  0x010449,  1, 0x010421, /* DESERET CAPITAL LETTER ER */
- /*3492*/  0x01044a,  1, 0x010422, /* DESERET CAPITAL LETTER EL */
- /*3495*/  0x01044b,  1, 0x010423, /* DESERET CAPITAL LETTER EM */
- /*3498*/  0x01044c,  1, 0x010424, /* DESERET CAPITAL LETTER EN */
- /*3501*/  0x01044d,  1, 0x010425, /* DESERET CAPITAL LETTER ENG */
- /*3504*/  0x01044e,  1, 0x010426, /* DESERET CAPITAL LETTER OI */
- /*3507*/  0x01044f,  1, 0x010427, /* DESERET CAPITAL LETTER EW */
- /*3510*/  0x0104d8,  1, 0x0104b0, /* OSAGE CAPITAL LETTER A */
- /*3513*/  0x0104d9,  1, 0x0104b1, /* OSAGE CAPITAL LETTER AI */
- /*3516*/  0x0104da,  1, 0x0104b2, /* OSAGE CAPITAL LETTER AIN */
- /*3519*/  0x0104db,  1, 0x0104b3, /* OSAGE CAPITAL LETTER AH */
- /*3522*/  0x0104dc,  1, 0x0104b4, /* OSAGE CAPITAL LETTER BRA */
- /*3525*/  0x0104dd,  1, 0x0104b5, /* OSAGE CAPITAL LETTER CHA */
- /*3528*/  0x0104de,  1, 0x0104b6, /* OSAGE CAPITAL LETTER EHCHA */
- /*3531*/  0x0104df,  1, 0x0104b7, /* OSAGE CAPITAL LETTER E */
- /*3534*/  0x0104e0,  1, 0x0104b8, /* OSAGE CAPITAL LETTER EIN */
- /*3537*/  0x0104e1,  1, 0x0104b9, /* OSAGE CAPITAL LETTER HA */
- /*3540*/  0x0104e2,  1, 0x0104ba, /* OSAGE CAPITAL LETTER HYA */
- /*3543*/  0x0104e3,  1, 0x0104bb, /* OSAGE CAPITAL LETTER I */
- /*3546*/  0x0104e4,  1, 0x0104bc, /* OSAGE CAPITAL LETTER KA */
- /*3549*/  0x0104e5,  1, 0x0104bd, /* OSAGE CAPITAL LETTER EHKA */
- /*3552*/  0x0104e6,  1, 0x0104be, /* OSAGE CAPITAL LETTER KYA */
- /*3555*/  0x0104e7,  1, 0x0104bf, /* OSAGE CAPITAL LETTER LA */
- /*3558*/  0x0104e8,  1, 0x0104c0, /* OSAGE CAPITAL LETTER MA */
- /*3561*/  0x0104e9,  1, 0x0104c1, /* OSAGE CAPITAL LETTER NA */
- /*3564*/  0x0104ea,  1, 0x0104c2, /* OSAGE CAPITAL LETTER O */
- /*3567*/  0x0104eb,  1, 0x0104c3, /* OSAGE CAPITAL LETTER OIN */
- /*3570*/  0x0104ec,  1, 0x0104c4, /* OSAGE CAPITAL LETTER PA */
- /*3573*/  0x0104ed,  1, 0x0104c5, /* OSAGE CAPITAL LETTER EHPA */
- /*3576*/  0x0104ee,  1, 0x0104c6, /* OSAGE CAPITAL LETTER SA */
- /*3579*/  0x0104ef,  1, 0x0104c7, /* OSAGE CAPITAL LETTER SHA */
- /*3582*/  0x0104f0,  1, 0x0104c8, /* OSAGE CAPITAL LETTER TA */
- /*3585*/  0x0104f1,  1, 0x0104c9, /* OSAGE CAPITAL LETTER EHTA */
- /*3588*/  0x0104f2,  1, 0x0104ca, /* OSAGE CAPITAL LETTER TSA */
- /*3591*/  0x0104f3,  1, 0x0104cb, /* OSAGE CAPITAL LETTER EHTSA */
- /*3594*/  0x0104f4,  1, 0x0104cc, /* OSAGE CAPITAL LETTER TSHA */
- /*3597*/  0x0104f5,  1, 0x0104cd, /* OSAGE CAPITAL LETTER DHA */
- /*3600*/  0x0104f6,  1, 0x0104ce, /* OSAGE CAPITAL LETTER U */
- /*3603*/  0x0104f7,  1, 0x0104cf, /* OSAGE CAPITAL LETTER WA */
- /*3606*/  0x0104f8,  1, 0x0104d0, /* OSAGE CAPITAL LETTER KHA */
- /*3609*/  0x0104f9,  1, 0x0104d1, /* OSAGE CAPITAL LETTER GHA */
- /*3612*/  0x0104fa,  1, 0x0104d2, /* OSAGE CAPITAL LETTER ZA */
- /*3615*/  0x0104fb,  1, 0x0104d3, /* OSAGE CAPITAL LETTER ZHA */
- /*3618*/  0x010cc0,  1, 0x010c80, /* OLD HUNGARIAN CAPITAL LETTER A */
- /*3621*/  0x010cc1,  1, 0x010c81, /* OLD HUNGARIAN CAPITAL LETTER AA */
- /*3624*/  0x010cc2,  1, 0x010c82, /* OLD HUNGARIAN CAPITAL LETTER EB */
- /*3627*/  0x010cc3,  1, 0x010c83, /* OLD HUNGARIAN CAPITAL LETTER AMB */
- /*3630*/  0x010cc4,  1, 0x010c84, /* OLD HUNGARIAN CAPITAL LETTER EC */
- /*3633*/  0x010cc5,  1, 0x010c85, /* OLD HUNGARIAN CAPITAL LETTER ENC */
- /*3636*/  0x010cc6,  1, 0x010c86, /* OLD HUNGARIAN CAPITAL LETTER ECS */
- /*3639*/  0x010cc7,  1, 0x010c87, /* OLD HUNGARIAN CAPITAL LETTER ED */
- /*3642*/  0x010cc8,  1, 0x010c88, /* OLD HUNGARIAN CAPITAL LETTER AND */
- /*3645*/  0x010cc9,  1, 0x010c89, /* OLD HUNGARIAN CAPITAL LETTER E */
- /*3648*/  0x010cca,  1, 0x010c8a, /* OLD HUNGARIAN CAPITAL LETTER CLOS.. */
- /*3651*/  0x010ccb,  1, 0x010c8b, /* OLD HUNGARIAN CAPITAL LETTER EE */
- /*3654*/  0x010ccc,  1, 0x010c8c, /* OLD HUNGARIAN CAPITAL LETTER EF */
- /*3657*/  0x010ccd,  1, 0x010c8d, /* OLD HUNGARIAN CAPITAL LETTER EG */
- /*3660*/  0x010cce,  1, 0x010c8e, /* OLD HUNGARIAN CAPITAL LETTER EGY */
- /*3663*/  0x010ccf,  1, 0x010c8f, /* OLD HUNGARIAN CAPITAL LETTER EH */
- /*3666*/  0x010cd0,  1, 0x010c90, /* OLD HUNGARIAN CAPITAL LETTER I */
- /*3669*/  0x010cd1,  1, 0x010c91, /* OLD HUNGARIAN CAPITAL LETTER II */
- /*3672*/  0x010cd2,  1, 0x010c92, /* OLD HUNGARIAN CAPITAL LETTER EJ */
- /*3675*/  0x010cd3,  1, 0x010c93, /* OLD HUNGARIAN CAPITAL LETTER EK */
- /*3678*/  0x010cd4,  1, 0x010c94, /* OLD HUNGARIAN CAPITAL LETTER AK */
- /*3681*/  0x010cd5,  1, 0x010c95, /* OLD HUNGARIAN CAPITAL LETTER UNK */
- /*3684*/  0x010cd6,  1, 0x010c96, /* OLD HUNGARIAN CAPITAL LETTER EL */
- /*3687*/  0x010cd7,  1, 0x010c97, /* OLD HUNGARIAN CAPITAL LETTER ELY */
- /*3690*/  0x010cd8,  1, 0x010c98, /* OLD HUNGARIAN CAPITAL LETTER EM */
- /*3693*/  0x010cd9,  1, 0x010c99, /* OLD HUNGARIAN CAPITAL LETTER EN */
- /*3696*/  0x010cda,  1, 0x010c9a, /* OLD HUNGARIAN CAPITAL LETTER ENY */
- /*3699*/  0x010cdb,  1, 0x010c9b, /* OLD HUNGARIAN CAPITAL LETTER O */
- /*3702*/  0x010cdc,  1, 0x010c9c, /* OLD HUNGARIAN CAPITAL LETTER OO */
- /*3705*/  0x010cdd,  1, 0x010c9d, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
- /*3708*/  0x010cde,  1, 0x010c9e, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
- /*3711*/  0x010cdf,  1, 0x010c9f, /* OLD HUNGARIAN CAPITAL LETTER OEE */
- /*3714*/  0x010ce0,  1, 0x010ca0, /* OLD HUNGARIAN CAPITAL LETTER EP */
- /*3717*/  0x010ce1,  1, 0x010ca1, /* OLD HUNGARIAN CAPITAL LETTER EMP */
- /*3720*/  0x010ce2,  1, 0x010ca2, /* OLD HUNGARIAN CAPITAL LETTER ER */
- /*3723*/  0x010ce3,  1, 0x010ca3, /* OLD HUNGARIAN CAPITAL LETTER SHOR.. */
- /*3726*/  0x010ce4,  1, 0x010ca4, /* OLD HUNGARIAN CAPITAL LETTER ES */
- /*3729*/  0x010ce5,  1, 0x010ca5, /* OLD HUNGARIAN CAPITAL LETTER ESZ */
- /*3732*/  0x010ce6,  1, 0x010ca6, /* OLD HUNGARIAN CAPITAL LETTER ET */
- /*3735*/  0x010ce7,  1, 0x010ca7, /* OLD HUNGARIAN CAPITAL LETTER ENT */
- /*3738*/  0x010ce8,  1, 0x010ca8, /* OLD HUNGARIAN CAPITAL LETTER ETY */
- /*3741*/  0x010ce9,  1, 0x010ca9, /* OLD HUNGARIAN CAPITAL LETTER ECH */
- /*3744*/  0x010cea,  1, 0x010caa, /* OLD HUNGARIAN CAPITAL LETTER U */
- /*3747*/  0x010ceb,  1, 0x010cab, /* OLD HUNGARIAN CAPITAL LETTER UU */
- /*3750*/  0x010cec,  1, 0x010cac, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
- /*3753*/  0x010ced,  1, 0x010cad, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
- /*3756*/  0x010cee,  1, 0x010cae, /* OLD HUNGARIAN CAPITAL LETTER EV */
- /*3759*/  0x010cef,  1, 0x010caf, /* OLD HUNGARIAN CAPITAL LETTER EZ */
- /*3762*/  0x010cf0,  1, 0x010cb0, /* OLD HUNGARIAN CAPITAL LETTER EZS */
- /*3765*/  0x010cf1,  1, 0x010cb1, /* OLD HUNGARIAN CAPITAL LETTER ENT-.. */
- /*3768*/  0x010cf2,  1, 0x010cb2, /* OLD HUNGARIAN CAPITAL LETTER US */
- /*3771*/  0x0118c0,  1, 0x0118a0, /* WARANG CITI CAPITAL LETTER NGAA */
- /*3774*/  0x0118c1,  1, 0x0118a1, /* WARANG CITI CAPITAL LETTER A */
- /*3777*/  0x0118c2,  1, 0x0118a2, /* WARANG CITI CAPITAL LETTER WI */
- /*3780*/  0x0118c3,  1, 0x0118a3, /* WARANG CITI CAPITAL LETTER YU */
- /*3783*/  0x0118c4,  1, 0x0118a4, /* WARANG CITI CAPITAL LETTER YA */
- /*3786*/  0x0118c5,  1, 0x0118a5, /* WARANG CITI CAPITAL LETTER YO */
- /*3789*/  0x0118c6,  1, 0x0118a6, /* WARANG CITI CAPITAL LETTER II */
- /*3792*/  0x0118c7,  1, 0x0118a7, /* WARANG CITI CAPITAL LETTER UU */
- /*3795*/  0x0118c8,  1, 0x0118a8, /* WARANG CITI CAPITAL LETTER E */
- /*3798*/  0x0118c9,  1, 0x0118a9, /* WARANG CITI CAPITAL LETTER O */
- /*3801*/  0x0118ca,  1, 0x0118aa, /* WARANG CITI CAPITAL LETTER ANG */
- /*3804*/  0x0118cb,  1, 0x0118ab, /* WARANG CITI CAPITAL LETTER GA */
- /*3807*/  0x0118cc,  1, 0x0118ac, /* WARANG CITI CAPITAL LETTER KO */
- /*3810*/  0x0118cd,  1, 0x0118ad, /* WARANG CITI CAPITAL LETTER ENY */
- /*3813*/  0x0118ce,  1, 0x0118ae, /* WARANG CITI CAPITAL LETTER YUJ */
- /*3816*/  0x0118cf,  1, 0x0118af, /* WARANG CITI CAPITAL LETTER UC */
- /*3819*/  0x0118d0,  1, 0x0118b0, /* WARANG CITI CAPITAL LETTER ENN */
- /*3822*/  0x0118d1,  1, 0x0118b1, /* WARANG CITI CAPITAL LETTER ODD */
- /*3825*/  0x0118d2,  1, 0x0118b2, /* WARANG CITI CAPITAL LETTER TTE */
- /*3828*/  0x0118d3,  1, 0x0118b3, /* WARANG CITI CAPITAL LETTER NUNG */
- /*3831*/  0x0118d4,  1, 0x0118b4, /* WARANG CITI CAPITAL LETTER DA */
- /*3834*/  0x0118d5,  1, 0x0118b5, /* WARANG CITI CAPITAL LETTER AT */
- /*3837*/  0x0118d6,  1, 0x0118b6, /* WARANG CITI CAPITAL LETTER AM */
- /*3840*/  0x0118d7,  1, 0x0118b7, /* WARANG CITI CAPITAL LETTER BU */
- /*3843*/  0x0118d8,  1, 0x0118b8, /* WARANG CITI CAPITAL LETTER PU */
- /*3846*/  0x0118d9,  1, 0x0118b9, /* WARANG CITI CAPITAL LETTER HIYO */
- /*3849*/  0x0118da,  1, 0x0118ba, /* WARANG CITI CAPITAL LETTER HOLO */
- /*3852*/  0x0118db,  1, 0x0118bb, /* WARANG CITI CAPITAL LETTER HORR */
- /*3855*/  0x0118dc,  1, 0x0118bc, /* WARANG CITI CAPITAL LETTER HAR */
- /*3858*/  0x0118dd,  1, 0x0118bd, /* WARANG CITI CAPITAL LETTER SSUU */
- /*3861*/  0x0118de,  1, 0x0118be, /* WARANG CITI CAPITAL LETTER SII */
- /*3864*/  0x0118df,  1, 0x0118bf, /* WARANG CITI CAPITAL LETTER VIYO */
- /*3867*/  0x016e60,  1, 0x016e40, /* MEDEFAIDRIN CAPITAL LETTER M */
- /*3870*/  0x016e61,  1, 0x016e41, /* MEDEFAIDRIN CAPITAL LETTER S */
- /*3873*/  0x016e62,  1, 0x016e42, /* MEDEFAIDRIN CAPITAL LETTER V */
- /*3876*/  0x016e63,  1, 0x016e43, /* MEDEFAIDRIN CAPITAL LETTER W */
- /*3879*/  0x016e64,  1, 0x016e44, /* MEDEFAIDRIN CAPITAL LETTER ATIU */
- /*3882*/  0x016e65,  1, 0x016e45, /* MEDEFAIDRIN CAPITAL LETTER Z */
- /*3885*/  0x016e66,  1, 0x016e46, /* MEDEFAIDRIN CAPITAL LETTER KP */
- /*3888*/  0x016e67,  1, 0x016e47, /* MEDEFAIDRIN CAPITAL LETTER P */
- /*3891*/  0x016e68,  1, 0x016e48, /* MEDEFAIDRIN CAPITAL LETTER T */
- /*3894*/  0x016e69,  1, 0x016e49, /* MEDEFAIDRIN CAPITAL LETTER G */
- /*3897*/  0x016e6a,  1, 0x016e4a, /* MEDEFAIDRIN CAPITAL LETTER F */
- /*3900*/  0x016e6b,  1, 0x016e4b, /* MEDEFAIDRIN CAPITAL LETTER I */
- /*3903*/  0x016e6c,  1, 0x016e4c, /* MEDEFAIDRIN CAPITAL LETTER K */
- /*3906*/  0x016e6d,  1, 0x016e4d, /* MEDEFAIDRIN CAPITAL LETTER A */
- /*3909*/  0x016e6e,  1, 0x016e4e, /* MEDEFAIDRIN CAPITAL LETTER J */
- /*3912*/  0x016e6f,  1, 0x016e4f, /* MEDEFAIDRIN CAPITAL LETTER E */
- /*3915*/  0x016e70,  1, 0x016e50, /* MEDEFAIDRIN CAPITAL LETTER B */
- /*3918*/  0x016e71,  1, 0x016e51, /* MEDEFAIDRIN CAPITAL LETTER C */
- /*3921*/  0x016e72,  1, 0x016e52, /* MEDEFAIDRIN CAPITAL LETTER U */
- /*3924*/  0x016e73,  1, 0x016e53, /* MEDEFAIDRIN CAPITAL LETTER YU */
- /*3927*/  0x016e74,  1, 0x016e54, /* MEDEFAIDRIN CAPITAL LETTER L */
- /*3930*/  0x016e75,  1, 0x016e55, /* MEDEFAIDRIN CAPITAL LETTER Q */
- /*3933*/  0x016e76,  1, 0x016e56, /* MEDEFAIDRIN CAPITAL LETTER HP */
- /*3936*/  0x016e77,  1, 0x016e57, /* MEDEFAIDRIN CAPITAL LETTER NY */
- /*3939*/  0x016e78,  1, 0x016e58, /* MEDEFAIDRIN CAPITAL LETTER X */
- /*3942*/  0x016e79,  1, 0x016e59, /* MEDEFAIDRIN CAPITAL LETTER D */
- /*3945*/  0x016e7a,  1, 0x016e5a, /* MEDEFAIDRIN CAPITAL LETTER OE */
- /*3948*/  0x016e7b,  1, 0x016e5b, /* MEDEFAIDRIN CAPITAL LETTER N */
- /*3951*/  0x016e7c,  1, 0x016e5c, /* MEDEFAIDRIN CAPITAL LETTER R */
- /*3954*/  0x016e7d,  1, 0x016e5d, /* MEDEFAIDRIN CAPITAL LETTER O */
- /*3957*/  0x016e7e,  1, 0x016e5e, /* MEDEFAIDRIN CAPITAL LETTER AI */
- /*3960*/  0x016e7f,  1, 0x016e5f, /* MEDEFAIDRIN CAPITAL LETTER Y */
- /*3963*/  0x01e922,  1, 0x01e900, /* ADLAM CAPITAL LETTER ALIF */
- /*3966*/  0x01e923,  1, 0x01e901, /* ADLAM CAPITAL LETTER DAALI */
- /*3969*/  0x01e924,  1, 0x01e902, /* ADLAM CAPITAL LETTER LAAM */
- /*3972*/  0x01e925,  1, 0x01e903, /* ADLAM CAPITAL LETTER MIIM */
- /*3975*/  0x01e926,  1, 0x01e904, /* ADLAM CAPITAL LETTER BA */
- /*3978*/  0x01e927,  1, 0x01e905, /* ADLAM CAPITAL LETTER SINNYIIYHE */
- /*3981*/  0x01e928,  1, 0x01e906, /* ADLAM CAPITAL LETTER PE */
- /*3984*/  0x01e929,  1, 0x01e907, /* ADLAM CAPITAL LETTER BHE */
- /*3987*/  0x01e92a,  1, 0x01e908, /* ADLAM CAPITAL LETTER RA */
- /*3990*/  0x01e92b,  1, 0x01e909, /* ADLAM CAPITAL LETTER E */
- /*3993*/  0x01e92c,  1, 0x01e90a, /* ADLAM CAPITAL LETTER FA */
- /*3996*/  0x01e92d,  1, 0x01e90b, /* ADLAM CAPITAL LETTER I */
- /*3999*/  0x01e92e,  1, 0x01e90c, /* ADLAM CAPITAL LETTER O */
- /*4002*/  0x01e92f,  1, 0x01e90d, /* ADLAM CAPITAL LETTER DHA */
- /*4005*/  0x01e930,  1, 0x01e90e, /* ADLAM CAPITAL LETTER YHE */
- /*4008*/  0x01e931,  1, 0x01e90f, /* ADLAM CAPITAL LETTER WAW */
- /*4011*/  0x01e932,  1, 0x01e910, /* ADLAM CAPITAL LETTER NUN */
- /*4014*/  0x01e933,  1, 0x01e911, /* ADLAM CAPITAL LETTER KAF */
- /*4017*/  0x01e934,  1, 0x01e912, /* ADLAM CAPITAL LETTER YA */
- /*4020*/  0x01e935,  1, 0x01e913, /* ADLAM CAPITAL LETTER U */
- /*4023*/  0x01e936,  1, 0x01e914, /* ADLAM CAPITAL LETTER JIIM */
- /*4026*/  0x01e937,  1, 0x01e915, /* ADLAM CAPITAL LETTER CHI */
- /*4029*/  0x01e938,  1, 0x01e916, /* ADLAM CAPITAL LETTER HA */
- /*4032*/  0x01e939,  1, 0x01e917, /* ADLAM CAPITAL LETTER QAAF */
- /*4035*/  0x01e93a,  1, 0x01e918, /* ADLAM CAPITAL LETTER GA */
- /*4038*/  0x01e93b,  1, 0x01e919, /* ADLAM CAPITAL LETTER NYA */
- /*4041*/  0x01e93c,  1, 0x01e91a, /* ADLAM CAPITAL LETTER TU */
- /*4044*/  0x01e93d,  1, 0x01e91b, /* ADLAM CAPITAL LETTER NHA */
- /*4047*/  0x01e93e,  1, 0x01e91c, /* ADLAM CAPITAL LETTER VA */
- /*4050*/  0x01e93f,  1, 0x01e91d, /* ADLAM CAPITAL LETTER KHA */
- /*4053*/  0x01e940,  1, 0x01e91e, /* ADLAM CAPITAL LETTER GBE */
- /*4056*/  0x01e941,  1, 0x01e91f, /* ADLAM CAPITAL LETTER ZAL */
- /*4059*/  0x01e942,  1, 0x01e920, /* ADLAM CAPITAL LETTER KPO */
- /*4062*/  0x01e943,  1, 0x01e921, /* ADLAM CAPITAL LETTER SHA */
-#define FOLDS1_NORMAL_END_INDEX   4065
+ /* 682*/    0x0282,  1,   0xa7c5, /* LATIN CAPITAL LETTER S WITH HOOK */
+ /* 685*/    0x0283,  1,   0x01a9, /* LATIN CAPITAL LETTER ESH */
+ /* 688*/    0x0287,  1,   0xa7b1, /* LATIN CAPITAL LETTER TURNED T */
+ /* 691*/    0x0288,  1,   0x01ae, /* LATIN CAPITAL LETTER T WITH RETRO.. */
+ /* 694*/    0x0289,  1,   0x0244, /* LATIN CAPITAL LETTER U BAR */
+ /* 697*/    0x028a,  1,   0x01b1, /* LATIN CAPITAL LETTER UPSILON */
+ /* 700*/    0x028b,  1,   0x01b2, /* LATIN CAPITAL LETTER V WITH HOOK */
+ /* 703*/    0x028c,  1,   0x0245, /* LATIN CAPITAL LETTER TURNED V */
+ /* 706*/    0x0292,  1,   0x01b7, /* LATIN CAPITAL LETTER EZH */
+ /* 709*/    0x029d,  1,   0xa7b2, /* LATIN CAPITAL LETTER J WITH CROSS.. */
+ /* 712*/    0x029e,  1,   0xa7b0, /* LATIN CAPITAL LETTER TURNED K */
+ /* 715*/    0x0371,  1,   0x0370, /* GREEK CAPITAL LETTER HETA */
+ /* 718*/    0x0373,  1,   0x0372, /* GREEK CAPITAL LETTER ARCHAIC SAMPI */
+ /* 721*/    0x0377,  1,   0x0376, /* GREEK CAPITAL LETTER PAMPHYLIAN D.. */
+ /* 724*/    0x037b,  1,   0x03fd, /* GREEK CAPITAL REVERSED LUNATE SIG.. */
+ /* 727*/    0x037c,  1,   0x03fe, /* GREEK CAPITAL DOTTED LUNATE SIGMA.. */
+ /* 730*/    0x037d,  1,   0x03ff, /* GREEK CAPITAL REVERSED DOTTED LUN.. */
+ /* 733*/    0x03ac,  1,   0x0386, /* GREEK CAPITAL LETTER ALPHA WITH T.. */
+ /* 736*/    0x03ad,  1,   0x0388, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /* 739*/    0x03ae,  1,   0x0389, /* GREEK CAPITAL LETTER ETA WITH TON.. */
+ /* 742*/    0x03af,  1,   0x038a, /* GREEK CAPITAL LETTER IOTA WITH TO.. */
+ /* 745*/    0x03b1,  1,   0x0391, /* GREEK CAPITAL LETTER ALPHA */
+ /* 748*/    0x03b2,  2,   0x0392,   0x03d0, /* GREEK CAPITAL LETTER BETA */
+ /* 752*/    0x03b3,  1,   0x0393, /* GREEK CAPITAL LETTER GAMMA */
+ /* 755*/    0x03b4,  1,   0x0394, /* GREEK CAPITAL LETTER DELTA */
+ /* 758*/    0x03b5,  2,   0x0395,   0x03f5, /* GREEK CAPITAL LETTER EPSILON */
+ /* 762*/    0x03b6,  1,   0x0396, /* GREEK CAPITAL LETTER ZETA */
+ /* 765*/    0x03b7,  1,   0x0397, /* GREEK CAPITAL LETTER ETA */
+ /* 768*/    0x03b8,  3,   0x0398,   0x03d1,   0x03f4, /* GREEK CAPITAL LETTER THETA */
+ /* 773*/    0x03b9,  3,   0x0345,   0x0399,   0x1fbe, /* COMBINING GREEK YPOGEGRAMMENI */
+ /* 778*/    0x03ba,  2,   0x039a,   0x03f0, /* GREEK CAPITAL LETTER KAPPA */
+ /* 782*/    0x03bb,  1,   0x039b, /* GREEK CAPITAL LETTER LAMDA */
+ /* 785*/    0x03bc,  2,   0x00b5,   0x039c, /* MICRO SIGN */
+ /* 789*/    0x03bd,  1,   0x039d, /* GREEK CAPITAL LETTER NU */
+ /* 792*/    0x03be,  1,   0x039e, /* GREEK CAPITAL LETTER XI */
+ /* 795*/    0x03bf,  1,   0x039f, /* GREEK CAPITAL LETTER OMICRON */
+ /* 798*/    0x03c0,  2,   0x03a0,   0x03d6, /* GREEK CAPITAL LETTER PI */
+ /* 802*/    0x03c1,  2,   0x03a1,   0x03f1, /* GREEK CAPITAL LETTER RHO */
+ /* 806*/    0x03c3,  2,   0x03a3,   0x03c2, /* GREEK CAPITAL LETTER SIGMA */
+ /* 810*/    0x03c4,  1,   0x03a4, /* GREEK CAPITAL LETTER TAU */
+ /* 813*/    0x03c5,  1,   0x03a5, /* GREEK CAPITAL LETTER UPSILON */
+ /* 816*/    0x03c6,  2,   0x03a6,   0x03d5, /* GREEK CAPITAL LETTER PHI */
+ /* 820*/    0x03c7,  1,   0x03a7, /* GREEK CAPITAL LETTER CHI */
+ /* 823*/    0x03c8,  1,   0x03a8, /* GREEK CAPITAL LETTER PSI */
+ /* 826*/    0x03c9,  2,   0x03a9,   0x2126, /* GREEK CAPITAL LETTER OMEGA */
+ /* 830*/    0x03ca,  1,   0x03aa, /* GREEK CAPITAL LETTER IOTA WITH DI.. */
+ /* 833*/    0x03cb,  1,   0x03ab, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /* 836*/    0x03cc,  1,   0x038c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /* 839*/    0x03cd,  1,   0x038e, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /* 842*/    0x03ce,  1,   0x038f, /* GREEK CAPITAL LETTER OMEGA WITH T.. */
+ /* 845*/    0x03d7,  1,   0x03cf, /* GREEK CAPITAL KAI SYMBOL */
+ /* 848*/    0x03d9,  1,   0x03d8, /* GREEK LETTER ARCHAIC KOPPA */
+ /* 851*/    0x03db,  1,   0x03da, /* GREEK LETTER STIGMA */
+ /* 854*/    0x03dd,  1,   0x03dc, /* GREEK LETTER DIGAMMA */
+ /* 857*/    0x03df,  1,   0x03de, /* GREEK LETTER KOPPA */
+ /* 860*/    0x03e1,  1,   0x03e0, /* GREEK LETTER SAMPI */
+ /* 863*/    0x03e3,  1,   0x03e2, /* COPTIC CAPITAL LETTER SHEI */
+ /* 866*/    0x03e5,  1,   0x03e4, /* COPTIC CAPITAL LETTER FEI */
+ /* 869*/    0x03e7,  1,   0x03e6, /* COPTIC CAPITAL LETTER KHEI */
+ /* 872*/    0x03e9,  1,   0x03e8, /* COPTIC CAPITAL LETTER HORI */
+ /* 875*/    0x03eb,  1,   0x03ea, /* COPTIC CAPITAL LETTER GANGIA */
+ /* 878*/    0x03ed,  1,   0x03ec, /* COPTIC CAPITAL LETTER SHIMA */
+ /* 881*/    0x03ef,  1,   0x03ee, /* COPTIC CAPITAL LETTER DEI */
+ /* 884*/    0x03f2,  1,   0x03f9, /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
+ /* 887*/    0x03f3,  1,   0x037f, /* GREEK CAPITAL LETTER YOT */
+ /* 890*/    0x03f8,  1,   0x03f7, /* GREEK CAPITAL LETTER SHO */
+ /* 893*/    0x03fb,  1,   0x03fa, /* GREEK CAPITAL LETTER SAN */
+ /* 896*/    0x0430,  1,   0x0410, /* CYRILLIC CAPITAL LETTER A */
+ /* 899*/    0x0431,  1,   0x0411, /* CYRILLIC CAPITAL LETTER BE */
+ /* 902*/    0x0432,  2,   0x0412,   0x1c80, /* CYRILLIC CAPITAL LETTER VE */
+ /* 906*/    0x0433,  1,   0x0413, /* CYRILLIC CAPITAL LETTER GHE */
+ /* 909*/    0x0434,  2,   0x0414,   0x1c81, /* CYRILLIC CAPITAL LETTER DE */
+ /* 913*/    0x0435,  1,   0x0415, /* CYRILLIC CAPITAL LETTER IE */
+ /* 916*/    0x0436,  1,   0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
+ /* 919*/    0x0437,  1,   0x0417, /* CYRILLIC CAPITAL LETTER ZE */
+ /* 922*/    0x0438,  1,   0x0418, /* CYRILLIC CAPITAL LETTER I */
+ /* 925*/    0x0439,  1,   0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
+ /* 928*/    0x043a,  1,   0x041a, /* CYRILLIC CAPITAL LETTER KA */
+ /* 931*/    0x043b,  1,   0x041b, /* CYRILLIC CAPITAL LETTER EL */
+ /* 934*/    0x043c,  1,   0x041c, /* CYRILLIC CAPITAL LETTER EM */
+ /* 937*/    0x043d,  1,   0x041d, /* CYRILLIC CAPITAL LETTER EN */
+ /* 940*/    0x043e,  2,   0x041e,   0x1c82, /* CYRILLIC CAPITAL LETTER O */
+ /* 944*/    0x043f,  1,   0x041f, /* CYRILLIC CAPITAL LETTER PE */
+ /* 947*/    0x0440,  1,   0x0420, /* CYRILLIC CAPITAL LETTER ER */
+ /* 950*/    0x0441,  2,   0x0421,   0x1c83, /* CYRILLIC CAPITAL LETTER ES */
+ /* 954*/    0x0442,  3,   0x0422,   0x1c84,   0x1c85, /* CYRILLIC CAPITAL LETTER TE */
+ /* 959*/    0x0443,  1,   0x0423, /* CYRILLIC CAPITAL LETTER U */
+ /* 962*/    0x0444,  1,   0x0424, /* CYRILLIC CAPITAL LETTER EF */
+ /* 965*/    0x0445,  1,   0x0425, /* CYRILLIC CAPITAL LETTER HA */
+ /* 968*/    0x0446,  1,   0x0426, /* CYRILLIC CAPITAL LETTER TSE */
+ /* 971*/    0x0447,  1,   0x0427, /* CYRILLIC CAPITAL LETTER CHE */
+ /* 974*/    0x0448,  1,   0x0428, /* CYRILLIC CAPITAL LETTER SHA */
+ /* 977*/    0x0449,  1,   0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */
+ /* 980*/    0x044a,  2,   0x042a,   0x1c86, /* CYRILLIC CAPITAL LETTER HARD SIGN */
+ /* 984*/    0x044b,  1,   0x042b, /* CYRILLIC CAPITAL LETTER YERU */
+ /* 987*/    0x044c,  1,   0x042c, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
+ /* 990*/    0x044d,  1,   0x042d, /* CYRILLIC CAPITAL LETTER E */
+ /* 993*/    0x044e,  1,   0x042e, /* CYRILLIC CAPITAL LETTER YU */
+ /* 996*/    0x044f,  1,   0x042f, /* CYRILLIC CAPITAL LETTER YA */
+ /* 999*/    0x0450,  1,   0x0400, /* CYRILLIC CAPITAL LETTER IE WITH G.. */
+ /*1002*/    0x0451,  1,   0x0401, /* CYRILLIC CAPITAL LETTER IO */
+ /*1005*/    0x0452,  1,   0x0402, /* CYRILLIC CAPITAL LETTER DJE */
+ /*1008*/    0x0453,  1,   0x0403, /* CYRILLIC CAPITAL LETTER GJE */
+ /*1011*/    0x0454,  1,   0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN.. */
+ /*1014*/    0x0455,  1,   0x0405, /* CYRILLIC CAPITAL LETTER DZE */
+ /*1017*/    0x0456,  1,   0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSS.. */
+ /*1020*/    0x0457,  1,   0x0407, /* CYRILLIC CAPITAL LETTER YI */
+ /*1023*/    0x0458,  1,   0x0408, /* CYRILLIC CAPITAL LETTER JE */
+ /*1026*/    0x0459,  1,   0x0409, /* CYRILLIC CAPITAL LETTER LJE */
+ /*1029*/    0x045a,  1,   0x040a, /* CYRILLIC CAPITAL LETTER NJE */
+ /*1032*/    0x045b,  1,   0x040b, /* CYRILLIC CAPITAL LETTER TSHE */
+ /*1035*/    0x045c,  1,   0x040c, /* CYRILLIC CAPITAL LETTER KJE */
+ /*1038*/    0x045d,  1,   0x040d, /* CYRILLIC CAPITAL LETTER I WITH GR.. */
+ /*1041*/    0x045e,  1,   0x040e, /* CYRILLIC CAPITAL LETTER SHORT U */
+ /*1044*/    0x045f,  1,   0x040f, /* CYRILLIC CAPITAL LETTER DZHE */
+ /*1047*/    0x0461,  1,   0x0460, /* CYRILLIC CAPITAL LETTER OMEGA */
+ /*1050*/    0x0463,  2,   0x0462,   0x1c87, /* CYRILLIC CAPITAL LETTER YAT */
+ /*1054*/    0x0465,  1,   0x0464, /* CYRILLIC CAPITAL LETTER IOTIFIED E */
+ /*1057*/    0x0467,  1,   0x0466, /* CYRILLIC CAPITAL LETTER LITTLE YUS */
+ /*1060*/    0x0469,  1,   0x0468, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*1063*/    0x046b,  1,   0x046a, /* CYRILLIC CAPITAL LETTER BIG YUS */
+ /*1066*/    0x046d,  1,   0x046c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*1069*/    0x046f,  1,   0x046e, /* CYRILLIC CAPITAL LETTER KSI */
+ /*1072*/    0x0471,  1,   0x0470, /* CYRILLIC CAPITAL LETTER PSI */
+ /*1075*/    0x0473,  1,   0x0472, /* CYRILLIC CAPITAL LETTER FITA */
+ /*1078*/    0x0475,  1,   0x0474, /* CYRILLIC CAPITAL LETTER IZHITSA */
+ /*1081*/    0x0477,  1,   0x0476, /* CYRILLIC CAPITAL LETTER IZHITSA W.. */
+ /*1084*/    0x0479,  1,   0x0478, /* CYRILLIC CAPITAL LETTER UK */
+ /*1087*/    0x047b,  1,   0x047a, /* CYRILLIC CAPITAL LETTER ROUND OME.. */
+ /*1090*/    0x047d,  1,   0x047c, /* CYRILLIC CAPITAL LETTER OMEGA WIT.. */
+ /*1093*/    0x047f,  1,   0x047e, /* CYRILLIC CAPITAL LETTER OT */
+ /*1096*/    0x0481,  1,   0x0480, /* CYRILLIC CAPITAL LETTER KOPPA */
+ /*1099*/    0x048b,  1,   0x048a, /* CYRILLIC CAPITAL LETTER SHORT I W.. */
+ /*1102*/    0x048d,  1,   0x048c, /* CYRILLIC CAPITAL LETTER SEMISOFT .. */
+ /*1105*/    0x048f,  1,   0x048e, /* CYRILLIC CAPITAL LETTER ER WITH T.. */
+ /*1108*/    0x0491,  1,   0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1111*/    0x0493,  1,   0x0492, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1114*/    0x0495,  1,   0x0494, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1117*/    0x0497,  1,   0x0496, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1120*/    0x0499,  1,   0x0498, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
+ /*1123*/    0x049b,  1,   0x049a, /* CYRILLIC CAPITAL LETTER KA WITH D.. */
+ /*1126*/    0x049d,  1,   0x049c, /* CYRILLIC CAPITAL LETTER KA WITH V.. */
+ /*1129*/    0x049f,  1,   0x049e, /* CYRILLIC CAPITAL LETTER KA WITH S.. */
+ /*1132*/    0x04a1,  1,   0x04a0, /* CYRILLIC CAPITAL LETTER BASHKIR KA */
+ /*1135*/    0x04a3,  1,   0x04a2, /* CYRILLIC CAPITAL LETTER EN WITH D.. */
+ /*1138*/    0x04a5,  1,   0x04a4, /* CYRILLIC CAPITAL LIGATURE EN GHE */
+ /*1141*/    0x04a7,  1,   0x04a6, /* CYRILLIC CAPITAL LETTER PE WITH M.. */
+ /*1144*/    0x04a9,  1,   0x04a8, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1147*/    0x04ab,  1,   0x04aa, /* CYRILLIC CAPITAL LETTER ES WITH D.. */
+ /*1150*/    0x04ad,  1,   0x04ac, /* CYRILLIC CAPITAL LETTER TE WITH D.. */
+ /*1153*/    0x04af,  1,   0x04ae, /* CYRILLIC CAPITAL LETTER STRAIGHT U */
+ /*1156*/    0x04b1,  1,   0x04b0, /* CYRILLIC CAPITAL LETTER STRAIGHT .. */
+ /*1159*/    0x04b3,  1,   0x04b2, /* CYRILLIC CAPITAL LETTER HA WITH D.. */
+ /*1162*/    0x04b5,  1,   0x04b4, /* CYRILLIC CAPITAL LIGATURE TE TSE */
+ /*1165*/    0x04b7,  1,   0x04b6, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1168*/    0x04b9,  1,   0x04b8, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1171*/    0x04bb,  1,   0x04ba, /* CYRILLIC CAPITAL LETTER SHHA */
+ /*1174*/    0x04bd,  1,   0x04bc, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1177*/    0x04bf,  1,   0x04be, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1180*/    0x04c2,  1,   0x04c1, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1183*/    0x04c4,  1,   0x04c3, /* CYRILLIC CAPITAL LETTER KA WITH H.. */
+ /*1186*/    0x04c6,  1,   0x04c5, /* CYRILLIC CAPITAL LETTER EL WITH T.. */
+ /*1189*/    0x04c8,  1,   0x04c7, /* CYRILLIC CAPITAL LETTER EN WITH H.. */
+ /*1192*/    0x04ca,  1,   0x04c9, /* CYRILLIC CAPITAL LETTER EN WITH T.. */
+ /*1195*/    0x04cc,  1,   0x04cb, /* CYRILLIC CAPITAL LETTER KHAKASSIA.. */
+ /*1198*/    0x04ce,  1,   0x04cd, /* CYRILLIC CAPITAL LETTER EM WITH T.. */
+ /*1201*/    0x04cf,  1,   0x04c0, /* CYRILLIC LETTER PALOCHKA */
+ /*1204*/    0x04d1,  1,   0x04d0, /* CYRILLIC CAPITAL LETTER A WITH BR.. */
+ /*1207*/    0x04d3,  1,   0x04d2, /* CYRILLIC CAPITAL LETTER A WITH DI.. */
+ /*1210*/    0x04d5,  1,   0x04d4, /* CYRILLIC CAPITAL LIGATURE A IE */
+ /*1213*/    0x04d7,  1,   0x04d6, /* CYRILLIC CAPITAL LETTER IE WITH B.. */
+ /*1216*/    0x04d9,  1,   0x04d8, /* CYRILLIC CAPITAL LETTER SCHWA */
+ /*1219*/    0x04db,  1,   0x04da, /* CYRILLIC CAPITAL LETTER SCHWA WIT.. */
+ /*1222*/    0x04dd,  1,   0x04dc, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1225*/    0x04df,  1,   0x04de, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
+ /*1228*/    0x04e1,  1,   0x04e0, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1231*/    0x04e3,  1,   0x04e2, /* CYRILLIC CAPITAL LETTER I WITH MA.. */
+ /*1234*/    0x04e5,  1,   0x04e4, /* CYRILLIC CAPITAL LETTER I WITH DI.. */
+ /*1237*/    0x04e7,  1,   0x04e6, /* CYRILLIC CAPITAL LETTER O WITH DI.. */
+ /*1240*/    0x04e9,  1,   0x04e8, /* CYRILLIC CAPITAL LETTER BARRED O */
+ /*1243*/    0x04eb,  1,   0x04ea, /* CYRILLIC CAPITAL LETTER BARRED O .. */
+ /*1246*/    0x04ed,  1,   0x04ec, /* CYRILLIC CAPITAL LETTER E WITH DI.. */
+ /*1249*/    0x04ef,  1,   0x04ee, /* CYRILLIC CAPITAL LETTER U WITH MA.. */
+ /*1252*/    0x04f1,  1,   0x04f0, /* CYRILLIC CAPITAL LETTER U WITH DI.. */
+ /*1255*/    0x04f3,  1,   0x04f2, /* CYRILLIC CAPITAL LETTER U WITH DO.. */
+ /*1258*/    0x04f5,  1,   0x04f4, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1261*/    0x04f7,  1,   0x04f6, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1264*/    0x04f9,  1,   0x04f8, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
+ /*1267*/    0x04fb,  1,   0x04fa, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1270*/    0x04fd,  1,   0x04fc, /* CYRILLIC CAPITAL LETTER HA WITH H.. */
+ /*1273*/    0x04ff,  1,   0x04fe, /* CYRILLIC CAPITAL LETTER HA WITH S.. */
+ /*1276*/    0x0501,  1,   0x0500, /* CYRILLIC CAPITAL LETTER KOMI DE */
+ /*1279*/    0x0503,  1,   0x0502, /* CYRILLIC CAPITAL LETTER KOMI DJE */
+ /*1282*/    0x0505,  1,   0x0504, /* CYRILLIC CAPITAL LETTER KOMI ZJE */
+ /*1285*/    0x0507,  1,   0x0506, /* CYRILLIC CAPITAL LETTER KOMI DZJE */
+ /*1288*/    0x0509,  1,   0x0508, /* CYRILLIC CAPITAL LETTER KOMI LJE */
+ /*1291*/    0x050b,  1,   0x050a, /* CYRILLIC CAPITAL LETTER KOMI NJE */
+ /*1294*/    0x050d,  1,   0x050c, /* CYRILLIC CAPITAL LETTER KOMI SJE */
+ /*1297*/    0x050f,  1,   0x050e, /* CYRILLIC CAPITAL LETTER KOMI TJE */
+ /*1300*/    0x0511,  1,   0x0510, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*1303*/    0x0513,  1,   0x0512, /* CYRILLIC CAPITAL LETTER EL WITH H.. */
+ /*1306*/    0x0515,  1,   0x0514, /* CYRILLIC CAPITAL LETTER LHA */
+ /*1309*/    0x0517,  1,   0x0516, /* CYRILLIC CAPITAL LETTER RHA */
+ /*1312*/    0x0519,  1,   0x0518, /* CYRILLIC CAPITAL LETTER YAE */
+ /*1315*/    0x051b,  1,   0x051a, /* CYRILLIC CAPITAL LETTER QA */
+ /*1318*/    0x051d,  1,   0x051c, /* CYRILLIC CAPITAL LETTER WE */
+ /*1321*/    0x051f,  1,   0x051e, /* CYRILLIC CAPITAL LETTER ALEUT KA */
+ /*1324*/    0x0521,  1,   0x0520, /* CYRILLIC CAPITAL LETTER EL WITH M.. */
+ /*1327*/    0x0523,  1,   0x0522, /* CYRILLIC CAPITAL LETTER EN WITH M.. */
+ /*1330*/    0x0525,  1,   0x0524, /* CYRILLIC CAPITAL LETTER PE WITH D.. */
+ /*1333*/    0x0527,  1,   0x0526, /* CYRILLIC CAPITAL LETTER SHHA WITH.. */
+ /*1336*/    0x0529,  1,   0x0528, /* CYRILLIC CAPITAL LETTER EN WITH L.. */
+ /*1339*/    0x052b,  1,   0x052a, /* CYRILLIC CAPITAL LETTER DZZHE */
+ /*1342*/    0x052d,  1,   0x052c, /* CYRILLIC CAPITAL LETTER DCHE */
+ /*1345*/    0x052f,  1,   0x052e, /* CYRILLIC CAPITAL LETTER EL WITH D.. */
+ /*1348*/    0x0561,  1,   0x0531, /* ARMENIAN CAPITAL LETTER AYB */
+ /*1351*/    0x0562,  1,   0x0532, /* ARMENIAN CAPITAL LETTER BEN */
+ /*1354*/    0x0563,  1,   0x0533, /* ARMENIAN CAPITAL LETTER GIM */
+ /*1357*/    0x0564,  1,   0x0534, /* ARMENIAN CAPITAL LETTER DA */
+ /*1360*/    0x0565,  1,   0x0535, /* ARMENIAN CAPITAL LETTER ECH */
+ /*1363*/    0x0566,  1,   0x0536, /* ARMENIAN CAPITAL LETTER ZA */
+ /*1366*/    0x0567,  1,   0x0537, /* ARMENIAN CAPITAL LETTER EH */
+ /*1369*/    0x0568,  1,   0x0538, /* ARMENIAN CAPITAL LETTER ET */
+ /*1372*/    0x0569,  1,   0x0539, /* ARMENIAN CAPITAL LETTER TO */
+ /*1375*/    0x056a,  1,   0x053a, /* ARMENIAN CAPITAL LETTER ZHE */
+ /*1378*/    0x056b,  1,   0x053b, /* ARMENIAN CAPITAL LETTER INI */
+ /*1381*/    0x056c,  1,   0x053c, /* ARMENIAN CAPITAL LETTER LIWN */
+ /*1384*/    0x056d,  1,   0x053d, /* ARMENIAN CAPITAL LETTER XEH */
+ /*1387*/    0x056e,  1,   0x053e, /* ARMENIAN CAPITAL LETTER CA */
+ /*1390*/    0x056f,  1,   0x053f, /* ARMENIAN CAPITAL LETTER KEN */
+ /*1393*/    0x0570,  1,   0x0540, /* ARMENIAN CAPITAL LETTER HO */
+ /*1396*/    0x0571,  1,   0x0541, /* ARMENIAN CAPITAL LETTER JA */
+ /*1399*/    0x0572,  1,   0x0542, /* ARMENIAN CAPITAL LETTER GHAD */
+ /*1402*/    0x0573,  1,   0x0543, /* ARMENIAN CAPITAL LETTER CHEH */
+ /*1405*/    0x0574,  1,   0x0544, /* ARMENIAN CAPITAL LETTER MEN */
+ /*1408*/    0x0575,  1,   0x0545, /* ARMENIAN CAPITAL LETTER YI */
+ /*1411*/    0x0576,  1,   0x0546, /* ARMENIAN CAPITAL LETTER NOW */
+ /*1414*/    0x0577,  1,   0x0547, /* ARMENIAN CAPITAL LETTER SHA */
+ /*1417*/    0x0578,  1,   0x0548, /* ARMENIAN CAPITAL LETTER VO */
+ /*1420*/    0x0579,  1,   0x0549, /* ARMENIAN CAPITAL LETTER CHA */
+ /*1423*/    0x057a,  1,   0x054a, /* ARMENIAN CAPITAL LETTER PEH */
+ /*1426*/    0x057b,  1,   0x054b, /* ARMENIAN CAPITAL LETTER JHEH */
+ /*1429*/    0x057c,  1,   0x054c, /* ARMENIAN CAPITAL LETTER RA */
+ /*1432*/    0x057d,  1,   0x054d, /* ARMENIAN CAPITAL LETTER SEH */
+ /*1435*/    0x057e,  1,   0x054e, /* ARMENIAN CAPITAL LETTER VEW */
+ /*1438*/    0x057f,  1,   0x054f, /* ARMENIAN CAPITAL LETTER TIWN */
+ /*1441*/    0x0580,  1,   0x0550, /* ARMENIAN CAPITAL LETTER REH */
+ /*1444*/    0x0581,  1,   0x0551, /* ARMENIAN CAPITAL LETTER CO */
+ /*1447*/    0x0582,  1,   0x0552, /* ARMENIAN CAPITAL LETTER YIWN */
+ /*1450*/    0x0583,  1,   0x0553, /* ARMENIAN CAPITAL LETTER PIWR */
+ /*1453*/    0x0584,  1,   0x0554, /* ARMENIAN CAPITAL LETTER KEH */
+ /*1456*/    0x0585,  1,   0x0555, /* ARMENIAN CAPITAL LETTER OH */
+ /*1459*/    0x0586,  1,   0x0556, /* ARMENIAN CAPITAL LETTER FEH */
+ /*1462*/    0x10d0,  1,   0x1c90, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1465*/    0x10d1,  1,   0x1c91, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1468*/    0x10d2,  1,   0x1c92, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1471*/    0x10d3,  1,   0x1c93, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1474*/    0x10d4,  1,   0x1c94, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1477*/    0x10d5,  1,   0x1c95, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1480*/    0x10d6,  1,   0x1c96, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1483*/    0x10d7,  1,   0x1c97, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1486*/    0x10d8,  1,   0x1c98, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1489*/    0x10d9,  1,   0x1c99, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1492*/    0x10da,  1,   0x1c9a, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1495*/    0x10db,  1,   0x1c9b, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1498*/    0x10dc,  1,   0x1c9c, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1501*/    0x10dd,  1,   0x1c9d, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1504*/    0x10de,  1,   0x1c9e, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1507*/    0x10df,  1,   0x1c9f, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1510*/    0x10e0,  1,   0x1ca0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1513*/    0x10e1,  1,   0x1ca1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1516*/    0x10e2,  1,   0x1ca2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1519*/    0x10e3,  1,   0x1ca3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1522*/    0x10e4,  1,   0x1ca4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1525*/    0x10e5,  1,   0x1ca5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1528*/    0x10e6,  1,   0x1ca6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1531*/    0x10e7,  1,   0x1ca7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1534*/    0x10e8,  1,   0x1ca8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1537*/    0x10e9,  1,   0x1ca9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1540*/    0x10ea,  1,   0x1caa, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1543*/    0x10eb,  1,   0x1cab, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1546*/    0x10ec,  1,   0x1cac, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1549*/    0x10ed,  1,   0x1cad, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1552*/    0x10ee,  1,   0x1cae, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1555*/    0x10ef,  1,   0x1caf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1558*/    0x10f0,  1,   0x1cb0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1561*/    0x10f1,  1,   0x1cb1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1564*/    0x10f2,  1,   0x1cb2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1567*/    0x10f3,  1,   0x1cb3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1570*/    0x10f4,  1,   0x1cb4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1573*/    0x10f5,  1,   0x1cb5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1576*/    0x10f6,  1,   0x1cb6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1579*/    0x10f7,  1,   0x1cb7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1582*/    0x10f8,  1,   0x1cb8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1585*/    0x10f9,  1,   0x1cb9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1588*/    0x10fa,  1,   0x1cba, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1591*/    0x10fd,  1,   0x1cbd, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1594*/    0x10fe,  1,   0x1cbe, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1597*/    0x10ff,  1,   0x1cbf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1600*/    0x13a0,  1,   0xab70, /* CHEROKEE SMALL LETTER A */
+ /*1603*/    0x13a1,  1,   0xab71, /* CHEROKEE SMALL LETTER E */
+ /*1606*/    0x13a2,  1,   0xab72, /* CHEROKEE SMALL LETTER I */
+ /*1609*/    0x13a3,  1,   0xab73, /* CHEROKEE SMALL LETTER O */
+ /*1612*/    0x13a4,  1,   0xab74, /* CHEROKEE SMALL LETTER U */
+ /*1615*/    0x13a5,  1,   0xab75, /* CHEROKEE SMALL LETTER V */
+ /*1618*/    0x13a6,  1,   0xab76, /* CHEROKEE SMALL LETTER GA */
+ /*1621*/    0x13a7,  1,   0xab77, /* CHEROKEE SMALL LETTER KA */
+ /*1624*/    0x13a8,  1,   0xab78, /* CHEROKEE SMALL LETTER GE */
+ /*1627*/    0x13a9,  1,   0xab79, /* CHEROKEE SMALL LETTER GI */
+ /*1630*/    0x13aa,  1,   0xab7a, /* CHEROKEE SMALL LETTER GO */
+ /*1633*/    0x13ab,  1,   0xab7b, /* CHEROKEE SMALL LETTER GU */
+ /*1636*/    0x13ac,  1,   0xab7c, /* CHEROKEE SMALL LETTER GV */
+ /*1639*/    0x13ad,  1,   0xab7d, /* CHEROKEE SMALL LETTER HA */
+ /*1642*/    0x13ae,  1,   0xab7e, /* CHEROKEE SMALL LETTER HE */
+ /*1645*/    0x13af,  1,   0xab7f, /* CHEROKEE SMALL LETTER HI */
+ /*1648*/    0x13b0,  1,   0xab80, /* CHEROKEE SMALL LETTER HO */
+ /*1651*/    0x13b1,  1,   0xab81, /* CHEROKEE SMALL LETTER HU */
+ /*1654*/    0x13b2,  1,   0xab82, /* CHEROKEE SMALL LETTER HV */
+ /*1657*/    0x13b3,  1,   0xab83, /* CHEROKEE SMALL LETTER LA */
+ /*1660*/    0x13b4,  1,   0xab84, /* CHEROKEE SMALL LETTER LE */
+ /*1663*/    0x13b5,  1,   0xab85, /* CHEROKEE SMALL LETTER LI */
+ /*1666*/    0x13b6,  1,   0xab86, /* CHEROKEE SMALL LETTER LO */
+ /*1669*/    0x13b7,  1,   0xab87, /* CHEROKEE SMALL LETTER LU */
+ /*1672*/    0x13b8,  1,   0xab88, /* CHEROKEE SMALL LETTER LV */
+ /*1675*/    0x13b9,  1,   0xab89, /* CHEROKEE SMALL LETTER MA */
+ /*1678*/    0x13ba,  1,   0xab8a, /* CHEROKEE SMALL LETTER ME */
+ /*1681*/    0x13bb,  1,   0xab8b, /* CHEROKEE SMALL LETTER MI */
+ /*1684*/    0x13bc,  1,   0xab8c, /* CHEROKEE SMALL LETTER MO */
+ /*1687*/    0x13bd,  1,   0xab8d, /* CHEROKEE SMALL LETTER MU */
+ /*1690*/    0x13be,  1,   0xab8e, /* CHEROKEE SMALL LETTER NA */
+ /*1693*/    0x13bf,  1,   0xab8f, /* CHEROKEE SMALL LETTER HNA */
+ /*1696*/    0x13c0,  1,   0xab90, /* CHEROKEE SMALL LETTER NAH */
+ /*1699*/    0x13c1,  1,   0xab91, /* CHEROKEE SMALL LETTER NE */
+ /*1702*/    0x13c2,  1,   0xab92, /* CHEROKEE SMALL LETTER NI */
+ /*1705*/    0x13c3,  1,   0xab93, /* CHEROKEE SMALL LETTER NO */
+ /*1708*/    0x13c4,  1,   0xab94, /* CHEROKEE SMALL LETTER NU */
+ /*1711*/    0x13c5,  1,   0xab95, /* CHEROKEE SMALL LETTER NV */
+ /*1714*/    0x13c6,  1,   0xab96, /* CHEROKEE SMALL LETTER QUA */
+ /*1717*/    0x13c7,  1,   0xab97, /* CHEROKEE SMALL LETTER QUE */
+ /*1720*/    0x13c8,  1,   0xab98, /* CHEROKEE SMALL LETTER QUI */
+ /*1723*/    0x13c9,  1,   0xab99, /* CHEROKEE SMALL LETTER QUO */
+ /*1726*/    0x13ca,  1,   0xab9a, /* CHEROKEE SMALL LETTER QUU */
+ /*1729*/    0x13cb,  1,   0xab9b, /* CHEROKEE SMALL LETTER QUV */
+ /*1732*/    0x13cc,  1,   0xab9c, /* CHEROKEE SMALL LETTER SA */
+ /*1735*/    0x13cd,  1,   0xab9d, /* CHEROKEE SMALL LETTER S */
+ /*1738*/    0x13ce,  1,   0xab9e, /* CHEROKEE SMALL LETTER SE */
+ /*1741*/    0x13cf,  1,   0xab9f, /* CHEROKEE SMALL LETTER SI */
+ /*1744*/    0x13d0,  1,   0xaba0, /* CHEROKEE SMALL LETTER SO */
+ /*1747*/    0x13d1,  1,   0xaba1, /* CHEROKEE SMALL LETTER SU */
+ /*1750*/    0x13d2,  1,   0xaba2, /* CHEROKEE SMALL LETTER SV */
+ /*1753*/    0x13d3,  1,   0xaba3, /* CHEROKEE SMALL LETTER DA */
+ /*1756*/    0x13d4,  1,   0xaba4, /* CHEROKEE SMALL LETTER TA */
+ /*1759*/    0x13d5,  1,   0xaba5, /* CHEROKEE SMALL LETTER DE */
+ /*1762*/    0x13d6,  1,   0xaba6, /* CHEROKEE SMALL LETTER TE */
+ /*1765*/    0x13d7,  1,   0xaba7, /* CHEROKEE SMALL LETTER DI */
+ /*1768*/    0x13d8,  1,   0xaba8, /* CHEROKEE SMALL LETTER TI */
+ /*1771*/    0x13d9,  1,   0xaba9, /* CHEROKEE SMALL LETTER DO */
+ /*1774*/    0x13da,  1,   0xabaa, /* CHEROKEE SMALL LETTER DU */
+ /*1777*/    0x13db,  1,   0xabab, /* CHEROKEE SMALL LETTER DV */
+ /*1780*/    0x13dc,  1,   0xabac, /* CHEROKEE SMALL LETTER DLA */
+ /*1783*/    0x13dd,  1,   0xabad, /* CHEROKEE SMALL LETTER TLA */
+ /*1786*/    0x13de,  1,   0xabae, /* CHEROKEE SMALL LETTER TLE */
+ /*1789*/    0x13df,  1,   0xabaf, /* CHEROKEE SMALL LETTER TLI */
+ /*1792*/    0x13e0,  1,   0xabb0, /* CHEROKEE SMALL LETTER TLO */
+ /*1795*/    0x13e1,  1,   0xabb1, /* CHEROKEE SMALL LETTER TLU */
+ /*1798*/    0x13e2,  1,   0xabb2, /* CHEROKEE SMALL LETTER TLV */
+ /*1801*/    0x13e3,  1,   0xabb3, /* CHEROKEE SMALL LETTER TSA */
+ /*1804*/    0x13e4,  1,   0xabb4, /* CHEROKEE SMALL LETTER TSE */
+ /*1807*/    0x13e5,  1,   0xabb5, /* CHEROKEE SMALL LETTER TSI */
+ /*1810*/    0x13e6,  1,   0xabb6, /* CHEROKEE SMALL LETTER TSO */
+ /*1813*/    0x13e7,  1,   0xabb7, /* CHEROKEE SMALL LETTER TSU */
+ /*1816*/    0x13e8,  1,   0xabb8, /* CHEROKEE SMALL LETTER TSV */
+ /*1819*/    0x13e9,  1,   0xabb9, /* CHEROKEE SMALL LETTER WA */
+ /*1822*/    0x13ea,  1,   0xabba, /* CHEROKEE SMALL LETTER WE */
+ /*1825*/    0x13eb,  1,   0xabbb, /* CHEROKEE SMALL LETTER WI */
+ /*1828*/    0x13ec,  1,   0xabbc, /* CHEROKEE SMALL LETTER WO */
+ /*1831*/    0x13ed,  1,   0xabbd, /* CHEROKEE SMALL LETTER WU */
+ /*1834*/    0x13ee,  1,   0xabbe, /* CHEROKEE SMALL LETTER WV */
+ /*1837*/    0x13ef,  1,   0xabbf, /* CHEROKEE SMALL LETTER YA */
+ /*1840*/    0x13f0,  1,   0x13f8, /* CHEROKEE SMALL LETTER YE */
+ /*1843*/    0x13f1,  1,   0x13f9, /* CHEROKEE SMALL LETTER YI */
+ /*1846*/    0x13f2,  1,   0x13fa, /* CHEROKEE SMALL LETTER YO */
+ /*1849*/    0x13f3,  1,   0x13fb, /* CHEROKEE SMALL LETTER YU */
+ /*1852*/    0x13f4,  1,   0x13fc, /* CHEROKEE SMALL LETTER YV */
+ /*1855*/    0x13f5,  1,   0x13fd, /* CHEROKEE SMALL LETTER MV */
+ /*1858*/    0x1d79,  1,   0xa77d, /* LATIN CAPITAL LETTER INSULAR G */
+ /*1861*/    0x1d7d,  1,   0x2c63, /* LATIN CAPITAL LETTER P WITH STROKE */
+ /*1864*/    0x1d8e,  1,   0xa7c6, /* LATIN CAPITAL LETTER Z WITH PALAT.. */
+ /*1867*/    0x1e01,  1,   0x1e00, /* LATIN CAPITAL LETTER A WITH RING .. */
+ /*1870*/    0x1e03,  1,   0x1e02, /* LATIN CAPITAL LETTER B WITH DOT A.. */
+ /*1873*/    0x1e05,  1,   0x1e04, /* LATIN CAPITAL LETTER B WITH DOT B.. */
+ /*1876*/    0x1e07,  1,   0x1e06, /* LATIN CAPITAL LETTER B WITH LINE .. */
+ /*1879*/    0x1e09,  1,   0x1e08, /* LATIN CAPITAL LETTER C WITH CEDIL.. */
+ /*1882*/    0x1e0b,  1,   0x1e0a, /* LATIN CAPITAL LETTER D WITH DOT A.. */
+ /*1885*/    0x1e0d,  1,   0x1e0c, /* LATIN CAPITAL LETTER D WITH DOT B.. */
+ /*1888*/    0x1e0f,  1,   0x1e0e, /* LATIN CAPITAL LETTER D WITH LINE .. */
+ /*1891*/    0x1e11,  1,   0x1e10, /* LATIN CAPITAL LETTER D WITH CEDIL.. */
+ /*1894*/    0x1e13,  1,   0x1e12, /* LATIN CAPITAL LETTER D WITH CIRCU.. */
+ /*1897*/    0x1e15,  1,   0x1e14, /* LATIN CAPITAL LETTER E WITH MACRO.. */
+ /*1900*/    0x1e17,  1,   0x1e16, /* LATIN CAPITAL LETTER E WITH MACRO.. */
+ /*1903*/    0x1e19,  1,   0x1e18, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*1906*/    0x1e1b,  1,   0x1e1a, /* LATIN CAPITAL LETTER E WITH TILDE.. */
+ /*1909*/    0x1e1d,  1,   0x1e1c, /* LATIN CAPITAL LETTER E WITH CEDIL.. */
+ /*1912*/    0x1e1f,  1,   0x1e1e, /* LATIN CAPITAL LETTER F WITH DOT A.. */
+ /*1915*/    0x1e21,  1,   0x1e20, /* LATIN CAPITAL LETTER G WITH MACRON */
+ /*1918*/    0x1e23,  1,   0x1e22, /* LATIN CAPITAL LETTER H WITH DOT A.. */
+ /*1921*/    0x1e25,  1,   0x1e24, /* LATIN CAPITAL LETTER H WITH DOT B.. */
+ /*1924*/    0x1e27,  1,   0x1e26, /* LATIN CAPITAL LETTER H WITH DIAER.. */
+ /*1927*/    0x1e29,  1,   0x1e28, /* LATIN CAPITAL LETTER H WITH CEDIL.. */
+ /*1930*/    0x1e2b,  1,   0x1e2a, /* LATIN CAPITAL LETTER H WITH BREVE.. */
+ /*1933*/    0x1e2d,  1,   0x1e2c, /* LATIN CAPITAL LETTER I WITH TILDE.. */
+ /*1936*/    0x1e2f,  1,   0x1e2e, /* LATIN CAPITAL LETTER I WITH DIAER.. */
+ /*1939*/    0x1e31,  1,   0x1e30, /* LATIN CAPITAL LETTER K WITH ACUTE */
+ /*1942*/    0x1e33,  1,   0x1e32, /* LATIN CAPITAL LETTER K WITH DOT B.. */
+ /*1945*/    0x1e35,  1,   0x1e34, /* LATIN CAPITAL LETTER K WITH LINE .. */
+ /*1948*/    0x1e37,  1,   0x1e36, /* LATIN CAPITAL LETTER L WITH DOT B.. */
+ /*1951*/    0x1e39,  1,   0x1e38, /* LATIN CAPITAL LETTER L WITH DOT B.. */
+ /*1954*/    0x1e3b,  1,   0x1e3a, /* LATIN CAPITAL LETTER L WITH LINE .. */
+ /*1957*/    0x1e3d,  1,   0x1e3c, /* LATIN CAPITAL LETTER L WITH CIRCU.. */
+ /*1960*/    0x1e3f,  1,   0x1e3e, /* LATIN CAPITAL LETTER M WITH ACUTE */
+ /*1963*/    0x1e41,  1,   0x1e40, /* LATIN CAPITAL LETTER M WITH DOT A.. */
+ /*1966*/    0x1e43,  1,   0x1e42, /* LATIN CAPITAL LETTER M WITH DOT B.. */
+ /*1969*/    0x1e45,  1,   0x1e44, /* LATIN CAPITAL LETTER N WITH DOT A.. */
+ /*1972*/    0x1e47,  1,   0x1e46, /* LATIN CAPITAL LETTER N WITH DOT B.. */
+ /*1975*/    0x1e49,  1,   0x1e48, /* LATIN CAPITAL LETTER N WITH LINE .. */
+ /*1978*/    0x1e4b,  1,   0x1e4a, /* LATIN CAPITAL LETTER N WITH CIRCU.. */
+ /*1981*/    0x1e4d,  1,   0x1e4c, /* LATIN CAPITAL LETTER O WITH TILDE.. */
+ /*1984*/    0x1e4f,  1,   0x1e4e, /* LATIN CAPITAL LETTER O WITH TILDE.. */
+ /*1987*/    0x1e51,  1,   0x1e50, /* LATIN CAPITAL LETTER O WITH MACRO.. */
+ /*1990*/    0x1e53,  1,   0x1e52, /* LATIN CAPITAL LETTER O WITH MACRO.. */
+ /*1993*/    0x1e55,  1,   0x1e54, /* LATIN CAPITAL LETTER P WITH ACUTE */
+ /*1996*/    0x1e57,  1,   0x1e56, /* LATIN CAPITAL LETTER P WITH DOT A.. */
+ /*1999*/    0x1e59,  1,   0x1e58, /* LATIN CAPITAL LETTER R WITH DOT A.. */
+ /*2002*/    0x1e5b,  1,   0x1e5a, /* LATIN CAPITAL LETTER R WITH DOT B.. */
+ /*2005*/    0x1e5d,  1,   0x1e5c, /* LATIN CAPITAL LETTER R WITH DOT B.. */
+ /*2008*/    0x1e5f,  1,   0x1e5e, /* LATIN CAPITAL LETTER R WITH LINE .. */
+ /*2011*/    0x1e61,  2,   0x1e60,   0x1e9b, /* LATIN CAPITAL LETTER S WITH DOT A.. */
+ /*2015*/    0x1e63,  1,   0x1e62, /* LATIN CAPITAL LETTER S WITH DOT B.. */
+ /*2018*/    0x1e65,  1,   0x1e64, /* LATIN CAPITAL LETTER S WITH ACUTE.. */
+ /*2021*/    0x1e67,  1,   0x1e66, /* LATIN CAPITAL LETTER S WITH CARON.. */
+ /*2024*/    0x1e69,  1,   0x1e68, /* LATIN CAPITAL LETTER S WITH DOT B.. */
+ /*2027*/    0x1e6b,  1,   0x1e6a, /* LATIN CAPITAL LETTER T WITH DOT A.. */
+ /*2030*/    0x1e6d,  1,   0x1e6c, /* LATIN CAPITAL LETTER T WITH DOT B.. */
+ /*2033*/    0x1e6f,  1,   0x1e6e, /* LATIN CAPITAL LETTER T WITH LINE .. */
+ /*2036*/    0x1e71,  1,   0x1e70, /* LATIN CAPITAL LETTER T WITH CIRCU.. */
+ /*2039*/    0x1e73,  1,   0x1e72, /* LATIN CAPITAL LETTER U WITH DIAER.. */
+ /*2042*/    0x1e75,  1,   0x1e74, /* LATIN CAPITAL LETTER U WITH TILDE.. */
+ /*2045*/    0x1e77,  1,   0x1e76, /* LATIN CAPITAL LETTER U WITH CIRCU.. */
+ /*2048*/    0x1e79,  1,   0x1e78, /* LATIN CAPITAL LETTER U WITH TILDE.. */
+ /*2051*/    0x1e7b,  1,   0x1e7a, /* LATIN CAPITAL LETTER U WITH MACRO.. */
+ /*2054*/    0x1e7d,  1,   0x1e7c, /* LATIN CAPITAL LETTER V WITH TILDE */
+ /*2057*/    0x1e7f,  1,   0x1e7e, /* LATIN CAPITAL LETTER V WITH DOT B.. */
+ /*2060*/    0x1e81,  1,   0x1e80, /* LATIN CAPITAL LETTER W WITH GRAVE */
+ /*2063*/    0x1e83,  1,   0x1e82, /* LATIN CAPITAL LETTER W WITH ACUTE */
+ /*2066*/    0x1e85,  1,   0x1e84, /* LATIN CAPITAL LETTER W WITH DIAER.. */
+ /*2069*/    0x1e87,  1,   0x1e86, /* LATIN CAPITAL LETTER W WITH DOT A.. */
+ /*2072*/    0x1e89,  1,   0x1e88, /* LATIN CAPITAL LETTER W WITH DOT B.. */
+ /*2075*/    0x1e8b,  1,   0x1e8a, /* LATIN CAPITAL LETTER X WITH DOT A.. */
+ /*2078*/    0x1e8d,  1,   0x1e8c, /* LATIN CAPITAL LETTER X WITH DIAER.. */
+ /*2081*/    0x1e8f,  1,   0x1e8e, /* LATIN CAPITAL LETTER Y WITH DOT A.. */
+ /*2084*/    0x1e91,  1,   0x1e90, /* LATIN CAPITAL LETTER Z WITH CIRCU.. */
+ /*2087*/    0x1e93,  1,   0x1e92, /* LATIN CAPITAL LETTER Z WITH DOT B.. */
+ /*2090*/    0x1e95,  1,   0x1e94, /* LATIN CAPITAL LETTER Z WITH LINE .. */
+ /*2093*/    0x1ea1,  1,   0x1ea0, /* LATIN CAPITAL LETTER A WITH DOT B.. */
+ /*2096*/    0x1ea3,  1,   0x1ea2, /* LATIN CAPITAL LETTER A WITH HOOK .. */
+ /*2099*/    0x1ea5,  1,   0x1ea4, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2102*/    0x1ea7,  1,   0x1ea6, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2105*/    0x1ea9,  1,   0x1ea8, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2108*/    0x1eab,  1,   0x1eaa, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2111*/    0x1ead,  1,   0x1eac, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2114*/    0x1eaf,  1,   0x1eae, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2117*/    0x1eb1,  1,   0x1eb0, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2120*/    0x1eb3,  1,   0x1eb2, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2123*/    0x1eb5,  1,   0x1eb4, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2126*/    0x1eb7,  1,   0x1eb6, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2129*/    0x1eb9,  1,   0x1eb8, /* LATIN CAPITAL LETTER E WITH DOT B.. */
+ /*2132*/    0x1ebb,  1,   0x1eba, /* LATIN CAPITAL LETTER E WITH HOOK .. */
+ /*2135*/    0x1ebd,  1,   0x1ebc, /* LATIN CAPITAL LETTER E WITH TILDE */
+ /*2138*/    0x1ebf,  1,   0x1ebe, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2141*/    0x1ec1,  1,   0x1ec0, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2144*/    0x1ec3,  1,   0x1ec2, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2147*/    0x1ec5,  1,   0x1ec4, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2150*/    0x1ec7,  1,   0x1ec6, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2153*/    0x1ec9,  1,   0x1ec8, /* LATIN CAPITAL LETTER I WITH HOOK .. */
+ /*2156*/    0x1ecb,  1,   0x1eca, /* LATIN CAPITAL LETTER I WITH DOT B.. */
+ /*2159*/    0x1ecd,  1,   0x1ecc, /* LATIN CAPITAL LETTER O WITH DOT B.. */
+ /*2162*/    0x1ecf,  1,   0x1ece, /* LATIN CAPITAL LETTER O WITH HOOK .. */
+ /*2165*/    0x1ed1,  1,   0x1ed0, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2168*/    0x1ed3,  1,   0x1ed2, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2171*/    0x1ed5,  1,   0x1ed4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2174*/    0x1ed7,  1,   0x1ed6, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2177*/    0x1ed9,  1,   0x1ed8, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2180*/    0x1edb,  1,   0x1eda, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2183*/    0x1edd,  1,   0x1edc, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2186*/    0x1edf,  1,   0x1ede, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2189*/    0x1ee1,  1,   0x1ee0, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2192*/    0x1ee3,  1,   0x1ee2, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2195*/    0x1ee5,  1,   0x1ee4, /* LATIN CAPITAL LETTER U WITH DOT B.. */
+ /*2198*/    0x1ee7,  1,   0x1ee6, /* LATIN CAPITAL LETTER U WITH HOOK .. */
+ /*2201*/    0x1ee9,  1,   0x1ee8, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2204*/    0x1eeb,  1,   0x1eea, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2207*/    0x1eed,  1,   0x1eec, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2210*/    0x1eef,  1,   0x1eee, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2213*/    0x1ef1,  1,   0x1ef0, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2216*/    0x1ef3,  1,   0x1ef2, /* LATIN CAPITAL LETTER Y WITH GRAVE */
+ /*2219*/    0x1ef5,  1,   0x1ef4, /* LATIN CAPITAL LETTER Y WITH DOT B.. */
+ /*2222*/    0x1ef7,  1,   0x1ef6, /* LATIN CAPITAL LETTER Y WITH HOOK .. */
+ /*2225*/    0x1ef9,  1,   0x1ef8, /* LATIN CAPITAL LETTER Y WITH TILDE */
+ /*2228*/    0x1efb,  1,   0x1efa, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
+ /*2231*/    0x1efd,  1,   0x1efc, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
+ /*2234*/    0x1eff,  1,   0x1efe, /* LATIN CAPITAL LETTER Y WITH LOOP */
+ /*2237*/    0x1f00,  1,   0x1f08, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2240*/    0x1f01,  1,   0x1f09, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2243*/    0x1f02,  1,   0x1f0a, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2246*/    0x1f03,  1,   0x1f0b, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2249*/    0x1f04,  1,   0x1f0c, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2252*/    0x1f05,  1,   0x1f0d, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2255*/    0x1f06,  1,   0x1f0e, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2258*/    0x1f07,  1,   0x1f0f, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2261*/    0x1f10,  1,   0x1f18, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2264*/    0x1f11,  1,   0x1f19, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2267*/    0x1f12,  1,   0x1f1a, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2270*/    0x1f13,  1,   0x1f1b, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2273*/    0x1f14,  1,   0x1f1c, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2276*/    0x1f15,  1,   0x1f1d, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2279*/    0x1f20,  1,   0x1f28, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2282*/    0x1f21,  1,   0x1f29, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2285*/    0x1f22,  1,   0x1f2a, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2288*/    0x1f23,  1,   0x1f2b, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2291*/    0x1f24,  1,   0x1f2c, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2294*/    0x1f25,  1,   0x1f2d, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2297*/    0x1f26,  1,   0x1f2e, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2300*/    0x1f27,  1,   0x1f2f, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2303*/    0x1f30,  1,   0x1f38, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2306*/    0x1f31,  1,   0x1f39, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2309*/    0x1f32,  1,   0x1f3a, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2312*/    0x1f33,  1,   0x1f3b, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2315*/    0x1f34,  1,   0x1f3c, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2318*/    0x1f35,  1,   0x1f3d, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2321*/    0x1f36,  1,   0x1f3e, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2324*/    0x1f37,  1,   0x1f3f, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2327*/    0x1f40,  1,   0x1f48, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2330*/    0x1f41,  1,   0x1f49, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2333*/    0x1f42,  1,   0x1f4a, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2336*/    0x1f43,  1,   0x1f4b, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2339*/    0x1f44,  1,   0x1f4c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2342*/    0x1f45,  1,   0x1f4d, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2345*/    0x1f51,  1,   0x1f59, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2348*/    0x1f53,  1,   0x1f5b, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2351*/    0x1f55,  1,   0x1f5d, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2354*/    0x1f57,  1,   0x1f5f, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2357*/    0x1f60,  1,   0x1f68, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2360*/    0x1f61,  1,   0x1f69, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2363*/    0x1f62,  1,   0x1f6a, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2366*/    0x1f63,  1,   0x1f6b, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2369*/    0x1f64,  1,   0x1f6c, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2372*/    0x1f65,  1,   0x1f6d, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2375*/    0x1f66,  1,   0x1f6e, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2378*/    0x1f67,  1,   0x1f6f, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2381*/    0x1f70,  1,   0x1fba, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
+ /*2384*/    0x1f71,  1,   0x1fbb, /* GREEK CAPITAL LETTER ALPHA WITH O.. */
+ /*2387*/    0x1f72,  1,   0x1fc8, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2390*/    0x1f73,  1,   0x1fc9, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2393*/    0x1f74,  1,   0x1fca, /* GREEK CAPITAL LETTER ETA WITH VAR.. */
+ /*2396*/    0x1f75,  1,   0x1fcb, /* GREEK CAPITAL LETTER ETA WITH OXIA */
+ /*2399*/    0x1f76,  1,   0x1fda, /* GREEK CAPITAL LETTER IOTA WITH VA.. */
+ /*2402*/    0x1f77,  1,   0x1fdb, /* GREEK CAPITAL LETTER IOTA WITH OX.. */
+ /*2405*/    0x1f78,  1,   0x1ff8, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2408*/    0x1f79,  1,   0x1ff9, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2411*/    0x1f7a,  1,   0x1fea, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2414*/    0x1f7b,  1,   0x1feb, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2417*/    0x1f7c,  1,   0x1ffa, /* GREEK CAPITAL LETTER OMEGA WITH V.. */
+ /*2420*/    0x1f7d,  1,   0x1ffb, /* GREEK CAPITAL LETTER OMEGA WITH O.. */
+ /*2423*/    0x1fb0,  1,   0x1fb8, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
+ /*2426*/    0x1fb1,  1,   0x1fb9, /* GREEK CAPITAL LETTER ALPHA WITH M.. */
+ /*2429*/    0x1fd0,  1,   0x1fd8, /* GREEK CAPITAL LETTER IOTA WITH VR.. */
+ /*2432*/    0x1fd1,  1,   0x1fd9, /* GREEK CAPITAL LETTER IOTA WITH MA.. */
+ /*2435*/    0x1fe0,  1,   0x1fe8, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2438*/    0x1fe1,  1,   0x1fe9, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2441*/    0x1fe5,  1,   0x1fec, /* GREEK CAPITAL LETTER RHO WITH DAS.. */
+ /*2444*/    0x214e,  1,   0x2132, /* TURNED CAPITAL F */
+ /*2447*/    0x2170,  1,   0x2160, /* ROMAN NUMERAL ONE */
+ /*2450*/    0x2171,  1,   0x2161, /* ROMAN NUMERAL TWO */
+ /*2453*/    0x2172,  1,   0x2162, /* ROMAN NUMERAL THREE */
+ /*2456*/    0x2173,  1,   0x2163, /* ROMAN NUMERAL FOUR */
+ /*2459*/    0x2174,  1,   0x2164, /* ROMAN NUMERAL FIVE */
+ /*2462*/    0x2175,  1,   0x2165, /* ROMAN NUMERAL SIX */
+ /*2465*/    0x2176,  1,   0x2166, /* ROMAN NUMERAL SEVEN */
+ /*2468*/    0x2177,  1,   0x2167, /* ROMAN NUMERAL EIGHT */
+ /*2471*/    0x2178,  1,   0x2168, /* ROMAN NUMERAL NINE */
+ /*2474*/    0x2179,  1,   0x2169, /* ROMAN NUMERAL TEN */
+ /*2477*/    0x217a,  1,   0x216a, /* ROMAN NUMERAL ELEVEN */
+ /*2480*/    0x217b,  1,   0x216b, /* ROMAN NUMERAL TWELVE */
+ /*2483*/    0x217c,  1,   0x216c, /* ROMAN NUMERAL FIFTY */
+ /*2486*/    0x217d,  1,   0x216d, /* ROMAN NUMERAL ONE HUNDRED */
+ /*2489*/    0x217e,  1,   0x216e, /* ROMAN NUMERAL FIVE HUNDRED */
+ /*2492*/    0x217f,  1,   0x216f, /* ROMAN NUMERAL ONE THOUSAND */
+ /*2495*/    0x2184,  1,   0x2183, /* ROMAN NUMERAL REVERSED ONE HUNDRED */
+ /*2498*/    0x24d0,  1,   0x24b6, /* CIRCLED LATIN CAPITAL LETTER A */
+ /*2501*/    0x24d1,  1,   0x24b7, /* CIRCLED LATIN CAPITAL LETTER B */
+ /*2504*/    0x24d2,  1,   0x24b8, /* CIRCLED LATIN CAPITAL LETTER C */
+ /*2507*/    0x24d3,  1,   0x24b9, /* CIRCLED LATIN CAPITAL LETTER D */
+ /*2510*/    0x24d4,  1,   0x24ba, /* CIRCLED LATIN CAPITAL LETTER E */
+ /*2513*/    0x24d5,  1,   0x24bb, /* CIRCLED LATIN CAPITAL LETTER F */
+ /*2516*/    0x24d6,  1,   0x24bc, /* CIRCLED LATIN CAPITAL LETTER G */
+ /*2519*/    0x24d7,  1,   0x24bd, /* CIRCLED LATIN CAPITAL LETTER H */
+ /*2522*/    0x24d8,  1,   0x24be, /* CIRCLED LATIN CAPITAL LETTER I */
+ /*2525*/    0x24d9,  1,   0x24bf, /* CIRCLED LATIN CAPITAL LETTER J */
+ /*2528*/    0x24da,  1,   0x24c0, /* CIRCLED LATIN CAPITAL LETTER K */
+ /*2531*/    0x24db,  1,   0x24c1, /* CIRCLED LATIN CAPITAL LETTER L */
+ /*2534*/    0x24dc,  1,   0x24c2, /* CIRCLED LATIN CAPITAL LETTER M */
+ /*2537*/    0x24dd,  1,   0x24c3, /* CIRCLED LATIN CAPITAL LETTER N */
+ /*2540*/    0x24de,  1,   0x24c4, /* CIRCLED LATIN CAPITAL LETTER O */
+ /*2543*/    0x24df,  1,   0x24c5, /* CIRCLED LATIN CAPITAL LETTER P */
+ /*2546*/    0x24e0,  1,   0x24c6, /* CIRCLED LATIN CAPITAL LETTER Q */
+ /*2549*/    0x24e1,  1,   0x24c7, /* CIRCLED LATIN CAPITAL LETTER R */
+ /*2552*/    0x24e2,  1,   0x24c8, /* CIRCLED LATIN CAPITAL LETTER S */
+ /*2555*/    0x24e3,  1,   0x24c9, /* CIRCLED LATIN CAPITAL LETTER T */
+ /*2558*/    0x24e4,  1,   0x24ca, /* CIRCLED LATIN CAPITAL LETTER U */
+ /*2561*/    0x24e5,  1,   0x24cb, /* CIRCLED LATIN CAPITAL LETTER V */
+ /*2564*/    0x24e6,  1,   0x24cc, /* CIRCLED LATIN CAPITAL LETTER W */
+ /*2567*/    0x24e7,  1,   0x24cd, /* CIRCLED LATIN CAPITAL LETTER X */
+ /*2570*/    0x24e8,  1,   0x24ce, /* CIRCLED LATIN CAPITAL LETTER Y */
+ /*2573*/    0x24e9,  1,   0x24cf, /* CIRCLED LATIN CAPITAL LETTER Z */
+ /*2576*/    0x2c30,  1,   0x2c00, /* GLAGOLITIC CAPITAL LETTER AZU */
+ /*2579*/    0x2c31,  1,   0x2c01, /* GLAGOLITIC CAPITAL LETTER BUKY */
+ /*2582*/    0x2c32,  1,   0x2c02, /* GLAGOLITIC CAPITAL LETTER VEDE */
+ /*2585*/    0x2c33,  1,   0x2c03, /* GLAGOLITIC CAPITAL LETTER GLAGOLI */
+ /*2588*/    0x2c34,  1,   0x2c04, /* GLAGOLITIC CAPITAL LETTER DOBRO */
+ /*2591*/    0x2c35,  1,   0x2c05, /* GLAGOLITIC CAPITAL LETTER YESTU */
+ /*2594*/    0x2c36,  1,   0x2c06, /* GLAGOLITIC CAPITAL LETTER ZHIVETE */
+ /*2597*/    0x2c37,  1,   0x2c07, /* GLAGOLITIC CAPITAL LETTER DZELO */
+ /*2600*/    0x2c38,  1,   0x2c08, /* GLAGOLITIC CAPITAL LETTER ZEMLJA */
+ /*2603*/    0x2c39,  1,   0x2c09, /* GLAGOLITIC CAPITAL LETTER IZHE */
+ /*2606*/    0x2c3a,  1,   0x2c0a, /* GLAGOLITIC CAPITAL LETTER INITIAL.. */
+ /*2609*/    0x2c3b,  1,   0x2c0b, /* GLAGOLITIC CAPITAL LETTER I */
+ /*2612*/    0x2c3c,  1,   0x2c0c, /* GLAGOLITIC CAPITAL LETTER DJERVI */
+ /*2615*/    0x2c3d,  1,   0x2c0d, /* GLAGOLITIC CAPITAL LETTER KAKO */
+ /*2618*/    0x2c3e,  1,   0x2c0e, /* GLAGOLITIC CAPITAL LETTER LJUDIJE */
+ /*2621*/    0x2c3f,  1,   0x2c0f, /* GLAGOLITIC CAPITAL LETTER MYSLITE */
+ /*2624*/    0x2c40,  1,   0x2c10, /* GLAGOLITIC CAPITAL LETTER NASHI */
+ /*2627*/    0x2c41,  1,   0x2c11, /* GLAGOLITIC CAPITAL LETTER ONU */
+ /*2630*/    0x2c42,  1,   0x2c12, /* GLAGOLITIC CAPITAL LETTER POKOJI */
+ /*2633*/    0x2c43,  1,   0x2c13, /* GLAGOLITIC CAPITAL LETTER RITSI */
+ /*2636*/    0x2c44,  1,   0x2c14, /* GLAGOLITIC CAPITAL LETTER SLOVO */
+ /*2639*/    0x2c45,  1,   0x2c15, /* GLAGOLITIC CAPITAL LETTER TVRIDO */
+ /*2642*/    0x2c46,  1,   0x2c16, /* GLAGOLITIC CAPITAL LETTER UKU */
+ /*2645*/    0x2c47,  1,   0x2c17, /* GLAGOLITIC CAPITAL LETTER FRITU */
+ /*2648*/    0x2c48,  1,   0x2c18, /* GLAGOLITIC CAPITAL LETTER HERU */
+ /*2651*/    0x2c49,  1,   0x2c19, /* GLAGOLITIC CAPITAL LETTER OTU */
+ /*2654*/    0x2c4a,  1,   0x2c1a, /* GLAGOLITIC CAPITAL LETTER PE */
+ /*2657*/    0x2c4b,  1,   0x2c1b, /* GLAGOLITIC CAPITAL LETTER SHTA */
+ /*2660*/    0x2c4c,  1,   0x2c1c, /* GLAGOLITIC CAPITAL LETTER TSI */
+ /*2663*/    0x2c4d,  1,   0x2c1d, /* GLAGOLITIC CAPITAL LETTER CHRIVI */
+ /*2666*/    0x2c4e,  1,   0x2c1e, /* GLAGOLITIC CAPITAL LETTER SHA */
+ /*2669*/    0x2c4f,  1,   0x2c1f, /* GLAGOLITIC CAPITAL LETTER YERU */
+ /*2672*/    0x2c50,  1,   0x2c20, /* GLAGOLITIC CAPITAL LETTER YERI */
+ /*2675*/    0x2c51,  1,   0x2c21, /* GLAGOLITIC CAPITAL LETTER YATI */
+ /*2678*/    0x2c52,  1,   0x2c22, /* GLAGOLITIC CAPITAL LETTER SPIDERY.. */
+ /*2681*/    0x2c53,  1,   0x2c23, /* GLAGOLITIC CAPITAL LETTER YU */
+ /*2684*/    0x2c54,  1,   0x2c24, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
+ /*2687*/    0x2c55,  1,   0x2c25, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
+ /*2690*/    0x2c56,  1,   0x2c26, /* GLAGOLITIC CAPITAL LETTER YO */
+ /*2693*/    0x2c57,  1,   0x2c27, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
+ /*2696*/    0x2c58,  1,   0x2c28, /* GLAGOLITIC CAPITAL LETTER BIG YUS */
+ /*2699*/    0x2c59,  1,   0x2c29, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
+ /*2702*/    0x2c5a,  1,   0x2c2a, /* GLAGOLITIC CAPITAL LETTER FITA */
+ /*2705*/    0x2c5b,  1,   0x2c2b, /* GLAGOLITIC CAPITAL LETTER IZHITSA */
+ /*2708*/    0x2c5c,  1,   0x2c2c, /* GLAGOLITIC CAPITAL LETTER SHTAPIC */
+ /*2711*/    0x2c5d,  1,   0x2c2d, /* GLAGOLITIC CAPITAL LETTER TROKUTA.. */
+ /*2714*/    0x2c5e,  1,   0x2c2e, /* GLAGOLITIC CAPITAL LETTER LATINAT.. */
+ /*2717*/    0x2c61,  1,   0x2c60, /* LATIN CAPITAL LETTER L WITH DOUBL.. */
+ /*2720*/    0x2c65,  1,   0x023a, /* LATIN CAPITAL LETTER A WITH STROKE */
+ /*2723*/    0x2c66,  1,   0x023e, /* LATIN CAPITAL LETTER T WITH DIAGO.. */
+ /*2726*/    0x2c68,  1,   0x2c67, /* LATIN CAPITAL LETTER H WITH DESCE.. */
+ /*2729*/    0x2c6a,  1,   0x2c69, /* LATIN CAPITAL LETTER K WITH DESCE.. */
+ /*2732*/    0x2c6c,  1,   0x2c6b, /* LATIN CAPITAL LETTER Z WITH DESCE.. */
+ /*2735*/    0x2c73,  1,   0x2c72, /* LATIN CAPITAL LETTER W WITH HOOK */
+ /*2738*/    0x2c76,  1,   0x2c75, /* LATIN CAPITAL LETTER HALF H */
+ /*2741*/    0x2c81,  1,   0x2c80, /* COPTIC CAPITAL LETTER ALFA */
+ /*2744*/    0x2c83,  1,   0x2c82, /* COPTIC CAPITAL LETTER VIDA */
+ /*2747*/    0x2c85,  1,   0x2c84, /* COPTIC CAPITAL LETTER GAMMA */
+ /*2750*/    0x2c87,  1,   0x2c86, /* COPTIC CAPITAL LETTER DALDA */
+ /*2753*/    0x2c89,  1,   0x2c88, /* COPTIC CAPITAL LETTER EIE */
+ /*2756*/    0x2c8b,  1,   0x2c8a, /* COPTIC CAPITAL LETTER SOU */
+ /*2759*/    0x2c8d,  1,   0x2c8c, /* COPTIC CAPITAL LETTER ZATA */
+ /*2762*/    0x2c8f,  1,   0x2c8e, /* COPTIC CAPITAL LETTER HATE */
+ /*2765*/    0x2c91,  1,   0x2c90, /* COPTIC CAPITAL LETTER THETHE */
+ /*2768*/    0x2c93,  1,   0x2c92, /* COPTIC CAPITAL LETTER IAUDA */
+ /*2771*/    0x2c95,  1,   0x2c94, /* COPTIC CAPITAL LETTER KAPA */
+ /*2774*/    0x2c97,  1,   0x2c96, /* COPTIC CAPITAL LETTER LAULA */
+ /*2777*/    0x2c99,  1,   0x2c98, /* COPTIC CAPITAL LETTER MI */
+ /*2780*/    0x2c9b,  1,   0x2c9a, /* COPTIC CAPITAL LETTER NI */
+ /*2783*/    0x2c9d,  1,   0x2c9c, /* COPTIC CAPITAL LETTER KSI */
+ /*2786*/    0x2c9f,  1,   0x2c9e, /* COPTIC CAPITAL LETTER O */
+ /*2789*/    0x2ca1,  1,   0x2ca0, /* COPTIC CAPITAL LETTER PI */
+ /*2792*/    0x2ca3,  1,   0x2ca2, /* COPTIC CAPITAL LETTER RO */
+ /*2795*/    0x2ca5,  1,   0x2ca4, /* COPTIC CAPITAL LETTER SIMA */
+ /*2798*/    0x2ca7,  1,   0x2ca6, /* COPTIC CAPITAL LETTER TAU */
+ /*2801*/    0x2ca9,  1,   0x2ca8, /* COPTIC CAPITAL LETTER UA */
+ /*2804*/    0x2cab,  1,   0x2caa, /* COPTIC CAPITAL LETTER FI */
+ /*2807*/    0x2cad,  1,   0x2cac, /* COPTIC CAPITAL LETTER KHI */
+ /*2810*/    0x2caf,  1,   0x2cae, /* COPTIC CAPITAL LETTER PSI */
+ /*2813*/    0x2cb1,  1,   0x2cb0, /* COPTIC CAPITAL LETTER OOU */
+ /*2816*/    0x2cb3,  1,   0x2cb2, /* COPTIC CAPITAL LETTER DIALECT-P A.. */
+ /*2819*/    0x2cb5,  1,   0x2cb4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2822*/    0x2cb7,  1,   0x2cb6, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2825*/    0x2cb9,  1,   0x2cb8, /* COPTIC CAPITAL LETTER DIALECT-P K.. */
+ /*2828*/    0x2cbb,  1,   0x2cba, /* COPTIC CAPITAL LETTER DIALECT-P NI */
+ /*2831*/    0x2cbd,  1,   0x2cbc, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2834*/    0x2cbf,  1,   0x2cbe, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2837*/    0x2cc1,  1,   0x2cc0, /* COPTIC CAPITAL LETTER SAMPI */
+ /*2840*/    0x2cc3,  1,   0x2cc2, /* COPTIC CAPITAL LETTER CROSSED SHEI */
+ /*2843*/    0x2cc5,  1,   0x2cc4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2846*/    0x2cc7,  1,   0x2cc6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2849*/    0x2cc9,  1,   0x2cc8, /* COPTIC CAPITAL LETTER AKHMIMIC KH.. */
+ /*2852*/    0x2ccb,  1,   0x2cca, /* COPTIC CAPITAL LETTER DIALECT-P H.. */
+ /*2855*/    0x2ccd,  1,   0x2ccc, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2858*/    0x2ccf,  1,   0x2cce, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2861*/    0x2cd1,  1,   0x2cd0, /* COPTIC CAPITAL LETTER L-SHAPED HA */
+ /*2864*/    0x2cd3,  1,   0x2cd2, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2867*/    0x2cd5,  1,   0x2cd4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2870*/    0x2cd7,  1,   0x2cd6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2873*/    0x2cd9,  1,   0x2cd8, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2876*/    0x2cdb,  1,   0x2cda, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2879*/    0x2cdd,  1,   0x2cdc, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2882*/    0x2cdf,  1,   0x2cde, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2885*/    0x2ce1,  1,   0x2ce0, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2888*/    0x2ce3,  1,   0x2ce2, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2891*/    0x2cec,  1,   0x2ceb, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2894*/    0x2cee,  1,   0x2ced, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2897*/    0x2cf3,  1,   0x2cf2, /* COPTIC CAPITAL LETTER BOHAIRIC KH.. */
+ /*2900*/    0x2d00,  1,   0x10a0, /* GEORGIAN CAPITAL LETTER AN */
+ /*2903*/    0x2d01,  1,   0x10a1, /* GEORGIAN CAPITAL LETTER BAN */
+ /*2906*/    0x2d02,  1,   0x10a2, /* GEORGIAN CAPITAL LETTER GAN */
+ /*2909*/    0x2d03,  1,   0x10a3, /* GEORGIAN CAPITAL LETTER DON */
+ /*2912*/    0x2d04,  1,   0x10a4, /* GEORGIAN CAPITAL LETTER EN */
+ /*2915*/    0x2d05,  1,   0x10a5, /* GEORGIAN CAPITAL LETTER VIN */
+ /*2918*/    0x2d06,  1,   0x10a6, /* GEORGIAN CAPITAL LETTER ZEN */
+ /*2921*/    0x2d07,  1,   0x10a7, /* GEORGIAN CAPITAL LETTER TAN */
+ /*2924*/    0x2d08,  1,   0x10a8, /* GEORGIAN CAPITAL LETTER IN */
+ /*2927*/    0x2d09,  1,   0x10a9, /* GEORGIAN CAPITAL LETTER KAN */
+ /*2930*/    0x2d0a,  1,   0x10aa, /* GEORGIAN CAPITAL LETTER LAS */
+ /*2933*/    0x2d0b,  1,   0x10ab, /* GEORGIAN CAPITAL LETTER MAN */
+ /*2936*/    0x2d0c,  1,   0x10ac, /* GEORGIAN CAPITAL LETTER NAR */
+ /*2939*/    0x2d0d,  1,   0x10ad, /* GEORGIAN CAPITAL LETTER ON */
+ /*2942*/    0x2d0e,  1,   0x10ae, /* GEORGIAN CAPITAL LETTER PAR */
+ /*2945*/    0x2d0f,  1,   0x10af, /* GEORGIAN CAPITAL LETTER ZHAR */
+ /*2948*/    0x2d10,  1,   0x10b0, /* GEORGIAN CAPITAL LETTER RAE */
+ /*2951*/    0x2d11,  1,   0x10b1, /* GEORGIAN CAPITAL LETTER SAN */
+ /*2954*/    0x2d12,  1,   0x10b2, /* GEORGIAN CAPITAL LETTER TAR */
+ /*2957*/    0x2d13,  1,   0x10b3, /* GEORGIAN CAPITAL LETTER UN */
+ /*2960*/    0x2d14,  1,   0x10b4, /* GEORGIAN CAPITAL LETTER PHAR */
+ /*2963*/    0x2d15,  1,   0x10b5, /* GEORGIAN CAPITAL LETTER KHAR */
+ /*2966*/    0x2d16,  1,   0x10b6, /* GEORGIAN CAPITAL LETTER GHAN */
+ /*2969*/    0x2d17,  1,   0x10b7, /* GEORGIAN CAPITAL LETTER QAR */
+ /*2972*/    0x2d18,  1,   0x10b8, /* GEORGIAN CAPITAL LETTER SHIN */
+ /*2975*/    0x2d19,  1,   0x10b9, /* GEORGIAN CAPITAL LETTER CHIN */
+ /*2978*/    0x2d1a,  1,   0x10ba, /* GEORGIAN CAPITAL LETTER CAN */
+ /*2981*/    0x2d1b,  1,   0x10bb, /* GEORGIAN CAPITAL LETTER JIL */
+ /*2984*/    0x2d1c,  1,   0x10bc, /* GEORGIAN CAPITAL LETTER CIL */
+ /*2987*/    0x2d1d,  1,   0x10bd, /* GEORGIAN CAPITAL LETTER CHAR */
+ /*2990*/    0x2d1e,  1,   0x10be, /* GEORGIAN CAPITAL LETTER XAN */
+ /*2993*/    0x2d1f,  1,   0x10bf, /* GEORGIAN CAPITAL LETTER JHAN */
+ /*2996*/    0x2d20,  1,   0x10c0, /* GEORGIAN CAPITAL LETTER HAE */
+ /*2999*/    0x2d21,  1,   0x10c1, /* GEORGIAN CAPITAL LETTER HE */
+ /*3002*/    0x2d22,  1,   0x10c2, /* GEORGIAN CAPITAL LETTER HIE */
+ /*3005*/    0x2d23,  1,   0x10c3, /* GEORGIAN CAPITAL LETTER WE */
+ /*3008*/    0x2d24,  1,   0x10c4, /* GEORGIAN CAPITAL LETTER HAR */
+ /*3011*/    0x2d25,  1,   0x10c5, /* GEORGIAN CAPITAL LETTER HOE */
+ /*3014*/    0x2d27,  1,   0x10c7, /* GEORGIAN CAPITAL LETTER YN */
+ /*3017*/    0x2d2d,  1,   0x10cd, /* GEORGIAN CAPITAL LETTER AEN */
+ /*3020*/    0xa641,  1,   0xa640, /* CYRILLIC CAPITAL LETTER ZEMLYA */
+ /*3023*/    0xa643,  1,   0xa642, /* CYRILLIC CAPITAL LETTER DZELO */
+ /*3026*/    0xa645,  1,   0xa644, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3029*/    0xa647,  1,   0xa646, /* CYRILLIC CAPITAL LETTER IOTA */
+ /*3032*/    0xa649,  1,   0xa648, /* CYRILLIC CAPITAL LETTER DJERV */
+ /*3035*/    0xa64b,  2,   0x1c88,   0xa64a, /* CYRILLIC SMALL LETTER UNBLENDED UK */
+ /*3039*/    0xa64d,  1,   0xa64c, /* CYRILLIC CAPITAL LETTER BROAD OME.. */
+ /*3042*/    0xa64f,  1,   0xa64e, /* CYRILLIC CAPITAL LETTER NEUTRAL Y.. */
+ /*3045*/    0xa651,  1,   0xa650, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
+ /*3048*/    0xa653,  1,   0xa652, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*3051*/    0xa655,  1,   0xa654, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3054*/    0xa657,  1,   0xa656, /* CYRILLIC CAPITAL LETTER IOTIFIED A */
+ /*3057*/    0xa659,  1,   0xa658, /* CYRILLIC CAPITAL LETTER CLOSED LI.. */
+ /*3060*/    0xa65b,  1,   0xa65a, /* CYRILLIC CAPITAL LETTER BLENDED Y.. */
+ /*3063*/    0xa65d,  1,   0xa65c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*3066*/    0xa65f,  1,   0xa65e, /* CYRILLIC CAPITAL LETTER YN */
+ /*3069*/    0xa661,  1,   0xa660, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3072*/    0xa663,  1,   0xa662, /* CYRILLIC CAPITAL LETTER SOFT DE */
+ /*3075*/    0xa665,  1,   0xa664, /* CYRILLIC CAPITAL LETTER SOFT EL */
+ /*3078*/    0xa667,  1,   0xa666, /* CYRILLIC CAPITAL LETTER SOFT EM */
+ /*3081*/    0xa669,  1,   0xa668, /* CYRILLIC CAPITAL LETTER MONOCULAR.. */
+ /*3084*/    0xa66b,  1,   0xa66a, /* CYRILLIC CAPITAL LETTER BINOCULAR.. */
+ /*3087*/    0xa66d,  1,   0xa66c, /* CYRILLIC CAPITAL LETTER DOUBLE MO.. */
+ /*3090*/    0xa681,  1,   0xa680, /* CYRILLIC CAPITAL LETTER DWE */
+ /*3093*/    0xa683,  1,   0xa682, /* CYRILLIC CAPITAL LETTER DZWE */
+ /*3096*/    0xa685,  1,   0xa684, /* CYRILLIC CAPITAL LETTER ZHWE */
+ /*3099*/    0xa687,  1,   0xa686, /* CYRILLIC CAPITAL LETTER CCHE */
+ /*3102*/    0xa689,  1,   0xa688, /* CYRILLIC CAPITAL LETTER DZZE */
+ /*3105*/    0xa68b,  1,   0xa68a, /* CYRILLIC CAPITAL LETTER TE WITH M.. */
+ /*3108*/    0xa68d,  1,   0xa68c, /* CYRILLIC CAPITAL LETTER TWE */
+ /*3111*/    0xa68f,  1,   0xa68e, /* CYRILLIC CAPITAL LETTER TSWE */
+ /*3114*/    0xa691,  1,   0xa690, /* CYRILLIC CAPITAL LETTER TSSE */
+ /*3117*/    0xa693,  1,   0xa692, /* CYRILLIC CAPITAL LETTER TCHE */
+ /*3120*/    0xa695,  1,   0xa694, /* CYRILLIC CAPITAL LETTER HWE */
+ /*3123*/    0xa697,  1,   0xa696, /* CYRILLIC CAPITAL LETTER SHWE */
+ /*3126*/    0xa699,  1,   0xa698, /* CYRILLIC CAPITAL LETTER DOUBLE O */
+ /*3129*/    0xa69b,  1,   0xa69a, /* CYRILLIC CAPITAL LETTER CROSSED O */
+ /*3132*/    0xa723,  1,   0xa722, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
+ /*3135*/    0xa725,  1,   0xa724, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
+ /*3138*/    0xa727,  1,   0xa726, /* LATIN CAPITAL LETTER HENG */
+ /*3141*/    0xa729,  1,   0xa728, /* LATIN CAPITAL LETTER TZ */
+ /*3144*/    0xa72b,  1,   0xa72a, /* LATIN CAPITAL LETTER TRESILLO */
+ /*3147*/    0xa72d,  1,   0xa72c, /* LATIN CAPITAL LETTER CUATRILLO */
+ /*3150*/    0xa72f,  1,   0xa72e, /* LATIN CAPITAL LETTER CUATRILLO WI.. */
+ /*3153*/    0xa733,  1,   0xa732, /* LATIN CAPITAL LETTER AA */
+ /*3156*/    0xa735,  1,   0xa734, /* LATIN CAPITAL LETTER AO */
+ /*3159*/    0xa737,  1,   0xa736, /* LATIN CAPITAL LETTER AU */
+ /*3162*/    0xa739,  1,   0xa738, /* LATIN CAPITAL LETTER AV */
+ /*3165*/    0xa73b,  1,   0xa73a, /* LATIN CAPITAL LETTER AV WITH HORI.. */
+ /*3168*/    0xa73d,  1,   0xa73c, /* LATIN CAPITAL LETTER AY */
+ /*3171*/    0xa73f,  1,   0xa73e, /* LATIN CAPITAL LETTER REVERSED C W.. */
+ /*3174*/    0xa741,  1,   0xa740, /* LATIN CAPITAL LETTER K WITH STROKE */
+ /*3177*/    0xa743,  1,   0xa742, /* LATIN CAPITAL LETTER K WITH DIAGO.. */
+ /*3180*/    0xa745,  1,   0xa744, /* LATIN CAPITAL LETTER K WITH STROK.. */
+ /*3183*/    0xa747,  1,   0xa746, /* LATIN CAPITAL LETTER BROKEN L */
+ /*3186*/    0xa749,  1,   0xa748, /* LATIN CAPITAL LETTER L WITH HIGH .. */
+ /*3189*/    0xa74b,  1,   0xa74a, /* LATIN CAPITAL LETTER O WITH LONG .. */
+ /*3192*/    0xa74d,  1,   0xa74c, /* LATIN CAPITAL LETTER O WITH LOOP */
+ /*3195*/    0xa74f,  1,   0xa74e, /* LATIN CAPITAL LETTER OO */
+ /*3198*/    0xa751,  1,   0xa750, /* LATIN CAPITAL LETTER P WITH STROK.. */
+ /*3201*/    0xa753,  1,   0xa752, /* LATIN CAPITAL LETTER P WITH FLOUR.. */
+ /*3204*/    0xa755,  1,   0xa754, /* LATIN CAPITAL LETTER P WITH SQUIR.. */
+ /*3207*/    0xa757,  1,   0xa756, /* LATIN CAPITAL LETTER Q WITH STROK.. */
+ /*3210*/    0xa759,  1,   0xa758, /* LATIN CAPITAL LETTER Q WITH DIAGO.. */
+ /*3213*/    0xa75b,  1,   0xa75a, /* LATIN CAPITAL LETTER R ROTUNDA */
+ /*3216*/    0xa75d,  1,   0xa75c, /* LATIN CAPITAL LETTER RUM ROTUNDA */
+ /*3219*/    0xa75f,  1,   0xa75e, /* LATIN CAPITAL LETTER V WITH DIAGO.. */
+ /*3222*/    0xa761,  1,   0xa760, /* LATIN CAPITAL LETTER VY */
+ /*3225*/    0xa763,  1,   0xa762, /* LATIN CAPITAL LETTER VISIGOTHIC Z */
+ /*3228*/    0xa765,  1,   0xa764, /* LATIN CAPITAL LETTER THORN WITH S.. */
+ /*3231*/    0xa767,  1,   0xa766, /* LATIN CAPITAL LETTER THORN WITH S.. */
+ /*3234*/    0xa769,  1,   0xa768, /* LATIN CAPITAL LETTER VEND */
+ /*3237*/    0xa76b,  1,   0xa76a, /* LATIN CAPITAL LETTER ET */
+ /*3240*/    0xa76d,  1,   0xa76c, /* LATIN CAPITAL LETTER IS */
+ /*3243*/    0xa76f,  1,   0xa76e, /* LATIN CAPITAL LETTER CON */
+ /*3246*/    0xa77a,  1,   0xa779, /* LATIN CAPITAL LETTER INSULAR D */
+ /*3249*/    0xa77c,  1,   0xa77b, /* LATIN CAPITAL LETTER INSULAR F */
+ /*3252*/    0xa77f,  1,   0xa77e, /* LATIN CAPITAL LETTER TURNED INSUL.. */
+ /*3255*/    0xa781,  1,   0xa780, /* LATIN CAPITAL LETTER TURNED L */
+ /*3258*/    0xa783,  1,   0xa782, /* LATIN CAPITAL LETTER INSULAR R */
+ /*3261*/    0xa785,  1,   0xa784, /* LATIN CAPITAL LETTER INSULAR S */
+ /*3264*/    0xa787,  1,   0xa786, /* LATIN CAPITAL LETTER INSULAR T */
+ /*3267*/    0xa78c,  1,   0xa78b, /* LATIN CAPITAL LETTER SALTILLO */
+ /*3270*/    0xa791,  1,   0xa790, /* LATIN CAPITAL LETTER N WITH DESCE.. */
+ /*3273*/    0xa793,  1,   0xa792, /* LATIN CAPITAL LETTER C WITH BAR */
+ /*3276*/    0xa794,  1,   0xa7c4, /* LATIN CAPITAL LETTER C WITH PALAT.. */
+ /*3279*/    0xa797,  1,   0xa796, /* LATIN CAPITAL LETTER B WITH FLOUR.. */
+ /*3282*/    0xa799,  1,   0xa798, /* LATIN CAPITAL LETTER F WITH STROKE */
+ /*3285*/    0xa79b,  1,   0xa79a, /* LATIN CAPITAL LETTER VOLAPUK AE */
+ /*3288*/    0xa79d,  1,   0xa79c, /* LATIN CAPITAL LETTER VOLAPUK OE */
+ /*3291*/    0xa79f,  1,   0xa79e, /* LATIN CAPITAL LETTER VOLAPUK UE */
+ /*3294*/    0xa7a1,  1,   0xa7a0, /* LATIN CAPITAL LETTER G WITH OBLIQ.. */
+ /*3297*/    0xa7a3,  1,   0xa7a2, /* LATIN CAPITAL LETTER K WITH OBLIQ.. */
+ /*3300*/    0xa7a5,  1,   0xa7a4, /* LATIN CAPITAL LETTER N WITH OBLIQ.. */
+ /*3303*/    0xa7a7,  1,   0xa7a6, /* LATIN CAPITAL LETTER R WITH OBLIQ.. */
+ /*3306*/    0xa7a9,  1,   0xa7a8, /* LATIN CAPITAL LETTER S WITH OBLIQ.. */
+ /*3309*/    0xa7b5,  1,   0xa7b4, /* LATIN CAPITAL LETTER BETA */
+ /*3312*/    0xa7b7,  1,   0xa7b6, /* LATIN CAPITAL LETTER OMEGA */
+ /*3315*/    0xa7b9,  1,   0xa7b8, /* LATIN CAPITAL LETTER U WITH STROKE */
+ /*3318*/    0xa7bb,  1,   0xa7ba, /* LATIN CAPITAL LETTER GLOTTAL A */
+ /*3321*/    0xa7bd,  1,   0xa7bc, /* LATIN CAPITAL LETTER GLOTTAL I */
+ /*3324*/    0xa7bf,  1,   0xa7be, /* LATIN CAPITAL LETTER GLOTTAL U */
+ /*3327*/    0xa7c3,  1,   0xa7c2, /* LATIN CAPITAL LETTER ANGLICANA W */
+ /*3330*/    0xab53,  1,   0xa7b3, /* LATIN CAPITAL LETTER CHI */
+ /*3333*/    0xff41,  1,   0xff21, /* FULLWIDTH LATIN CAPITAL LETTER A */
+ /*3336*/    0xff42,  1,   0xff22, /* FULLWIDTH LATIN CAPITAL LETTER B */
+ /*3339*/    0xff43,  1,   0xff23, /* FULLWIDTH LATIN CAPITAL LETTER C */
+ /*3342*/    0xff44,  1,   0xff24, /* FULLWIDTH LATIN CAPITAL LETTER D */
+ /*3345*/    0xff45,  1,   0xff25, /* FULLWIDTH LATIN CAPITAL LETTER E */
+ /*3348*/    0xff46,  1,   0xff26, /* FULLWIDTH LATIN CAPITAL LETTER F */
+ /*3351*/    0xff47,  1,   0xff27, /* FULLWIDTH LATIN CAPITAL LETTER G */
+ /*3354*/    0xff48,  1,   0xff28, /* FULLWIDTH LATIN CAPITAL LETTER H */
+ /*3357*/    0xff49,  1,   0xff29, /* FULLWIDTH LATIN CAPITAL LETTER I */
+ /*3360*/    0xff4a,  1,   0xff2a, /* FULLWIDTH LATIN CAPITAL LETTER J */
+ /*3363*/    0xff4b,  1,   0xff2b, /* FULLWIDTH LATIN CAPITAL LETTER K */
+ /*3366*/    0xff4c,  1,   0xff2c, /* FULLWIDTH LATIN CAPITAL LETTER L */
+ /*3369*/    0xff4d,  1,   0xff2d, /* FULLWIDTH LATIN CAPITAL LETTER M */
+ /*3372*/    0xff4e,  1,   0xff2e, /* FULLWIDTH LATIN CAPITAL LETTER N */
+ /*3375*/    0xff4f,  1,   0xff2f, /* FULLWIDTH LATIN CAPITAL LETTER O */
+ /*3378*/    0xff50,  1,   0xff30, /* FULLWIDTH LATIN CAPITAL LETTER P */
+ /*3381*/    0xff51,  1,   0xff31, /* FULLWIDTH LATIN CAPITAL LETTER Q */
+ /*3384*/    0xff52,  1,   0xff32, /* FULLWIDTH LATIN CAPITAL LETTER R */
+ /*3387*/    0xff53,  1,   0xff33, /* FULLWIDTH LATIN CAPITAL LETTER S */
+ /*3390*/    0xff54,  1,   0xff34, /* FULLWIDTH LATIN CAPITAL LETTER T */
+ /*3393*/    0xff55,  1,   0xff35, /* FULLWIDTH LATIN CAPITAL LETTER U */
+ /*3396*/    0xff56,  1,   0xff36, /* FULLWIDTH LATIN CAPITAL LETTER V */
+ /*3399*/    0xff57,  1,   0xff37, /* FULLWIDTH LATIN CAPITAL LETTER W */
+ /*3402*/    0xff58,  1,   0xff38, /* FULLWIDTH LATIN CAPITAL LETTER X */
+ /*3405*/    0xff59,  1,   0xff39, /* FULLWIDTH LATIN CAPITAL LETTER Y */
+ /*3408*/    0xff5a,  1,   0xff3a, /* FULLWIDTH LATIN CAPITAL LETTER Z */
+ /*3411*/  0x010428,  1, 0x010400, /* DESERET CAPITAL LETTER LONG I */
+ /*3414*/  0x010429,  1, 0x010401, /* DESERET CAPITAL LETTER LONG E */
+ /*3417*/  0x01042a,  1, 0x010402, /* DESERET CAPITAL LETTER LONG A */
+ /*3420*/  0x01042b,  1, 0x010403, /* DESERET CAPITAL LETTER LONG AH */
+ /*3423*/  0x01042c,  1, 0x010404, /* DESERET CAPITAL LETTER LONG O */
+ /*3426*/  0x01042d,  1, 0x010405, /* DESERET CAPITAL LETTER LONG OO */
+ /*3429*/  0x01042e,  1, 0x010406, /* DESERET CAPITAL LETTER SHORT I */
+ /*3432*/  0x01042f,  1, 0x010407, /* DESERET CAPITAL LETTER SHORT E */
+ /*3435*/  0x010430,  1, 0x010408, /* DESERET CAPITAL LETTER SHORT A */
+ /*3438*/  0x010431,  1, 0x010409, /* DESERET CAPITAL LETTER SHORT AH */
+ /*3441*/  0x010432,  1, 0x01040a, /* DESERET CAPITAL LETTER SHORT O */
+ /*3444*/  0x010433,  1, 0x01040b, /* DESERET CAPITAL LETTER SHORT OO */
+ /*3447*/  0x010434,  1, 0x01040c, /* DESERET CAPITAL LETTER AY */
+ /*3450*/  0x010435,  1, 0x01040d, /* DESERET CAPITAL LETTER OW */
+ /*3453*/  0x010436,  1, 0x01040e, /* DESERET CAPITAL LETTER WU */
+ /*3456*/  0x010437,  1, 0x01040f, /* DESERET CAPITAL LETTER YEE */
+ /*3459*/  0x010438,  1, 0x010410, /* DESERET CAPITAL LETTER H */
+ /*3462*/  0x010439,  1, 0x010411, /* DESERET CAPITAL LETTER PEE */
+ /*3465*/  0x01043a,  1, 0x010412, /* DESERET CAPITAL LETTER BEE */
+ /*3468*/  0x01043b,  1, 0x010413, /* DESERET CAPITAL LETTER TEE */
+ /*3471*/  0x01043c,  1, 0x010414, /* DESERET CAPITAL LETTER DEE */
+ /*3474*/  0x01043d,  1, 0x010415, /* DESERET CAPITAL LETTER CHEE */
+ /*3477*/  0x01043e,  1, 0x010416, /* DESERET CAPITAL LETTER JEE */
+ /*3480*/  0x01043f,  1, 0x010417, /* DESERET CAPITAL LETTER KAY */
+ /*3483*/  0x010440,  1, 0x010418, /* DESERET CAPITAL LETTER GAY */
+ /*3486*/  0x010441,  1, 0x010419, /* DESERET CAPITAL LETTER EF */
+ /*3489*/  0x010442,  1, 0x01041a, /* DESERET CAPITAL LETTER VEE */
+ /*3492*/  0x010443,  1, 0x01041b, /* DESERET CAPITAL LETTER ETH */
+ /*3495*/  0x010444,  1, 0x01041c, /* DESERET CAPITAL LETTER THEE */
+ /*3498*/  0x010445,  1, 0x01041d, /* DESERET CAPITAL LETTER ES */
+ /*3501*/  0x010446,  1, 0x01041e, /* DESERET CAPITAL LETTER ZEE */
+ /*3504*/  0x010447,  1, 0x01041f, /* DESERET CAPITAL LETTER ESH */
+ /*3507*/  0x010448,  1, 0x010420, /* DESERET CAPITAL LETTER ZHEE */
+ /*3510*/  0x010449,  1, 0x010421, /* DESERET CAPITAL LETTER ER */
+ /*3513*/  0x01044a,  1, 0x010422, /* DESERET CAPITAL LETTER EL */
+ /*3516*/  0x01044b,  1, 0x010423, /* DESERET CAPITAL LETTER EM */
+ /*3519*/  0x01044c,  1, 0x010424, /* DESERET CAPITAL LETTER EN */
+ /*3522*/  0x01044d,  1, 0x010425, /* DESERET CAPITAL LETTER ENG */
+ /*3525*/  0x01044e,  1, 0x010426, /* DESERET CAPITAL LETTER OI */
+ /*3528*/  0x01044f,  1, 0x010427, /* DESERET CAPITAL LETTER EW */
+ /*3531*/  0x0104d8,  1, 0x0104b0, /* OSAGE CAPITAL LETTER A */
+ /*3534*/  0x0104d9,  1, 0x0104b1, /* OSAGE CAPITAL LETTER AI */
+ /*3537*/  0x0104da,  1, 0x0104b2, /* OSAGE CAPITAL LETTER AIN */
+ /*3540*/  0x0104db,  1, 0x0104b3, /* OSAGE CAPITAL LETTER AH */
+ /*3543*/  0x0104dc,  1, 0x0104b4, /* OSAGE CAPITAL LETTER BRA */
+ /*3546*/  0x0104dd,  1, 0x0104b5, /* OSAGE CAPITAL LETTER CHA */
+ /*3549*/  0x0104de,  1, 0x0104b6, /* OSAGE CAPITAL LETTER EHCHA */
+ /*3552*/  0x0104df,  1, 0x0104b7, /* OSAGE CAPITAL LETTER E */
+ /*3555*/  0x0104e0,  1, 0x0104b8, /* OSAGE CAPITAL LETTER EIN */
+ /*3558*/  0x0104e1,  1, 0x0104b9, /* OSAGE CAPITAL LETTER HA */
+ /*3561*/  0x0104e2,  1, 0x0104ba, /* OSAGE CAPITAL LETTER HYA */
+ /*3564*/  0x0104e3,  1, 0x0104bb, /* OSAGE CAPITAL LETTER I */
+ /*3567*/  0x0104e4,  1, 0x0104bc, /* OSAGE CAPITAL LETTER KA */
+ /*3570*/  0x0104e5,  1, 0x0104bd, /* OSAGE CAPITAL LETTER EHKA */
+ /*3573*/  0x0104e6,  1, 0x0104be, /* OSAGE CAPITAL LETTER KYA */
+ /*3576*/  0x0104e7,  1, 0x0104bf, /* OSAGE CAPITAL LETTER LA */
+ /*3579*/  0x0104e8,  1, 0x0104c0, /* OSAGE CAPITAL LETTER MA */
+ /*3582*/  0x0104e9,  1, 0x0104c1, /* OSAGE CAPITAL LETTER NA */
+ /*3585*/  0x0104ea,  1, 0x0104c2, /* OSAGE CAPITAL LETTER O */
+ /*3588*/  0x0104eb,  1, 0x0104c3, /* OSAGE CAPITAL LETTER OIN */
+ /*3591*/  0x0104ec,  1, 0x0104c4, /* OSAGE CAPITAL LETTER PA */
+ /*3594*/  0x0104ed,  1, 0x0104c5, /* OSAGE CAPITAL LETTER EHPA */
+ /*3597*/  0x0104ee,  1, 0x0104c6, /* OSAGE CAPITAL LETTER SA */
+ /*3600*/  0x0104ef,  1, 0x0104c7, /* OSAGE CAPITAL LETTER SHA */
+ /*3603*/  0x0104f0,  1, 0x0104c8, /* OSAGE CAPITAL LETTER TA */
+ /*3606*/  0x0104f1,  1, 0x0104c9, /* OSAGE CAPITAL LETTER EHTA */
+ /*3609*/  0x0104f2,  1, 0x0104ca, /* OSAGE CAPITAL LETTER TSA */
+ /*3612*/  0x0104f3,  1, 0x0104cb, /* OSAGE CAPITAL LETTER EHTSA */
+ /*3615*/  0x0104f4,  1, 0x0104cc, /* OSAGE CAPITAL LETTER TSHA */
+ /*3618*/  0x0104f5,  1, 0x0104cd, /* OSAGE CAPITAL LETTER DHA */
+ /*3621*/  0x0104f6,  1, 0x0104ce, /* OSAGE CAPITAL LETTER U */
+ /*3624*/  0x0104f7,  1, 0x0104cf, /* OSAGE CAPITAL LETTER WA */
+ /*3627*/  0x0104f8,  1, 0x0104d0, /* OSAGE CAPITAL LETTER KHA */
+ /*3630*/  0x0104f9,  1, 0x0104d1, /* OSAGE CAPITAL LETTER GHA */
+ /*3633*/  0x0104fa,  1, 0x0104d2, /* OSAGE CAPITAL LETTER ZA */
+ /*3636*/  0x0104fb,  1, 0x0104d3, /* OSAGE CAPITAL LETTER ZHA */
+ /*3639*/  0x010cc0,  1, 0x010c80, /* OLD HUNGARIAN CAPITAL LETTER A */
+ /*3642*/  0x010cc1,  1, 0x010c81, /* OLD HUNGARIAN CAPITAL LETTER AA */
+ /*3645*/  0x010cc2,  1, 0x010c82, /* OLD HUNGARIAN CAPITAL LETTER EB */
+ /*3648*/  0x010cc3,  1, 0x010c83, /* OLD HUNGARIAN CAPITAL LETTER AMB */
+ /*3651*/  0x010cc4,  1, 0x010c84, /* OLD HUNGARIAN CAPITAL LETTER EC */
+ /*3654*/  0x010cc5,  1, 0x010c85, /* OLD HUNGARIAN CAPITAL LETTER ENC */
+ /*3657*/  0x010cc6,  1, 0x010c86, /* OLD HUNGARIAN CAPITAL LETTER ECS */
+ /*3660*/  0x010cc7,  1, 0x010c87, /* OLD HUNGARIAN CAPITAL LETTER ED */
+ /*3663*/  0x010cc8,  1, 0x010c88, /* OLD HUNGARIAN CAPITAL LETTER AND */
+ /*3666*/  0x010cc9,  1, 0x010c89, /* OLD HUNGARIAN CAPITAL LETTER E */
+ /*3669*/  0x010cca,  1, 0x010c8a, /* OLD HUNGARIAN CAPITAL LETTER CLOS.. */
+ /*3672*/  0x010ccb,  1, 0x010c8b, /* OLD HUNGARIAN CAPITAL LETTER EE */
+ /*3675*/  0x010ccc,  1, 0x010c8c, /* OLD HUNGARIAN CAPITAL LETTER EF */
+ /*3678*/  0x010ccd,  1, 0x010c8d, /* OLD HUNGARIAN CAPITAL LETTER EG */
+ /*3681*/  0x010cce,  1, 0x010c8e, /* OLD HUNGARIAN CAPITAL LETTER EGY */
+ /*3684*/  0x010ccf,  1, 0x010c8f, /* OLD HUNGARIAN CAPITAL LETTER EH */
+ /*3687*/  0x010cd0,  1, 0x010c90, /* OLD HUNGARIAN CAPITAL LETTER I */
+ /*3690*/  0x010cd1,  1, 0x010c91, /* OLD HUNGARIAN CAPITAL LETTER II */
+ /*3693*/  0x010cd2,  1, 0x010c92, /* OLD HUNGARIAN CAPITAL LETTER EJ */
+ /*3696*/  0x010cd3,  1, 0x010c93, /* OLD HUNGARIAN CAPITAL LETTER EK */
+ /*3699*/  0x010cd4,  1, 0x010c94, /* OLD HUNGARIAN CAPITAL LETTER AK */
+ /*3702*/  0x010cd5,  1, 0x010c95, /* OLD HUNGARIAN CAPITAL LETTER UNK */
+ /*3705*/  0x010cd6,  1, 0x010c96, /* OLD HUNGARIAN CAPITAL LETTER EL */
+ /*3708*/  0x010cd7,  1, 0x010c97, /* OLD HUNGARIAN CAPITAL LETTER ELY */
+ /*3711*/  0x010cd8,  1, 0x010c98, /* OLD HUNGARIAN CAPITAL LETTER EM */
+ /*3714*/  0x010cd9,  1, 0x010c99, /* OLD HUNGARIAN CAPITAL LETTER EN */
+ /*3717*/  0x010cda,  1, 0x010c9a, /* OLD HUNGARIAN CAPITAL LETTER ENY */
+ /*3720*/  0x010cdb,  1, 0x010c9b, /* OLD HUNGARIAN CAPITAL LETTER O */
+ /*3723*/  0x010cdc,  1, 0x010c9c, /* OLD HUNGARIAN CAPITAL LETTER OO */
+ /*3726*/  0x010cdd,  1, 0x010c9d, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
+ /*3729*/  0x010cde,  1, 0x010c9e, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
+ /*3732*/  0x010cdf,  1, 0x010c9f, /* OLD HUNGARIAN CAPITAL LETTER OEE */
+ /*3735*/  0x010ce0,  1, 0x010ca0, /* OLD HUNGARIAN CAPITAL LETTER EP */
+ /*3738*/  0x010ce1,  1, 0x010ca1, /* OLD HUNGARIAN CAPITAL LETTER EMP */
+ /*3741*/  0x010ce2,  1, 0x010ca2, /* OLD HUNGARIAN CAPITAL LETTER ER */
+ /*3744*/  0x010ce3,  1, 0x010ca3, /* OLD HUNGARIAN CAPITAL LETTER SHOR.. */
+ /*3747*/  0x010ce4,  1, 0x010ca4, /* OLD HUNGARIAN CAPITAL LETTER ES */
+ /*3750*/  0x010ce5,  1, 0x010ca5, /* OLD HUNGARIAN CAPITAL LETTER ESZ */
+ /*3753*/  0x010ce6,  1, 0x010ca6, /* OLD HUNGARIAN CAPITAL LETTER ET */
+ /*3756*/  0x010ce7,  1, 0x010ca7, /* OLD HUNGARIAN CAPITAL LETTER ENT */
+ /*3759*/  0x010ce8,  1, 0x010ca8, /* OLD HUNGARIAN CAPITAL LETTER ETY */
+ /*3762*/  0x010ce9,  1, 0x010ca9, /* OLD HUNGARIAN CAPITAL LETTER ECH */
+ /*3765*/  0x010cea,  1, 0x010caa, /* OLD HUNGARIAN CAPITAL LETTER U */
+ /*3768*/  0x010ceb,  1, 0x010cab, /* OLD HUNGARIAN CAPITAL LETTER UU */
+ /*3771*/  0x010cec,  1, 0x010cac, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
+ /*3774*/  0x010ced,  1, 0x010cad, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
+ /*3777*/  0x010cee,  1, 0x010cae, /* OLD HUNGARIAN CAPITAL LETTER EV */
+ /*3780*/  0x010cef,  1, 0x010caf, /* OLD HUNGARIAN CAPITAL LETTER EZ */
+ /*3783*/  0x010cf0,  1, 0x010cb0, /* OLD HUNGARIAN CAPITAL LETTER EZS */
+ /*3786*/  0x010cf1,  1, 0x010cb1, /* OLD HUNGARIAN CAPITAL LETTER ENT-.. */
+ /*3789*/  0x010cf2,  1, 0x010cb2, /* OLD HUNGARIAN CAPITAL LETTER US */
+ /*3792*/  0x0118c0,  1, 0x0118a0, /* WARANG CITI CAPITAL LETTER NGAA */
+ /*3795*/  0x0118c1,  1, 0x0118a1, /* WARANG CITI CAPITAL LETTER A */
+ /*3798*/  0x0118c2,  1, 0x0118a2, /* WARANG CITI CAPITAL LETTER WI */
+ /*3801*/  0x0118c3,  1, 0x0118a3, /* WARANG CITI CAPITAL LETTER YU */
+ /*3804*/  0x0118c4,  1, 0x0118a4, /* WARANG CITI CAPITAL LETTER YA */
+ /*3807*/  0x0118c5,  1, 0x0118a5, /* WARANG CITI CAPITAL LETTER YO */
+ /*3810*/  0x0118c6,  1, 0x0118a6, /* WARANG CITI CAPITAL LETTER II */
+ /*3813*/  0x0118c7,  1, 0x0118a7, /* WARANG CITI CAPITAL LETTER UU */
+ /*3816*/  0x0118c8,  1, 0x0118a8, /* WARANG CITI CAPITAL LETTER E */
+ /*3819*/  0x0118c9,  1, 0x0118a9, /* WARANG CITI CAPITAL LETTER O */
+ /*3822*/  0x0118ca,  1, 0x0118aa, /* WARANG CITI CAPITAL LETTER ANG */
+ /*3825*/  0x0118cb,  1, 0x0118ab, /* WARANG CITI CAPITAL LETTER GA */
+ /*3828*/  0x0118cc,  1, 0x0118ac, /* WARANG CITI CAPITAL LETTER KO */
+ /*3831*/  0x0118cd,  1, 0x0118ad, /* WARANG CITI CAPITAL LETTER ENY */
+ /*3834*/  0x0118ce,  1, 0x0118ae, /* WARANG CITI CAPITAL LETTER YUJ */
+ /*3837*/  0x0118cf,  1, 0x0118af, /* WARANG CITI CAPITAL LETTER UC */
+ /*3840*/  0x0118d0,  1, 0x0118b0, /* WARANG CITI CAPITAL LETTER ENN */
+ /*3843*/  0x0118d1,  1, 0x0118b1, /* WARANG CITI CAPITAL LETTER ODD */
+ /*3846*/  0x0118d2,  1, 0x0118b2, /* WARANG CITI CAPITAL LETTER TTE */
+ /*3849*/  0x0118d3,  1, 0x0118b3, /* WARANG CITI CAPITAL LETTER NUNG */
+ /*3852*/  0x0118d4,  1, 0x0118b4, /* WARANG CITI CAPITAL LETTER DA */
+ /*3855*/  0x0118d5,  1, 0x0118b5, /* WARANG CITI CAPITAL LETTER AT */
+ /*3858*/  0x0118d6,  1, 0x0118b6, /* WARANG CITI CAPITAL LETTER AM */
+ /*3861*/  0x0118d7,  1, 0x0118b7, /* WARANG CITI CAPITAL LETTER BU */
+ /*3864*/  0x0118d8,  1, 0x0118b8, /* WARANG CITI CAPITAL LETTER PU */
+ /*3867*/  0x0118d9,  1, 0x0118b9, /* WARANG CITI CAPITAL LETTER HIYO */
+ /*3870*/  0x0118da,  1, 0x0118ba, /* WARANG CITI CAPITAL LETTER HOLO */
+ /*3873*/  0x0118db,  1, 0x0118bb, /* WARANG CITI CAPITAL LETTER HORR */
+ /*3876*/  0x0118dc,  1, 0x0118bc, /* WARANG CITI CAPITAL LETTER HAR */
+ /*3879*/  0x0118dd,  1, 0x0118bd, /* WARANG CITI CAPITAL LETTER SSUU */
+ /*3882*/  0x0118de,  1, 0x0118be, /* WARANG CITI CAPITAL LETTER SII */
+ /*3885*/  0x0118df,  1, 0x0118bf, /* WARANG CITI CAPITAL LETTER VIYO */
+ /*3888*/  0x016e60,  1, 0x016e40, /* MEDEFAIDRIN CAPITAL LETTER M */
+ /*3891*/  0x016e61,  1, 0x016e41, /* MEDEFAIDRIN CAPITAL LETTER S */
+ /*3894*/  0x016e62,  1, 0x016e42, /* MEDEFAIDRIN CAPITAL LETTER V */
+ /*3897*/  0x016e63,  1, 0x016e43, /* MEDEFAIDRIN CAPITAL LETTER W */
+ /*3900*/  0x016e64,  1, 0x016e44, /* MEDEFAIDRIN CAPITAL LETTER ATIU */
+ /*3903*/  0x016e65,  1, 0x016e45, /* MEDEFAIDRIN CAPITAL LETTER Z */
+ /*3906*/  0x016e66,  1, 0x016e46, /* MEDEFAIDRIN CAPITAL LETTER KP */
+ /*3909*/  0x016e67,  1, 0x016e47, /* MEDEFAIDRIN CAPITAL LETTER P */
+ /*3912*/  0x016e68,  1, 0x016e48, /* MEDEFAIDRIN CAPITAL LETTER T */
+ /*3915*/  0x016e69,  1, 0x016e49, /* MEDEFAIDRIN CAPITAL LETTER G */
+ /*3918*/  0x016e6a,  1, 0x016e4a, /* MEDEFAIDRIN CAPITAL LETTER F */
+ /*3921*/  0x016e6b,  1, 0x016e4b, /* MEDEFAIDRIN CAPITAL LETTER I */
+ /*3924*/  0x016e6c,  1, 0x016e4c, /* MEDEFAIDRIN CAPITAL LETTER K */
+ /*3927*/  0x016e6d,  1, 0x016e4d, /* MEDEFAIDRIN CAPITAL LETTER A */
+ /*3930*/  0x016e6e,  1, 0x016e4e, /* MEDEFAIDRIN CAPITAL LETTER J */
+ /*3933*/  0x016e6f,  1, 0x016e4f, /* MEDEFAIDRIN CAPITAL LETTER E */
+ /*3936*/  0x016e70,  1, 0x016e50, /* MEDEFAIDRIN CAPITAL LETTER B */
+ /*3939*/  0x016e71,  1, 0x016e51, /* MEDEFAIDRIN CAPITAL LETTER C */
+ /*3942*/  0x016e72,  1, 0x016e52, /* MEDEFAIDRIN CAPITAL LETTER U */
+ /*3945*/  0x016e73,  1, 0x016e53, /* MEDEFAIDRIN CAPITAL LETTER YU */
+ /*3948*/  0x016e74,  1, 0x016e54, /* MEDEFAIDRIN CAPITAL LETTER L */
+ /*3951*/  0x016e75,  1, 0x016e55, /* MEDEFAIDRIN CAPITAL LETTER Q */
+ /*3954*/  0x016e76,  1, 0x016e56, /* MEDEFAIDRIN CAPITAL LETTER HP */
+ /*3957*/  0x016e77,  1, 0x016e57, /* MEDEFAIDRIN CAPITAL LETTER NY */
+ /*3960*/  0x016e78,  1, 0x016e58, /* MEDEFAIDRIN CAPITAL LETTER X */
+ /*3963*/  0x016e79,  1, 0x016e59, /* MEDEFAIDRIN CAPITAL LETTER D */
+ /*3966*/  0x016e7a,  1, 0x016e5a, /* MEDEFAIDRIN CAPITAL LETTER OE */
+ /*3969*/  0x016e7b,  1, 0x016e5b, /* MEDEFAIDRIN CAPITAL LETTER N */
+ /*3972*/  0x016e7c,  1, 0x016e5c, /* MEDEFAIDRIN CAPITAL LETTER R */
+ /*3975*/  0x016e7d,  1, 0x016e5d, /* MEDEFAIDRIN CAPITAL LETTER O */
+ /*3978*/  0x016e7e,  1, 0x016e5e, /* MEDEFAIDRIN CAPITAL LETTER AI */
+ /*3981*/  0x016e7f,  1, 0x016e5f, /* MEDEFAIDRIN CAPITAL LETTER Y */
+ /*3984*/  0x01e922,  1, 0x01e900, /* ADLAM CAPITAL LETTER ALIF */
+ /*3987*/  0x01e923,  1, 0x01e901, /* ADLAM CAPITAL LETTER DAALI */
+ /*3990*/  0x01e924,  1, 0x01e902, /* ADLAM CAPITAL LETTER LAAM */
+ /*3993*/  0x01e925,  1, 0x01e903, /* ADLAM CAPITAL LETTER MIIM */
+ /*3996*/  0x01e926,  1, 0x01e904, /* ADLAM CAPITAL LETTER BA */
+ /*3999*/  0x01e927,  1, 0x01e905, /* ADLAM CAPITAL LETTER SINNYIIYHE */
+ /*4002*/  0x01e928,  1, 0x01e906, /* ADLAM CAPITAL LETTER PE */
+ /*4005*/  0x01e929,  1, 0x01e907, /* ADLAM CAPITAL LETTER BHE */
+ /*4008*/  0x01e92a,  1, 0x01e908, /* ADLAM CAPITAL LETTER RA */
+ /*4011*/  0x01e92b,  1, 0x01e909, /* ADLAM CAPITAL LETTER E */
+ /*4014*/  0x01e92c,  1, 0x01e90a, /* ADLAM CAPITAL LETTER FA */
+ /*4017*/  0x01e92d,  1, 0x01e90b, /* ADLAM CAPITAL LETTER I */
+ /*4020*/  0x01e92e,  1, 0x01e90c, /* ADLAM CAPITAL LETTER O */
+ /*4023*/  0x01e92f,  1, 0x01e90d, /* ADLAM CAPITAL LETTER DHA */
+ /*4026*/  0x01e930,  1, 0x01e90e, /* ADLAM CAPITAL LETTER YHE */
+ /*4029*/  0x01e931,  1, 0x01e90f, /* ADLAM CAPITAL LETTER WAW */
+ /*4032*/  0x01e932,  1, 0x01e910, /* ADLAM CAPITAL LETTER NUN */
+ /*4035*/  0x01e933,  1, 0x01e911, /* ADLAM CAPITAL LETTER KAF */
+ /*4038*/  0x01e934,  1, 0x01e912, /* ADLAM CAPITAL LETTER YA */
+ /*4041*/  0x01e935,  1, 0x01e913, /* ADLAM CAPITAL LETTER U */
+ /*4044*/  0x01e936,  1, 0x01e914, /* ADLAM CAPITAL LETTER JIIM */
+ /*4047*/  0x01e937,  1, 0x01e915, /* ADLAM CAPITAL LETTER CHI */
+ /*4050*/  0x01e938,  1, 0x01e916, /* ADLAM CAPITAL LETTER HA */
+ /*4053*/  0x01e939,  1, 0x01e917, /* ADLAM CAPITAL LETTER QAAF */
+ /*4056*/  0x01e93a,  1, 0x01e918, /* ADLAM CAPITAL LETTER GA */
+ /*4059*/  0x01e93b,  1, 0x01e919, /* ADLAM CAPITAL LETTER NYA */
+ /*4062*/  0x01e93c,  1, 0x01e91a, /* ADLAM CAPITAL LETTER TU */
+ /*4065*/  0x01e93d,  1, 0x01e91b, /* ADLAM CAPITAL LETTER NHA */
+ /*4068*/  0x01e93e,  1, 0x01e91c, /* ADLAM CAPITAL LETTER VA */
+ /*4071*/  0x01e93f,  1, 0x01e91d, /* ADLAM CAPITAL LETTER KHA */
+ /*4074*/  0x01e940,  1, 0x01e91e, /* ADLAM CAPITAL LETTER GBE */
+ /*4077*/  0x01e941,  1, 0x01e91f, /* ADLAM CAPITAL LETTER ZAL */
+ /*4080*/  0x01e942,  1, 0x01e920, /* ADLAM CAPITAL LETTER KPO */
+ /*4083*/  0x01e943,  1, 0x01e921, /* ADLAM CAPITAL LETTER SHA */
+#define FOLDS1_NORMAL_END_INDEX   4086
  /* ----- LOCALE ----- */
- /*4065*/    0x0069,  1,   0x0049, /* LATIN CAPITAL LETTER I */
-#define FOLDS1_END_INDEX   4068
+ /*4086*/    0x0069,  1,   0x0049, /* LATIN CAPITAL LETTER I */
+#define FOLDS1_END_INDEX   4089
 };
 
 OnigCodePoint OnigUnicodeFolds2[] = {
@@ -1513,4 +1520,3 @@ OnigCodePoint OnigUnicodeFolds3[] = {
  /* ----- LOCALE ----- */
 #define FOLDS3_END_INDEX   72
 };
-
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c
index 06f6f13bdd..b06997b831 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf1.tmp unicode_property_data.gperf  */
+/* Command-line: /usr/local/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf1.tmp unicode_property_data.gperf  */
 /* Computed positions: -k'1-3,5-6,12,16,$' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -42,7 +42,7 @@ CR_NEWLINE[] = { 1,
 
 /* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */
 static const OnigCodePoint
-CR_Alpha[] = { 676,
+CR_Alpha[] = { 679,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -226,16 +226,10 @@ CR_Alpha[] = { 676,
 0x0e4d, 0x0e4d,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -250,11 +244,8 @@ CR_Alpha[] = { 676,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x103f,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x109c, 0x109d,
+0x1050, 0x108f,
+0x109a, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -275,7 +266,6 @@ CR_Alpha[] = { 676,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -316,7 +306,7 @@ CR_Alpha[] = { 676,
 0x1bac, 0x1baf,
 0x1bba, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c7d,
 0x1c80, 0x1c88,
@@ -325,6 +315,7 @@ CR_Alpha[] = { 676,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -409,31 +400,28 @@ CR_Alpha[] = { 676,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
+0xa8fd, 0xa8ff,
 0xa90a, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
+0xa9e0, 0xa9ef,
 0xa9fa, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -445,7 +433,7 @@ CR_Alpha[] = { 676,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -533,6 +521,7 @@ CR_Alpha[] = { 676,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11082, 0x110b8,
 0x110d0, 0x110e8,
@@ -570,6 +559,7 @@ CR_Alpha[] = { 676,
 0x11400, 0x11441,
 0x11443, 0x11445,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -580,15 +570,20 @@ CR_Alpha[] = { 676,
 0x11640, 0x11640,
 0x11644, 0x11644,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
 0x11800, 0x11838,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -621,18 +616,21 @@ CR_Alpha[] = { 676,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -674,9 +672,14 @@ CR_Alpha[] = { 676,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -743,7 +746,7 @@ CR_Cntrl[] = { 2,
 
 /* PROPERTY: 'Digit': POSIX [[:Digit:]] */
 static const OnigCodePoint
-CR_Digit[] = { 57,
+CR_Digit[] = { 59,
 0x0030, 0x0039,
 0x0660, 0x0669,
 0x06f0, 0x06f9,
@@ -800,12 +803,14 @@ CR_Digit[] = { 57,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e950, 0x1e959,
 }; /* END of CR_Digit */
 
 /* PROPERTY: 'Graph': POSIX [[:Graph:]] */
 static const OnigCodePoint
-CR_Graph[] = { 663,
+CR_Graph[] = { 671,
 0x0021, 0x007e,
 0x00a1, 0x0377,
 0x037a, 0x037f,
@@ -916,7 +921,7 @@ CR_Graph[] = { 663,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -953,17 +958,10 @@ CR_Graph[] = { 663,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -1040,7 +1038,7 @@ CR_Graph[] = { 663,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -1072,9 +1070,7 @@ CR_Graph[] = { 663,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -1091,7 +1087,7 @@ CR_Graph[] = { 663,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -1104,14 +1100,14 @@ CR_Graph[] = { 663,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -1132,7 +1128,7 @@ CR_Graph[] = { 663,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -1239,6 +1235,7 @@ CR_Graph[] = { 663,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -1277,7 +1274,7 @@ CR_Graph[] = { 663,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -1285,7 +1282,7 @@ CR_Graph[] = { 663,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -1293,9 +1290,11 @@ CR_Graph[] = { 663,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -1318,11 +1317,13 @@ CR_Graph[] = { 663,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -1336,13 +1337,15 @@ CR_Graph[] = { 663,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -1384,12 +1387,19 @@ CR_Graph[] = { 663,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -1431,33 +1441,36 @@ CR_Graph[] = { 663,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -1473,7 +1486,7 @@ CR_Graph[] = { 663,
 
 /* PROPERTY: 'Lower': POSIX [[:Lower:]] */
 static const OnigCodePoint
-CR_Lower[] = { 645,
+CR_Lower[] = { 649,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
 0x00b5, 0x00b5,
@@ -2078,9 +2091,13 @@ CR_Lower[] = { 645,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -2123,7 +2140,7 @@ CR_Lower[] = { 645,
 
 /* PROPERTY: 'Print': POSIX [[:Print:]] */
 static const OnigCodePoint
-CR_Print[] = { 660,
+CR_Print[] = { 668,
 0x0020, 0x007e,
 0x00a0, 0x0377,
 0x037a, 0x037f,
@@ -2234,7 +2251,7 @@ CR_Print[] = { 660,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -2271,17 +2288,10 @@ CR_Print[] = { 660,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -2357,7 +2367,7 @@ CR_Print[] = { 660,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -2387,9 +2397,7 @@ CR_Print[] = { 660,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -2406,7 +2414,7 @@ CR_Print[] = { 660,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -2419,14 +2427,14 @@ CR_Print[] = { 660,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -2447,7 +2455,7 @@ CR_Print[] = { 660,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -2554,6 +2562,7 @@ CR_Print[] = { 660,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -2592,7 +2601,7 @@ CR_Print[] = { 660,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -2600,7 +2609,7 @@ CR_Print[] = { 660,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -2608,9 +2617,11 @@ CR_Print[] = { 660,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -2633,11 +2644,13 @@ CR_Print[] = { 660,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -2651,13 +2664,15 @@ CR_Print[] = { 660,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -2699,12 +2714,19 @@ CR_Print[] = { 660,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -2746,33 +2768,36 @@ CR_Print[] = { 660,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -2788,7 +2813,7 @@ CR_Print[] = { 660,
 
 /* PROPERTY: 'Punct': POSIX [[:Punct:]] */
 static const OnigCodePoint
-CR_Punct[] = { 178,
+CR_Punct[] = { 182,
 0x0021, 0x0023,
 0x0025, 0x002a,
 0x002c, 0x002f,
@@ -2828,6 +2853,7 @@ CR_Punct[] = { 178,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -2842,7 +2868,7 @@ CR_Punct[] = { 178,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
 0x1400, 0x1400,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x169b, 0x169c,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
@@ -2877,7 +2903,7 @@ CR_Punct[] = { 178,
 0x2cfe, 0x2cff,
 0x2d70, 0x2d70,
 0x2e00, 0x2e2e,
-0x2e30, 0x2e4e,
+0x2e30, 0x2e4f,
 0x3001, 0x3003,
 0x3008, 0x3011,
 0x3014, 0x301f,
@@ -2952,18 +2978,21 @@ CR_Punct[] = { 178,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -2986,7 +3015,7 @@ CR_Space[] = { 10,
 
 /* PROPERTY: 'Upper': POSIX [[:Upper:]] */
 static const OnigCodePoint
-CR_Upper[] = { 636,
+CR_Upper[] = { 641,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -3582,6 +3611,11 @@ CR_Upper[] = { 636,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -3635,7 +3669,7 @@ CR_XDigit[] = { 3,
 
 /* PROPERTY: 'Word': POSIX [[:Word:]] */
 static const OnigCodePoint
-CR_Word[] = { 710,
+CR_Word[] = { 716,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -3820,17 +3854,10 @@ CR_Word[] = { 710,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -3921,7 +3948,7 @@ CR_Word[] = { 710,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -4007,7 +4034,8 @@ CR_Word[] = { 710,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -4034,7 +4062,7 @@ CR_Word[] = { 710,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -4136,6 +4164,7 @@ CR_Word[] = { 710,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -4177,7 +4206,7 @@ CR_Word[] = { 710,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -4187,7 +4216,7 @@ CR_Word[] = { 710,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -4195,10 +4224,13 @@ CR_Word[] = { 710,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4238,13 +4270,16 @@ CR_Word[] = { 710,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -4299,9 +4334,14 @@ CR_Word[] = { 710,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -4350,7 +4390,7 @@ CR_Word[] = { 710,
 
 /* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */
 static const OnigCodePoint
-CR_Alnum[] = { 713,
+CR_Alnum[] = { 715,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x0061, 0x007a,
@@ -4543,16 +4583,10 @@ CR_Alnum[] = { 713,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -4569,12 +4603,7 @@ CR_Alnum[] = { 713,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x1049,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x1090, 0x1099,
-0x109c, 0x109d,
+0x1050, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -4595,7 +4624,6 @@ CR_Alnum[] = { 713,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -4641,7 +4669,7 @@ CR_Alnum[] = { 713,
 0x1b80, 0x1ba9,
 0x1bac, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c40, 0x1c49,
 0x1c4d, 0x1c7d,
 0x1c80, 0x1c88,
@@ -4650,6 +4678,7 @@ CR_Alnum[] = { 713,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -4733,32 +4762,28 @@ CR_Alnum[] = { 713,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8d0, 0xa8d9,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
-0xa900, 0xa92a,
+0xa8fd, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9d9,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9fe,
+0xa9e0, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa50, 0xaa59,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -4770,7 +4795,7 @@ CR_Alnum[] = { 713,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -4862,6 +4887,7 @@ CR_Alnum[] = { 713,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11066, 0x1106f,
 0x11082, 0x110b8,
@@ -4904,6 +4930,7 @@ CR_Alnum[] = { 713,
 0x11443, 0x11445,
 0x11447, 0x1144a,
 0x11450, 0x11459,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -4916,6 +4943,7 @@ CR_Alnum[] = { 713,
 0x11644, 0x11644,
 0x11650, 0x11659,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
@@ -4923,10 +4951,14 @@ CR_Alnum[] = { 713,
 0x11800, 0x11838,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4963,19 +4995,22 @@ CR_Alnum[] = { 713,
 0x16a40, 0x16a5e,
 0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5018,9 +5053,16 @@ CR_Alnum[] = { 713,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -5079,7 +5121,7 @@ CR_ASCII[] = { 1,
 /* PROPERTY: 'Adlam': Script */
 static const OnigCodePoint
 CR_Adlam[] = { 3,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 }; /* END of CR_Adlam */
@@ -5181,7 +5223,7 @@ CR_Armenian[] = { 5,
 
 /* PROPERTY: 'Assigned': - */
 static const OnigCodePoint
-CR_Assigned[] = { 658,
+CR_Assigned[] = { 666,
 0x0000, 0x0377,
 0x037a, 0x037f,
 0x0384, 0x038a,
@@ -5291,7 +5333,7 @@ CR_Assigned[] = { 658,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -5328,17 +5370,10 @@ CR_Assigned[] = { 658,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -5414,7 +5449,7 @@ CR_Assigned[] = { 658,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -5443,9 +5478,7 @@ CR_Assigned[] = { 658,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -5462,7 +5495,7 @@ CR_Assigned[] = { 658,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -5475,14 +5508,14 @@ CR_Assigned[] = { 658,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -5503,7 +5536,7 @@ CR_Assigned[] = { 658,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -5610,6 +5643,7 @@ CR_Assigned[] = { 658,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -5648,7 +5682,7 @@ CR_Assigned[] = { 658,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -5656,7 +5690,7 @@ CR_Assigned[] = { 658,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -5664,9 +5698,11 @@ CR_Assigned[] = { 658,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -5689,11 +5725,13 @@ CR_Assigned[] = { 658,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -5707,13 +5745,15 @@ CR_Assigned[] = { 658,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5755,12 +5795,19 @@ CR_Assigned[] = { 658,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -5802,33 +5849,36 @@ CR_Assigned[] = { 658,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -5951,7 +6001,7 @@ CR_Buhid[] = { 1,
 
 /* PROPERTY: 'C': Major Category */
 static const OnigCodePoint
-CR_C[] = { 661,
+CR_C[] = { 668,
 0x0000, 0x001f,
 0x007f, 0x009f,
 0x00ad, 0x00ad,
@@ -6065,7 +6115,7 @@ CR_C[] = { 661,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -6102,17 +6152,10 @@ CR_C[] = { 661,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -6189,7 +6232,7 @@ CR_C[] = { 661,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -6220,8 +6263,6 @@ CR_C[] = { 661,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -6239,7 +6280,7 @@ CR_C[] = { 661,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -6252,14 +6293,14 @@ CR_C[] = { 661,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -6280,7 +6321,7 @@ CR_C[] = { 661,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -6385,7 +6426,8 @@ CR_C[] = { 661,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110bd, 0x110bd,
@@ -6424,7 +6466,7 @@ CR_C[] = { 661,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -6432,16 +6474,18 @@ CR_C[] = { 661,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -6464,7 +6508,8 @@ CR_C[] = { 661,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
@@ -6483,13 +6528,15 @@ CR_C[] = { 661,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -6531,13 +6578,20 @@ CR_C[] = { 661,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -6579,33 +6633,36 @@ CR_C[] = { 661,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -6630,7 +6687,7 @@ CR_Carian[] = { 1,
 
 /* PROPERTY: 'Case_Ignorable': Derived Property */
 static const OnigCodePoint
-CR_Case_Ignorable[] = { 394,
+CR_Case_Ignorable[] = { 401,
 0x0027, 0x0027,
 0x002e, 0x002e,
 0x003a, 0x003a,
@@ -6736,8 +6793,7 @@ CR_Case_Ignorable[] = { 394,
 0x0e34, 0x0e3a,
 0x0e46, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
@@ -6872,7 +6928,7 @@ CR_Case_Ignorable[] = { 394,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9cf, 0xa9cf,
 0xa9e5, 0xa9e6,
 0xaa29, 0xaa2e,
@@ -6972,6 +7028,9 @@ CR_Case_Ignorable[] = { 394,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -6996,11 +7055,14 @@ CR_Case_Ignorable[] = { 394,
 0x11d95, 0x11d95,
 0x11d97, 0x11d97,
 0x11ef3, 0x11ef4,
+0x13430, 0x13438,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
 0x16b40, 0x16b43,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
 0x1bc9d, 0x1bc9e,
 0x1bca0, 0x1bca3,
 0x1d167, 0x1d169,
@@ -7019,8 +7081,10 @@ CR_Case_Ignorable[] = { 394,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e13d,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
-0x1e944, 0x1e94a,
+0x1e944, 0x1e94b,
 0x1f3fb, 0x1f3ff,
 0xe0001, 0xe0001,
 0xe0020, 0xe007f,
@@ -7029,7 +7093,7 @@ CR_Case_Ignorable[] = { 394,
 
 /* PROPERTY: 'Cased': Derived Property */
 static const OnigCodePoint
-CR_Cased[] = { 139,
+CR_Cased[] = { 140,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -7119,10 +7183,11 @@ CR_Cased[] = { 139,
 0xa680, 0xa69d,
 0xa722, 0xa787,
 0xa78b, 0xa78e,
-0xa790, 0xa7b9,
+0xa790, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -7183,7 +7248,7 @@ CR_Caucasian_Albanian[] = { 2,
 
 /* PROPERTY: 'Cf': General Category */
 static const OnigCodePoint
-CR_Cf[] = { 19,
+CR_Cf[] = { 20,
 0x00ad, 0x00ad,
 0x0600, 0x0605,
 0x061c, 0x061c,
@@ -7199,6 +7264,7 @@ CR_Cf[] = { 19,
 0xfff9, 0xfffb,
 0x110bd, 0x110bd,
 0x110cd, 0x110cd,
+0x13430, 0x13438,
 0x1bca0, 0x1bca3,
 0x1d173, 0x1d17a,
 0xe0001, 0xe0001,
@@ -7223,7 +7289,7 @@ CR_Cham[] = { 4,
 
 /* PROPERTY: 'Changes_When_Casefolded': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Casefolded[] = { 607,
+CR_Changes_When_Casefolded[] = { 612,
 0x0041, 0x005a,
 0x00b5, 0x00b5,
 0x00c0, 0x00d6,
@@ -7821,6 +7887,11 @@ CR_Changes_When_Casefolded[] = { 607,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -7835,7 +7906,7 @@ CR_Changes_When_Casefolded[] = { 607,
 
 /* PROPERTY: 'Changes_When_Casemapped': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Casemapped[] = { 121,
+CR_Changes_When_Casemapped[] = { 123,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
@@ -7863,7 +7934,7 @@ CR_Changes_When_Casemapped[] = { 121,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -7895,6 +7966,7 @@ CR_Changes_When_Casemapped[] = { 121,
 0x1cbd, 0x1cbf,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e00, 0x1e9b,
 0x1e9e, 0x1e9e,
 0x1ea0, 0x1f15,
@@ -7940,9 +8012,10 @@ CR_Changes_When_Casemapped[] = { 121,
 0xa732, 0xa76f,
 0xa779, 0xa787,
 0xa78b, 0xa78d,
-0xa790, 0xa793,
+0xa790, 0xa794,
 0xa796, 0xa7ae,
-0xa7b0, 0xa7b9,
+0xa7b0, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -7961,7 +8034,7 @@ CR_Changes_When_Casemapped[] = { 121,
 
 /* PROPERTY: 'Changes_When_Lowercased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Lowercased[] = { 594,
+CR_Changes_When_Lowercased[] = { 599,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -8549,6 +8622,11 @@ CR_Changes_When_Lowercased[] = { 594,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -8560,7 +8638,7 @@ CR_Changes_When_Lowercased[] = { 594,
 
 /* PROPERTY: 'Changes_When_Titlecased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Titlecased[] = { 610,
+CR_Changes_When_Titlecased[] = { 615,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -8718,7 +8796,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -8851,6 +8929,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0x1c80, 0x1c88,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e01, 0x1e01,
 0x1e03, 0x1e03,
 0x1e05, 0x1e05,
@@ -9146,7 +9225,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0xa787, 0xa787,
 0xa78c, 0xa78c,
 0xa791, 0xa791,
-0xa793, 0xa793,
+0xa793, 0xa794,
 0xa797, 0xa797,
 0xa799, 0xa799,
 0xa79b, 0xa79b,
@@ -9160,6 +9239,10 @@ CR_Changes_When_Titlecased[] = { 610,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -9175,7 +9258,7 @@ CR_Changes_When_Titlecased[] = { 610,
 
 /* PROPERTY: 'Changes_When_Uppercased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Uppercased[] = { 611,
+CR_Changes_When_Uppercased[] = { 616,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -9332,7 +9415,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -9467,6 +9550,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0x1c80, 0x1c88,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e01, 0x1e01,
 0x1e03, 0x1e03,
 0x1e05, 0x1e05,
@@ -9762,7 +9846,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0xa787, 0xa787,
 0xa78c, 0xa78c,
 0xa791, 0xa791,
-0xa793, 0xa793,
+0xa793, 0xa794,
 0xa797, 0xa797,
 0xa799, 0xa799,
 0xa79b, 0xa79b,
@@ -9776,6 +9860,10 @@ CR_Changes_When_Uppercased[] = { 611,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -9799,7 +9887,7 @@ CR_Cherokee[] = { 3,
 
 /* PROPERTY: 'Cn': General Category */
 static const OnigCodePoint
-CR_Cn[] = { 658,
+CR_Cn[] = { 666,
 0x0378, 0x0379,
 0x0380, 0x0383,
 0x038b, 0x038b,
@@ -9908,7 +9996,7 @@ CR_Cn[] = { 658,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -9945,17 +10033,10 @@ CR_Cn[] = { 658,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -10032,7 +10113,7 @@ CR_Cn[] = { 658,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -10061,8 +10142,6 @@ CR_Cn[] = { 658,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -10080,7 +10159,7 @@ CR_Cn[] = { 658,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -10093,14 +10172,14 @@ CR_Cn[] = { 658,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -10121,7 +10200,7 @@ CR_Cn[] = { 658,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -10227,7 +10306,8 @@ CR_Cn[] = { 658,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110c2, 0x110cc,
@@ -10266,7 +10346,7 @@ CR_Cn[] = { 658,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -10274,16 +10354,18 @@ CR_Cn[] = { 658,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -10306,12 +10388,14 @@ CR_Cn[] = { 658,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
 0x12544, 0x12fff,
-0x1342f, 0x143ff,
+0x1342f, 0x1342f,
+0x13439, 0x143ff,
 0x14647, 0x167ff,
 0x16a39, 0x16a3f,
 0x16a5f, 0x16a5f,
@@ -10325,13 +10409,15 @@ CR_Cn[] = { 658,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -10372,13 +10458,20 @@ CR_Cn[] = { 658,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -10420,33 +10513,36 @@ CR_Cn[] = { 658,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -10470,7 +10566,7 @@ CR_Co[] = { 3,
 
 /* PROPERTY: 'Common': Script */
 static const OnigCodePoint
-CR_Common[] = { 166,
+CR_Common[] = { 172,
 0x0000, 0x0040,
 0x005b, 0x0060,
 0x007b, 0x00a9,
@@ -10506,6 +10602,7 @@ CR_Common[] = { 166,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf7,
+0x1cfa, 0x1cfa,
 0x2000, 0x200b,
 0x200e, 0x2064,
 0x2066, 0x2070,
@@ -10523,9 +10620,8 @@ CR_Common[] = { 166,
 0x2460, 0x27ff,
 0x2900, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2e00, 0x2e4e,
+0x2b98, 0x2bff,
+0x2e00, 0x2e4f,
 0x2ff0, 0x2ffb,
 0x3000, 0x3004,
 0x3006, 0x3006,
@@ -10539,6 +10635,7 @@ CR_Common[] = { 166,
 0x31c0, 0x31e3,
 0x3220, 0x325f,
 0x327f, 0x32cf,
+0x32ff, 0x32ff,
 0x3358, 0x33ff,
 0x4dc0, 0x4dff,
 0xa700, 0xa721,
@@ -10567,6 +10664,7 @@ CR_Common[] = { 166,
 0x10190, 0x1019b,
 0x101d0, 0x101fc,
 0x102e1, 0x102fb,
+0x16fe2, 0x16fe3,
 0x1bca0, 0x1bca3,
 0x1d000, 0x1d0f5,
 0x1d100, 0x1d126,
@@ -10600,6 +10698,7 @@ CR_Common[] = { 166,
 0x1d6a8, 0x1d7cb,
 0x1d7ce, 0x1d7ff,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
 0x1f0a0, 0x1f0ae,
@@ -10607,7 +10706,7 @@ CR_Common[] = { 166,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f1ff,
 0x1f201, 0x1f202,
@@ -10615,26 +10714,29 @@ CR_Common[] = { 166,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0xe0001, 0xe0001,
 0xe0020, 0xe007f,
 }; /* END of CR_Common */
@@ -10757,14 +10859,14 @@ CR_Deseret[] = { 1,
 static const OnigCodePoint
 CR_Devanagari[] = { 4,
 0x0900, 0x0950,
-0x0953, 0x0963,
+0x0955, 0x0963,
 0x0966, 0x097f,
 0xa8e0, 0xa8ff,
 }; /* END of CR_Devanagari */
 
 /* PROPERTY: 'Diacritic': Binary Property */
 static const OnigCodePoint
-CR_Diacritic[] = { 163,
+CR_Diacritic[] = { 171,
 0x005e, 0x005e,
 0x0060, 0x0060,
 0x00a8, 0x00a8,
@@ -10816,6 +10918,7 @@ CR_Diacritic[] = { 163,
 0x0dca, 0x0dca,
 0x0e47, 0x0e4c,
 0x0e4e, 0x0e4e,
+0x0eba, 0x0eba,
 0x0ec8, 0x0ecc,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -10827,9 +10930,12 @@ CR_Diacritic[] = { 163,
 0x0fc6, 0x0fc6,
 0x1037, 0x1037,
 0x1039, 0x103a,
+0x1063, 0x1064,
+0x1069, 0x106d,
 0x1087, 0x108d,
 0x108f, 0x108f,
 0x109a, 0x109b,
+0x135d, 0x135f,
 0x17c9, 0x17d3,
 0x17dd, 0x17dd,
 0x1939, 0x193b,
@@ -10866,8 +10972,8 @@ CR_Diacritic[] = { 163,
 0xa67f, 0xa67f,
 0xa69c, 0xa69d,
 0xa6f0, 0xa6f1,
-0xa717, 0xa721,
-0xa788, 0xa788,
+0xa700, 0xa721,
+0xa788, 0xa78a,
 0xa7f8, 0xa7f9,
 0xa8c4, 0xa8c4,
 0xa8e0, 0xa8f1,
@@ -10911,6 +11017,7 @@ CR_Diacritic[] = { 163,
 0x116b6, 0x116b7,
 0x1172b, 0x1172b,
 0x11839, 0x1183a,
+0x119e0, 0x119e0,
 0x11a34, 0x11a34,
 0x11a47, 0x11a47,
 0x11a99, 0x11a99,
@@ -10919,12 +11026,15 @@ CR_Diacritic[] = { 163,
 0x11d44, 0x11d45,
 0x11d97, 0x11d97,
 0x16af0, 0x16af4,
+0x16b30, 0x16b36,
 0x16f8f, 0x16f9f,
 0x1d167, 0x1d169,
 0x1d16d, 0x1d172,
 0x1d17b, 0x1d182,
 0x1d185, 0x1d18b,
 0x1d1aa, 0x1d1ad,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e946,
 0x1e948, 0x1e94a,
@@ -10948,8 +11058,9 @@ CR_Duployan[] = { 5,
 
 /* PROPERTY: 'Egyptian_Hieroglyphs': Script */
 static const OnigCodePoint
-CR_Egyptian_Hieroglyphs[] = { 1,
+CR_Egyptian_Hieroglyphs[] = { 2,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 }; /* END of CR_Egyptian_Hieroglyphs */
 
 /* PROPERTY: 'Elbasan': Script */
@@ -10958,9 +11069,15 @@ CR_Elbasan[] = { 1,
 0x10500, 0x10527,
 }; /* END of CR_Elbasan */
 
+/* PROPERTY: 'Elymaic': Script */
+static const OnigCodePoint
+CR_Elymaic[] = { 1,
+0x10fe0, 0x10ff6,
+}; /* END of CR_Elymaic */
+
 /* PROPERTY: 'Emoji': Emoji Property */
 static const OnigCodePoint
-CR_Emoji[] = { 147,
+CR_Emoji[] = { 151,
 0x0023, 0x0023,
 0x002a, 0x002a,
 0x0030, 0x0039,
@@ -11093,21 +11210,25 @@ CR_Emoji[] = { 147,
 0x1f5fa, 0x1f64f,
 0x1f680, 0x1f6c5,
 0x1f6cb, 0x1f6d2,
+0x1f6d5, 0x1f6d5,
 0x1f6e0, 0x1f6e5,
 0x1f6e9, 0x1f6e9,
 0x1f6eb, 0x1f6ec,
 0x1f6f0, 0x1f6f0,
-0x1f6f3, 0x1f6f9,
-0x1f910, 0x1f93a,
-0x1f93c, 0x1f93e,
-0x1f940, 0x1f945,
-0x1f947, 0x1f970,
+0x1f6f3, 0x1f6fa,
+0x1f7e0, 0x1f7eb,
+0x1f90d, 0x1f93a,
+0x1f93c, 0x1f945,
+0x1f947, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1f9ff,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_Emoji */
 
 /* PROPERTY: 'Emoji_Component': Emoji Property */
@@ -11133,7 +11254,7 @@ CR_Emoji_Modifier[] = { 1,
 
 /* PROPERTY: 'Emoji_Modifier_Base': Emoji Property */
 static const OnigCodePoint
-CR_Emoji_Modifier_Base[] = { 34,
+CR_Emoji_Modifier_Base[] = { 36,
 0x261d, 0x261d,
 0x26f9, 0x26f9,
 0x270a, 0x270d,
@@ -11143,12 +11264,12 @@ CR_Emoji_Modifier_Base[] = { 34,
 0x1f3ca, 0x1f3cc,
 0x1f442, 0x1f443,
 0x1f446, 0x1f450,
-0x1f466, 0x1f469,
-0x1f46e, 0x1f46e,
-0x1f470, 0x1f478,
+0x1f466, 0x1f478,
 0x1f47c, 0x1f47c,
 0x1f481, 0x1f483,
 0x1f485, 0x1f487,
+0x1f48f, 0x1f48f,
+0x1f491, 0x1f491,
 0x1f4aa, 0x1f4aa,
 0x1f574, 0x1f575,
 0x1f57a, 0x1f57a,
@@ -11160,19 +11281,21 @@ CR_Emoji_Modifier_Base[] = { 34,
 0x1f6b4, 0x1f6b6,
 0x1f6c0, 0x1f6c0,
 0x1f6cc, 0x1f6cc,
-0x1f918, 0x1f91c,
-0x1f91e, 0x1f91f,
+0x1f90f, 0x1f90f,
+0x1f918, 0x1f91f,
 0x1f926, 0x1f926,
 0x1f930, 0x1f939,
-0x1f93d, 0x1f93e,
+0x1f93c, 0x1f93e,
 0x1f9b5, 0x1f9b6,
 0x1f9b8, 0x1f9b9,
+0x1f9bb, 0x1f9bb,
+0x1f9cd, 0x1f9cf,
 0x1f9d1, 0x1f9dd,
 }; /* END of CR_Emoji_Modifier_Base */
 
 /* PROPERTY: 'Emoji_Presentation': Emoji Property */
 static const OnigCodePoint
-CR_Emoji_Presentation[] = { 77,
+CR_Emoji_Presentation[] = { 81,
 0x231a, 0x231b,
 0x23e9, 0x23ec,
 0x23f0, 0x23f0,
@@ -11238,18 +11361,22 @@ CR_Emoji_Presentation[] = { 77,
 0x1f680, 0x1f6c5,
 0x1f6cc, 0x1f6cc,
 0x1f6d0, 0x1f6d2,
+0x1f6d5, 0x1f6d5,
 0x1f6eb, 0x1f6ec,
-0x1f6f4, 0x1f6f9,
-0x1f910, 0x1f93a,
-0x1f93c, 0x1f93e,
-0x1f940, 0x1f945,
-0x1f947, 0x1f970,
+0x1f6f4, 0x1f6fa,
+0x1f7e0, 0x1f7eb,
+0x1f90d, 0x1f93a,
+0x1f93c, 0x1f945,
+0x1f947, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1f9ff,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_Emoji_Presentation */
 
 /* PROPERTY: 'Ethiopic': Script */
@@ -11373,7 +11500,7 @@ CR_Extended_Pictographic[] = { 77,
 
 /* PROPERTY: 'Extender': Binary Property */
 static const OnigCodePoint
-CR_Extender[] = { 29,
+CR_Extender[] = { 31,
 0x00b7, 0x00b7,
 0x02d0, 0x02d1,
 0x0640, 0x0640,
@@ -11402,6 +11529,8 @@ CR_Extender[] = { 29,
 0x11a98, 0x11a98,
 0x16b42, 0x16b43,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
+0x1e13c, 0x1e13d,
 0x1e944, 0x1e946,
 }; /* END of CR_Extender */
 
@@ -11460,7 +11589,7 @@ CR_Grantha[] = { 15,
 
 /* PROPERTY: 'Grapheme_Base': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Base[] = { 806,
+CR_Grapheme_Base[] = { 819,
 0x0020, 0x007e,
 0x00a0, 0x00ac,
 0x00ae, 0x02ff,
@@ -11595,7 +11724,7 @@ CR_Grapheme_Base[] = { 806,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c61,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c80,
+0x0c77, 0x0c80,
 0x0c82, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
@@ -11638,16 +11767,10 @@ CR_Grapheme_Base[] = { 806,
 0x0e4f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -11745,7 +11868,6 @@ CR_Grapheme_Base[] = { 806,
 0x1a90, 0x1a99,
 0x1aa0, 0x1aad,
 0x1b04, 0x1b33,
-0x1b35, 0x1b35,
 0x1b3b, 0x1b3b,
 0x1b3d, 0x1b41,
 0x1b43, 0x1b4b,
@@ -11770,6 +11892,7 @@ CR_Grapheme_Base[] = { 806,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf7,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -11799,9 +11922,7 @@ CR_Grapheme_Base[] = { 806,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cee,
 0x2cf2, 0x2cf3,
@@ -11819,7 +11940,7 @@ CR_Grapheme_Base[] = { 806,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2e00, 0x2e4e,
+0x2e00, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -11833,8 +11954,7 @@ CR_Grapheme_Base[] = { 806,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
@@ -11844,7 +11964,8 @@ CR_Grapheme_Base[] = { 806,
 0xa67e, 0xa69d,
 0xa6a0, 0xa6ef,
 0xa6f2, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -11862,7 +11983,7 @@ CR_Grapheme_Base[] = { 806,
 0xa983, 0xa9b2,
 0xa9b4, 0xa9b5,
 0xa9ba, 0xa9bb,
-0xa9bd, 0xa9cd,
+0xa9be, 0xa9cd,
 0xa9cf, 0xa9d9,
 0xa9de, 0xa9e4,
 0xa9e6, 0xa9fe,
@@ -11887,7 +12008,7 @@ CR_Grapheme_Base[] = { 806,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabe4,
 0xabe6, 0xabe7,
 0xabe9, 0xabec,
@@ -11996,6 +12117,7 @@ CR_Grapheme_Base[] = { 806,
 0x10f00, 0x10f27,
 0x10f30, 0x10f45,
 0x10f51, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x11000,
 0x11002, 0x11037,
 0x11047, 0x1104d,
@@ -12049,6 +12171,7 @@ CR_Grapheme_Base[] = { 806,
 0x11447, 0x11459,
 0x1145b, 0x1145b,
 0x1145d, 0x1145d,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114b1, 0x114b2,
 0x114b9, 0x114b9,
@@ -12072,6 +12195,7 @@ CR_Grapheme_Base[] = { 806,
 0x116ac, 0x116ac,
 0x116ae, 0x116af,
 0x116b6, 0x116b6,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x11720, 0x11721,
@@ -12082,14 +12206,17 @@ CR_Grapheme_Base[] = { 806,
 0x1183b, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d3,
+0x119dc, 0x119df,
+0x119e1, 0x119e4,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a39, 0x11a3a,
 0x11a3f, 0x11a46,
 0x11a50, 0x11a50,
 0x11a57, 0x11a58,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a97, 0x11a97,
 0x11a9a, 0x11aa2,
 0x11ac0, 0x11af8,
@@ -12116,7 +12243,8 @@ CR_Grapheme_Base[] = { 806,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef2,
 0x11ef5, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
@@ -12135,13 +12263,15 @@ CR_Grapheme_Base[] = { 806,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f50, 0x16f87,
 0x16f93, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -12187,12 +12317,21 @@ CR_Grapheme_Base[] = { 806,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da8b,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8cf,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -12234,33 +12373,36 @@ CR_Grapheme_Base[] = { 806,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -12271,7 +12413,7 @@ CR_Grapheme_Base[] = { 806,
 
 /* PROPERTY: 'Grapheme_Extend': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Extend[] = { 331,
+CR_Grapheme_Extend[] = { 335,
 0x0300, 0x036f,
 0x0483, 0x0489,
 0x0591, 0x05bd,
@@ -12370,8 +12512,7 @@ CR_Grapheme_Extend[] = { 331,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -12422,8 +12563,7 @@ CR_Grapheme_Extend[] = { 331,
 0x1a7f, 0x1a7f,
 0x1ab0, 0x1abe,
 0x1b00, 0x1b03,
-0x1b34, 0x1b34,
-0x1b36, 0x1b3a,
+0x1b34, 0x1b3a,
 0x1b3c, 0x1b3c,
 0x1b42, 0x1b42,
 0x1b6b, 0x1b73,
@@ -12468,7 +12608,7 @@ CR_Grapheme_Extend[] = { 331,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9e5, 0xa9e5,
 0xaa29, 0xaa2e,
 0xaa31, 0xaa32,
@@ -12553,6 +12693,9 @@ CR_Grapheme_Extend[] = { 331,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -12579,6 +12722,7 @@ CR_Grapheme_Extend[] = { 331,
 0x11ef3, 0x11ef4,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d165, 0x1d165,
@@ -12599,6 +12743,8 @@ CR_Grapheme_Extend[] = { 331,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0020, 0xe007f,
@@ -12607,7 +12753,7 @@ CR_Grapheme_Extend[] = { 331,
 
 /* PROPERTY: 'Grapheme_Link': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Link[] = { 50,
+CR_Grapheme_Link[] = { 52,
 0x094d, 0x094d,
 0x09cd, 0x09cd,
 0x0a4d, 0x0a4d,
@@ -12620,6 +12766,7 @@ CR_Grapheme_Link[] = { 50,
 0x0d4d, 0x0d4d,
 0x0dca, 0x0dca,
 0x0e3a, 0x0e3a,
+0x0eba, 0x0eba,
 0x0f84, 0x0f84,
 0x1039, 0x103a,
 0x1714, 0x1714,
@@ -12652,6 +12799,7 @@ CR_Grapheme_Link[] = { 50,
 0x116b6, 0x116b6,
 0x1172b, 0x1172b,
 0x11839, 0x11839,
+0x119e0, 0x119e0,
 0x11a34, 0x11a34,
 0x11a47, 0x11a47,
 0x11a99, 0x11a99,
@@ -12841,10 +12989,11 @@ CR_Hex_Digit[] = { 6,
 
 /* PROPERTY: 'Hiragana': Script */
 static const OnigCodePoint
-CR_Hiragana[] = { 4,
+CR_Hiragana[] = { 5,
 0x3041, 0x3096,
 0x309d, 0x309f,
 0x1b001, 0x1b11e,
+0x1b150, 0x1b152,
 0x1f200, 0x1f200,
 }; /* END of CR_Hiragana */
 
@@ -12878,7 +13027,7 @@ CR_IDS_Trinary_Operator[] = { 1,
 
 /* PROPERTY: 'ID_Continue': Derived Property */
 static const OnigCodePoint
-CR_ID_Continue[] = { 707,
+CR_ID_Continue[] = { 713,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -13064,17 +13213,10 @@ CR_ID_Continue[] = { 707,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -13166,7 +13308,7 @@ CR_ID_Continue[] = { 707,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -13250,7 +13392,8 @@ CR_ID_Continue[] = { 707,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -13277,7 +13420,7 @@ CR_ID_Continue[] = { 707,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -13379,6 +13522,7 @@ CR_ID_Continue[] = { 707,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -13420,7 +13564,7 @@ CR_ID_Continue[] = { 707,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -13430,7 +13574,7 @@ CR_ID_Continue[] = { 707,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -13438,10 +13582,13 @@ CR_ID_Continue[] = { 707,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -13481,13 +13628,16 @@ CR_ID_Continue[] = { 707,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -13542,9 +13692,14 @@ CR_ID_Continue[] = { 707,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -13590,7 +13745,7 @@ CR_ID_Continue[] = { 707,
 
 /* PROPERTY: 'ID_Start': Derived Property */
 static const OnigCodePoint
-CR_ID_Start[] = { 599,
+CR_ID_Start[] = { 609,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -13735,16 +13890,10 @@ CR_ID_Start[] = { 599,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -13824,8 +13973,9 @@ CR_ID_Start[] = { 599,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -13905,7 +14055,8 @@ CR_ID_Start[] = { 599,
 0xa6a0, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -13943,7 +14094,7 @@ CR_ID_Start[] = { 599,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -14031,6 +14182,7 @@ CR_ID_Start[] = { 599,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -14061,6 +14213,7 @@ CR_ID_Start[] = { 599,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -14069,16 +14222,20 @@ CR_ID_Start[] = { 599,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -14107,13 +14264,16 @@ CR_ID_Start[] = { 599,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -14149,8 +14309,13 @@ CR_ID_Start[] = { 599,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -14202,7 +14367,7 @@ CR_Ideographic[] = { 16,
 0x4e00, 0x9fef,
 0xf900, 0xfa6d,
 0xfa70, 0xfad9,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b170, 0x1b2fb,
 0x20000, 0x2a6d6,
@@ -14227,7 +14392,7 @@ CR_Inherited[] = { 28,
 0x0485, 0x0486,
 0x064b, 0x0655,
 0x0670, 0x0670,
-0x0951, 0x0952,
+0x0951, 0x0954,
 0x1ab0, 0x1abe,
 0x1cd0, 0x1cd2,
 0x1cd4, 0x1ce0,
@@ -14308,7 +14473,7 @@ CR_Kannada[] = { 13,
 
 /* PROPERTY: 'Katakana': Script */
 static const OnigCodePoint
-CR_Katakana[] = { 8,
+CR_Katakana[] = { 9,
 0x30a1, 0x30fa,
 0x30fd, 0x30ff,
 0x31f0, 0x31ff,
@@ -14317,6 +14482,7 @@ CR_Katakana[] = { 8,
 0xff66, 0xff6f,
 0xff71, 0xff9d,
 0x1b000, 0x1b000,
+0x1b164, 0x1b167,
 }; /* END of CR_Katakana */
 
 /* PROPERTY: 'Kayah_Li': Script */
@@ -14364,7 +14530,7 @@ CR_Khudawadi[] = { 2,
 
 /* PROPERTY: 'L': Major Category */
 static const OnigCodePoint
-CR_L[] = { 599,
+CR_L[] = { 609,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -14509,16 +14675,10 @@ CR_L[] = { 599,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -14599,8 +14759,9 @@ CR_L[] = { 599,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -14681,7 +14842,8 @@ CR_L[] = { 599,
 0xa6a0, 0xa6e5,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -14719,7 +14881,7 @@ CR_L[] = { 599,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -14806,6 +14968,7 @@ CR_L[] = { 599,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -14836,6 +14999,7 @@ CR_L[] = { 599,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -14844,16 +15008,20 @@ CR_L[] = { 599,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -14881,13 +15049,16 @@ CR_L[] = { 599,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -14923,8 +15094,13 @@ CR_L[] = { 599,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -14968,7 +15144,7 @@ CR_L[] = { 599,
 
 /* PROPERTY: 'LC': General Category */
 static const OnigCodePoint
-CR_LC[] = { 130,
+CR_LC[] = { 131,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
@@ -15052,10 +15228,11 @@ CR_LC[] = { 130,
 0xa722, 0xa76f,
 0xa771, 0xa787,
 0xa78b, 0xa78e,
-0xa790, 0xa7b9,
+0xa790, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7fa, 0xa7fa,
 0xab30, 0xab5a,
-0xab60, 0xab65,
+0xab60, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -15103,20 +15280,13 @@ CR_LC[] = { 130,
 
 /* PROPERTY: 'Lao': Script */
 static const OnigCodePoint
-CR_Lao[] = { 18,
+CR_Lao[] = { 11,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -15126,7 +15296,7 @@ CR_Lao[] = { 18,
 
 /* PROPERTY: 'Latin': Script */
 static const OnigCodePoint
-CR_Latin[] = { 30,
+CR_Latin[] = { 32,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -15150,10 +15320,12 @@ CR_Latin[] = { 30,
 0x2160, 0x2188,
 0x2c60, 0x2c7f,
 0xa722, 0xa787,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa7ff,
 0xab30, 0xab5a,
 0xab5c, 0xab64,
+0xab66, 0xab67,
 0xfb00, 0xfb06,
 0xff21, 0xff3a,
 0xff41, 0xff5a,
@@ -15205,7 +15377,7 @@ CR_Lisu[] = { 1,
 
 /* PROPERTY: 'Ll': General Category */
 static const OnigCodePoint
-CR_Ll[] = { 638,
+CR_Ll[] = { 642,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -15803,9 +15975,13 @@ CR_Ll[] = { 638,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7fa, 0xa7fa,
 0xab30, 0xab5a,
-0xab60, 0xab65,
+0xab60, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -15848,7 +16024,7 @@ CR_Ll[] = { 638,
 
 /* PROPERTY: 'Lm': General Category */
 static const OnigCodePoint
-CR_Lm[] = { 57,
+CR_Lm[] = { 60,
 0x02b0, 0x02c1,
 0x02c6, 0x02d1,
 0x02e0, 0x02e4,
@@ -15906,11 +16082,14 @@ CR_Lm[] = { 57,
 0x16b40, 0x16b43,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
+0x1e137, 0x1e13d,
+0x1e94b, 0x1e94b,
 }; /* END of CR_Lm */
 
 /* PROPERTY: 'Lo': General Category */
 static const OnigCodePoint
-CR_Lo[] = { 470,
+CR_Lo[] = { 476,
 0x00aa, 0x00aa,
 0x00ba, 0x00ba,
 0x01bb, 0x01bb,
@@ -16029,16 +16208,10 @@ CR_Lo[] = { 470,
 0x0e40, 0x0e45,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -16108,8 +16281,9 @@ CR_Lo[] = { 470,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c77,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x2135, 0x2138,
 0x2d30, 0x2d67,
 0x2d80, 0x2d96,
@@ -16259,6 +16433,7 @@ CR_Lo[] = { 470,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -16289,6 +16464,7 @@ CR_Lo[] = { 470,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -16297,15 +16473,19 @@ CR_Lo[] = { 470,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -16331,16 +16511,21 @@ CR_Lo[] = { 470,
 0x16b00, 0x16b2f,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
 0x1bc80, 0x1bc88,
 0x1bc90, 0x1bc99,
+0x1e100, 0x1e12c,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -16415,7 +16600,7 @@ CR_Lt[] = { 10,
 
 /* PROPERTY: 'Lu': General Category */
 static const OnigCodePoint
-CR_Lu[] = { 631,
+CR_Lu[] = { 636,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -17009,6 +17194,11 @@ CR_Lu[] = { 631,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -17064,7 +17254,7 @@ CR_Lydian[] = { 2,
 
 /* PROPERTY: 'M': Major Category */
 static const OnigCodePoint
-CR_M[] = { 275,
+CR_M[] = { 280,
 0x0300, 0x036f,
 0x0483, 0x0489,
 0x0591, 0x05bd,
@@ -17160,8 +17350,7 @@ CR_M[] = { 275,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -17209,7 +17398,7 @@ CR_M[] = { 275,
 0x1cd0, 0x1cd2,
 0x1cd4, 0x1ce8,
 0x1ced, 0x1ced,
-0x1cf2, 0x1cf4,
+0x1cf4, 0x1cf4,
 0x1cf7, 0x1cf9,
 0x1dc0, 0x1df9,
 0x1dfb, 0x1dff,
@@ -17296,6 +17485,9 @@ CR_M[] = { 275,
 0x116ab, 0x116b7,
 0x1171d, 0x1172b,
 0x1182c, 0x1183a,
+0x119d1, 0x119d7,
+0x119da, 0x119e0,
+0x119e4, 0x119e4,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a39,
 0x11a3b, 0x11a3e,
@@ -17317,7 +17509,8 @@ CR_M[] = { 275,
 0x11ef3, 0x11ef6,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
+0x16f4f, 0x16f4f,
+0x16f51, 0x16f87,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d165, 0x1d169,
@@ -17337,6 +17530,8 @@ CR_M[] = { 275,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0100, 0xe01ef,
@@ -17546,7 +17741,7 @@ CR_Math[] = { 138,
 
 /* PROPERTY: 'Mc': General Category */
 static const OnigCodePoint
-CR_Mc[] = { 166,
+CR_Mc[] = { 168,
 0x0903, 0x0903,
 0x093b, 0x093b,
 0x093e, 0x0940,
@@ -17633,7 +17828,6 @@ CR_Mc[] = { 166,
 0x1c24, 0x1c2b,
 0x1c34, 0x1c35,
 0x1ce1, 0x1ce1,
-0x1cf2, 0x1cf3,
 0x1cf7, 0x1cf7,
 0x302e, 0x302f,
 0xa823, 0xa824,
@@ -17644,7 +17838,7 @@ CR_Mc[] = { 166,
 0xa983, 0xa983,
 0xa9b4, 0xa9b5,
 0xa9ba, 0xa9bb,
-0xa9bd, 0xa9c0,
+0xa9be, 0xa9c0,
 0xaa2f, 0xaa30,
 0xaa33, 0xaa34,
 0xaa4d, 0xaa4d,
@@ -17698,6 +17892,9 @@ CR_Mc[] = { 166,
 0x11726, 0x11726,
 0x1182c, 0x1182e,
 0x11838, 0x11838,
+0x119d1, 0x119d3,
+0x119dc, 0x119df,
+0x119e4, 0x119e4,
 0x11a39, 0x11a39,
 0x11a57, 0x11a58,
 0x11a97, 0x11a97,
@@ -17710,7 +17907,7 @@ CR_Mc[] = { 166,
 0x11d93, 0x11d94,
 0x11d96, 0x11d96,
 0x11ef5, 0x11ef6,
-0x16f51, 0x16f7e,
+0x16f51, 0x16f87,
 0x1d165, 0x1d166,
 0x1d16d, 0x1d172,
 }; /* END of CR_Mc */
@@ -17763,14 +17960,14 @@ CR_Meroitic_Hieroglyphs[] = { 1,
 /* PROPERTY: 'Miao': Script */
 static const OnigCodePoint
 CR_Miao[] = { 3,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 }; /* END of CR_Miao */
 
 /* PROPERTY: 'Mn': General Category */
 static const OnigCodePoint
-CR_Mn[] = { 313,
+CR_Mn[] = { 318,
 0x0300, 0x036f,
 0x0483, 0x0487,
 0x0591, 0x05bd,
@@ -17859,8 +18056,7 @@ CR_Mn[] = { 313,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -17958,7 +18154,7 @@ CR_Mn[] = { 313,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9e5, 0xa9e5,
 0xaa29, 0xaa2e,
 0xaa31, 0xaa32,
@@ -18037,6 +18233,9 @@ CR_Mn[] = { 313,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -18063,6 +18262,7 @@ CR_Mn[] = { 313,
 0x11ef3, 0x11ef4,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d167, 0x1d169,
@@ -18081,6 +18281,8 @@ CR_Mn[] = { 313,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0100, 0xe01ef,
@@ -18133,7 +18335,7 @@ CR_Myanmar[] = { 3,
 
 /* PROPERTY: 'N': Major Category */
 static const OnigCodePoint
-CR_N[] = { 125,
+CR_N[] = { 130,
 0x0030, 0x0039,
 0x00b2, 0x00b3,
 0x00b9, 0x00b9,
@@ -18245,6 +18447,7 @@ CR_N[] = { 125,
 0x11c50, 0x11c6c,
 0x11d50, 0x11d59,
 0x11da0, 0x11da9,
+0x11fc0, 0x11fd4,
 0x12400, 0x1246e,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
@@ -18253,11 +18456,15 @@ CR_N[] = { 125,
 0x1d2e0, 0x1d2f3,
 0x1d360, 0x1d378,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e8c7, 0x1e8cf,
 0x1e950, 0x1e959,
 0x1ec71, 0x1ecab,
 0x1ecad, 0x1ecaf,
 0x1ecb1, 0x1ecb4,
+0x1ed01, 0x1ed2d,
+0x1ed2f, 0x1ed3d,
 0x1f100, 0x1f10c,
 }; /* END of CR_N */
 
@@ -18268,6 +18475,14 @@ CR_Nabataean[] = { 2,
 0x108a7, 0x108af,
 }; /* END of CR_Nabataean */
 
+/* PROPERTY: 'Nandinagari': Script */
+static const OnigCodePoint
+CR_Nandinagari[] = { 3,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
+}; /* END of CR_Nandinagari */
+
 /* PROPERTY: 'Nd': General Category */
 #define CR_Nd CR_Digit
 
@@ -18285,7 +18500,7 @@ static const OnigCodePoint
 CR_Newa[] = { 3,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 }; /* END of CR_Newa */
 
 /* PROPERTY: 'Nko': Script */
@@ -18314,7 +18529,7 @@ CR_Nl[] = { 12,
 
 /* PROPERTY: 'No': General Category */
 static const OnigCodePoint
-CR_No[] = { 67,
+CR_No[] = { 70,
 0x00b2, 0x00b3,
 0x00b9, 0x00b9,
 0x00bc, 0x00be,
@@ -18373,6 +18588,7 @@ CR_No[] = { 67,
 0x1173a, 0x1173b,
 0x118ea, 0x118f2,
 0x11c5a, 0x11c6c,
+0x11fc0, 0x11fd4,
 0x16b5b, 0x16b61,
 0x16e80, 0x16e96,
 0x1d2e0, 0x1d2f3,
@@ -18381,6 +18597,8 @@ CR_No[] = { 67,
 0x1ec71, 0x1ecab,
 0x1ecad, 0x1ecaf,
 0x1ecb1, 0x1ecb4,
+0x1ed01, 0x1ed2d,
+0x1ed2f, 0x1ed3d,
 0x1f100, 0x1f10c,
 }; /* END of CR_No */
 
@@ -18414,6 +18632,15 @@ CR_Nushu[] = { 2,
 0x1b170, 0x1b2fb,
 }; /* END of CR_Nushu */
 
+/* PROPERTY: 'Nyiakeng_Puachue_Hmong': Script */
+static const OnigCodePoint
+CR_Nyiakeng_Puachue_Hmong[] = { 4,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+}; /* END of CR_Nyiakeng_Puachue_Hmong */
+
 /* PROPERTY: 'Ogham': Script */
 static const OnigCodePoint
 CR_Ogham[] = { 1,
@@ -18513,7 +18740,7 @@ CR_Osmanya[] = { 2,
 
 /* PROPERTY: 'Other_Alphabetic': Binary Property */
 static const OnigCodePoint
-CR_Other_Alphabetic[] = { 213,
+CR_Other_Alphabetic[] = { 221,
 0x0345, 0x0345,
 0x05b0, 0x05bd,
 0x05bf, 0x05bf,
@@ -18611,12 +18838,12 @@ CR_Other_Alphabetic[] = { 213,
 0x103b, 0x103e,
 0x1056, 0x1059,
 0x105e, 0x1060,
-0x1062, 0x1062,
-0x1067, 0x1068,
+0x1062, 0x1064,
+0x1067, 0x106d,
 0x1071, 0x1074,
-0x1082, 0x1086,
-0x109c, 0x109d,
-0x135f, 0x135f,
+0x1082, 0x108d,
+0x108f, 0x108f,
+0x109a, 0x109d,
 0x1712, 0x1713,
 0x1732, 0x1733,
 0x1752, 0x1753,
@@ -18635,24 +18862,28 @@ CR_Other_Alphabetic[] = { 213,
 0x1ba1, 0x1ba9,
 0x1bac, 0x1bad,
 0x1be7, 0x1bf1,
-0x1c24, 0x1c35,
-0x1cf2, 0x1cf3,
+0x1c24, 0x1c36,
 0x1de7, 0x1df4,
 0x24b6, 0x24e9,
 0x2de0, 0x2dff,
 0xa674, 0xa67b,
 0xa69e, 0xa69f,
+0xa802, 0xa802,
+0xa80b, 0xa80b,
 0xa823, 0xa827,
 0xa880, 0xa881,
 0xa8b4, 0xa8c3,
 0xa8c5, 0xa8c5,
+0xa8ff, 0xa8ff,
 0xa926, 0xa92a,
 0xa947, 0xa952,
 0xa980, 0xa983,
 0xa9b4, 0xa9bf,
+0xa9e5, 0xa9e5,
 0xaa29, 0xaa36,
 0xaa43, 0xaa43,
 0xaa4c, 0xaa4d,
+0xaa7b, 0xaa7d,
 0xaab0, 0xaab0,
 0xaab2, 0xaab4,
 0xaab7, 0xaab8,
@@ -18696,6 +18927,9 @@ CR_Other_Alphabetic[] = { 213,
 0x116ab, 0x116b5,
 0x1171d, 0x1172a,
 0x1182c, 0x11838,
+0x119d1, 0x119d7,
+0x119da, 0x119df,
+0x119e4, 0x119e4,
 0x11a01, 0x11a0a,
 0x11a35, 0x11a39,
 0x11a3b, 0x11a3e,
@@ -18715,8 +18949,9 @@ CR_Other_Alphabetic[] = { 213,
 0x11d90, 0x11d91,
 0x11d93, 0x11d96,
 0x11ef3, 0x11ef6,
-0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
+0x16f4f, 0x16f4f,
+0x16f51, 0x16f87,
+0x16f8f, 0x16f92,
 0x1bc9e, 0x1bc9e,
 0x1e000, 0x1e006,
 0x1e008, 0x1e018,
@@ -18747,7 +18982,7 @@ CR_Other_Default_Ignorable_Code_Point[] = { 11,
 
 /* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
 static const OnigCodePoint
-CR_Other_Grapheme_Extend[] = { 23,
+CR_Other_Grapheme_Extend[] = { 24,
 0x09be, 0x09be,
 0x09d7, 0x09d7,
 0x0b3e, 0x0b3e,
@@ -18760,6 +18995,7 @@ CR_Other_Grapheme_Extend[] = { 23,
 0x0d57, 0x0d57,
 0x0dcf, 0x0dcf,
 0x0ddf, 0x0ddf,
+0x1b35, 0x1b35,
 0x200c, 0x200c,
 0x302e, 0x302f,
 0xff9e, 0xff9f,
@@ -19189,7 +19425,7 @@ CR_Pi[] = { 11,
 
 /* PROPERTY: 'Po': General Category */
 static const OnigCodePoint
-CR_Po[] = { 175,
+CR_Po[] = { 179,
 0x0021, 0x0023,
 0x0025, 0x0027,
 0x002a, 0x002a,
@@ -19225,6 +19461,7 @@ CR_Po[] = { 175,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -19237,7 +19474,7 @@ CR_Po[] = { 175,
 0x104a, 0x104f,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
 0x17d4, 0x17d6,
@@ -19276,7 +19513,7 @@ CR_Po[] = { 175,
 0x2e30, 0x2e39,
 0x2e3c, 0x2e3f,
 0x2e41, 0x2e41,
-0x2e43, 0x2e4e,
+0x2e43, 0x2e4f,
 0x3001, 0x3003,
 0x303d, 0x303d,
 0x30fb, 0x30fb,
@@ -19350,18 +19587,21 @@ CR_Po[] = { 175,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -19514,7 +19754,7 @@ CR_Runic[] = { 2,
 
 /* PROPERTY: 'S': Major Category */
 static const OnigCodePoint
-CR_S[] = { 220,
+CR_S[] = { 226,
 0x0024, 0x0024,
 0x002b, 0x002b,
 0x003c, 0x003e,
@@ -19570,6 +19810,7 @@ CR_S[] = { 220,
 0x0fd5, 0x0fd8,
 0x109e, 0x109f,
 0x1390, 0x1399,
+0x166d, 0x166d,
 0x17db, 0x17db,
 0x1940, 0x1940,
 0x19de, 0x19ff,
@@ -19614,8 +19855,7 @@ CR_S[] = { 220,
 0x29dc, 0x29fb,
 0x29fe, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
+0x2b98, 0x2bff,
 0x2ce5, 0x2cea,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
@@ -19635,8 +19875,7 @@ CR_S[] = { 220,
 0x3250, 0x3250,
 0x3260, 0x327f,
 0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
+0x32c0, 0x33ff,
 0x4dc0, 0x4dff,
 0xa490, 0xa4c6,
 0xa700, 0xa716,
@@ -19671,6 +19910,7 @@ CR_S[] = { 220,
 0x10877, 0x10878,
 0x10ac8, 0x10ac8,
 0x1173f, 0x1173f,
+0x11fd5, 0x11ff1,
 0x16b3c, 0x16b3f,
 0x16b45, 0x16b45,
 0x1bc9c, 0x1bc9c,
@@ -19699,8 +19939,11 @@ CR_S[] = { 220,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da86,
+0x1e14f, 0x1e14f,
+0x1e2ff, 0x1e2ff,
 0x1ecac, 0x1ecac,
 0x1ecb0, 0x1ecb0,
+0x1ed2e, 0x1ed2e,
 0x1eef0, 0x1eef1,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
@@ -19708,33 +19951,36 @@ CR_S[] = { 220,
 0x1f0b1, 0x1f0bf,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_S */
 
 /* PROPERTY: 'Samaritan': Script */
@@ -19753,7 +19999,7 @@ CR_Saurashtra[] = { 2,
 
 /* PROPERTY: 'Sc': General Category */
 static const OnigCodePoint
-CR_Sc[] = { 19,
+CR_Sc[] = { 21,
 0x0024, 0x0024,
 0x00a2, 0x00a5,
 0x058f, 0x058f,
@@ -19772,6 +20018,8 @@ CR_Sc[] = { 19,
 0xff04, 0xff04,
 0xffe0, 0xffe1,
 0xffe5, 0xffe6,
+0x11fdd, 0x11fe0,
+0x1e2ff, 0x1e2ff,
 0x1ecb0, 0x1ecb0,
 }; /* END of CR_Sc */
 
@@ -20005,7 +20253,7 @@ CR_Sm[] = { 64,
 
 /* PROPERTY: 'So': General Category */
 static const OnigCodePoint
-CR_So[] = { 174,
+CR_So[] = { 180,
 0x00a6, 0x00a6,
 0x00a9, 0x00a9,
 0x00ae, 0x00ae,
@@ -20037,6 +20285,7 @@ CR_So[] = { 174,
 0x0fd5, 0x0fd8,
 0x109e, 0x109f,
 0x1390, 0x1399,
+0x166d, 0x166d,
 0x1940, 0x1940,
 0x19de, 0x19ff,
 0x1b61, 0x1b6a,
@@ -20085,8 +20334,7 @@ CR_So[] = { 174,
 0x2b45, 0x2b46,
 0x2b4d, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
+0x2b98, 0x2bff,
 0x2ce5, 0x2cea,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
@@ -20105,8 +20353,7 @@ CR_So[] = { 174,
 0x3250, 0x3250,
 0x3260, 0x327f,
 0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
+0x32c0, 0x33ff,
 0x4dc0, 0x4dff,
 0xa490, 0xa4c6,
 0xa828, 0xa82b,
@@ -20127,6 +20374,8 @@ CR_So[] = { 174,
 0x10877, 0x10878,
 0x10ac8, 0x10ac8,
 0x1173f, 0x1173f,
+0x11fd5, 0x11fdc,
+0x11fe1, 0x11ff1,
 0x16b3c, 0x16b3f,
 0x16b45, 0x16b45,
 0x1bc9c, 0x1bc9c,
@@ -20145,14 +20394,16 @@ CR_So[] = { 174,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da86,
+0x1e14f, 0x1e14f,
 0x1ecac, 0x1ecac,
+0x1ed2e, 0x1ed2e,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
 0x1f0a0, 0x1f0ae,
 0x1f0b1, 0x1f0bf,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
@@ -20160,26 +20411,29 @@ CR_So[] = { 174,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
 0x1f300, 0x1f3fa,
-0x1f400, 0x1f6d4,
+0x1f400, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_So */
 
 /* PROPERTY: 'Soft_Dotted': Binary Property */
@@ -20233,9 +20487,8 @@ CR_Sora_Sompeng[] = { 2,
 
 /* PROPERTY: 'Soyombo': Script */
 static const OnigCodePoint
-CR_Soyombo[] = { 2,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+CR_Soyombo[] = { 1,
+0x11a50, 0x11aa2,
 }; /* END of CR_Soyombo */
 
 /* PROPERTY: 'Sundanese': Script */
@@ -20302,13 +20555,13 @@ CR_Tai_Viet[] = { 2,
 /* PROPERTY: 'Takri': Script */
 static const OnigCodePoint
 CR_Takri[] = { 2,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 }; /* END of CR_Takri */
 
 /* PROPERTY: 'Tamil': Script */
 static const OnigCodePoint
-CR_Tamil[] = { 16,
+CR_Tamil[] = { 18,
 0x0b82, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
@@ -20325,13 +20578,15 @@ CR_Tamil[] = { 16,
 0x0bd0, 0x0bd0,
 0x0bd7, 0x0bd7,
 0x0be6, 0x0bfa,
+0x11fc0, 0x11ff1,
+0x11fff, 0x11fff,
 }; /* END of CR_Tamil */
 
 /* PROPERTY: 'Tangut': Script */
 static const OnigCodePoint
 CR_Tangut[] = { 3,
 0x16fe0, 0x16fe0,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 }; /* END of CR_Tangut */
 
@@ -20349,7 +20604,7 @@ CR_Telugu[] = { 12,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c7f,
+0x0c77, 0x0c7f,
 }; /* END of CR_Telugu */
 
 /* PROPERTY: 'Terminal_Punctuation': Binary Property */
@@ -20379,7 +20634,7 @@ CR_Terminal_Punctuation[] = { 102,
 0x0f0d, 0x0f12,
 0x104a, 0x104b,
 0x1361, 0x1368,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
 0x17d4, 0x17d6,
@@ -20398,7 +20653,7 @@ CR_Terminal_Punctuation[] = { 102,
 0x2e3c, 0x2e3c,
 0x2e41, 0x2e41,
 0x2e4c, 0x2e4c,
-0x2e4e, 0x2e4e,
+0x2e4e, 0x2e4f,
 0x3001, 0x3002,
 0xa4fe, 0xa4ff,
 0xa60d, 0xa60f,
@@ -20527,7 +20782,7 @@ CR_Unified_Ideograph[] = { 14,
 
 /* PROPERTY: 'Unknown': Script */
 static const OnigCodePoint
-CR_Unknown[] = { 656,
+CR_Unknown[] = { 664,
 0x0378, 0x0379,
 0x0380, 0x0383,
 0x038b, 0x038b,
@@ -20636,7 +20891,7 @@ CR_Unknown[] = { 656,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -20673,17 +20928,10 @@ CR_Unknown[] = { 656,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -20760,7 +21008,7 @@ CR_Unknown[] = { 656,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -20789,8 +21037,6 @@ CR_Unknown[] = { 656,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -20808,7 +21054,7 @@ CR_Unknown[] = { 656,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -20821,14 +21067,14 @@ CR_Unknown[] = { 656,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -20849,7 +21095,7 @@ CR_Unknown[] = { 656,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -20955,7 +21201,8 @@ CR_Unknown[] = { 656,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110c2, 0x110cc,
@@ -20994,7 +21241,7 @@ CR_Unknown[] = { 656,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -21002,16 +21249,18 @@ CR_Unknown[] = { 656,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -21034,12 +21283,14 @@ CR_Unknown[] = { 656,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
 0x12544, 0x12fff,
-0x1342f, 0x143ff,
+0x1342f, 0x1342f,
+0x13439, 0x143ff,
 0x14647, 0x167ff,
 0x16a39, 0x16a3f,
 0x16a5f, 0x16a5f,
@@ -21053,13 +21304,15 @@ CR_Unknown[] = { 656,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -21100,13 +21353,20 @@ CR_Unknown[] = { 656,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -21148,33 +21408,36 @@ CR_Unknown[] = { 656,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -21203,6 +21466,13 @@ CR_Variation_Selector[] = { 3,
 0xe0100, 0xe01ef,
 }; /* END of CR_Variation_Selector */
 
+/* PROPERTY: 'Wancho': Script */
+static const OnigCodePoint
+CR_Wancho[] = { 2,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
+}; /* END of CR_Wancho */
+
 /* PROPERTY: 'Warang_Citi': Script */
 static const OnigCodePoint
 CR_Warang_Citi[] = { 2,
@@ -21215,7 +21485,7 @@ CR_Warang_Citi[] = { 2,
 
 /* PROPERTY: 'XID_Continue': Derived Property */
 static const OnigCodePoint
-CR_XID_Continue[] = { 714,
+CR_XID_Continue[] = { 720,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -21401,17 +21671,10 @@ CR_XID_Continue[] = { 714,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -21503,7 +21766,7 @@ CR_XID_Continue[] = { 714,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -21588,7 +21851,8 @@ CR_XID_Continue[] = { 714,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -21615,7 +21879,7 @@ CR_XID_Continue[] = { 714,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -21723,6 +21987,7 @@ CR_XID_Continue[] = { 714,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -21764,7 +22029,7 @@ CR_XID_Continue[] = { 714,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -21774,7 +22039,7 @@ CR_XID_Continue[] = { 714,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -21782,10 +22047,13 @@ CR_XID_Continue[] = { 714,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -21825,13 +22093,16 @@ CR_XID_Continue[] = { 714,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -21886,9 +22157,14 @@ CR_XID_Continue[] = { 714,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -21934,7 +22210,7 @@ CR_XID_Continue[] = { 714,
 
 /* PROPERTY: 'XID_Start': Derived Property */
 static const OnigCodePoint
-CR_XID_Start[] = { 606,
+CR_XID_Start[] = { 616,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -22079,16 +22355,10 @@ CR_XID_Start[] = { 606,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb2,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -22168,8 +22438,9 @@ CR_XID_Start[] = { 606,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -22249,7 +22520,8 @@ CR_XID_Start[] = { 606,
 0xa6a0, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -22287,7 +22559,7 @@ CR_XID_Start[] = { 606,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -22382,6 +22654,7 @@ CR_XID_Start[] = { 606,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -22412,6 +22685,7 @@ CR_XID_Start[] = { 606,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -22420,16 +22694,20 @@ CR_XID_Start[] = { 606,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -22458,13 +22736,16 @@ CR_XID_Start[] = { 606,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -22500,8 +22781,13 @@ CR_XID_Start[] = { 606,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -23805,6 +24091,12 @@ CR_In_Sogdian[] = { 1,
 0x10f30, 0x10f6f,
 }; /* END of CR_In_Sogdian */
 
+/* PROPERTY: 'In_Elymaic': Block */
+static const OnigCodePoint
+CR_In_Elymaic[] = { 1,
+0x10fe0, 0x10fff,
+}; /* END of CR_In_Elymaic */
+
 /* PROPERTY: 'In_Brahmi': Block */
 static const OnigCodePoint
 CR_In_Brahmi[] = { 1,
@@ -23925,6 +24217,12 @@ CR_In_Warang_Citi[] = { 1,
 0x118a0, 0x118ff,
 }; /* END of CR_In_Warang_Citi */
 
+/* PROPERTY: 'In_Nandinagari': Block */
+static const OnigCodePoint
+CR_In_Nandinagari[] = { 1,
+0x119a0, 0x119ff,
+}; /* END of CR_In_Nandinagari */
+
 /* PROPERTY: 'In_Zanabazar_Square': Block */
 static const OnigCodePoint
 CR_In_Zanabazar_Square[] = { 1,
@@ -23973,6 +24271,12 @@ CR_In_Makasar[] = { 1,
 0x11ee0, 0x11eff,
 }; /* END of CR_In_Makasar */
 
+/* PROPERTY: 'In_Tamil_Supplement': Block */
+static const OnigCodePoint
+CR_In_Tamil_Supplement[] = { 1,
+0x11fc0, 0x11fff,
+}; /* END of CR_In_Tamil_Supplement */
+
 /* PROPERTY: 'In_Cuneiform': Block */
 static const OnigCodePoint
 CR_In_Cuneiform[] = { 1,
@@ -23997,6 +24301,12 @@ CR_In_Egyptian_Hieroglyphs[] = { 1,
 0x13000, 0x1342f,
 }; /* END of CR_In_Egyptian_Hieroglyphs */
 
+/* PROPERTY: 'In_Egyptian_Hieroglyph_Format_Controls': Block */
+static const OnigCodePoint
+CR_In_Egyptian_Hieroglyph_Format_Controls[] = { 1,
+0x13430, 0x1343f,
+}; /* END of CR_In_Egyptian_Hieroglyph_Format_Controls */
+
 /* PROPERTY: 'In_Anatolian_Hieroglyphs': Block */
 static const OnigCodePoint
 CR_In_Anatolian_Hieroglyphs[] = { 1,
@@ -24069,6 +24379,12 @@ CR_In_Kana_Extended_A[] = { 1,
 0x1b100, 0x1b12f,
 }; /* END of CR_In_Kana_Extended_A */
 
+/* PROPERTY: 'In_Small_Kana_Extension': Block */
+static const OnigCodePoint
+CR_In_Small_Kana_Extension[] = { 1,
+0x1b130, 0x1b16f,
+}; /* END of CR_In_Small_Kana_Extension */
+
 /* PROPERTY: 'In_Nushu': Block */
 static const OnigCodePoint
 CR_In_Nushu[] = { 1,
@@ -24141,6 +24457,18 @@ CR_In_Glagolitic_Supplement[] = { 1,
 0x1e000, 0x1e02f,
 }; /* END of CR_In_Glagolitic_Supplement */
 
+/* PROPERTY: 'In_Nyiakeng_Puachue_Hmong': Block */
+static const OnigCodePoint
+CR_In_Nyiakeng_Puachue_Hmong[] = { 1,
+0x1e100, 0x1e14f,
+}; /* END of CR_In_Nyiakeng_Puachue_Hmong */
+
+/* PROPERTY: 'In_Wancho': Block */
+static const OnigCodePoint
+CR_In_Wancho[] = { 1,
+0x1e2c0, 0x1e2ff,
+}; /* END of CR_In_Wancho */
+
 /* PROPERTY: 'In_Mende_Kikakui': Block */
 static const OnigCodePoint
 CR_In_Mende_Kikakui[] = { 1,
@@ -24159,6 +24487,12 @@ CR_In_Indic_Siyaq_Numbers[] = { 1,
 0x1ec70, 0x1ecbf,
 }; /* END of CR_In_Indic_Siyaq_Numbers */
 
+/* PROPERTY: 'In_Ottoman_Siyaq_Numbers': Block */
+static const OnigCodePoint
+CR_In_Ottoman_Siyaq_Numbers[] = { 1,
+0x1ed00, 0x1ed4f,
+}; /* END of CR_In_Ottoman_Siyaq_Numbers */
+
 /* PROPERTY: 'In_Arabic_Mathematical_Alphabetic_Symbols': Block */
 static const OnigCodePoint
 CR_In_Arabic_Mathematical_Alphabetic_Symbols[] = { 1,
@@ -24249,6 +24583,12 @@ CR_In_Chess_Symbols[] = { 1,
 0x1fa00, 0x1fa6f,
 }; /* END of CR_In_Chess_Symbols */
 
+/* PROPERTY: 'In_Symbols_and_Pictographs_Extended_A': Block */
+static const OnigCodePoint
+CR_In_Symbols_and_Pictographs_Extended_A[] = { 1,
+0x1fa70, 0x1faff,
+}; /* END of CR_In_Symbols_and_Pictographs_Extended_A */
+
 /* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_B': Block */
 static const OnigCodePoint
 CR_In_CJK_Unified_Ideographs_Extension_B[] = { 1,
@@ -24311,7 +24651,7 @@ CR_In_Supplementary_Private_Use_Area_B[] = { 1,
 
 /* PROPERTY: 'In_No_Block': Block */
 static const OnigCodePoint
-CR_In_No_Block[] = { 51,
+CR_In_No_Block[] = { 53,
 0x0870, 0x089f,
 0x2fe0, 0x2fef,
 0x10200, 0x1027f,
@@ -24325,39 +24665,41 @@ CR_In_No_Block[] = { 51,
 0x10c50, 0x10c7f,
 0x10d40, 0x10e5f,
 0x10e80, 0x10eff,
-0x10f70, 0x10fff,
+0x10f70, 0x10fdf,
 0x11250, 0x1127f,
 0x11380, 0x113ff,
 0x114e0, 0x1157f,
 0x116d0, 0x116ff,
 0x11740, 0x117ff,
 0x11850, 0x1189f,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
 0x11ab0, 0x11abf,
 0x11b00, 0x11bff,
 0x11cc0, 0x11cff,
 0x11db0, 0x11edf,
-0x11f00, 0x11fff,
+0x11f00, 0x11fbf,
 0x12550, 0x12fff,
-0x13430, 0x143ff,
+0x13440, 0x143ff,
 0x14680, 0x167ff,
 0x16a70, 0x16acf,
 0x16b90, 0x16e3f,
 0x16ea0, 0x16eff,
 0x16fa0, 0x16fdf,
 0x18b00, 0x1afff,
-0x1b130, 0x1b16f,
 0x1b300, 0x1bbff,
 0x1bcb0, 0x1cfff,
 0x1d250, 0x1d2df,
 0x1d380, 0x1d3ff,
 0x1dab0, 0x1dfff,
-0x1e030, 0x1e7ff,
+0x1e030, 0x1e0ff,
+0x1e150, 0x1e2bf,
+0x1e300, 0x1e7ff,
 0x1e8e0, 0x1e8ff,
 0x1e960, 0x1ec6f,
-0x1ecc0, 0x1edff,
+0x1ecc0, 0x1ecff,
+0x1ed50, 0x1edff,
 0x1ef00, 0x1efff,
-0x1fa70, 0x1ffff,
+0x1fb00, 0x1ffff,
 0x2a6e0, 0x2a6ff,
 0x2ebf0, 0x2f7ff,
 0x2fa20, 0xdffff,
@@ -24438,6 +24780,7 @@ const CodeRanges[] = {
   CR_Duployan,
   CR_Egyptian_Hieroglyphs,
   CR_Elbasan,
+  CR_Elymaic,
   CR_Emoji,
   CR_Emoji_Component,
   CR_Emoji_Modifier,
@@ -24528,6 +24871,7 @@ const CodeRanges[] = {
   CR_Myanmar,
   CR_N,
   CR_Nabataean,
+  CR_Nandinagari,
   CR_Nd,
   CR_New_Tai_Lue,
   CR_Newa,
@@ -24536,6 +24880,7 @@ const CodeRanges[] = {
   CR_No,
   CR_Noncharacter_Code_Point,
   CR_Nushu,
+  CR_Nyiakeng_Puachue_Hmong,
   CR_Ogham,
   CR_Ol_Chiki,
   CR_Old_Hungarian,
@@ -24620,6 +24965,7 @@ const CodeRanges[] = {
   CR_Uppercase,
   CR_Vai,
   CR_Variation_Selector,
+  CR_Wancho,
   CR_Warang_Citi,
   CR_White_Space,
   CR_XID_Continue,
@@ -24837,6 +25183,7 @@ const CodeRanges[] = {
   CR_In_Rumi_Numeral_Symbols,
   CR_In_Old_Sogdian,
   CR_In_Sogdian,
+  CR_In_Elymaic,
   CR_In_Brahmi,
   CR_In_Kaithi,
   CR_In_Sora_Sompeng,
@@ -24857,6 +25204,7 @@ const CodeRanges[] = {
   CR_In_Ahom,
   CR_In_Dogra,
   CR_In_Warang_Citi,
+  CR_In_Nandinagari,
   CR_In_Zanabazar_Square,
   CR_In_Soyombo,
   CR_In_Pau_Cin_Hau,
@@ -24865,10 +25213,12 @@ const CodeRanges[] = {
   CR_In_Masaram_Gondi,
   CR_In_Gunjala_Gondi,
   CR_In_Makasar,
+  CR_In_Tamil_Supplement,
   CR_In_Cuneiform,
   CR_In_Cuneiform_Numbers_and_Punctuation,
   CR_In_Early_Dynastic_Cuneiform,
   CR_In_Egyptian_Hieroglyphs,
+  CR_In_Egyptian_Hieroglyph_Format_Controls,
   CR_In_Anatolian_Hieroglyphs,
   CR_In_Bamum_Supplement,
   CR_In_Mro,
@@ -24881,6 +25231,7 @@ const CodeRanges[] = {
   CR_In_Tangut_Components,
   CR_In_Kana_Supplement,
   CR_In_Kana_Extended_A,
+  CR_In_Small_Kana_Extension,
   CR_In_Nushu,
   CR_In_Duployan,
   CR_In_Shorthand_Format_Controls,
@@ -24893,9 +25244,12 @@ const CodeRanges[] = {
   CR_In_Mathematical_Alphanumeric_Symbols,
   CR_In_Sutton_SignWriting,
   CR_In_Glagolitic_Supplement,
+  CR_In_Nyiakeng_Puachue_Hmong,
+  CR_In_Wancho,
   CR_In_Mende_Kikakui,
   CR_In_Adlam,
   CR_In_Indic_Siyaq_Numbers,
+  CR_In_Ottoman_Siyaq_Numbers,
   CR_In_Arabic_Mathematical_Alphabetic_Symbols,
   CR_In_Mahjong_Tiles,
   CR_In_Domino_Tiles,
@@ -24911,6 +25265,7 @@ const CodeRanges[] = {
   CR_In_Supplemental_Arrows_C,
   CR_In_Supplemental_Symbols_and_Pictographs,
   CR_In_Chess_Symbols,
+  CR_In_Symbols_and_Pictographs_Extended_A,
   CR_In_CJK_Unified_Ideographs_Extension_B,
   CR_In_CJK_Unified_Ideographs_Extension_C,
   CR_In_CJK_Unified_Ideographs_Extension_D,
@@ -24927,12 +25282,12 @@ const CodeRanges[] = {
 #define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)
 
 
-#define TOTAL_KEYWORDS 784
+#define TOTAL_KEYWORDS 801
 #define MIN_WORD_LENGTH 1
 #define MAX_WORD_LENGTH 44
 #define MIN_HASH_VALUE 10
-#define MAX_HASH_VALUE 5516
-/* maximum key range = 5507, duplicates = 0 */
+#define MAX_HASH_VALUE 5809
+/* maximum key range = 5800, duplicates = 0 */
 
 #ifndef GPERF_DOWNCASE
 #define GPERF_DOWNCASE 1
@@ -24991,32 +25346,32 @@ hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517,    0, 1387,  107,  399,   14,
-      1024,  783,  831,    7, 1473,   25,  363,   89,    3,   17,
-      1203,  711,   59,  149,  313,  590, 1257,  334,  172, 1559,
-        22,    2,    1, 5517, 5517, 5517, 5517,    0, 1387,  107,
-       399,   14, 1024,  783,  831,    7, 1473,   25,  363,   89,
-         3,   17, 1203,  711,   59,  149,  313,  590, 1257,  334,
-       172, 1559,   22,    2,    1, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810,    0, 1121,  136,  394,   19,
+       417, 1048,  958,    7,  856,    8,  415,  103,    3,   16,
+      1380, 1068,   56,  181,  326,  631, 1151,  930,  358, 1083,
+         8,    0,    5, 5810, 5810, 5810, 5810,    0, 1121,  136,
+       394,   19,  417, 1048,  958,    7,  856,    8,  415,  103,
+         3,   16, 1380, 1068,   56,  181,  326,  631, 1151,  930,
+       358, 1083,    8,    0,    5, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810
     };
   register unsigned int hval = (unsigned int )len;
 
@@ -25059,1574 +25414,1608 @@ hash (register const char *str, register size_t len)
 struct unicode_prop_name_pool_t
   {
     char unicode_prop_name_pool_str10[sizeof("lana")];
+    char unicode_prop_name_pool_str14[sizeof("z")];
+    char unicode_prop_name_pool_str16[sizeof("yi")];
     char unicode_prop_name_pool_str17[sizeof("lina")];
-    char unicode_prop_name_pool_str18[sizeof("yi")];
-    char unicode_prop_name_pool_str22[sizeof("cn")];
-    char unicode_prop_name_pool_str24[sizeof("z")];
-    char unicode_prop_name_pool_str25[sizeof("mn")];
-    char unicode_prop_name_pool_str27[sizeof("yiii")];
-    char unicode_prop_name_pool_str30[sizeof("ci")];
-    char unicode_prop_name_pool_str31[sizeof("mani")];
-    char unicode_prop_name_pool_str39[sizeof("lo")];
-    char unicode_prop_name_pool_str40[sizeof("lao")];
-    char unicode_prop_name_pool_str41[sizeof("laoo")];
-    char unicode_prop_name_pool_str45[sizeof("miao")];
-    char unicode_prop_name_pool_str46[sizeof("maka")];
-    char unicode_prop_name_pool_str47[sizeof("me")];
-    char unicode_prop_name_pool_str50[sizeof("co")];
-    char unicode_prop_name_pool_str51[sizeof("loe")];
-    char unicode_prop_name_pool_str68[sizeof("inkannada")];
-    char unicode_prop_name_pool_str70[sizeof("innko")];
-    char unicode_prop_name_pool_str71[sizeof("zzzz")];
-    char unicode_prop_name_pool_str73[sizeof("gran")];
-    char unicode_prop_name_pool_str75[sizeof("pi")];
-    char unicode_prop_name_pool_str79[sizeof("lineara")];
-    char unicode_prop_name_pool_str84[sizeof("cari")];
-    char unicode_prop_name_pool_str85[sizeof("carian")];
-    char unicode_prop_name_pool_str89[sizeof("pe")];
-    char unicode_prop_name_pool_str95[sizeof("po")];
-    char unicode_prop_name_pool_str96[sizeof("kana")];
-    char unicode_prop_name_pool_str99[sizeof("mendekikakui")];
-    char unicode_prop_name_pool_str101[sizeof("geor")];
-    char unicode_prop_name_pool_str102[sizeof("meeteimayek")];
-    char unicode_prop_name_pool_str105[sizeof("mark")];
-    char unicode_prop_name_pool_str107[sizeof("m")];
-    char unicode_prop_name_pool_str109[sizeof("grek")];
+    char unicode_prop_name_pool_str24[sizeof("mn")];
+    char unicode_prop_name_pool_str25[sizeof("yiii")];
+    char unicode_prop_name_pool_str27[sizeof("cn")];
+    char unicode_prop_name_pool_str28[sizeof("maka")];
+    char unicode_prop_name_pool_str30[sizeof("mani")];
+    char unicode_prop_name_pool_str33[sizeof("zzzz")];
+    char unicode_prop_name_pool_str34[sizeof("inkannada")];
+    char unicode_prop_name_pool_str35[sizeof("ci")];
+    char unicode_prop_name_pool_str37[sizeof("lo")];
+    char unicode_prop_name_pool_str38[sizeof("lao")];
+    char unicode_prop_name_pool_str39[sizeof("laoo")];
+    char unicode_prop_name_pool_str43[sizeof("miao")];
+    char unicode_prop_name_pool_str51[sizeof("innko")];
+    char unicode_prop_name_pool_str53[sizeof("co")];
+    char unicode_prop_name_pool_str56[sizeof("me")];
+    char unicode_prop_name_pool_str60[sizeof("loe")];
+    char unicode_prop_name_pool_str70[sizeof("gran")];
+    char unicode_prop_name_pool_str72[sizeof("pi")];
+    char unicode_prop_name_pool_str76[sizeof("lineara")];
+    char unicode_prop_name_pool_str84[sizeof("mark")];
+    char unicode_prop_name_pool_str86[sizeof("cari")];
+    char unicode_prop_name_pool_str87[sizeof("carian")];
+    char unicode_prop_name_pool_str90[sizeof("po")];
+    char unicode_prop_name_pool_str91[sizeof("mendekikakui")];
+    char unicode_prop_name_pool_str94[sizeof("grek")];
+    char unicode_prop_name_pool_str96[sizeof("pe")];
+    char unicode_prop_name_pool_str99[sizeof("meeteimayek")];
+    char unicode_prop_name_pool_str101[sizeof("inkharoshthi")];
+    char unicode_prop_name_pool_str102[sizeof("geor")];
+    char unicode_prop_name_pool_str103[sizeof("greek")];
+    char unicode_prop_name_pool_str107[sizeof("mro")];
+    char unicode_prop_name_pool_str108[sizeof("mroo")];
+    char unicode_prop_name_pool_str110[sizeof("kana")];
     char unicode_prop_name_pool_str111[sizeof("mero")];
-    char unicode_prop_name_pool_str113[sizeof("mro")];
-    char unicode_prop_name_pool_str114[sizeof("mroo")];
-    char unicode_prop_name_pool_str120[sizeof("gonm")];
-    char unicode_prop_name_pool_str122[sizeof("c")];
-    char unicode_prop_name_pool_str132[sizeof("cakm")];
-    char unicode_prop_name_pool_str135[sizeof("greek")];
-    char unicode_prop_name_pool_str138[sizeof("inkharoshthi")];
-    char unicode_prop_name_pool_str141[sizeof("mandaic")];
-    char unicode_prop_name_pool_str143[sizeof("inosmanya")];
-    char unicode_prop_name_pool_str144[sizeof("inarmenian")];
-    char unicode_prop_name_pool_str145[sizeof("inmanichaean")];
-    char unicode_prop_name_pool_str149[sizeof("common")];
-    char unicode_prop_name_pool_str156[sizeof("inmro")];
-    char unicode_prop_name_pool_str157[sizeof("inmiao")];
-    char unicode_prop_name_pool_str160[sizeof("qaai")];
-    char unicode_prop_name_pool_str168[sizeof("inchakma")];
-    char unicode_prop_name_pool_str170[sizeof("cans")];
-    char unicode_prop_name_pool_str181[sizeof("connectorpunctuation")];
-    char unicode_prop_name_pool_str183[sizeof("lm")];
-    char unicode_prop_name_pool_str187[sizeof("marc")];
-    char unicode_prop_name_pool_str188[sizeof("inmyanmar")];
-    char unicode_prop_name_pool_str189[sizeof("vai")];
-    char unicode_prop_name_pool_str190[sizeof("vaii")];
-    char unicode_prop_name_pool_str199[sizeof("inideographicsymbolsandpunctuation")];
-    char unicode_prop_name_pool_str201[sizeof("merc")];
-    char unicode_prop_name_pool_str203[sizeof("inavestan")];
-    char unicode_prop_name_pool_str204[sizeof("incuneiformnumbersandpunctuation")];
-    char unicode_prop_name_pool_str210[sizeof("inmakasar")];
-    char unicode_prop_name_pool_str211[sizeof("inrunic")];
-    char unicode_prop_name_pool_str212[sizeof("incarian")];
-    char unicode_prop_name_pool_str217[sizeof("prependedconcatenationmark")];
-    char unicode_prop_name_pool_str219[sizeof("lc")];
-    char unicode_prop_name_pool_str220[sizeof("inipaextensions")];
-    char unicode_prop_name_pool_str222[sizeof("inkhmer")];
-    char unicode_prop_name_pool_str225[sizeof("perm")];
-    char unicode_prop_name_pool_str227[sizeof("combiningmark")];
-    char unicode_prop_name_pool_str229[sizeof("inahom")];
-    char unicode_prop_name_pool_str230[sizeof("cc")];
-    char unicode_prop_name_pool_str232[sizeof("incherokee")];
-    char unicode_prop_name_pool_str233[sizeof("mc")];
-    char unicode_prop_name_pool_str245[sizeof("insharada")];
-    char unicode_prop_name_pool_str251[sizeof("masaramgondi")];
-    char unicode_prop_name_pool_str252[sizeof("incuneiform")];
-    char unicode_prop_name_pool_str257[sizeof("makasar")];
-    char unicode_prop_name_pool_str260[sizeof("qaac")];
-    char unicode_prop_name_pool_str261[sizeof("inarrows")];
-    char unicode_prop_name_pool_str262[sizeof("armn")];
-    char unicode_prop_name_pool_str265[sizeof("lineseparator")];
-    char unicode_prop_name_pool_str266[sizeof("armi")];
-    char unicode_prop_name_pool_str275[sizeof("pc")];
-    char unicode_prop_name_pool_str276[sizeof("armenian")];
-    char unicode_prop_name_pool_str280[sizeof("insamaritan")];
-    char unicode_prop_name_pool_str290[sizeof("inmasaramgondi")];
-    char unicode_prop_name_pool_str292[sizeof("inzanabazarsquare")];
-    char unicode_prop_name_pool_str293[sizeof("qmark")];
-    char unicode_prop_name_pool_str295[sizeof("inmarchen")];
-    char unicode_prop_name_pool_str301[sizeof("zs")];
-    char unicode_prop_name_pool_str314[sizeof("cs")];
-    char unicode_prop_name_pool_str318[sizeof("incyrillic")];
-    char unicode_prop_name_pool_str319[sizeof("incham")];
-    char unicode_prop_name_pool_str323[sizeof("latn")];
-    char unicode_prop_name_pool_str326[sizeof("inscriptionalparthian")];
-    char unicode_prop_name_pool_str327[sizeof("latin")];
-    char unicode_prop_name_pool_str329[sizeof("ri")];
-    char unicode_prop_name_pool_str336[sizeof("inkhmersymbols")];
-    char unicode_prop_name_pool_str347[sizeof("pcm")];
-    char unicode_prop_name_pool_str349[sizeof("inthaana")];
-    char unicode_prop_name_pool_str355[sizeof("mtei")];
-    char unicode_prop_name_pool_str358[sizeof("insyriac")];
-    char unicode_prop_name_pool_str359[sizeof("ps")];
-    char unicode_prop_name_pool_str361[sizeof("inthai")];
-    char unicode_prop_name_pool_str367[sizeof("l")];
-    char unicode_prop_name_pool_str371[sizeof("innewa")];
-    char unicode_prop_name_pool_str376[sizeof("inkatakana")];
-    char unicode_prop_name_pool_str382[sizeof("ascii")];
-    char unicode_prop_name_pool_str383[sizeof("initialpunctuation")];
-    char unicode_prop_name_pool_str388[sizeof("inkaithi")];
-    char unicode_prop_name_pool_str393[sizeof("arabic")];
-    char unicode_prop_name_pool_str405[sizeof("inideographicdescriptioncharacters")];
-    char unicode_prop_name_pool_str417[sizeof("inlineara")];
-    char unicode_prop_name_pool_str423[sizeof("mand")];
-    char unicode_prop_name_pool_str429[sizeof("mongolian")];
-    char unicode_prop_name_pool_str430[sizeof("inlao")];
-    char unicode_prop_name_pool_str435[sizeof("katakana")];
-    char unicode_prop_name_pool_str437[sizeof("mend")];
-    char unicode_prop_name_pool_str439[sizeof("intakri")];
-    char unicode_prop_name_pool_str441[sizeof("inruminumeralsymbols")];
-    char unicode_prop_name_pool_str442[sizeof("prti")];
-    char unicode_prop_name_pool_str444[sizeof("modi")];
-    char unicode_prop_name_pool_str447[sizeof("inwarangciti")];
-    char unicode_prop_name_pool_str453[sizeof("incjkcompatibilityforms")];
-    char unicode_prop_name_pool_str457[sizeof("inspecials")];
-    char unicode_prop_name_pool_str458[sizeof("incjkcompatibilityideographs")];
-    char unicode_prop_name_pool_str459[sizeof("ideo")];
-    char unicode_prop_name_pool_str462[sizeof("privateuse")];
-    char unicode_prop_name_pool_str463[sizeof("kali")];
-    char unicode_prop_name_pool_str465[sizeof("inmyanmarextendeda")];
-    char unicode_prop_name_pool_str468[sizeof("letter")];
-    char unicode_prop_name_pool_str469[sizeof("brai")];
-    char unicode_prop_name_pool_str470[sizeof("inkanaextendeda")];
-    char unicode_prop_name_pool_str472[sizeof("vs")];
-    char unicode_prop_name_pool_str473[sizeof("xidcontinue")];
-    char unicode_prop_name_pool_str477[sizeof("lower")];
-    char unicode_prop_name_pool_str478[sizeof("inchesssymbols")];
-    char unicode_prop_name_pool_str480[sizeof("control")];
-    char unicode_prop_name_pool_str487[sizeof("inadlam")];
-    char unicode_prop_name_pool_str488[sizeof("grlink")];
-    char unicode_prop_name_pool_str495[sizeof("knda")];
-    char unicode_prop_name_pool_str496[sizeof("inmeeteimayek")];
-    char unicode_prop_name_pool_str498[sizeof("kannada")];
-    char unicode_prop_name_pool_str511[sizeof("inmiscellaneousmathematicalsymbolsa")];
-    char unicode_prop_name_pool_str515[sizeof("palm")];
-    char unicode_prop_name_pool_str516[sizeof("inlycian")];
-    char unicode_prop_name_pool_str517[sizeof("intransportandmapsymbols")];
-    char unicode_prop_name_pool_str526[sizeof("inoldnortharabian")];
-    char unicode_prop_name_pool_str532[sizeof("inemoticons")];
-    char unicode_prop_name_pool_str533[sizeof("letternumber")];
-    char unicode_prop_name_pool_str536[sizeof("inmodi")];
-    char unicode_prop_name_pool_str539[sizeof("xidc")];
-    char unicode_prop_name_pool_str543[sizeof("lowercase")];
-    char unicode_prop_name_pool_str545[sizeof("inancientsymbols")];
-    char unicode_prop_name_pool_str548[sizeof("cwcm")];
-    char unicode_prop_name_pool_str553[sizeof("inmedefaidrin")];
-    char unicode_prop_name_pool_str556[sizeof("psalterpahlavi")];
-    char unicode_prop_name_pool_str564[sizeof("gothic")];
-    char unicode_prop_name_pool_str565[sizeof("inmendekikakui")];
-    char unicode_prop_name_pool_str567[sizeof("brahmi")];
-    char unicode_prop_name_pool_str569[sizeof("inolditalic")];
-    char unicode_prop_name_pool_str580[sizeof("inmalayalam")];
-    char unicode_prop_name_pool_str581[sizeof("xids")];
-    char unicode_prop_name_pool_str582[sizeof("incommonindicnumberforms")];
-    char unicode_prop_name_pool_str588[sizeof("meroiticcursive")];
-    char unicode_prop_name_pool_str589[sizeof("inlinearbideograms")];
-    char unicode_prop_name_pool_str597[sizeof("patternwhitespace")];
-    char unicode_prop_name_pool_str604[sizeof("insundanese")];
-    char unicode_prop_name_pool_str606[sizeof("joinc")];
-    char unicode_prop_name_pool_str611[sizeof("inoldsogdian")];
-    char unicode_prop_name_pool_str619[sizeof("incjkstrokes")];
-    char unicode_prop_name_pool_str626[sizeof("so")];
-    char unicode_prop_name_pool_str630[sizeof("patternsyntax")];
-    char unicode_prop_name_pool_str631[sizeof("lt")];
-    char unicode_prop_name_pool_str632[sizeof("incjkcompatibilityideographssupplement")];
-    char unicode_prop_name_pool_str635[sizeof("inmandaic")];
-    char unicode_prop_name_pool_str636[sizeof("insylotinagri")];
-    char unicode_prop_name_pool_str641[sizeof("idc")];
-    char unicode_prop_name_pool_str642[sizeof("sk")];
-    char unicode_prop_name_pool_str656[sizeof("alnum")];
-    char unicode_prop_name_pool_str670[sizeof("sora")];
-    char unicode_prop_name_pool_str671[sizeof("bamum")];
-    char unicode_prop_name_pool_str672[sizeof("inoldsoutharabian")];
-    char unicode_prop_name_pool_str675[sizeof("patws")];
-    char unicode_prop_name_pool_str676[sizeof("inmusicalsymbols")];
-    char unicode_prop_name_pool_str690[sizeof("idsbinaryoperator")];
-    char unicode_prop_name_pool_str699[sizeof("indominotiles")];
-    char unicode_prop_name_pool_str701[sizeof("bass")];
-    char unicode_prop_name_pool_str703[sizeof("innewtailue")];
-    char unicode_prop_name_pool_str705[sizeof("ital")];
-    char unicode_prop_name_pool_str707[sizeof("inmiscellaneoussymbols")];
-    char unicode_prop_name_pool_str710[sizeof("inopticalcharacterrecognition")];
-    char unicode_prop_name_pool_str711[sizeof("grext")];
-    char unicode_prop_name_pool_str712[sizeof("inkanasupplement")];
-    char unicode_prop_name_pool_str716[sizeof("inmiscellaneoussymbolsandarrows")];
-    char unicode_prop_name_pool_str721[sizeof("inmiscellaneoussymbolsandpictographs")];
-    char unicode_prop_name_pool_str723[sizeof("unknown")];
-    char unicode_prop_name_pool_str724[sizeof("inmodifiertoneletters")];
-    char unicode_prop_name_pool_str725[sizeof("ids")];
-    char unicode_prop_name_pool_str729[sizeof("zl")];
-    char unicode_prop_name_pool_str730[sizeof("inlatinextendeda")];
-    char unicode_prop_name_pool_str731[sizeof("ll")];
-    char unicode_prop_name_pool_str732[sizeof("intaile")];
-    char unicode_prop_name_pool_str738[sizeof("incontrolpictures")];
-    char unicode_prop_name_pool_str740[sizeof("s")];
-    char unicode_prop_name_pool_str741[sizeof("batk")];
-    char unicode_prop_name_pool_str742[sizeof("samr")];
-    char unicode_prop_name_pool_str753[sizeof("lisu")];
-    char unicode_prop_name_pool_str756[sizeof("print")];
-    char unicode_prop_name_pool_str757[sizeof("samaritan")];
-    char unicode_prop_name_pool_str758[sizeof("inlatinextendede")];
-    char unicode_prop_name_pool_str759[sizeof("intaitham")];
-    char unicode_prop_name_pool_str760[sizeof("pauc")];
-    char unicode_prop_name_pool_str767[sizeof("batak")];
-    char unicode_prop_name_pool_str770[sizeof("sm")];
-    char unicode_prop_name_pool_str773[sizeof("bali")];
-    char unicode_prop_name_pool_str778[sizeof("inancientgreekmusicalnotation")];
-    char unicode_prop_name_pool_str779[sizeof("uideo")];
-    char unicode_prop_name_pool_str781[sizeof("intaixuanjingsymbols")];
-    char unicode_prop_name_pool_str782[sizeof("oriya")];
-    char unicode_prop_name_pool_str791[sizeof("incyrillicextendeda")];
-    char unicode_prop_name_pool_str793[sizeof("bengali")];
-    char unicode_prop_name_pool_str794[sizeof("inugaritic")];
-    char unicode_prop_name_pool_str801[sizeof("balinese")];
-    char unicode_prop_name_pool_str806[sizeof("sc")];
-    char unicode_prop_name_pool_str807[sizeof("intamil")];
-    char unicode_prop_name_pool_str808[sizeof("inlydian")];
-    char unicode_prop_name_pool_str809[sizeof("inmultani")];
-    char unicode_prop_name_pool_str814[sizeof("gong")];
-    char unicode_prop_name_pool_str817[sizeof("blank")];
-    char unicode_prop_name_pool_str823[sizeof("ingrantha")];
-    char unicode_prop_name_pool_str824[sizeof("mong")];
-    char unicode_prop_name_pool_str833[sizeof("inearlydynasticcuneiform")];
-    char unicode_prop_name_pool_str838[sizeof("insaurashtra")];
-    char unicode_prop_name_pool_str839[sizeof("georgian")];
-    char unicode_prop_name_pool_str846[sizeof("zinh")];
-    char unicode_prop_name_pool_str849[sizeof("inosage")];
-    char unicode_prop_name_pool_str854[sizeof("ingeneralpunctuation")];
-    char unicode_prop_name_pool_str857[sizeof("incaucasianalbanian")];
-    char unicode_prop_name_pool_str859[sizeof("pd")];
-    char unicode_prop_name_pool_str866[sizeof("canadianaboriginal")];
-    char unicode_prop_name_pool_str867[sizeof("glagolitic")];
-    char unicode_prop_name_pool_str870[sizeof("inspacingmodifierletters")];
-    char unicode_prop_name_pool_str871[sizeof("idcontinue")];
-    char unicode_prop_name_pool_str875[sizeof("inoldturkic")];
-    char unicode_prop_name_pool_str884[sizeof("plrd")];
-    char unicode_prop_name_pool_str885[sizeof("joincontrol")];
-    char unicode_prop_name_pool_str890[sizeof("idst")];
-    char unicode_prop_name_pool_str892[sizeof("inhanifirohingya")];
-    char unicode_prop_name_pool_str893[sizeof("osage")];
-    char unicode_prop_name_pool_str898[sizeof("incyrillicextendedc")];
-    char unicode_prop_name_pool_str900[sizeof("ingeorgian")];
-    char unicode_prop_name_pool_str902[sizeof("unassigned")];
-    char unicode_prop_name_pool_str907[sizeof("lowercaseletter")];
-    char unicode_prop_name_pool_str908[sizeof("emoji")];
-    char unicode_prop_name_pool_str912[sizeof("indeseret")];
-    char unicode_prop_name_pool_str916[sizeof("inancientgreeknumbers")];
-    char unicode_prop_name_pool_str917[sizeof("inmongolian")];
-    char unicode_prop_name_pool_str922[sizeof("cher")];
-    char unicode_prop_name_pool_str923[sizeof("cherokee")];
-    char unicode_prop_name_pool_str928[sizeof("inhiragana")];
-    char unicode_prop_name_pool_str930[sizeof("phoenician")];
-    char unicode_prop_name_pool_str931[sizeof("marchen")];
-    char unicode_prop_name_pool_str937[sizeof("xsux")];
-    char unicode_prop_name_pool_str938[sizeof("cham")];
-    char unicode_prop_name_pool_str940[sizeof("chakma")];
-    char unicode_prop_name_pool_str943[sizeof("inmeeteimayekextensions")];
-    char unicode_prop_name_pool_str944[sizeof("inlatinextendedc")];
-    char unicode_prop_name_pool_str947[sizeof("kaithi")];
-    char unicode_prop_name_pool_str951[sizeof("graphemebase")];
-    char unicode_prop_name_pool_str952[sizeof("idstart")];
-    char unicode_prop_name_pool_str953[sizeof("osma")];
-    char unicode_prop_name_pool_str962[sizeof("adlm")];
-    char unicode_prop_name_pool_str965[sizeof("inmahajani")];
-    char unicode_prop_name_pool_str966[sizeof("cased")];
-    char unicode_prop_name_pool_str969[sizeof("runr")];
-    char unicode_prop_name_pool_str970[sizeof("sinhala")];
-    char unicode_prop_name_pool_str971[sizeof("manichaean")];
-    char unicode_prop_name_pool_str972[sizeof("inogham")];
-    char unicode_prop_name_pool_str973[sizeof("graphemelink")];
-    char unicode_prop_name_pool_str976[sizeof("ingurmukhi")];
-    char unicode_prop_name_pool_str977[sizeof("cwt")];
-    char unicode_prop_name_pool_str982[sizeof("khojki")];
-    char unicode_prop_name_pool_str983[sizeof("khar")];
-    char unicode_prop_name_pool_str987[sizeof("multani")];
-    char unicode_prop_name_pool_str989[sizeof("gunjalagondi")];
-    char unicode_prop_name_pool_str995[sizeof("casedletter")];
-    char unicode_prop_name_pool_str997[sizeof("inethiopic")];
-    char unicode_prop_name_pool_str999[sizeof("inolchiki")];
-    char unicode_prop_name_pool_str1000[sizeof("variationselector")];
-    char unicode_prop_name_pool_str1003[sizeof("sind")];
-    char unicode_prop_name_pool_str1004[sizeof("incountingrodnumerals")];
-    char unicode_prop_name_pool_str1007[sizeof("logicalorderexception")];
-    char unicode_prop_name_pool_str1020[sizeof("insinhala")];
-    char unicode_prop_name_pool_str1024[sizeof("bidic")];
-    char unicode_prop_name_pool_str1034[sizeof("dia")];
-    char unicode_prop_name_pool_str1035[sizeof("insorasompeng")];
-    char unicode_prop_name_pool_str1036[sizeof("anatolianhieroglyphs")];
-    char unicode_prop_name_pool_str1038[sizeof("inlowsurrogates")];
-    char unicode_prop_name_pool_str1040[sizeof("di")];
-    char unicode_prop_name_pool_str1048[sizeof("ahom")];
-    char unicode_prop_name_pool_str1050[sizeof("inenclosedalphanumerics")];
-    char unicode_prop_name_pool_str1052[sizeof("adlam")];
-    char unicode_prop_name_pool_str1060[sizeof("inkhudawadi")];
-    char unicode_prop_name_pool_str1061[sizeof("cntrl")];
-    char unicode_prop_name_pool_str1062[sizeof("xidstart")];
-    char unicode_prop_name_pool_str1067[sizeof("xdigit")];
-    char unicode_prop_name_pool_str1069[sizeof("phnx")];
-    char unicode_prop_name_pool_str1071[sizeof("emojimodifier")];
-    char unicode_prop_name_pool_str1072[sizeof("khmr")];
-    char unicode_prop_name_pool_str1073[sizeof("insiddham")];
-    char unicode_prop_name_pool_str1077[sizeof("cwl")];
-    char unicode_prop_name_pool_str1082[sizeof("bamu")];
-    char unicode_prop_name_pool_str1086[sizeof("ingreekandcoptic")];
-    char unicode_prop_name_pool_str1087[sizeof("inmiscellaneoustechnical")];
-    char unicode_prop_name_pool_str1100[sizeof("sterm")];
-    char unicode_prop_name_pool_str1101[sizeof("inscriptionalpahlavi")];
-    char unicode_prop_name_pool_str1102[sizeof("inlatinextendedadditional")];
-    char unicode_prop_name_pool_str1103[sizeof("kharoshthi")];
-    char unicode_prop_name_pool_str1125[sizeof("runic")];
-    char unicode_prop_name_pool_str1127[sizeof("odi")];
-    char unicode_prop_name_pool_str1128[sizeof("ahex")];
-    char unicode_prop_name_pool_str1132[sizeof("khmer")];
-    char unicode_prop_name_pool_str1138[sizeof("incyrillicsupplement")];
-    char unicode_prop_name_pool_str1145[sizeof("incherokeesupplement")];
-    char unicode_prop_name_pool_str1153[sizeof("inmeroitichieroglyphs")];
-    char unicode_prop_name_pool_str1156[sizeof("enclosingmark")];
-    char unicode_prop_name_pool_str1157[sizeof("glag")];
-    char unicode_prop_name_pool_str1160[sizeof("inkangxiradicals")];
-    char unicode_prop_name_pool_str1165[sizeof("math")];
-    char unicode_prop_name_pool_str1166[sizeof("quotationmark")];
-    char unicode_prop_name_pool_str1172[sizeof("goth")];
-    char unicode_prop_name_pool_str1179[sizeof("emojimodifierbase")];
-    char unicode_prop_name_pool_str1180[sizeof("ugar")];
-    char unicode_prop_name_pool_str1185[sizeof("lu")];
-    char unicode_prop_name_pool_str1189[sizeof("radical")];
-    char unicode_prop_name_pool_str1198[sizeof("incjkunifiedideographsextensiona")];
-    char unicode_prop_name_pool_str1203[sizeof("beng")];
-    char unicode_prop_name_pool_str1205[sizeof("braille")];
-    char unicode_prop_name_pool_str1207[sizeof("n")];
-    char unicode_prop_name_pool_str1209[sizeof("sundanese")];
-    char unicode_prop_name_pool_str1210[sizeof("olck")];
-    char unicode_prop_name_pool_str1212[sizeof("incjkunifiedideographsextensione")];
-    char unicode_prop_name_pool_str1213[sizeof("diacritic")];
-    char unicode_prop_name_pool_str1217[sizeof("grantha")];
-    char unicode_prop_name_pool_str1223[sizeof("inenclosedalphanumericsupplement")];
-    char unicode_prop_name_pool_str1227[sizeof("olchiki")];
-    char unicode_prop_name_pool_str1228[sizeof("oidc")];
-    char unicode_prop_name_pool_str1229[sizeof("olower")];
-    char unicode_prop_name_pool_str1230[sizeof("regionalindicator")];
-    char unicode_prop_name_pool_str1239[sizeof("no")];
-    char unicode_prop_name_pool_str1240[sizeof("intirhuta")];
-    char unicode_prop_name_pool_str1242[sizeof("inhatran")];
-    char unicode_prop_name_pool_str1243[sizeof("saur")];
-    char unicode_prop_name_pool_str1244[sizeof("kthi")];
-    char unicode_prop_name_pool_str1246[sizeof("ingeometricshapes")];
-    char unicode_prop_name_pool_str1250[sizeof("guru")];
-    char unicode_prop_name_pool_str1256[sizeof("ingreekextended")];
-    char unicode_prop_name_pool_str1258[sizeof("paucinhau")];
-    char unicode_prop_name_pool_str1260[sizeof("xpeo")];
-    char unicode_prop_name_pool_str1263[sizeof("p")];
-    char unicode_prop_name_pool_str1264[sizeof("phli")];
-    char unicode_prop_name_pool_str1265[sizeof("nko")];
-    char unicode_prop_name_pool_str1266[sizeof("nkoo")];
-    char unicode_prop_name_pool_str1270[sizeof("oids")];
-    char unicode_prop_name_pool_str1276[sizeof("indogra")];
-    char unicode_prop_name_pool_str1280[sizeof("inphoenician")];
-    char unicode_prop_name_pool_str1283[sizeof("punct")];
-    char unicode_prop_name_pool_str1284[sizeof("limbu")];
-    char unicode_prop_name_pool_str1286[sizeof("gurmukhi")];
-    char unicode_prop_name_pool_str1287[sizeof("mult")];
-    char unicode_prop_name_pool_str1293[sizeof("brah")];
-    char unicode_prop_name_pool_str1297[sizeof("taile")];
-    char unicode_prop_name_pool_str1299[sizeof("inoldhungarian")];
-    char unicode_prop_name_pool_str1301[sizeof("takri")];
-    char unicode_prop_name_pool_str1303[sizeof("bidicontrol")];
-    char unicode_prop_name_pool_str1304[sizeof("invai")];
-    char unicode_prop_name_pool_str1305[sizeof("incjkunifiedideographsextensionc")];
-    char unicode_prop_name_pool_str1314[sizeof("inenclosedideographicsupplement")];
-    char unicode_prop_name_pool_str1320[sizeof("decimalnumber")];
-    char unicode_prop_name_pool_str1331[sizeof("lepc")];
-    char unicode_prop_name_pool_str1333[sizeof("inherited")];
-    char unicode_prop_name_pool_str1337[sizeof("incjkunifiedideographs")];
-    char unicode_prop_name_pool_str1338[sizeof("graphemeextend")];
-    char unicode_prop_name_pool_str1339[sizeof("saurashtra")];
-    char unicode_prop_name_pool_str1343[sizeof("caseignorable")];
-    char unicode_prop_name_pool_str1344[sizeof("emojicomponent")];
-    char unicode_prop_name_pool_str1345[sizeof("takr")];
-    char unicode_prop_name_pool_str1360[sizeof("inanatolianhieroglyphs")];
-    char unicode_prop_name_pool_str1363[sizeof("inornamentaldingbats")];
-    char unicode_prop_name_pool_str1366[sizeof("inphaistosdisc")];
-    char unicode_prop_name_pool_str1371[sizeof("insogdian")];
-    char unicode_prop_name_pool_str1372[sizeof("indingbats")];
-    char unicode_prop_name_pool_str1390[sizeof("sd")];
-    char unicode_prop_name_pool_str1395[sizeof("zanb")];
-    char unicode_prop_name_pool_str1397[sizeof("insinhalaarchaicnumbers")];
-    char unicode_prop_name_pool_str1398[sizeof("ideographic")];
-    char unicode_prop_name_pool_str1399[sizeof("sidd")];
-    char unicode_prop_name_pool_str1404[sizeof("linb")];
-    char unicode_prop_name_pool_str1407[sizeof("sogdian")];
-    char unicode_prop_name_pool_str1408[sizeof("bhks")];
-    char unicode_prop_name_pool_str1411[sizeof("sogo")];
-    char unicode_prop_name_pool_str1420[sizeof("bhaiksuki")];
-    char unicode_prop_name_pool_str1423[sizeof("term")];
-    char unicode_prop_name_pool_str1425[sizeof("insundanesesupplement")];
-    char unicode_prop_name_pool_str1428[sizeof("intags")];
-    char unicode_prop_name_pool_str1432[sizeof("innabataean")];
-    char unicode_prop_name_pool_str1435[sizeof("sinh")];
-    char unicode_prop_name_pool_str1438[sizeof("shavian")];
-    char unicode_prop_name_pool_str1440[sizeof("inbhaiksuki")];
-    char unicode_prop_name_pool_str1441[sizeof("inelbasan")];
-    char unicode_prop_name_pool_str1442[sizeof("inimperialaramaic")];
-    char unicode_prop_name_pool_str1446[sizeof("inshavian")];
-    char unicode_prop_name_pool_str1448[sizeof("intangut")];
-    char unicode_prop_name_pool_str1451[sizeof("inshorthandformatcontrols")];
-    char unicode_prop_name_pool_str1454[sizeof("inkanbun")];
-    char unicode_prop_name_pool_str1455[sizeof("sentenceterminal")];
-    char unicode_prop_name_pool_str1458[sizeof("medf")];
-    char unicode_prop_name_pool_str1461[sizeof("coptic")];
-    char unicode_prop_name_pool_str1466[sizeof("linearb")];
-    char unicode_prop_name_pool_str1468[sizeof("medefaidrin")];
-    char unicode_prop_name_pool_str1470[sizeof("inethiopicextendeda")];
-    char unicode_prop_name_pool_str1478[sizeof("inhanunoo")];
-    char unicode_prop_name_pool_str1482[sizeof("han")];
-    char unicode_prop_name_pool_str1483[sizeof("cwcf")];
-    char unicode_prop_name_pool_str1487[sizeof("hani")];
-    char unicode_prop_name_pool_str1490[sizeof("limb")];
-    char unicode_prop_name_pool_str1497[sizeof("hano")];
-    char unicode_prop_name_pool_str1504[sizeof("ingeometricshapesextended")];
-    char unicode_prop_name_pool_str1520[sizeof("hanunoo")];
-    char unicode_prop_name_pool_str1528[sizeof("inlatinextendedd")];
-    char unicode_prop_name_pool_str1530[sizeof("inarabic")];
-    char unicode_prop_name_pool_str1531[sizeof("cwu")];
-    char unicode_prop_name_pool_str1534[sizeof("asciihexdigit")];
-    char unicode_prop_name_pool_str1537[sizeof("ininscriptionalparthian")];
-    char unicode_prop_name_pool_str1539[sizeof("format")];
-    char unicode_prop_name_pool_str1540[sizeof("ininscriptionalpahlavi")];
-    char unicode_prop_name_pool_str1543[sizeof("hira")];
-    char unicode_prop_name_pool_str1549[sizeof("dsrt")];
-    char unicode_prop_name_pool_str1551[sizeof("copt")];
-    char unicode_prop_name_pool_str1552[sizeof("ugaritic")];
-    char unicode_prop_name_pool_str1555[sizeof("newa")];
-    char unicode_prop_name_pool_str1557[sizeof("arab")];
-    char unicode_prop_name_pool_str1558[sizeof("inkhojki")];
-    char unicode_prop_name_pool_str1559[sizeof("oldpersian")];
-    char unicode_prop_name_pool_str1569[sizeof("punctuation")];
-    char unicode_prop_name_pool_str1580[sizeof("deseret")];
-    char unicode_prop_name_pool_str1581[sizeof("newtailue")];
-    char unicode_prop_name_pool_str1582[sizeof("newline")];
-    char unicode_prop_name_pool_str1584[sizeof("ext")];
-    char unicode_prop_name_pool_str1586[sizeof("sund")];
-    char unicode_prop_name_pool_str1587[sizeof("ogam")];
-    char unicode_prop_name_pool_str1589[sizeof("inbasiclatin")];
-    char unicode_prop_name_pool_str1590[sizeof("inarabicpresentationformsa")];
-    char unicode_prop_name_pool_str1593[sizeof("cprt")];
-    char unicode_prop_name_pool_str1594[sizeof("imperialaramaic")];
-    char unicode_prop_name_pool_str1597[sizeof("incjkunifiedideographsextensiond")];
-    char unicode_prop_name_pool_str1598[sizeof("assigned")];
-    char unicode_prop_name_pool_str1605[sizeof("taiviet")];
-    char unicode_prop_name_pool_str1608[sizeof("innushu")];
-    char unicode_prop_name_pool_str1618[sizeof("inoriya")];
-    char unicode_prop_name_pool_str1622[sizeof("wara")];
-    char unicode_prop_name_pool_str1624[sizeof("java")];
-    char unicode_prop_name_pool_str1626[sizeof("sorasompeng")];
-    char unicode_prop_name_pool_str1628[sizeof("inkayahli")];
-    char unicode_prop_name_pool_str1630[sizeof("orkh")];
-    char unicode_prop_name_pool_str1633[sizeof("closepunctuation")];
-    char unicode_prop_name_pool_str1636[sizeof("grbase")];
-    char unicode_prop_name_pool_str1638[sizeof("tale")];
-    char unicode_prop_name_pool_str1640[sizeof("bopo")];
-    char unicode_prop_name_pool_str1659[sizeof("javanese")];
-    char unicode_prop_name_pool_str1661[sizeof("osge")];
-    char unicode_prop_name_pool_str1662[sizeof("oldpermic")];
-    char unicode_prop_name_pool_str1665[sizeof("inoldpersian")];
-    char unicode_prop_name_pool_str1677[sizeof("phag")];
-    char unicode_prop_name_pool_str1678[sizeof("alpha")];
-    char unicode_prop_name_pool_str1680[sizeof("lyci")];
-    char unicode_prop_name_pool_str1681[sizeof("lycian")];
-    char unicode_prop_name_pool_str1687[sizeof("inkatakanaphoneticextensions")];
-    char unicode_prop_name_pool_str1690[sizeof("incjksymbolsandpunctuation")];
-    char unicode_prop_name_pool_str1691[sizeof("inhanguljamo")];
-    char unicode_prop_name_pool_str1697[sizeof("inhanguljamoextendeda")];
-    char unicode_prop_name_pool_str1701[sizeof("avestan")];
-    char unicode_prop_name_pool_str1708[sizeof("inpalmyrene")];
-    char unicode_prop_name_pool_str1709[sizeof("inlepcha")];
-    char unicode_prop_name_pool_str1710[sizeof("indevanagari")];
-    char unicode_prop_name_pool_str1713[sizeof("taml")];
-    char unicode_prop_name_pool_str1714[sizeof("sgnw")];
-    char unicode_prop_name_pool_str1717[sizeof("inblockelements")];
-    char unicode_prop_name_pool_str1726[sizeof("inlisu")];
-    char unicode_prop_name_pool_str1728[sizeof("mymr")];
-    char unicode_prop_name_pool_str1731[sizeof("myanmar")];
-    char unicode_prop_name_pool_str1733[sizeof("graph")];
-    char unicode_prop_name_pool_str1736[sizeof("cuneiform")];
-    char unicode_prop_name_pool_str1737[sizeof("extender")];
-    char unicode_prop_name_pool_str1741[sizeof("inphoneticextensions")];
-    char unicode_prop_name_pool_str1749[sizeof("inmongoliansupplement")];
-    char unicode_prop_name_pool_str1750[sizeof("bopomofo")];
-    char unicode_prop_name_pool_str1754[sizeof("intibetan")];
-    char unicode_prop_name_pool_str1758[sizeof("innumberforms")];
-    char unicode_prop_name_pool_str1759[sizeof("shaw")];
-    char unicode_prop_name_pool_str1760[sizeof("inbatak")];
-    char unicode_prop_name_pool_str1765[sizeof("inoldpermic")];
-    char unicode_prop_name_pool_str1766[sizeof("incoptic")];
-    char unicode_prop_name_pool_str1776[sizeof("invariationselectors")];
-    char unicode_prop_name_pool_str1779[sizeof("insoyombo")];
-    char unicode_prop_name_pool_str1782[sizeof("terminalpunctuation")];
-    char unicode_prop_name_pool_str1783[sizeof("bugi")];
-    char unicode_prop_name_pool_str1791[sizeof("insyriacsupplement")];
-    char unicode_prop_name_pool_str1793[sizeof("sogd")];
-    char unicode_prop_name_pool_str1798[sizeof("hatran")];
-    char unicode_prop_name_pool_str1807[sizeof("inbyzantinemusicalsymbols")];
-    char unicode_prop_name_pool_str1809[sizeof("inbalinese")];
-    char unicode_prop_name_pool_str1811[sizeof("buginese")];
-    char unicode_prop_name_pool_str1815[sizeof("innoblock")];
-    char unicode_prop_name_pool_str1817[sizeof("inethiopicsupplement")];
-    char unicode_prop_name_pool_str1820[sizeof("inglagolitic")];
-    char unicode_prop_name_pool_str1824[sizeof("ingeorgiansupplement")];
-    char unicode_prop_name_pool_str1826[sizeof("space")];
-    char unicode_prop_name_pool_str1827[sizeof("sharada")];
-    char unicode_prop_name_pool_str1829[sizeof("dogra")];
-    char unicode_prop_name_pool_str1830[sizeof("avst")];
-    char unicode_prop_name_pool_str1834[sizeof("hex")];
-    char unicode_prop_name_pool_str1837[sizeof("inunifiedcanadianaboriginalsyllabics")];
-    char unicode_prop_name_pool_str1838[sizeof("inverticalforms")];
-    char unicode_prop_name_pool_str1839[sizeof("spacingmark")];
-    char unicode_prop_name_pool_str1845[sizeof("inarabicextendeda")];
-    char unicode_prop_name_pool_str1849[sizeof("hatr")];
-    char unicode_prop_name_pool_str1850[sizeof("modifierletter")];
-    char unicode_prop_name_pool_str1852[sizeof("inmyanmarextendedb")];
-    char unicode_prop_name_pool_str1858[sizeof("incjkcompatibility")];
-    char unicode_prop_name_pool_str1860[sizeof("khudawadi")];
-    char unicode_prop_name_pool_str1863[sizeof("invedicextensions")];
-    char unicode_prop_name_pool_str1868[sizeof("inethiopicextended")];
-    char unicode_prop_name_pool_str1875[sizeof("ingeorgianextended")];
-    char unicode_prop_name_pool_str1883[sizeof("shrd")];
-    char unicode_prop_name_pool_str1887[sizeof("dogr")];
-    char unicode_prop_name_pool_str1892[sizeof("intelugu")];
-    char unicode_prop_name_pool_str1898[sizeof("inmiscellaneousmathematicalsymbolsb")];
-    char unicode_prop_name_pool_str1899[sizeof("inmayannumerals")];
-    char unicode_prop_name_pool_str1902[sizeof("olditalic")];
-    char unicode_prop_name_pool_str1904[sizeof("inbraillepatterns")];
-    char unicode_prop_name_pool_str1911[sizeof("oalpha")];
-    char unicode_prop_name_pool_str1913[sizeof("inmathematicalalphanumericsymbols")];
-    char unicode_prop_name_pool_str1915[sizeof("inphoneticextensionssupplement")];
-    char unicode_prop_name_pool_str1916[sizeof("intagalog")];
-    char unicode_prop_name_pool_str1921[sizeof("insuttonsignwriting")];
-    char unicode_prop_name_pool_str1923[sizeof("siddham")];
-    char unicode_prop_name_pool_str1927[sizeof("intaiviet")];
-    char unicode_prop_name_pool_str1931[sizeof("nl")];
-    char unicode_prop_name_pool_str1934[sizeof("separator")];
-    char unicode_prop_name_pool_str1938[sizeof("ethi")];
-    char unicode_prop_name_pool_str1943[sizeof("patsyn")];
-    char unicode_prop_name_pool_str1948[sizeof("rohg")];
-    char unicode_prop_name_pool_str1950[sizeof("invariationselectorssupplement")];
-    char unicode_prop_name_pool_str1956[sizeof("inyiradicals")];
-    char unicode_prop_name_pool_str1957[sizeof("otheridcontinue")];
-    char unicode_prop_name_pool_str1964[sizeof("idsb")];
-    char unicode_prop_name_pool_str1965[sizeof("insmallformvariants")];
-    char unicode_prop_name_pool_str1972[sizeof("lydi")];
-    char unicode_prop_name_pool_str1973[sizeof("lydian")];
-    char unicode_prop_name_pool_str1978[sizeof("other")];
-    char unicode_prop_name_pool_str1987[sizeof("othernumber")];
-    char unicode_prop_name_pool_str1999[sizeof("cyrl")];
-    char unicode_prop_name_pool_str2003[sizeof("nd")];
-    char unicode_prop_name_pool_str2006[sizeof("induployan")];
-    char unicode_prop_name_pool_str2008[sizeof("dash")];
-    char unicode_prop_name_pool_str2010[sizeof("zanabazarsquare")];
-    char unicode_prop_name_pool_str2016[sizeof("incopticepactnumbers")];
-    char unicode_prop_name_pool_str2020[sizeof("number")];
-    char unicode_prop_name_pool_str2023[sizeof("inphagspa")];
-    char unicode_prop_name_pool_str2032[sizeof("mlym")];
-    char unicode_prop_name_pool_str2037[sizeof("malayalam")];
-    char unicode_prop_name_pool_str2038[sizeof("word")];
-    char unicode_prop_name_pool_str2040[sizeof("sarb")];
-    char unicode_prop_name_pool_str2047[sizeof("tang")];
-    char unicode_prop_name_pool_str2050[sizeof("otheralphabetic")];
-    char unicode_prop_name_pool_str2051[sizeof("tagbanwa")];
-    char unicode_prop_name_pool_str2057[sizeof("lepcha")];
-    char unicode_prop_name_pool_str2062[sizeof("surrogate")];
-    char unicode_prop_name_pool_str2063[sizeof("palmyrene")];
-    char unicode_prop_name_pool_str2064[sizeof("cf")];
-    char unicode_prop_name_pool_str2070[sizeof("ingothic")];
-    char unicode_prop_name_pool_str2071[sizeof("inmeroiticcursive")];
-    char unicode_prop_name_pool_str2077[sizeof("tamil")];
-    char unicode_prop_name_pool_str2084[sizeof("oldhungarian")];
-    char unicode_prop_name_pool_str2085[sizeof("titlecaseletter")];
-    char unicode_prop_name_pool_str2092[sizeof("thaa")];
-    char unicode_prop_name_pool_str2095[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
-    char unicode_prop_name_pool_str2097[sizeof("thaana")];
-    char unicode_prop_name_pool_str2099[sizeof("thai")];
-    char unicode_prop_name_pool_str2109[sizeof("pf")];
-    char unicode_prop_name_pool_str2110[sizeof("extendedpictographic")];
-    char unicode_prop_name_pool_str2121[sizeof("incjkradicalssupplement")];
-    char unicode_prop_name_pool_str2124[sizeof("indevanagariextended")];
-    char unicode_prop_name_pool_str2133[sizeof("gujr")];
-    char unicode_prop_name_pool_str2144[sizeof("gujarati")];
-    char unicode_prop_name_pool_str2158[sizeof("tirh")];
-    char unicode_prop_name_pool_str2160[sizeof("caucasianalbanian")];
-    char unicode_prop_name_pool_str2178[sizeof("incyrillicextendedb")];
-    char unicode_prop_name_pool_str2187[sizeof("soyo")];
-    char unicode_prop_name_pool_str2188[sizeof("inhangulsyllables")];
-    char unicode_prop_name_pool_str2190[sizeof("inbamum")];
-    char unicode_prop_name_pool_str2191[sizeof("taitham")];
-    char unicode_prop_name_pool_str2196[sizeof("meroitichieroglyphs")];
-    char unicode_prop_name_pool_str2213[sizeof("intifinagh")];
-    char unicode_prop_name_pool_str2214[sizeof("talu")];
-    char unicode_prop_name_pool_str2217[sizeof("inbengali")];
-    char unicode_prop_name_pool_str2222[sizeof("incjkunifiedideographsextensionf")];
-    char unicode_prop_name_pool_str2223[sizeof("buhd")];
-    char unicode_prop_name_pool_str2228[sizeof("telu")];
-    char unicode_prop_name_pool_str2229[sizeof("inbuginese")];
-    char unicode_prop_name_pool_str2232[sizeof("idstrinaryoperator")];
-    char unicode_prop_name_pool_str2233[sizeof("tirhuta")];
-    char unicode_prop_name_pool_str2238[sizeof("oldturkic")];
-    char unicode_prop_name_pool_str2245[sizeof("incombiningdiacriticalmarks")];
-    char unicode_prop_name_pool_str2249[sizeof("phagspa")];
-    char unicode_prop_name_pool_str2255[sizeof("incombiningdiacriticalmarksforsymbols")];
-    char unicode_prop_name_pool_str2258[sizeof("changeswhencasemapped")];
-    char unicode_prop_name_pool_str2259[sizeof("inlatin1supplement")];
-    char unicode_prop_name_pool_str2261[sizeof("inbrahmi")];
-    char unicode_prop_name_pool_str2263[sizeof("hang")];
-    char unicode_prop_name_pool_str2264[sizeof("nchar")];
-    char unicode_prop_name_pool_str2286[sizeof("oldsogdian")];
-    char unicode_prop_name_pool_str2299[sizeof("deva")];
-    char unicode_prop_name_pool_str2301[sizeof("ingujarati")];
-    char unicode_prop_name_pool_str2305[sizeof("otherlowercase")];
-    char unicode_prop_name_pool_str2311[sizeof("ingunjalagondi")];
-    char unicode_prop_name_pool_str2315[sizeof("devanagari")];
-    char unicode_prop_name_pool_str2319[sizeof("syrc")];
-    char unicode_prop_name_pool_str2325[sizeof("mahj")];
-    char unicode_prop_name_pool_str2330[sizeof("hiragana")];
-    char unicode_prop_name_pool_str2333[sizeof("orya")];
-    char unicode_prop_name_pool_str2336[sizeof("mahajani")];
-    char unicode_prop_name_pool_str2341[sizeof("incurrencysymbols")];
-    char unicode_prop_name_pool_str2342[sizeof("spaceseparator")];
-    char unicode_prop_name_pool_str2347[sizeof("otherletter")];
-    char unicode_prop_name_pool_str2348[sizeof("inlinearbsyllabary")];
-    char unicode_prop_name_pool_str2351[sizeof("inrejang")];
-    char unicode_prop_name_pool_str2352[sizeof("hmng")];
-    char unicode_prop_name_pool_str2357[sizeof("ogrext")];
-    char unicode_prop_name_pool_str2376[sizeof("inaegeannumbers")];
-    char unicode_prop_name_pool_str2389[sizeof("changeswhentitlecased")];
-    char unicode_prop_name_pool_str2409[sizeof("zp")];
-    char unicode_prop_name_pool_str2411[sizeof("mathsymbol")];
-    char unicode_prop_name_pool_str2414[sizeof("khoj")];
-    char unicode_prop_name_pool_str2419[sizeof("incombiningdiacriticalmarkssupplement")];
-    char unicode_prop_name_pool_str2421[sizeof("warangciti")];
-    char unicode_prop_name_pool_str2428[sizeof("syriac")];
-    char unicode_prop_name_pool_str2429[sizeof("finalpunctuation")];
-    char unicode_prop_name_pool_str2437[sizeof("othersymbol")];
-    char unicode_prop_name_pool_str2444[sizeof("currencysymbol")];
-    char unicode_prop_name_pool_str2445[sizeof("digit")];
-    char unicode_prop_name_pool_str2449[sizeof("emojipresentation")];
-    char unicode_prop_name_pool_str2455[sizeof("inpsalterpahlavi")];
-    char unicode_prop_name_pool_str2456[sizeof("softdotted")];
-    char unicode_prop_name_pool_str2460[sizeof("phlp")];
-    char unicode_prop_name_pool_str2461[sizeof("noncharactercodepoint")];
-    char unicode_prop_name_pool_str2464[sizeof("inlimbu")];
-    char unicode_prop_name_pool_str2465[sizeof("nonspacingmark")];
-    char unicode_prop_name_pool_str2467[sizeof("omath")];
-    char unicode_prop_name_pool_str2473[sizeof("cyrillic")];
-    char unicode_prop_name_pool_str2476[sizeof("inenclosedcjklettersandmonths")];
-    char unicode_prop_name_pool_str2482[sizeof("tangut")];
-    char unicode_prop_name_pool_str2484[sizeof("changeswhenlowercased")];
-    char unicode_prop_name_pool_str2496[sizeof("inalphabeticpresentationforms")];
-    char unicode_prop_name_pool_str2500[sizeof("intangutcomponents")];
-    char unicode_prop_name_pool_str2503[sizeof("incombiningdiacriticalmarksextended")];
-    char unicode_prop_name_pool_str2508[sizeof("ogham")];
-    char unicode_prop_name_pool_str2518[sizeof("osmanya")];
-    char unicode_prop_name_pool_str2521[sizeof("intagbanwa")];
-    char unicode_prop_name_pool_str2525[sizeof("inprivateusearea")];
-    char unicode_prop_name_pool_str2529[sizeof("inpaucinhau")];
-    char unicode_prop_name_pool_str2532[sizeof("otheruppercase")];
-    char unicode_prop_name_pool_str2533[sizeof("sylo")];
-    char unicode_prop_name_pool_str2537[sizeof("elba")];
-    char unicode_prop_name_pool_str2553[sizeof("paragraphseparator")];
-    char unicode_prop_name_pool_str2554[sizeof("inbassavah")];
-    char unicode_prop_name_pool_str2559[sizeof("otheridstart")];
-    char unicode_prop_name_pool_str2567[sizeof("signwriting")];
-    char unicode_prop_name_pool_str2576[sizeof("rjng")];
-    char unicode_prop_name_pool_str2584[sizeof("whitespace")];
-    char unicode_prop_name_pool_str2585[sizeof("incjkunifiedideographsextensionb")];
-    char unicode_prop_name_pool_str2586[sizeof("inletterlikesymbols")];
-    char unicode_prop_name_pool_str2623[sizeof("buhid")];
-    char unicode_prop_name_pool_str2642[sizeof("oupper")];
-    char unicode_prop_name_pool_str2644[sizeof("bassavah")];
-    char unicode_prop_name_pool_str2647[sizeof("inhebrew")];
-    char unicode_prop_name_pool_str2653[sizeof("narb")];
-    char unicode_prop_name_pool_str2659[sizeof("inbuhid")];
-    char unicode_prop_name_pool_str2662[sizeof("inbopomofo")];
-    char unicode_prop_name_pool_str2692[sizeof("elbasan")];
-    char unicode_prop_name_pool_str2700[sizeof("incombininghalfmarks")];
-    char unicode_prop_name_pool_str2707[sizeof("inindicsiyaqnumbers")];
-    char unicode_prop_name_pool_str2711[sizeof("changeswhenuppercased")];
-    char unicode_prop_name_pool_str2743[sizeof("inmathematicaloperators")];
-    char unicode_prop_name_pool_str2745[sizeof("inarabicmathematicalalphabeticsymbols")];
-    char unicode_prop_name_pool_str2764[sizeof("hluw")];
-    char unicode_prop_name_pool_str2770[sizeof("hexdigit")];
-    char unicode_prop_name_pool_str2771[sizeof("deprecated")];
-    char unicode_prop_name_pool_str2776[sizeof("insuperscriptsandsubscripts")];
-    char unicode_prop_name_pool_str2777[sizeof("nshu")];
-    char unicode_prop_name_pool_str2782[sizeof("injavanese")];
-    char unicode_prop_name_pool_str2790[sizeof("inbamumsupplement")];
-    char unicode_prop_name_pool_str2798[sizeof("hangul")];
-    char unicode_prop_name_pool_str2826[sizeof("unifiedideograph")];
-    char unicode_prop_name_pool_str2831[sizeof("tavt")];
-    char unicode_prop_name_pool_str2843[sizeof("othermath")];
-    char unicode_prop_name_pool_str2849[sizeof("pahawhhmong")];
-    char unicode_prop_name_pool_str2850[sizeof("sylotinagri")];
-    char unicode_prop_name_pool_str2853[sizeof("hung")];
-    char unicode_prop_name_pool_str2856[sizeof("kayahli")];
-    char unicode_prop_name_pool_str2861[sizeof("inpahawhhmong")];
-    char unicode_prop_name_pool_str2863[sizeof("upper")];
-    char unicode_prop_name_pool_str2884[sizeof("inalchemicalsymbols")];
-    char unicode_prop_name_pool_str2907[sizeof("nbat")];
-    char unicode_prop_name_pool_str2915[sizeof("nabataean")];
-    char unicode_prop_name_pool_str2929[sizeof("uppercase")];
-    char unicode_prop_name_pool_str2937[sizeof("hebr")];
-    char unicode_prop_name_pool_str2947[sizeof("inmahjongtiles")];
-    char unicode_prop_name_pool_str2954[sizeof("oldnortharabian")];
-    char unicode_prop_name_pool_str2963[sizeof("inarabicsupplement")];
-    char unicode_prop_name_pool_str2968[sizeof("tibt")];
-    char unicode_prop_name_pool_str2974[sizeof("tibetan")];
-    char unicode_prop_name_pool_str2975[sizeof("inhighprivateusesurrogates")];
-    char unicode_prop_name_pool_str2976[sizeof("insupplementalarrowsa")];
-    char unicode_prop_name_pool_str2977[sizeof("inarabicpresentationformsb")];
-    char unicode_prop_name_pool_str2986[sizeof("otherdefaultignorablecodepoint")];
-    char unicode_prop_name_pool_str2987[sizeof("symbol")];
-    char unicode_prop_name_pool_str3012[sizeof("inplayingcards")];
-    char unicode_prop_name_pool_str3013[sizeof("inhalfwidthandfullwidthforms")];
-    char unicode_prop_name_pool_str3052[sizeof("wspace")];
-    char unicode_prop_name_pool_str3071[sizeof("tfng")];
-    char unicode_prop_name_pool_str3080[sizeof("insupplementalmathematicaloperators")];
-    char unicode_prop_name_pool_str3083[sizeof("insupplementalarrowsc")];
-    char unicode_prop_name_pool_str3084[sizeof("inhanguljamoextendedb")];
-    char unicode_prop_name_pool_str3112[sizeof("aghb")];
-    char unicode_prop_name_pool_str3120[sizeof("cypriot")];
-    char unicode_prop_name_pool_str3127[sizeof("nushu")];
-    char unicode_prop_name_pool_str3130[sizeof("tifinagh")];
-    char unicode_prop_name_pool_str3139[sizeof("otherpunctuation")];
-    char unicode_prop_name_pool_str3177[sizeof("alphabetic")];
-    char unicode_prop_name_pool_str3184[sizeof("dupl")];
-    char unicode_prop_name_pool_str3190[sizeof("tglg")];
-    char unicode_prop_name_pool_str3193[sizeof("changeswhencasefolded")];
-    char unicode_prop_name_pool_str3210[sizeof("tagalog")];
-    char unicode_prop_name_pool_str3228[sizeof("modifiersymbol")];
-    char unicode_prop_name_pool_str3231[sizeof("any")];
-    char unicode_prop_name_pool_str3239[sizeof("inglagoliticsupplement")];
-    char unicode_prop_name_pool_str3262[sizeof("ethiopic")];
-    char unicode_prop_name_pool_str3293[sizeof("uppercaseletter")];
-    char unicode_prop_name_pool_str3297[sizeof("dashpunctuation")];
-    char unicode_prop_name_pool_str3304[sizeof("hanifirohingya")];
-    char unicode_prop_name_pool_str3328[sizeof("inyijinghexagramsymbols")];
-    char unicode_prop_name_pool_str3337[sizeof("incypriotsyllabary")];
-    char unicode_prop_name_pool_str3375[sizeof("rejang")];
-    char unicode_prop_name_pool_str3426[sizeof("defaultignorablecodepoint")];
-    char unicode_prop_name_pool_str3431[sizeof("tagb")];
-    char unicode_prop_name_pool_str3447[sizeof("dep")];
-    char unicode_prop_name_pool_str3471[sizeof("inyisyllables")];
-    char unicode_prop_name_pool_str3485[sizeof("oldsoutharabian")];
-    char unicode_prop_name_pool_str3504[sizeof("inlatinextendedb")];
-    char unicode_prop_name_pool_str3514[sizeof("insupplementalpunctuation")];
-    char unicode_prop_name_pool_str3517[sizeof("othergraphemeextend")];
-    char unicode_prop_name_pool_str3562[sizeof("hebrew")];
-    char unicode_prop_name_pool_str3564[sizeof("inboxdrawing")];
-    char unicode_prop_name_pool_str3570[sizeof("inhighsurrogates")];
-    char unicode_prop_name_pool_str3603[sizeof("telugu")];
-    char unicode_prop_name_pool_str3623[sizeof("inbopomofoextended")];
-    char unicode_prop_name_pool_str3666[sizeof("soyombo")];
-    char unicode_prop_name_pool_str3764[sizeof("inegyptianhieroglyphs")];
-    char unicode_prop_name_pool_str4052[sizeof("openpunctuation")];
-    char unicode_prop_name_pool_str4129[sizeof("insupplementaryprivateuseareaa")];
-    char unicode_prop_name_pool_str4261[sizeof("hyphen")];
-    char unicode_prop_name_pool_str4277[sizeof("inhangulcompatibilityjamo")];
-    char unicode_prop_name_pool_str4332[sizeof("egyp")];
-    char unicode_prop_name_pool_str4363[sizeof("insupplementalarrowsb")];
-    char unicode_prop_name_pool_str4404[sizeof("duployan")];
-    char unicode_prop_name_pool_str4639[sizeof("insupplementalsymbolsandpictographs")];
-    char unicode_prop_name_pool_str4682[sizeof("zyyy")];
-    char unicode_prop_name_pool_str5231[sizeof("egyptianhieroglyphs")];
-    char unicode_prop_name_pool_str5516[sizeof("insupplementaryprivateuseareab")];
+    char unicode_prop_name_pool_str120[sizeof("m")];
+    char unicode_prop_name_pool_str133[sizeof("gonm")];
+    char unicode_prop_name_pool_str134[sizeof("cakm")];
+    char unicode_prop_name_pool_str139[sizeof("inosmanya")];
+    char unicode_prop_name_pool_str142[sizeof("inmanichaean")];
+    char unicode_prop_name_pool_str146[sizeof("inarmenian")];
+    char unicode_prop_name_pool_str151[sizeof("inmro")];
+    char unicode_prop_name_pool_str152[sizeof("inmiao")];
+    char unicode_prop_name_pool_str156[sizeof("c")];
+    char unicode_prop_name_pool_str163[sizeof("inchakma")];
+    char unicode_prop_name_pool_str166[sizeof("common")];
+    char unicode_prop_name_pool_str169[sizeof("mandaic")];
+    char unicode_prop_name_pool_str182[sizeof("inmyanmar")];
+    char unicode_prop_name_pool_str187[sizeof("inmakasar")];
+    char unicode_prop_name_pool_str192[sizeof("qaai")];
+    char unicode_prop_name_pool_str200[sizeof("inideographicsymbolsandpunctuation")];
+    char unicode_prop_name_pool_str204[sizeof("inkhmer")];
+    char unicode_prop_name_pool_str207[sizeof("cans")];
+    char unicode_prop_name_pool_str209[sizeof("prependedconcatenationmark")];
+    char unicode_prop_name_pool_str211[sizeof("lm")];
+    char unicode_prop_name_pool_str212[sizeof("marc")];
+    char unicode_prop_name_pool_str219[sizeof("connectorpunctuation")];
+    char unicode_prop_name_pool_str220[sizeof("inrunic")];
+    char unicode_prop_name_pool_str221[sizeof("incarian")];
+    char unicode_prop_name_pool_str223[sizeof("inavestan")];
+    char unicode_prop_name_pool_str225[sizeof("combiningmark")];
+    char unicode_prop_name_pool_str226[sizeof("incuneiformnumbersandpunctuation")];
+    char unicode_prop_name_pool_str231[sizeof("merc")];
+    char unicode_prop_name_pool_str238[sizeof("perm")];
+    char unicode_prop_name_pool_str239[sizeof("inahom")];
+    char unicode_prop_name_pool_str240[sizeof("inipaextensions")];
+    char unicode_prop_name_pool_str251[sizeof("incherokee")];
+    char unicode_prop_name_pool_str257[sizeof("insharada")];
+    char unicode_prop_name_pool_str268[sizeof("makasar")];
+    char unicode_prop_name_pool_str272[sizeof("inarrows")];
+    char unicode_prop_name_pool_str277[sizeof("lc")];
+    char unicode_prop_name_pool_str279[sizeof("masaramgondi")];
+    char unicode_prop_name_pool_str283[sizeof("incuneiform")];
+    char unicode_prop_name_pool_str290[sizeof("mc")];
+    char unicode_prop_name_pool_str293[sizeof("cc")];
+    char unicode_prop_name_pool_str295[sizeof("inzanabazarsquare")];
+    char unicode_prop_name_pool_str298[sizeof("lineseparator")];
+    char unicode_prop_name_pool_str302[sizeof("armn")];
+    char unicode_prop_name_pool_str305[sizeof("qmark")];
+    char unicode_prop_name_pool_str306[sizeof("armi")];
+    char unicode_prop_name_pool_str309[sizeof("insamaritan")];
+    char unicode_prop_name_pool_str316[sizeof("armenian")];
+    char unicode_prop_name_pool_str318[sizeof("inmarchen")];
+    char unicode_prop_name_pool_str319[sizeof("inmasaramgondi")];
+    char unicode_prop_name_pool_str321[sizeof("qaac")];
+    char unicode_prop_name_pool_str330[sizeof("pc")];
+    char unicode_prop_name_pool_str335[sizeof("inscriptionalparthian")];
+    char unicode_prop_name_pool_str336[sizeof("latn")];
+    char unicode_prop_name_pool_str340[sizeof("latin")];
+    char unicode_prop_name_pool_str342[sizeof("ri")];
+    char unicode_prop_name_pool_str345[sizeof("inthaana")];
+    char unicode_prop_name_pool_str352[sizeof("inkhmersymbols")];
+    char unicode_prop_name_pool_str355[sizeof("inkatakana")];
+    char unicode_prop_name_pool_str356[sizeof("incyrillic")];
+    char unicode_prop_name_pool_str357[sizeof("inthai")];
+    char unicode_prop_name_pool_str359[sizeof("incham")];
+    char unicode_prop_name_pool_str367[sizeof("inkaithi")];
+    char unicode_prop_name_pool_str369[sizeof("zs")];
+    char unicode_prop_name_pool_str372[sizeof("mtei")];
+    char unicode_prop_name_pool_str375[sizeof("vai")];
+    char unicode_prop_name_pool_str376[sizeof("vaii")];
+    char unicode_prop_name_pool_str379[sizeof("initialpunctuation")];
+    char unicode_prop_name_pool_str383[sizeof("cs")];
+    char unicode_prop_name_pool_str399[sizeof("insyriac")];
+    char unicode_prop_name_pool_str401[sizeof("pcm")];
+    char unicode_prop_name_pool_str415[sizeof("intakri")];
+    char unicode_prop_name_pool_str417[sizeof("mand")];
+    char unicode_prop_name_pool_str419[sizeof("l")];
+    char unicode_prop_name_pool_str420[sizeof("ps")];
+    char unicode_prop_name_pool_str427[sizeof("dia")];
+    char unicode_prop_name_pool_str431[sizeof("inkanaextendeda")];
+    char unicode_prop_name_pool_str433[sizeof("di")];
+    char unicode_prop_name_pool_str436[sizeof("mend")];
+    char unicode_prop_name_pool_str437[sizeof("modi")];
+    char unicode_prop_name_pool_str441[sizeof("ideo")];
+    char unicode_prop_name_pool_str445[sizeof("katakana")];
+    char unicode_prop_name_pool_str449[sizeof("prti")];
+    char unicode_prop_name_pool_str456[sizeof("inideographicdescriptioncharacters")];
+    char unicode_prop_name_pool_str457[sizeof("inlineara")];
+    char unicode_prop_name_pool_str458[sizeof("xidcontinue")];
+    char unicode_prop_name_pool_str461[sizeof("brai")];
+    char unicode_prop_name_pool_str463[sizeof("inlao")];
+    char unicode_prop_name_pool_str472[sizeof("ascii")];
+    char unicode_prop_name_pool_str474[sizeof("privateuse")];
+    char unicode_prop_name_pool_str477[sizeof("arabic")];
+    char unicode_prop_name_pool_str478[sizeof("mongolian")];
+    char unicode_prop_name_pool_str480[sizeof("inmyanmarextendeda")];
+    char unicode_prop_name_pool_str481[sizeof("inruminumeralsymbols")];
+    char unicode_prop_name_pool_str485[sizeof("letter")];
+    char unicode_prop_name_pool_str487[sizeof("innandinagari")];
+    char unicode_prop_name_pool_str499[sizeof("inmeeteimayek")];
+    char unicode_prop_name_pool_str500[sizeof("inoldnortharabian")];
+    char unicode_prop_name_pool_str503[sizeof("grlink")];
+    char unicode_prop_name_pool_str504[sizeof("knda")];
+    char unicode_prop_name_pool_str507[sizeof("kannada")];
+    char unicode_prop_name_pool_str509[sizeof("incjkcompatibilityforms")];
+    char unicode_prop_name_pool_str514[sizeof("incjkcompatibilityideographs")];
+    char unicode_prop_name_pool_str528[sizeof("inmodi")];
+    char unicode_prop_name_pool_str529[sizeof("kali")];
+    char unicode_prop_name_pool_str532[sizeof("control")];
+    char unicode_prop_name_pool_str536[sizeof("inadlam")];
+    char unicode_prop_name_pool_str538[sizeof("inspecials")];
+    char unicode_prop_name_pool_str540[sizeof("inmendekikakui")];
+    char unicode_prop_name_pool_str545[sizeof("intransportandmapsymbols")];
+    char unicode_prop_name_pool_str547[sizeof("letternumber")];
+    char unicode_prop_name_pool_str549[sizeof("xidc")];
+    char unicode_prop_name_pool_str550[sizeof("inmedefaidrin")];
+    char unicode_prop_name_pool_str558[sizeof("inchesssymbols")];
+    char unicode_prop_name_pool_str564[sizeof("inemoticons")];
+    char unicode_prop_name_pool_str573[sizeof("brahmi")];
+    char unicode_prop_name_pool_str575[sizeof("inolditalic")];
+    char unicode_prop_name_pool_str578[sizeof("palm")];
+    char unicode_prop_name_pool_str580[sizeof("inlycian")];
+    char unicode_prop_name_pool_str588[sizeof("inmiscellaneousmathematicalsymbolsa")];
+    char unicode_prop_name_pool_str594[sizeof("xids")];
+    char unicode_prop_name_pool_str603[sizeof("psalterpahlavi")];
+    char unicode_prop_name_pool_str619[sizeof("insundanese")];
+    char unicode_prop_name_pool_str620[sizeof("inoldsogdian")];
+    char unicode_prop_name_pool_str632[sizeof("diacritic")];
+    char unicode_prop_name_pool_str634[sizeof("gothic")];
+    char unicode_prop_name_pool_str635[sizeof("inancientsymbols")];
+    char unicode_prop_name_pool_str639[sizeof("meroiticcursive")];
+    char unicode_prop_name_pool_str643[sizeof("inmalayalam")];
+    char unicode_prop_name_pool_str648[sizeof("patternwhitespace")];
+    char unicode_prop_name_pool_str649[sizeof("sk")];
+    char unicode_prop_name_pool_str652[sizeof("insmallkanaextension")];
+    char unicode_prop_name_pool_str656[sizeof("inmandaic")];
+    char unicode_prop_name_pool_str657[sizeof("lt")];
+    char unicode_prop_name_pool_str665[sizeof("so")];
+    char unicode_prop_name_pool_str666[sizeof("inlinearbideograms")];
+    char unicode_prop_name_pool_str668[sizeof("incommonindicnumberforms")];
+    char unicode_prop_name_pool_str669[sizeof("incjkcompatibilityideographssupplement")];
+    char unicode_prop_name_pool_str677[sizeof("idc")];
+    char unicode_prop_name_pool_str678[sizeof("inoldsoutharabian")];
+    char unicode_prop_name_pool_str699[sizeof("insylotinagri")];
+    char unicode_prop_name_pool_str701[sizeof("idsbinaryoperator")];
+    char unicode_prop_name_pool_str707[sizeof("sora")];
+    char unicode_prop_name_pool_str708[sizeof("bamum")];
+    char unicode_prop_name_pool_str709[sizeof("inkanasupplement")];
+    char unicode_prop_name_pool_str710[sizeof("incjkstrokes")];
+    char unicode_prop_name_pool_str715[sizeof("joinc")];
+    char unicode_prop_name_pool_str718[sizeof("inopticalcharacterrecognition")];
+    char unicode_prop_name_pool_str722[sizeof("vs")];
+    char unicode_prop_name_pool_str728[sizeof("indominotiles")];
+    char unicode_prop_name_pool_str732[sizeof("batk")];
+    char unicode_prop_name_pool_str739[sizeof("grext")];
+    char unicode_prop_name_pool_str741[sizeof("batak")];
+    char unicode_prop_name_pool_str749[sizeof("patws")];
+    char unicode_prop_name_pool_str752[sizeof("inmodifiertoneletters")];
+    char unicode_prop_name_pool_str753[sizeof("ital")];
+    char unicode_prop_name_pool_str760[sizeof("bass")];
+    char unicode_prop_name_pool_str763[sizeof("decimalnumber")];
+    char unicode_prop_name_pool_str765[sizeof("alnum")];
+    char unicode_prop_name_pool_str767[sizeof("ids")];
+    char unicode_prop_name_pool_str776[sizeof("print")];
+    char unicode_prop_name_pool_str778[sizeof("inlatinextendeda")];
+    char unicode_prop_name_pool_str782[sizeof("intaitham")];
+    char unicode_prop_name_pool_str783[sizeof("inmusicalsymbols")];
+    char unicode_prop_name_pool_str785[sizeof("intaile")];
+    char unicode_prop_name_pool_str794[sizeof("samr")];
+    char unicode_prop_name_pool_str809[sizeof("samaritan")];
+    char unicode_prop_name_pool_str813[sizeof("s")];
+    char unicode_prop_name_pool_str816[sizeof("inlatinextendede")];
+    char unicode_prop_name_pool_str820[sizeof("bali")];
+    char unicode_prop_name_pool_str826[sizeof("lisu")];
+    char unicode_prop_name_pool_str827[sizeof("pauc")];
+    char unicode_prop_name_pool_str828[sizeof("patternsyntax")];
+    char unicode_prop_name_pool_str829[sizeof("incontrolpictures")];
+    char unicode_prop_name_pool_str830[sizeof("blank")];
+    char unicode_prop_name_pool_str834[sizeof("inmiscellaneoussymbols")];
+    char unicode_prop_name_pool_str835[sizeof("ll")];
+    char unicode_prop_name_pool_str836[sizeof("inancientgreekmusicalnotation")];
+    char unicode_prop_name_pool_str837[sizeof("zl")];
+    char unicode_prop_name_pool_str838[sizeof("inlydian")];
+    char unicode_prop_name_pool_str839[sizeof("sm")];
+    char unicode_prop_name_pool_str843[sizeof("inmiscellaneoussymbolsandarrows")];
+    char unicode_prop_name_pool_str844[sizeof("inugaritic")];
+    char unicode_prop_name_pool_str845[sizeof("bengali")];
+    char unicode_prop_name_pool_str846[sizeof("pd")];
+    char unicode_prop_name_pool_str848[sizeof("inmiscellaneoussymbolsandpictographs")];
+    char unicode_prop_name_pool_str850[sizeof("medf")];
+    char unicode_prop_name_pool_str855[sizeof("cf")];
+    char unicode_prop_name_pool_str858[sizeof("balinese")];
+    char unicode_prop_name_pool_str860[sizeof("medefaidrin")];
+    char unicode_prop_name_pool_str865[sizeof("han")];
+    char unicode_prop_name_pool_str869[sizeof("intamil")];
+    char unicode_prop_name_pool_str870[sizeof("hani")];
+    char unicode_prop_name_pool_str871[sizeof("inmultani")];
+    char unicode_prop_name_pool_str879[sizeof("hano")];
+    char unicode_prop_name_pool_str887[sizeof("inshorthandformatcontrols")];
+    char unicode_prop_name_pool_str891[sizeof("insaurashtra")];
+    char unicode_prop_name_pool_str892[sizeof("pf")];
+    char unicode_prop_name_pool_str894[sizeof("inoldturkic")];
+    char unicode_prop_name_pool_str896[sizeof("idcontinue")];
+    char unicode_prop_name_pool_str901[sizeof("hanunoo")];
+    char unicode_prop_name_pool_str905[sizeof("sc")];
+    char unicode_prop_name_pool_str906[sizeof("inkhojki")];
+    char unicode_prop_name_pool_str913[sizeof("idst")];
+    char unicode_prop_name_pool_str915[sizeof("canadianaboriginal")];
+    char unicode_prop_name_pool_str923[sizeof("hira")];
+    char unicode_prop_name_pool_str925[sizeof("plrd")];
+    char unicode_prop_name_pool_str939[sizeof("incaucasianalbanian")];
+    char unicode_prop_name_pool_str940[sizeof("indeseret")];
+    char unicode_prop_name_pool_str945[sizeof("inearlydynasticcuneiform")];
+    char unicode_prop_name_pool_str946[sizeof("inspacingmodifierletters")];
+    char unicode_prop_name_pool_str950[sizeof("innewa")];
+    char unicode_prop_name_pool_str972[sizeof("idstart")];
+    char unicode_prop_name_pool_str977[sizeof("zinh")];
+    char unicode_prop_name_pool_str981[sizeof("incyrillicextendeda")];
+    char unicode_prop_name_pool_str984[sizeof("dsrt")];
+    char unicode_prop_name_pool_str993[sizeof("cased")];
+    char unicode_prop_name_pool_str999[sizeof("glagolitic")];
+    char unicode_prop_name_pool_str1002[sizeof("inhanifirohingya")];
+    char unicode_prop_name_pool_str1006[sizeof("inancientgreeknumbers")];
+    char unicode_prop_name_pool_str1008[sizeof("inmeeteimayekextensions")];
+    char unicode_prop_name_pool_str1009[sizeof("intaixuanjingsymbols")];
+    char unicode_prop_name_pool_str1016[sizeof("joincontrol")];
+    char unicode_prop_name_pool_str1020[sizeof("runr")];
+    char unicode_prop_name_pool_str1023[sizeof("inwarangciti")];
+    char unicode_prop_name_pool_str1025[sizeof("deseret")];
+    char unicode_prop_name_pool_str1035[sizeof("inhiragana")];
+    char unicode_prop_name_pool_str1039[sizeof("sind")];
+    char unicode_prop_name_pool_str1047[sizeof("cherokee")];
+    char unicode_prop_name_pool_str1050[sizeof("inlatinextendedc")];
+    char unicode_prop_name_pool_str1052[sizeof("adlm")];
+    char unicode_prop_name_pool_str1053[sizeof("phoenician")];
+    char unicode_prop_name_pool_str1056[sizeof("cher")];
+    char unicode_prop_name_pool_str1059[sizeof("marchen")];
+    char unicode_prop_name_pool_str1062[sizeof("inkhudawadi")];
+    char unicode_prop_name_pool_str1063[sizeof("sinhala")];
+    char unicode_prop_name_pool_str1066[sizeof("lower")];
+    char unicode_prop_name_pool_str1068[sizeof("graphemelink")];
+    char unicode_prop_name_pool_str1069[sizeof("xidstart")];
+    char unicode_prop_name_pool_str1071[sizeof("ingrantha")];
+    char unicode_prop_name_pool_str1072[sizeof("bidic")];
+    char unicode_prop_name_pool_str1074[sizeof("xdigit")];
+    char unicode_prop_name_pool_str1076[sizeof("casedletter")];
+    char unicode_prop_name_pool_str1078[sizeof("gong")];
+    char unicode_prop_name_pool_str1079[sizeof("multani")];
+    char unicode_prop_name_pool_str1082[sizeof("gunjalagondi")];
+    char unicode_prop_name_pool_str1084[sizeof("cham")];
+    char unicode_prop_name_pool_str1086[sizeof("chakma")];
+    char unicode_prop_name_pool_str1087[sizeof("mong")];
+    char unicode_prop_name_pool_str1088[sizeof("kaithi")];
+    char unicode_prop_name_pool_str1089[sizeof("inmahajani")];
+    char unicode_prop_name_pool_str1090[sizeof("graphemebase")];
+    char unicode_prop_name_pool_str1092[sizeof("insiddham")];
+    char unicode_prop_name_pool_str1095[sizeof("inogham")];
+    char unicode_prop_name_pool_str1101[sizeof("inosage")];
+    char unicode_prop_name_pool_str1102[sizeof("incountingrodnumerals")];
+    char unicode_prop_name_pool_str1104[sizeof("inwancho")];
+    char unicode_prop_name_pool_str1105[sizeof("khojki")];
+    char unicode_prop_name_pool_str1107[sizeof("ingeneralpunctuation")];
+    char unicode_prop_name_pool_str1108[sizeof("georgian")];
+    char unicode_prop_name_pool_str1117[sizeof("incyrillicextendedc")];
+    char unicode_prop_name_pool_str1118[sizeof("inkayahli")];
+    char unicode_prop_name_pool_str1121[sizeof("khar")];
+    char unicode_prop_name_pool_str1124[sizeof("inoriya")];
+    char unicode_prop_name_pool_str1126[sizeof("manichaean")];
+    char unicode_prop_name_pool_str1132[sizeof("bamu")];
+    char unicode_prop_name_pool_str1133[sizeof("zanb")];
+    char unicode_prop_name_pool_str1136[sizeof("oriya")];
+    char unicode_prop_name_pool_str1137[sizeof("inolchiki")];
+    char unicode_prop_name_pool_str1138[sizeof("linb")];
+    char unicode_prop_name_pool_str1141[sizeof("inethiopic")];
+    char unicode_prop_name_pool_str1143[sizeof("wara")];
+    char unicode_prop_name_pool_str1144[sizeof("ingeorgian")];
+    char unicode_prop_name_pool_str1149[sizeof("innabataean")];
+    char unicode_prop_name_pool_str1154[sizeof("inkanbun")];
+    char unicode_prop_name_pool_str1156[sizeof("adlam")];
+    char unicode_prop_name_pool_str1157[sizeof("inbhaiksuki")];
+    char unicode_prop_name_pool_str1162[sizeof("insinhala")];
+    char unicode_prop_name_pool_str1163[sizeof("inelbasan")];
+    char unicode_prop_name_pool_str1169[sizeof("lowercase")];
+    char unicode_prop_name_pool_str1178[sizeof("takri")];
+    char unicode_prop_name_pool_str1179[sizeof("inmongolian")];
+    char unicode_prop_name_pool_str1181[sizeof("invai")];
+    char unicode_prop_name_pool_str1182[sizeof("xsux")];
+    char unicode_prop_name_pool_str1183[sizeof("cntrl")];
+    char unicode_prop_name_pool_str1186[sizeof("emoji")];
+    char unicode_prop_name_pool_str1187[sizeof("sterm")];
+    char unicode_prop_name_pool_str1189[sizeof("cuneiform")];
+    char unicode_prop_name_pool_str1192[sizeof("cwcm")];
+    char unicode_prop_name_pool_str1194[sizeof("hatran")];
+    char unicode_prop_name_pool_str1197[sizeof("linearb")];
+    char unicode_prop_name_pool_str1201[sizeof("taile")];
+    char unicode_prop_name_pool_str1202[sizeof("inlatinextendedadditional")];
+    char unicode_prop_name_pool_str1203[sizeof("inenclosedalphanumerics")];
+    char unicode_prop_name_pool_str1205[sizeof("anatolianhieroglyphs")];
+    char unicode_prop_name_pool_str1206[sizeof("incyrillicsupplement")];
+    char unicode_prop_name_pool_str1208[sizeof("intamilsupplement")];
+    char unicode_prop_name_pool_str1215[sizeof("inmiscellaneoustechnical")];
+    char unicode_prop_name_pool_str1217[sizeof("ahom")];
+    char unicode_prop_name_pool_str1218[sizeof("incherokeesupplement")];
+    char unicode_prop_name_pool_str1219[sizeof("takr")];
+    char unicode_prop_name_pool_str1224[sizeof("khmr")];
+    char unicode_prop_name_pool_str1228[sizeof("incjkunifiedideographsextensiona")];
+    char unicode_prop_name_pool_str1231[sizeof("quotationmark")];
+    char unicode_prop_name_pool_str1233[sizeof("lyci")];
+    char unicode_prop_name_pool_str1234[sizeof("lycian")];
+    char unicode_prop_name_pool_str1235[sizeof("ingurmukhi")];
+    char unicode_prop_name_pool_str1237[sizeof("runic")];
+    char unicode_prop_name_pool_str1238[sizeof("limb")];
+    char unicode_prop_name_pool_str1240[sizeof("inscriptionalpahlavi")];
+    char unicode_prop_name_pool_str1242[sizeof("hatr")];
+    char unicode_prop_name_pool_str1244[sizeof("variationselector")];
+    char unicode_prop_name_pool_str1246[sizeof("modifierletter")];
+    char unicode_prop_name_pool_str1247[sizeof("incjkunifiedideographsextensione")];
+    char unicode_prop_name_pool_str1262[sizeof("mymr")];
+    char unicode_prop_name_pool_str1265[sizeof("myanmar")];
+    char unicode_prop_name_pool_str1267[sizeof("lu")];
+    char unicode_prop_name_pool_str1275[sizeof("kharoshthi")];
+    char unicode_prop_name_pool_str1276[sizeof("inarabic")];
+    char unicode_prop_name_pool_str1278[sizeof("radical")];
+    char unicode_prop_name_pool_str1281[sizeof("khmer")];
+    char unicode_prop_name_pool_str1286[sizeof("inunifiedcanadianaboriginalsyllabics")];
+    char unicode_prop_name_pool_str1292[sizeof("osage")];
+    char unicode_prop_name_pool_str1296[sizeof("sundanese")];
+    char unicode_prop_name_pool_str1300[sizeof("innewtailue")];
+    char unicode_prop_name_pool_str1302[sizeof("logicalorderexception")];
+    char unicode_prop_name_pool_str1304[sizeof("math")];
+    char unicode_prop_name_pool_str1306[sizeof("braille")];
+    char unicode_prop_name_pool_str1311[sizeof("goth")];
+    char unicode_prop_name_pool_str1312[sizeof("insorasompeng")];
+    char unicode_prop_name_pool_str1316[sizeof("insoyombo")];
+    char unicode_prop_name_pool_str1317[sizeof("arab")];
+    char unicode_prop_name_pool_str1322[sizeof("saur")];
+    char unicode_prop_name_pool_str1329[sizeof("guru")];
+    char unicode_prop_name_pool_str1333[sizeof("term")];
+    char unicode_prop_name_pool_str1337[sizeof("paucinhau")];
+    char unicode_prop_name_pool_str1338[sizeof("inbasiclatin")];
+    char unicode_prop_name_pool_str1339[sizeof("inarabicpresentationformsa")];
+    char unicode_prop_name_pool_str1347[sizeof("punct")];
+    char unicode_prop_name_pool_str1348[sizeof("gurmukhi")];
+    char unicode_prop_name_pool_str1354[sizeof("grantha")];
+    char unicode_prop_name_pool_str1355[sizeof("inshavian")];
+    char unicode_prop_name_pool_str1356[sizeof("osma")];
+    char unicode_prop_name_pool_str1357[sizeof("inenclosedalphanumericsupplement")];
+    char unicode_prop_name_pool_str1360[sizeof("intirhuta")];
+    char unicode_prop_name_pool_str1361[sizeof("inelymaic")];
+    char unicode_prop_name_pool_str1362[sizeof("inhatran")];
+    char unicode_prop_name_pool_str1364[sizeof("incjkunifiedideographsextensionc")];
+    char unicode_prop_name_pool_str1365[sizeof("emojimodifier")];
+    char unicode_prop_name_pool_str1368[sizeof("uideo")];
+    char unicode_prop_name_pool_str1373[sizeof("bidicontrol")];
+    char unicode_prop_name_pool_str1379[sizeof("phnx")];
+    char unicode_prop_name_pool_str1380[sizeof("limbu")];
+    char unicode_prop_name_pool_str1384[sizeof("n")];
+    char unicode_prop_name_pool_str1388[sizeof("inenclosedideographicsupplement")];
+    char unicode_prop_name_pool_str1392[sizeof("mult")];
+    char unicode_prop_name_pool_str1398[sizeof("kthi")];
+    char unicode_prop_name_pool_str1399[sizeof("incjkunifiedideographs")];
+    char unicode_prop_name_pool_str1401[sizeof("ingreekandcoptic")];
+    char unicode_prop_name_pool_str1403[sizeof("inoldhungarian")];
+    char unicode_prop_name_pool_str1406[sizeof("incjkcompatibility")];
+    char unicode_prop_name_pool_str1409[sizeof("grbase")];
+    char unicode_prop_name_pool_str1411[sizeof("nandinagari")];
+    char unicode_prop_name_pool_str1412[sizeof("brah")];
+    char unicode_prop_name_pool_str1414[sizeof("no")];
+    char unicode_prop_name_pool_str1421[sizeof("sd")];
+    char unicode_prop_name_pool_str1423[sizeof("nko")];
+    char unicode_prop_name_pool_str1424[sizeof("nkoo")];
+    char unicode_prop_name_pool_str1427[sizeof("xpeo")];
+    char unicode_prop_name_pool_str1430[sizeof("sidd")];
+    char unicode_prop_name_pool_str1435[sizeof("inherited")];
+    char unicode_prop_name_pool_str1437[sizeof("p")];
+    char unicode_prop_name_pool_str1440[sizeof("phli")];
+    char unicode_prop_name_pool_str1443[sizeof("inmeroitichieroglyphs")];
+    char unicode_prop_name_pool_str1444[sizeof("inphoenician")];
+    char unicode_prop_name_pool_str1449[sizeof("inmayannumerals")];
+    char unicode_prop_name_pool_str1453[sizeof("saurashtra")];
+    char unicode_prop_name_pool_str1455[sizeof("inkangxiradicals")];
+    char unicode_prop_name_pool_str1461[sizeof("enclosingmark")];
+    char unicode_prop_name_pool_str1467[sizeof("graphemeextend")];
+    char unicode_prop_name_pool_str1468[sizeof("beng")];
+    char unicode_prop_name_pool_str1473[sizeof("inbatak")];
+    char unicode_prop_name_pool_str1474[sizeof("glag")];
+    char unicode_prop_name_pool_str1475[sizeof("ahex")];
+    char unicode_prop_name_pool_str1477[sizeof("patsyn")];
+    char unicode_prop_name_pool_str1479[sizeof("odi")];
+    char unicode_prop_name_pool_str1486[sizeof("dogra")];
+    char unicode_prop_name_pool_str1489[sizeof("intibetan")];
+    char unicode_prop_name_pool_str1491[sizeof("lydi")];
+    char unicode_prop_name_pool_str1492[sizeof("lydian")];
+    char unicode_prop_name_pool_str1499[sizeof("inblockelements")];
+    char unicode_prop_name_pool_str1506[sizeof("cwcf")];
+    char unicode_prop_name_pool_str1507[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
+    char unicode_prop_name_pool_str1508[sizeof("regionalindicator")];
+    char unicode_prop_name_pool_str1509[sizeof("ingreekextended")];
+    char unicode_prop_name_pool_str1513[sizeof("emojimodifierbase")];
+    char unicode_prop_name_pool_str1514[sizeof("inanatolianhieroglyphs")];
+    char unicode_prop_name_pool_str1516[sizeof("indogra")];
+    char unicode_prop_name_pool_str1517[sizeof("taiviet")];
+    char unicode_prop_name_pool_str1524[sizeof("inyiradicals")];
+    char unicode_prop_name_pool_str1525[sizeof("unassigned")];
+    char unicode_prop_name_pool_str1532[sizeof("insundanesesupplement")];
+    char unicode_prop_name_pool_str1535[sizeof("innumberforms")];
+    char unicode_prop_name_pool_str1538[sizeof("lowercaseletter")];
+    char unicode_prop_name_pool_str1541[sizeof("dogr")];
+    char unicode_prop_name_pool_str1542[sizeof("lepc")];
+    char unicode_prop_name_pool_str1545[sizeof("bhks")];
+    char unicode_prop_name_pool_str1553[sizeof("word")];
+    char unicode_prop_name_pool_str1554[sizeof("gujr")];
+    char unicode_prop_name_pool_str1555[sizeof("inphaistosdisc")];
+    char unicode_prop_name_pool_str1557[sizeof("bhaiksuki")];
+    char unicode_prop_name_pool_str1560[sizeof("dash")];
+    char unicode_prop_name_pool_str1562[sizeof("inarabicextendeda")];
+    char unicode_prop_name_pool_str1565[sizeof("gujarati")];
+    char unicode_prop_name_pool_str1566[sizeof("inlatinextendedd")];
+    char unicode_prop_name_pool_str1567[sizeof("innoblock")];
+    char unicode_prop_name_pool_str1570[sizeof("java")];
+    char unicode_prop_name_pool_str1576[sizeof("ingeometricshapes")];
+    char unicode_prop_name_pool_str1577[sizeof("cyrl")];
+    char unicode_prop_name_pool_str1582[sizeof("indevanagari")];
+    char unicode_prop_name_pool_str1583[sizeof("inbalinese")];
+    char unicode_prop_name_pool_str1585[sizeof("inbyzantinemusicalsymbols")];
+    char unicode_prop_name_pool_str1589[sizeof("tale")];
+    char unicode_prop_name_pool_str1591[sizeof("deva")];
+    char unicode_prop_name_pool_str1594[sizeof("hex")];
+    char unicode_prop_name_pool_str1601[sizeof("inmyanmarextendedb")];
+    char unicode_prop_name_pool_str1603[sizeof("sinh")];
+    char unicode_prop_name_pool_str1604[sizeof("cwt")];
+    char unicode_prop_name_pool_str1606[sizeof("shavian")];
+    char unicode_prop_name_pool_str1607[sizeof("devanagari")];
+    char unicode_prop_name_pool_str1609[sizeof("oidc")];
+    char unicode_prop_name_pool_str1615[sizeof("javanese")];
+    char unicode_prop_name_pool_str1621[sizeof("mlym")];
+    char unicode_prop_name_pool_str1622[sizeof("incjkunifiedideographsextensiond")];
+    char unicode_prop_name_pool_str1624[sizeof("sentenceterminal")];
+    char unicode_prop_name_pool_str1626[sizeof("malayalam")];
+    char unicode_prop_name_pool_str1628[sizeof("inhanunoo")];
+    char unicode_prop_name_pool_str1629[sizeof("insinhalaarchaicnumbers")];
+    char unicode_prop_name_pool_str1631[sizeof("olck")];
+    char unicode_prop_name_pool_str1633[sizeof("inimperialaramaic")];
+    char unicode_prop_name_pool_str1636[sizeof("olower")];
+    char unicode_prop_name_pool_str1638[sizeof("palmyrene")];
+    char unicode_prop_name_pool_str1642[sizeof("avestan")];
+    char unicode_prop_name_pool_str1645[sizeof("incjkunifiedideographsextensionf")];
+    char unicode_prop_name_pool_str1646[sizeof("insogdian")];
+    char unicode_prop_name_pool_str1647[sizeof("indingbats")];
+    char unicode_prop_name_pool_str1648[sizeof("olchiki")];
+    char unicode_prop_name_pool_str1654[sizeof("oids")];
+    char unicode_prop_name_pool_str1661[sizeof("punctuation")];
+    char unicode_prop_name_pool_str1663[sizeof("sund")];
+    char unicode_prop_name_pool_str1666[sizeof("inbraillepatterns")];
+    char unicode_prop_name_pool_str1669[sizeof("emojicomponent")];
+    char unicode_prop_name_pool_str1672[sizeof("ideographic")];
+    char unicode_prop_name_pool_str1673[sizeof("taml")];
+    char unicode_prop_name_pool_str1688[sizeof("format")];
+    char unicode_prop_name_pool_str1694[sizeof("inornamentaldingbats")];
+    char unicode_prop_name_pool_str1700[sizeof("coptic")];
+    char unicode_prop_name_pool_str1702[sizeof("caseignorable")];
+    char unicode_prop_name_pool_str1708[sizeof("idsb")];
+    char unicode_prop_name_pool_str1709[sizeof("inmiscellaneousmathematicalsymbolsb")];
+    char unicode_prop_name_pool_str1712[sizeof("sogdian")];
+    char unicode_prop_name_pool_str1715[sizeof("sogo")];
+    char unicode_prop_name_pool_str1720[sizeof("terminalpunctuation")];
+    char unicode_prop_name_pool_str1722[sizeof("intangut")];
+    char unicode_prop_name_pool_str1729[sizeof("intifinagh")];
+    char unicode_prop_name_pool_str1733[sizeof("inlowsurrogates")];
+    char unicode_prop_name_pool_str1743[sizeof("invariationselectors")];
+    char unicode_prop_name_pool_str1745[sizeof("copt")];
+    char unicode_prop_name_pool_str1750[sizeof("soyo")];
+    char unicode_prop_name_pool_str1753[sizeof("intags")];
+    char unicode_prop_name_pool_str1756[sizeof("inverticalforms")];
+    char unicode_prop_name_pool_str1757[sizeof("ininscriptionalparthian")];
+    char unicode_prop_name_pool_str1760[sizeof("ininscriptionalpahlavi")];
+    char unicode_prop_name_pool_str1763[sizeof("meroitichieroglyphs")];
+    char unicode_prop_name_pool_str1764[sizeof("asciihexdigit")];
+    char unicode_prop_name_pool_str1766[sizeof("inethiopicextendeda")];
+    char unicode_prop_name_pool_str1767[sizeof("invedicextensions")];
+    char unicode_prop_name_pool_str1781[sizeof("nand")];
+    char unicode_prop_name_pool_str1782[sizeof("cwl")];
+    char unicode_prop_name_pool_str1785[sizeof("cprt")];
+    char unicode_prop_name_pool_str1791[sizeof("innushu")];
+    char unicode_prop_name_pool_str1794[sizeof("zanabazarsquare")];
+    char unicode_prop_name_pool_str1797[sizeof("ingeometricshapesextended")];
+    char unicode_prop_name_pool_str1798[sizeof("avst")];
+    char unicode_prop_name_pool_str1808[sizeof("imperialaramaic")];
+    char unicode_prop_name_pool_str1810[sizeof("bopo")];
+    char unicode_prop_name_pool_str1812[sizeof("sarb")];
+    char unicode_prop_name_pool_str1819[sizeof("inoldpersian")];
+    char unicode_prop_name_pool_str1830[sizeof("intaiviet")];
+    char unicode_prop_name_pool_str1834[sizeof("mahj")];
+    char unicode_prop_name_pool_str1838[sizeof("inkatakanaphoneticextensions")];
+    char unicode_prop_name_pool_str1845[sizeof("mahajani")];
+    char unicode_prop_name_pool_str1871[sizeof("closepunctuation")];
+    char unicode_prop_name_pool_str1875[sizeof("inlisu")];
+    char unicode_prop_name_pool_str1878[sizeof("softdotted")];
+    char unicode_prop_name_pool_str1897[sizeof("unknown")];
+    char unicode_prop_name_pool_str1898[sizeof("invariationselectorssupplement")];
+    char unicode_prop_name_pool_str1910[sizeof("syrc")];
+    char unicode_prop_name_pool_str1911[sizeof("hang")];
+    char unicode_prop_name_pool_str1926[sizeof("incjksymbolsandpunctuation")];
+    char unicode_prop_name_pool_str1932[sizeof("ingujarati")];
+    char unicode_prop_name_pool_str1933[sizeof("bopomofo")];
+    char unicode_prop_name_pool_str1936[sizeof("alpha")];
+    char unicode_prop_name_pool_str1937[sizeof("khoj")];
+    char unicode_prop_name_pool_str1939[sizeof("inpalmyrene")];
+    char unicode_prop_name_pool_str1942[sizeof("ingunjalagondi")];
+    char unicode_prop_name_pool_str1948[sizeof("inoldpermic")];
+    char unicode_prop_name_pool_str1950[sizeof("inlepcha")];
+    char unicode_prop_name_pool_str1951[sizeof("assigned")];
+    char unicode_prop_name_pool_str1955[sizeof("incurrencysymbols")];
+    char unicode_prop_name_pool_str1958[sizeof("insmallformvariants")];
+    char unicode_prop_name_pool_str1959[sizeof("sorasompeng")];
+    char unicode_prop_name_pool_str1964[sizeof("inlinearbsyllabary")];
+    char unicode_prop_name_pool_str1965[sizeof("oldpersian")];
+    char unicode_prop_name_pool_str1972[sizeof("caucasianalbanian")];
+    char unicode_prop_name_pool_str1973[sizeof("inenclosedcjklettersandmonths")];
+    char unicode_prop_name_pool_str1975[sizeof("hiragana")];
+    char unicode_prop_name_pool_str1976[sizeof("inbamum")];
+    char unicode_prop_name_pool_str1979[sizeof("inrejang")];
+    char unicode_prop_name_pool_str1984[sizeof("graph")];
+    char unicode_prop_name_pool_str1990[sizeof("sharada")];
+    char unicode_prop_name_pool_str1991[sizeof("inethiopicsupplement")];
+    char unicode_prop_name_pool_str1996[sizeof("indevanagariextended")];
+    char unicode_prop_name_pool_str1997[sizeof("incoptic")];
+    char unicode_prop_name_pool_str1998[sizeof("insyriacsupplement")];
+    char unicode_prop_name_pool_str2004[sizeof("inmeroiticcursive")];
+    char unicode_prop_name_pool_str2014[sizeof("hmng")];
+    char unicode_prop_name_pool_str2022[sizeof("intelugu")];
+    char unicode_prop_name_pool_str2029[sizeof("incombiningdiacriticalmarks")];
+    char unicode_prop_name_pool_str2031[sizeof("mathsymbol")];
+    char unicode_prop_name_pool_str2036[sizeof("titlecaseletter")];
+    char unicode_prop_name_pool_str2038[sizeof("ugar")];
+    char unicode_prop_name_pool_str2039[sizeof("incombiningdiacriticalmarksforsymbols")];
+    char unicode_prop_name_pool_str2040[sizeof("spacingmark")];
+    char unicode_prop_name_pool_str2043[sizeof("shrd")];
+    char unicode_prop_name_pool_str2047[sizeof("injavanese")];
+    char unicode_prop_name_pool_str2048[sizeof("syriac")];
+    char unicode_prop_name_pool_str2054[sizeof("space")];
+    char unicode_prop_name_pool_str2056[sizeof("hebr")];
+    char unicode_prop_name_pool_str2061[sizeof("ext")];
+    char unicode_prop_name_pool_str2064[sizeof("inhanguljamo")];
+    char unicode_prop_name_pool_str2066[sizeof("phag")];
+    char unicode_prop_name_pool_str2076[sizeof("inhanguljamoextendeda")];
+    char unicode_prop_name_pool_str2082[sizeof("wancho")];
+    char unicode_prop_name_pool_str2084[sizeof("bugi")];
+    char unicode_prop_name_pool_str2089[sizeof("tamil")];
+    char unicode_prop_name_pool_str2093[sizeof("sogd")];
+    char unicode_prop_name_pool_str2094[sizeof("orkh")];
+    char unicode_prop_name_pool_str2097[sizeof("oldpermic")];
+    char unicode_prop_name_pool_str2100[sizeof("siddham")];
+    char unicode_prop_name_pool_str2102[sizeof("incyrillicextendedb")];
+    char unicode_prop_name_pool_str2105[sizeof("inbrahmi")];
+    char unicode_prop_name_pool_str2108[sizeof("inmongoliansupplement")];
+    char unicode_prop_name_pool_str2113[sizeof("thaa")];
+    char unicode_prop_name_pool_str2118[sizeof("thaana")];
+    char unicode_prop_name_pool_str2120[sizeof("thai")];
+    char unicode_prop_name_pool_str2122[sizeof("buginese")];
+    char unicode_prop_name_pool_str2127[sizeof("ingeorgiansupplement")];
+    char unicode_prop_name_pool_str2129[sizeof("digit")];
+    char unicode_prop_name_pool_str2132[sizeof("cyrillic")];
+    char unicode_prop_name_pool_str2149[sizeof("sylo")];
+    char unicode_prop_name_pool_str2150[sizeof("inphoneticextensions")];
+    char unicode_prop_name_pool_str2151[sizeof("separator")];
+    char unicode_prop_name_pool_str2159[sizeof("inethiopicextended")];
+    char unicode_prop_name_pool_str2163[sizeof("inmathematicalalphanumericsymbols")];
+    char unicode_prop_name_pool_str2168[sizeof("insymbolsandpictographsextendeda")];
+    char unicode_prop_name_pool_str2170[sizeof("nd")];
+    char unicode_prop_name_pool_str2176[sizeof("tirh")];
+    char unicode_prop_name_pool_str2178[sizeof("tirhuta")];
+    char unicode_prop_name_pool_str2184[sizeof("incombiningdiacriticalmarkssupplement")];
+    char unicode_prop_name_pool_str2193[sizeof("extender")];
+    char unicode_prop_name_pool_str2197[sizeof("wcho")];
+    char unicode_prop_name_pool_str2199[sizeof("inbengali")];
+    char unicode_prop_name_pool_str2201[sizeof("talu")];
+    char unicode_prop_name_pool_str2206[sizeof("tang")];
+    char unicode_prop_name_pool_str2207[sizeof("warangciti")];
+    char unicode_prop_name_pool_str2210[sizeof("tagbanwa")];
+    char unicode_prop_name_pool_str2211[sizeof("orya")];
+    char unicode_prop_name_pool_str2212[sizeof("nl")];
+    char unicode_prop_name_pool_str2213[sizeof("induployan")];
+    char unicode_prop_name_pool_str2214[sizeof("cwu")];
+    char unicode_prop_name_pool_str2216[sizeof("inbuginese")];
+    char unicode_prop_name_pool_str2220[sizeof("telu")];
+    char unicode_prop_name_pool_str2223[sizeof("ogam")];
+    char unicode_prop_name_pool_str2226[sizeof("taitham")];
+    char unicode_prop_name_pool_str2237[sizeof("rjng")];
+    char unicode_prop_name_pool_str2240[sizeof("insuttonsignwriting")];
+    char unicode_prop_name_pool_str2250[sizeof("incombiningdiacriticalmarksextended")];
+    char unicode_prop_name_pool_str2251[sizeof("number")];
+    char unicode_prop_name_pool_str2264[sizeof("inyijinghexagramsymbols")];
+    char unicode_prop_name_pool_str2277[sizeof("whitespace")];
+    char unicode_prop_name_pool_str2278[sizeof("currencysymbol")];
+    char unicode_prop_name_pool_str2285[sizeof("inottomansiyaqnumbers")];
+    char unicode_prop_name_pool_str2288[sizeof("inlimbu")];
+    char unicode_prop_name_pool_str2293[sizeof("incopticepactnumbers")];
+    char unicode_prop_name_pool_str2295[sizeof("ingeorgianextended")];
+    char unicode_prop_name_pool_str2305[sizeof("inphoneticextensionssupplement")];
+    char unicode_prop_name_pool_str2308[sizeof("any")];
+    char unicode_prop_name_pool_str2320[sizeof("osge")];
+    char unicode_prop_name_pool_str2325[sizeof("defaultignorablecodepoint")];
+    char unicode_prop_name_pool_str2326[sizeof("hangul")];
+    char unicode_prop_name_pool_str2333[sizeof("newa")];
+    char unicode_prop_name_pool_str2343[sizeof("ethi")];
+    char unicode_prop_name_pool_str2345[sizeof("hanifirohingya")];
+    char unicode_prop_name_pool_str2346[sizeof("hmnp")];
+    char unicode_prop_name_pool_str2348[sizeof("olditalic")];
+    char unicode_prop_name_pool_str2349[sizeof("incjkunifiedideographsextensionb")];
+    char unicode_prop_name_pool_str2352[sizeof("rohg")];
+    char unicode_prop_name_pool_str2353[sizeof("innyiakengpuachuehmong")];
+    char unicode_prop_name_pool_str2355[sizeof("incjkradicalssupplement")];
+    char unicode_prop_name_pool_str2364[sizeof("newtailue")];
+    char unicode_prop_name_pool_str2365[sizeof("newline")];
+    char unicode_prop_name_pool_str2366[sizeof("lepcha")];
+    char unicode_prop_name_pool_str2375[sizeof("deprecated")];
+    char unicode_prop_name_pool_str2381[sizeof("buhd")];
+    char unicode_prop_name_pool_str2391[sizeof("inglagolitic")];
+    char unicode_prop_name_pool_str2395[sizeof("inaegeannumbers")];
+    char unicode_prop_name_pool_str2400[sizeof("modifiersymbol")];
+    char unicode_prop_name_pool_str2410[sizeof("surrogate")];
+    char unicode_prop_name_pool_str2418[sizeof("inletterlikesymbols")];
+    char unicode_prop_name_pool_str2426[sizeof("idstrinaryoperator")];
+    char unicode_prop_name_pool_str2442[sizeof("intagalog")];
+    char unicode_prop_name_pool_str2443[sizeof("tangut")];
+    char unicode_prop_name_pool_str2445[sizeof("osmanya")];
+    char unicode_prop_name_pool_str2447[sizeof("oalpha")];
+    char unicode_prop_name_pool_str2448[sizeof("inphagspa")];
+    char unicode_prop_name_pool_str2455[sizeof("ugaritic")];
+    char unicode_prop_name_pool_str2456[sizeof("otheridcontinue")];
+    char unicode_prop_name_pool_str2460[sizeof("inarabicpresentationformsb")];
+    char unicode_prop_name_pool_str2462[sizeof("inbassavah")];
+    char unicode_prop_name_pool_str2469[sizeof("other")];
+    char unicode_prop_name_pool_str2478[sizeof("othernumber")];
+    char unicode_prop_name_pool_str2480[sizeof("sylotinagri")];
+    char unicode_prop_name_pool_str2487[sizeof("ingothic")];
+    char unicode_prop_name_pool_str2498[sizeof("inbuhid")];
+    char unicode_prop_name_pool_str2502[sizeof("inlatin1supplement")];
+    char unicode_prop_name_pool_str2516[sizeof("intagbanwa")];
+    char unicode_prop_name_pool_str2523[sizeof("shaw")];
+    char unicode_prop_name_pool_str2529[sizeof("oldhungarian")];
+    char unicode_prop_name_pool_str2538[sizeof("inmahjongtiles")];
+    char unicode_prop_name_pool_str2542[sizeof("hung")];
+    char unicode_prop_name_pool_str2544[sizeof("tifinagh")];
+    char unicode_prop_name_pool_str2554[sizeof("inbopomofo")];
+    char unicode_prop_name_pool_str2561[sizeof("narb")];
+    char unicode_prop_name_pool_str2571[sizeof("inyisyllables")];
+    char unicode_prop_name_pool_str2573[sizeof("kayahli")];
+    char unicode_prop_name_pool_str2578[sizeof("otheralphabetic")];
+    char unicode_prop_name_pool_str2582[sizeof("phagspa")];
+    char unicode_prop_name_pool_str2584[sizeof("inprivateusearea")];
+    char unicode_prop_name_pool_str2588[sizeof("elba")];
+    char unicode_prop_name_pool_str2591[sizeof("nchar")];
+    char unicode_prop_name_pool_str2607[sizeof("spaceseparator")];
+    char unicode_prop_name_pool_str2609[sizeof("tibt")];
+    char unicode_prop_name_pool_str2611[sizeof("extendedpictographic")];
+    char unicode_prop_name_pool_str2615[sizeof("tibetan")];
+    char unicode_prop_name_pool_str2616[sizeof("sgnw")];
+    char unicode_prop_name_pool_str2622[sizeof("hexdigit")];
+    char unicode_prop_name_pool_str2623[sizeof("tfng")];
+    char unicode_prop_name_pool_str2627[sizeof("inbamumsupplement")];
+    char unicode_prop_name_pool_str2632[sizeof("tavt")];
+    char unicode_prop_name_pool_str2633[sizeof("incombininghalfmarks")];
+    char unicode_prop_name_pool_str2634[sizeof("inarabicmathematicalalphabeticsymbols")];
+    char unicode_prop_name_pool_str2638[sizeof("khudawadi")];
+    char unicode_prop_name_pool_str2641[sizeof("inhalfwidthandfullwidthforms")];
+    char unicode_prop_name_pool_str2652[sizeof("inhangulsyllables")];
+    char unicode_prop_name_pool_str2653[sizeof("elym")];
+    char unicode_prop_name_pool_str2669[sizeof("symbol")];
+    char unicode_prop_name_pool_str2692[sizeof("bassavah")];
+    char unicode_prop_name_pool_str2696[sizeof("elymaic")];
+    char unicode_prop_name_pool_str2698[sizeof("changeswhencasemapped")];
+    char unicode_prop_name_pool_str2709[sizeof("oldturkic")];
+    char unicode_prop_name_pool_str2725[sizeof("inplayingcards")];
+    char unicode_prop_name_pool_str2767[sizeof("zp")];
+    char unicode_prop_name_pool_str2775[sizeof("elbasan")];
+    char unicode_prop_name_pool_str2776[sizeof("buhid")];
+    char unicode_prop_name_pool_str2779[sizeof("noncharactercodepoint")];
+    char unicode_prop_name_pool_str2785[sizeof("finalpunctuation")];
+    char unicode_prop_name_pool_str2794[sizeof("inpsalterpahlavi")];
+    char unicode_prop_name_pool_str2800[sizeof("inpaucinhau")];
+    char unicode_prop_name_pool_str2801[sizeof("nonspacingmark")];
+    char unicode_prop_name_pool_str2804[sizeof("changeswhentitlecased")];
+    char unicode_prop_name_pool_str2808[sizeof("inindicsiyaqnumbers")];
+    char unicode_prop_name_pool_str2813[sizeof("phlp")];
+    char unicode_prop_name_pool_str2824[sizeof("wspace")];
+    char unicode_prop_name_pool_str2831[sizeof("nbat")];
+    char unicode_prop_name_pool_str2836[sizeof("hluw")];
+    char unicode_prop_name_pool_str2838[sizeof("cypriot")];
+    char unicode_prop_name_pool_str2839[sizeof("nabataean")];
+    char unicode_prop_name_pool_str2841[sizeof("inalchemicalsymbols")];
+    char unicode_prop_name_pool_str2847[sizeof("dupl")];
+    char unicode_prop_name_pool_str2856[sizeof("otherlowercase")];
+    char unicode_prop_name_pool_str2875[sizeof("inarabicsupplement")];
+    char unicode_prop_name_pool_str2876[sizeof("inalphabeticpresentationforms")];
+    char unicode_prop_name_pool_str2890[sizeof("otherletter")];
+    char unicode_prop_name_pool_str2916[sizeof("emojipresentation")];
+    char unicode_prop_name_pool_str2930[sizeof("changeswhenlowercased")];
+    char unicode_prop_name_pool_str2953[sizeof("dashpunctuation")];
+    char unicode_prop_name_pool_str2954[sizeof("oldsogdian")];
+    char unicode_prop_name_pool_str2970[sizeof("intangutcomponents")];
+    char unicode_prop_name_pool_str2977[sizeof("soyombo")];
+    char unicode_prop_name_pool_str2996[sizeof("paragraphseparator")];
+    char unicode_prop_name_pool_str3012[sizeof("changeswhencasefolded")];
+    char unicode_prop_name_pool_str3015[sizeof("othersymbol")];
+    char unicode_prop_name_pool_str3020[sizeof("inlatinextendedb")];
+    char unicode_prop_name_pool_str3072[sizeof("otheruppercase")];
+    char unicode_prop_name_pool_str3079[sizeof("otheridstart")];
+    char unicode_prop_name_pool_str3084[sizeof("inhebrew")];
+    char unicode_prop_name_pool_str3088[sizeof("oldnortharabian")];
+    char unicode_prop_name_pool_str3092[sizeof("omath")];
+    char unicode_prop_name_pool_str3099[sizeof("incypriotsyllabary")];
+    char unicode_prop_name_pool_str3118[sizeof("inmathematicaloperators")];
+    char unicode_prop_name_pool_str3146[sizeof("changeswhenuppercased")];
+    char unicode_prop_name_pool_str3154[sizeof("nshu")];
+    char unicode_prop_name_pool_str3182[sizeof("insuperscriptsandsubscripts")];
+    char unicode_prop_name_pool_str3188[sizeof("ogrext")];
+    char unicode_prop_name_pool_str3197[sizeof("inhanguljamoextendedb")];
+    char unicode_prop_name_pool_str3198[sizeof("alphabetic")];
+    char unicode_prop_name_pool_str3199[sizeof("dep")];
+    char unicode_prop_name_pool_str3216[sizeof("oupper")];
+    char unicode_prop_name_pool_str3258[sizeof("zyyy")];
+    char unicode_prop_name_pool_str3267[sizeof("aghb")];
+    char unicode_prop_name_pool_str3285[sizeof("ogham")];
+    char unicode_prop_name_pool_str3306[sizeof("rejang")];
+    char unicode_prop_name_pool_str3324[sizeof("tagb")];
+    char unicode_prop_name_pool_str3350[sizeof("hyphen")];
+    char unicode_prop_name_pool_str3355[sizeof("insupplementalarrowsa")];
+    char unicode_prop_name_pool_str3413[sizeof("inpahawhhmong")];
+    char unicode_prop_name_pool_str3459[sizeof("nushu")];
+    char unicode_prop_name_pool_str3478[sizeof("othermath")];
+    char unicode_prop_name_pool_str3491[sizeof("insupplementalarrowsc")];
+    char unicode_prop_name_pool_str3494[sizeof("insupplementalmathematicaloperators")];
+    char unicode_prop_name_pool_str3500[sizeof("otherdefaultignorablecodepoint")];
+    char unicode_prop_name_pool_str3527[sizeof("inhighprivateusesurrogates")];
+    char unicode_prop_name_pool_str3538[sizeof("duployan")];
+    char unicode_prop_name_pool_str3663[sizeof("oldsoutharabian")];
+    char unicode_prop_name_pool_str3666[sizeof("tglg")];
+    char unicode_prop_name_pool_str3685[sizeof("tagalog")];
+    char unicode_prop_name_pool_str3692[sizeof("inbopomofoextended")];
+    char unicode_prop_name_pool_str3731[sizeof("signwriting")];
+    char unicode_prop_name_pool_str3750[sizeof("inegyptianhieroglyphs")];
+    char unicode_prop_name_pool_str3763[sizeof("inegyptianhieroglyphformatcontrols")];
+    char unicode_prop_name_pool_str3807[sizeof("upper")];
+    char unicode_prop_name_pool_str3810[sizeof("otherpunctuation")];
+    char unicode_prop_name_pool_str3872[sizeof("ethiopic")];
+    char unicode_prop_name_pool_str3881[sizeof("hebrew")];
+    char unicode_prop_name_pool_str3901[sizeof("telugu")];
+    char unicode_prop_name_pool_str3910[sizeof("uppercase")];
+    char unicode_prop_name_pool_str3937[sizeof("insupplementalpunctuation")];
+    char unicode_prop_name_pool_str3946[sizeof("unifiedideograph")];
+    char unicode_prop_name_pool_str3961[sizeof("pahawhhmong")];
+    char unicode_prop_name_pool_str3971[sizeof("inglagoliticsupplement")];
+    char unicode_prop_name_pool_str3992[sizeof("inboxdrawing")];
+    char unicode_prop_name_pool_str4279[sizeof("uppercaseletter")];
+    char unicode_prop_name_pool_str4298[sizeof("othergraphemeextend")];
+    char unicode_prop_name_pool_str4401[sizeof("inhighsurrogates")];
+    char unicode_prop_name_pool_str4476[sizeof("insupplementalarrowsb")];
+    char unicode_prop_name_pool_str4562[sizeof("inhangulcompatibilityjamo")];
+    char unicode_prop_name_pool_str4563[sizeof("egyp")];
+    char unicode_prop_name_pool_str4577[sizeof("insupplementalsymbolsandpictographs")];
+    char unicode_prop_name_pool_str4659[sizeof("nyiakengpuachuehmong")];
+    char unicode_prop_name_pool_str4688[sizeof("insupplementaryprivateuseareaa")];
+    char unicode_prop_name_pool_str4822[sizeof("openpunctuation")];
+    char unicode_prop_name_pool_str4851[sizeof("egyptianhieroglyphs")];
+    char unicode_prop_name_pool_str5809[sizeof("insupplementaryprivateuseareab")];
   };
 static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =
   {
     "lana",
-    "lina",
-    "yi",
-    "cn",
     "z",
+    "yi",
+    "lina",
     "mn",
     "yiii",
-    "ci",
+    "cn",
+    "maka",
     "mani",
+    "zzzz",
+    "inkannada",
+    "ci",
     "lo",
     "lao",
     "laoo",
     "miao",
-    "maka",
-    "me",
+    "innko",
     "co",
+    "me",
     "loe",
-    "inkannada",
-    "innko",
-    "zzzz",
     "gran",
     "pi",
     "lineara",
+    "mark",
     "cari",
     "carian",
-    "pe",
     "po",
-    "kana",
     "mendekikakui",
-    "geor",
-    "meeteimayek",
-    "mark",
-    "m",
     "grek",
-    "mero",
+    "pe",
+    "meeteimayek",
+    "inkharoshthi",
+    "geor",
+    "greek",
     "mro",
     "mroo",
+    "kana",
+    "mero",
+    "m",
     "gonm",
-    "c",
     "cakm",
-    "greek",
-    "inkharoshthi",
-    "mandaic",
     "inosmanya",
-    "inarmenian",
     "inmanichaean",
-    "common",
+    "inarmenian",
     "inmro",
     "inmiao",
-    "qaai",
+    "c",
     "inchakma",
+    "common",
+    "mandaic",
+    "inmyanmar",
+    "inmakasar",
+    "qaai",
+    "inideographicsymbolsandpunctuation",
+    "inkhmer",
     "cans",
-    "connectorpunctuation",
+    "prependedconcatenationmark",
     "lm",
     "marc",
-    "inmyanmar",
-    "vai",
-    "vaii",
-    "inideographicsymbolsandpunctuation",
-    "merc",
-    "inavestan",
-    "incuneiformnumbersandpunctuation",
-    "inmakasar",
+    "connectorpunctuation",
     "inrunic",
     "incarian",
-    "prependedconcatenationmark",
-    "lc",
-    "inipaextensions",
-    "inkhmer",
-    "perm",
+    "inavestan",
     "combiningmark",
+    "incuneiformnumbersandpunctuation",
+    "merc",
+    "perm",
     "inahom",
-    "cc",
+    "inipaextensions",
     "incherokee",
-    "mc",
     "insharada",
-    "masaramgondi",
-    "incuneiform",
     "makasar",
-    "qaac",
     "inarrows",
-    "armn",
+    "lc",
+    "masaramgondi",
+    "incuneiform",
+    "mc",
+    "cc",
+    "inzanabazarsquare",
     "lineseparator",
+    "armn",
+    "qmark",
     "armi",
-    "pc",
-    "armenian",
     "insamaritan",
-    "inmasaramgondi",
-    "inzanabazarsquare",
-    "qmark",
+    "armenian",
     "inmarchen",
-    "zs",
-    "cs",
-    "incyrillic",
-    "incham",
-    "latn",
+    "inmasaramgondi",
+    "qaac",
+    "pc",
     "inscriptionalparthian",
+    "latn",
     "latin",
     "ri",
-    "inkhmersymbols",
-    "pcm",
     "inthaana",
+    "inkhmersymbols",
+    "inkatakana",
+    "incyrillic",
+    "inthai",
+    "incham",
+    "inkaithi",
+    "zs",
     "mtei",
+    "vai",
+    "vaii",
+    "initialpunctuation",
+    "cs",
     "insyriac",
-    "ps",
-    "inthai",
+    "pcm",
+    "intakri",
+    "mand",
     "l",
-    "innewa",
-    "inkatakana",
-    "ascii",
-    "initialpunctuation",
-    "inkaithi",
-    "arabic",
-    "inideographicdescriptioncharacters",
-    "inlineara",
-    "mand",
-    "mongolian",
-    "inlao",
-    "katakana",
+    "ps",
+    "dia",
+    "inkanaextendeda",
+    "di",
     "mend",
-    "intakri",
-    "inruminumeralsymbols",
-    "prti",
     "modi",
-    "inwarangciti",
-    "incjkcompatibilityforms",
-    "inspecials",
-    "incjkcompatibilityideographs",
     "ideo",
+    "katakana",
+    "prti",
+    "inideographicdescriptioncharacters",
+    "inlineara",
+    "xidcontinue",
+    "brai",
+    "inlao",
+    "ascii",
     "privateuse",
-    "kali",
+    "arabic",
+    "mongolian",
     "inmyanmarextendeda",
+    "inruminumeralsymbols",
     "letter",
-    "brai",
-    "inkanaextendeda",
-    "vs",
-    "xidcontinue",
-    "lower",
-    "inchesssymbols",
-    "control",
-    "inadlam",
+    "innandinagari",
+    "inmeeteimayek",
+    "inoldnortharabian",
     "grlink",
     "knda",
-    "inmeeteimayek",
     "kannada",
-    "inmiscellaneousmathematicalsymbolsa",
-    "palm",
-    "inlycian",
+    "incjkcompatibilityforms",
+    "incjkcompatibilityideographs",
+    "inmodi",
+    "kali",
+    "control",
+    "inadlam",
+    "inspecials",
+    "inmendekikakui",
     "intransportandmapsymbols",
-    "inoldnortharabian",
-    "inemoticons",
     "letternumber",
-    "inmodi",
     "xidc",
-    "lowercase",
-    "inancientsymbols",
-    "cwcm",
     "inmedefaidrin",
-    "psalterpahlavi",
-    "gothic",
-    "inmendekikakui",
+    "inchesssymbols",
+    "inemoticons",
     "brahmi",
     "inolditalic",
-    "inmalayalam",
+    "palm",
+    "inlycian",
+    "inmiscellaneousmathematicalsymbolsa",
     "xids",
-    "incommonindicnumberforms",
-    "meroiticcursive",
-    "inlinearbideograms",
-    "patternwhitespace",
+    "psalterpahlavi",
     "insundanese",
-    "joinc",
     "inoldsogdian",
-    "incjkstrokes",
-    "so",
-    "patternsyntax",
+    "diacritic",
+    "gothic",
+    "inancientsymbols",
+    "meroiticcursive",
+    "inmalayalam",
+    "patternwhitespace",
+    "sk",
+    "insmallkanaextension",
+    "inmandaic",
     "lt",
+    "so",
+    "inlinearbideograms",
+    "incommonindicnumberforms",
     "incjkcompatibilityideographssupplement",
-    "inmandaic",
-    "insylotinagri",
     "idc",
-    "sk",
-    "alnum",
-    "sora",
-    "bamum",
     "inoldsoutharabian",
-    "patws",
-    "inmusicalsymbols",
+    "insylotinagri",
     "idsbinaryoperator",
-    "indominotiles",
-    "bass",
-    "innewtailue",
-    "ital",
-    "inmiscellaneoussymbols",
+    "sora",
+    "bamum",
+    "inkanasupplement",
+    "incjkstrokes",
+    "joinc",
     "inopticalcharacterrecognition",
+    "vs",
+    "indominotiles",
+    "batk",
     "grext",
-    "inkanasupplement",
-    "inmiscellaneoussymbolsandarrows",
-    "inmiscellaneoussymbolsandpictographs",
-    "unknown",
+    "batak",
+    "patws",
     "inmodifiertoneletters",
+    "ital",
+    "bass",
+    "decimalnumber",
+    "alnum",
     "ids",
-    "zl",
+    "print",
     "inlatinextendeda",
-    "ll",
+    "intaitham",
+    "inmusicalsymbols",
     "intaile",
-    "incontrolpictures",
-    "s",
-    "batk",
     "samr",
-    "lisu",
-    "print",
     "samaritan",
+    "s",
     "inlatinextendede",
-    "intaitham",
-    "pauc",
-    "batak",
-    "sm",
     "bali",
+    "lisu",
+    "pauc",
+    "patternsyntax",
+    "incontrolpictures",
+    "blank",
+    "inmiscellaneoussymbols",
+    "ll",
     "inancientgreekmusicalnotation",
-    "uideo",
-    "intaixuanjingsymbols",
-    "oriya",
-    "incyrillicextendeda",
-    "bengali",
+    "zl",
+    "inlydian",
+    "sm",
+    "inmiscellaneoussymbolsandarrows",
     "inugaritic",
+    "bengali",
+    "pd",
+    "inmiscellaneoussymbolsandpictographs",
+    "medf",
+    "cf",
     "balinese",
-    "sc",
+    "medefaidrin",
+    "han",
     "intamil",
-    "inlydian",
+    "hani",
     "inmultani",
-    "gong",
-    "blank",
-    "ingrantha",
-    "mong",
-    "inearlydynasticcuneiform",
+    "hano",
+    "inshorthandformatcontrols",
     "insaurashtra",
-    "georgian",
-    "zinh",
-    "inosage",
-    "ingeneralpunctuation",
-    "incaucasianalbanian",
-    "pd",
-    "canadianaboriginal",
-    "glagolitic",
-    "inspacingmodifierletters",
-    "idcontinue",
+    "pf",
     "inoldturkic",
-    "plrd",
-    "joincontrol",
+    "idcontinue",
+    "hanunoo",
+    "sc",
+    "inkhojki",
     "idst",
-    "inhanifirohingya",
-    "osage",
-    "incyrillicextendedc",
-    "ingeorgian",
-    "unassigned",
-    "lowercaseletter",
-    "emoji",
+    "canadianaboriginal",
+    "hira",
+    "plrd",
+    "incaucasianalbanian",
     "indeseret",
+    "inearlydynasticcuneiform",
+    "inspacingmodifierletters",
+    "innewa",
+    "idstart",
+    "zinh",
+    "incyrillicextendeda",
+    "dsrt",
+    "cased",
+    "glagolitic",
+    "inhanifirohingya",
     "inancientgreeknumbers",
-    "inmongolian",
-    "cher",
-    "cherokee",
+    "inmeeteimayekextensions",
+    "intaixuanjingsymbols",
+    "joincontrol",
+    "runr",
+    "inwarangciti",
+    "deseret",
     "inhiragana",
+    "sind",
+    "cherokee",
+    "inlatinextendedc",
+    "adlm",
     "phoenician",
+    "cher",
     "marchen",
-    "xsux",
+    "inkhudawadi",
+    "sinhala",
+    "lower",
+    "graphemelink",
+    "xidstart",
+    "ingrantha",
+    "bidic",
+    "xdigit",
+    "casedletter",
+    "gong",
+    "multani",
+    "gunjalagondi",
     "cham",
     "chakma",
-    "inmeeteimayekextensions",
-    "inlatinextendedc",
+    "mong",
     "kaithi",
-    "graphemebase",
-    "idstart",
-    "osma",
-    "adlm",
     "inmahajani",
-    "cased",
-    "runr",
-    "sinhala",
-    "manichaean",
+    "graphemebase",
+    "insiddham",
     "inogham",
-    "graphemelink",
-    "ingurmukhi",
-    "cwt",
+    "inosage",
+    "incountingrodnumerals",
+    "inwancho",
     "khojki",
-    "khar",
-    "multani",
-    "gunjalagondi",
-    "casedletter",
-    "inethiopic",
+    "ingeneralpunctuation",
+    "georgian",
+    "incyrillicextendedc",
+    "inkayahli",
+    "khar",
+    "inoriya",
+    "manichaean",
+    "bamu",
+    "zanb",
+    "oriya",
     "inolchiki",
-    "variationselector",
-    "sind",
-    "incountingrodnumerals",
-    "logicalorderexception",
-    "insinhala",
-    "bidic",
-    "dia",
-    "insorasompeng",
-    "anatolianhieroglyphs",
-    "inlowsurrogates",
-    "di",
-    "ahom",
-    "inenclosedalphanumerics",
+    "linb",
+    "inethiopic",
+    "wara",
+    "ingeorgian",
+    "innabataean",
+    "inkanbun",
     "adlam",
-    "inkhudawadi",
+    "inbhaiksuki",
+    "insinhala",
+    "inelbasan",
+    "lowercase",
+    "takri",
+    "inmongolian",
+    "invai",
+    "xsux",
     "cntrl",
-    "xidstart",
-    "xdigit",
-    "phnx",
-    "emojimodifier",
-    "khmr",
-    "insiddham",
-    "cwl",
-    "bamu",
-    "ingreekandcoptic",
-    "inmiscellaneoustechnical",
+    "emoji",
     "sterm",
-    "inscriptionalpahlavi",
+    "cuneiform",
+    "cwcm",
+    "hatran",
+    "linearb",
+    "taile",
     "inlatinextendedadditional",
-    "kharoshthi",
-    "runic",
-    "odi",
-    "ahex",
-    "khmer",
+    "inenclosedalphanumerics",
+    "anatolianhieroglyphs",
     "incyrillicsupplement",
+    "intamilsupplement",
+    "inmiscellaneoustechnical",
+    "ahom",
     "incherokeesupplement",
-    "inmeroitichieroglyphs",
-    "enclosingmark",
-    "glag",
-    "inkangxiradicals",
-    "math",
+    "takr",
+    "khmr",
+    "incjkunifiedideographsextensiona",
     "quotationmark",
-    "goth",
-    "emojimodifierbase",
-    "ugar",
+    "lyci",
+    "lycian",
+    "ingurmukhi",
+    "runic",
+    "limb",
+    "inscriptionalpahlavi",
+    "hatr",
+    "variationselector",
+    "modifierletter",
+    "incjkunifiedideographsextensione",
+    "mymr",
+    "myanmar",
     "lu",
+    "kharoshthi",
+    "inarabic",
     "radical",
-    "incjkunifiedideographsextensiona",
-    "beng",
-    "braille",
-    "n",
+    "khmer",
+    "inunifiedcanadianaboriginalsyllabics",
+    "osage",
     "sundanese",
-    "olck",
-    "incjkunifiedideographsextensione",
-    "diacritic",
+    "innewtailue",
+    "logicalorderexception",
+    "math",
+    "braille",
+    "goth",
+    "insorasompeng",
+    "insoyombo",
+    "arab",
+    "saur",
+    "guru",
+    "term",
+    "paucinhau",
+    "inbasiclatin",
+    "inarabicpresentationformsa",
+    "punct",
+    "gurmukhi",
     "grantha",
+    "inshavian",
+    "osma",
     "inenclosedalphanumericsupplement",
-    "olchiki",
-    "oidc",
-    "olower",
-    "regionalindicator",
-    "no",
     "intirhuta",
+    "inelymaic",
     "inhatran",
-    "saur",
+    "incjkunifiedideographsextensionc",
+    "emojimodifier",
+    "uideo",
+    "bidicontrol",
+    "phnx",
+    "limbu",
+    "n",
+    "inenclosedideographicsupplement",
+    "mult",
     "kthi",
-    "ingeometricshapes",
-    "guru",
-    "ingreekextended",
-    "paucinhau",
+    "incjkunifiedideographs",
+    "ingreekandcoptic",
+    "inoldhungarian",
+    "incjkcompatibility",
+    "grbase",
+    "nandinagari",
+    "brah",
+    "no",
+    "sd",
+    "nko",
+    "nkoo",
     "xpeo",
+    "sidd",
+    "inherited",
     "p",
     "phli",
-    "nko",
-    "nkoo",
-    "oids",
-    "indogra",
+    "inmeroitichieroglyphs",
     "inphoenician",
-    "punct",
-    "limbu",
-    "gurmukhi",
-    "mult",
-    "brah",
-    "taile",
-    "inoldhungarian",
-    "takri",
-    "bidicontrol",
-    "invai",
-    "incjkunifiedideographsextensionc",
-    "inenclosedideographicsupplement",
-    "decimalnumber",
-    "lepc",
-    "inherited",
-    "incjkunifiedideographs",
-    "graphemeextend",
+    "inmayannumerals",
     "saurashtra",
-    "caseignorable",
-    "emojicomponent",
-    "takr",
+    "inkangxiradicals",
+    "enclosingmark",
+    "graphemeextend",
+    "beng",
+    "inbatak",
+    "glag",
+    "ahex",
+    "patsyn",
+    "odi",
+    "dogra",
+    "intibetan",
+    "lydi",
+    "lydian",
+    "inblockelements",
+    "cwcf",
+    "inunifiedcanadianaboriginalsyllabicsextended",
+    "regionalindicator",
+    "ingreekextended",
+    "emojimodifierbase",
     "inanatolianhieroglyphs",
-    "inornamentaldingbats",
-    "inphaistosdisc",
-    "insogdian",
-    "indingbats",
-    "sd",
-    "zanb",
-    "insinhalaarchaicnumbers",
-    "ideographic",
-    "sidd",
-    "linb",
-    "sogdian",
+    "indogra",
+    "taiviet",
+    "inyiradicals",
+    "unassigned",
+    "insundanesesupplement",
+    "innumberforms",
+    "lowercaseletter",
+    "dogr",
+    "lepc",
     "bhks",
-    "sogo",
+    "word",
+    "gujr",
+    "inphaistosdisc",
     "bhaiksuki",
-    "term",
-    "insundanesesupplement",
-    "intags",
-    "innabataean",
+    "dash",
+    "inarabicextendeda",
+    "gujarati",
+    "inlatinextendedd",
+    "innoblock",
+    "java",
+    "ingeometricshapes",
+    "cyrl",
+    "indevanagari",
+    "inbalinese",
+    "inbyzantinemusicalsymbols",
+    "tale",
+    "deva",
+    "hex",
+    "inmyanmarextendedb",
     "sinh",
+    "cwt",
     "shavian",
-    "inbhaiksuki",
-    "inelbasan",
-    "inimperialaramaic",
-    "inshavian",
-    "intangut",
-    "inshorthandformatcontrols",
-    "inkanbun",
+    "devanagari",
+    "oidc",
+    "javanese",
+    "mlym",
+    "incjkunifiedideographsextensiond",
     "sentenceterminal",
-    "medf",
-    "coptic",
-    "linearb",
-    "medefaidrin",
-    "inethiopicextendeda",
+    "malayalam",
     "inhanunoo",
-    "han",
-    "cwcf",
-    "hani",
-    "limb",
-    "hano",
-    "ingeometricshapesextended",
-    "hanunoo",
-    "inlatinextendedd",
-    "inarabic",
-    "cwu",
-    "asciihexdigit",
-    "ininscriptionalparthian",
-    "format",
-    "ininscriptionalpahlavi",
-    "hira",
-    "dsrt",
-    "copt",
-    "ugaritic",
-    "newa",
-    "arab",
-    "inkhojki",
-    "oldpersian",
+    "insinhalaarchaicnumbers",
+    "olck",
+    "inimperialaramaic",
+    "olower",
+    "palmyrene",
+    "avestan",
+    "incjkunifiedideographsextensionf",
+    "insogdian",
+    "indingbats",
+    "olchiki",
+    "oids",
     "punctuation",
-    "deseret",
-    "newtailue",
-    "newline",
-    "ext",
     "sund",
-    "ogam",
-    "inbasiclatin",
-    "inarabicpresentationformsa",
+    "inbraillepatterns",
+    "emojicomponent",
+    "ideographic",
+    "taml",
+    "format",
+    "inornamentaldingbats",
+    "coptic",
+    "caseignorable",
+    "idsb",
+    "inmiscellaneousmathematicalsymbolsb",
+    "sogdian",
+    "sogo",
+    "terminalpunctuation",
+    "intangut",
+    "intifinagh",
+    "inlowsurrogates",
+    "invariationselectors",
+    "copt",
+    "soyo",
+    "intags",
+    "inverticalforms",
+    "ininscriptionalparthian",
+    "ininscriptionalpahlavi",
+    "meroitichieroglyphs",
+    "asciihexdigit",
+    "inethiopicextendeda",
+    "invedicextensions",
+    "nand",
+    "cwl",
     "cprt",
-    "imperialaramaic",
-    "incjkunifiedideographsextensiond",
-    "assigned",
-    "taiviet",
     "innushu",
-    "inoriya",
-    "wara",
-    "java",
-    "sorasompeng",
-    "inkayahli",
-    "orkh",
-    "closepunctuation",
-    "grbase",
-    "tale",
+    "zanabazarsquare",
+    "ingeometricshapesextended",
+    "avst",
+    "imperialaramaic",
     "bopo",
-    "javanese",
-    "osge",
-    "oldpermic",
+    "sarb",
     "inoldpersian",
-    "phag",
-    "alpha",
-    "lyci",
-    "lycian",
+    "intaiviet",
+    "mahj",
     "inkatakanaphoneticextensions",
-    "incjksymbolsandpunctuation",
-    "inhanguljamo",
-    "inhanguljamoextendeda",
-    "avestan",
-    "inpalmyrene",
-    "inlepcha",
-    "indevanagari",
-    "taml",
-    "sgnw",
-    "inblockelements",
+    "mahajani",
+    "closepunctuation",
     "inlisu",
-    "mymr",
-    "myanmar",
-    "graph",
-    "cuneiform",
-    "extender",
-    "inphoneticextensions",
-    "inmongoliansupplement",
-    "bopomofo",
-    "intibetan",
-    "innumberforms",
-    "shaw",
-    "inbatak",
-    "inoldpermic",
-    "incoptic",
-    "invariationselectors",
-    "insoyombo",
-    "terminalpunctuation",
-    "bugi",
-    "insyriacsupplement",
-    "sogd",
-    "hatran",
-    "inbyzantinemusicalsymbols",
-    "inbalinese",
-    "buginese",
-    "innoblock",
-    "inethiopicsupplement",
-    "inglagolitic",
-    "ingeorgiansupplement",
-    "space",
-    "sharada",
-    "dogra",
-    "avst",
-    "hex",
-    "inunifiedcanadianaboriginalsyllabics",
-    "inverticalforms",
-    "spacingmark",
-    "inarabicextendeda",
-    "hatr",
-    "modifierletter",
-    "inmyanmarextendedb",
-    "incjkcompatibility",
-    "khudawadi",
-    "invedicextensions",
-    "inethiopicextended",
-    "ingeorgianextended",
-    "shrd",
-    "dogr",
-    "intelugu",
-    "inmiscellaneousmathematicalsymbolsb",
-    "inmayannumerals",
-    "olditalic",
-    "inbraillepatterns",
-    "oalpha",
-    "inmathematicalalphanumericsymbols",
-    "inphoneticextensionssupplement",
-    "intagalog",
-    "insuttonsignwriting",
-    "siddham",
-    "intaiviet",
-    "nl",
-    "separator",
-    "ethi",
-    "patsyn",
-    "rohg",
+    "softdotted",
+    "unknown",
     "invariationselectorssupplement",
-    "inyiradicals",
-    "otheridcontinue",
-    "idsb",
-    "insmallformvariants",
-    "lydi",
-    "lydian",
-    "other",
-    "othernumber",
-    "cyrl",
-    "nd",
-    "induployan",
-    "dash",
-    "zanabazarsquare",
-    "incopticepactnumbers",
-    "number",
-    "inphagspa",
-    "mlym",
-    "malayalam",
-    "word",
-    "sarb",
-    "tang",
-    "otheralphabetic",
-    "tagbanwa",
-    "lepcha",
-    "surrogate",
-    "palmyrene",
-    "cf",
-    "ingothic",
-    "inmeroiticcursive",
-    "tamil",
-    "oldhungarian",
-    "titlecaseletter",
-    "thaa",
-    "inunifiedcanadianaboriginalsyllabicsextended",
-    "thaana",
-    "thai",
-    "pf",
-    "extendedpictographic",
-    "incjkradicalssupplement",
-    "indevanagariextended",
-    "gujr",
-    "gujarati",
-    "tirh",
-    "caucasianalbanian",
-    "incyrillicextendedb",
-    "soyo",
-    "inhangulsyllables",
-    "inbamum",
-    "taitham",
-    "meroitichieroglyphs",
-    "intifinagh",
-    "talu",
-    "inbengali",
-    "incjkunifiedideographsextensionf",
-    "buhd",
-    "telu",
-    "inbuginese",
-    "idstrinaryoperator",
-    "tirhuta",
-    "oldturkic",
-    "incombiningdiacriticalmarks",
-    "phagspa",
-    "incombiningdiacriticalmarksforsymbols",
-    "changeswhencasemapped",
-    "inlatin1supplement",
-    "inbrahmi",
+    "syrc",
     "hang",
-    "nchar",
-    "oldsogdian",
-    "deva",
+    "incjksymbolsandpunctuation",
     "ingujarati",
-    "otherlowercase",
+    "bopomofo",
+    "alpha",
+    "khoj",
+    "inpalmyrene",
     "ingunjalagondi",
-    "devanagari",
-    "syrc",
-    "mahj",
-    "hiragana",
-    "orya",
-    "mahajani",
+    "inoldpermic",
+    "inlepcha",
+    "assigned",
     "incurrencysymbols",
-    "spaceseparator",
-    "otherletter",
+    "insmallformvariants",
+    "sorasompeng",
     "inlinearbsyllabary",
+    "oldpersian",
+    "caucasianalbanian",
+    "inenclosedcjklettersandmonths",
+    "hiragana",
+    "inbamum",
     "inrejang",
+    "graph",
+    "sharada",
+    "inethiopicsupplement",
+    "indevanagariextended",
+    "incoptic",
+    "insyriacsupplement",
+    "inmeroiticcursive",
     "hmng",
-    "ogrext",
-    "inaegeannumbers",
-    "changeswhentitlecased",
-    "zp",
+    "intelugu",
+    "incombiningdiacriticalmarks",
     "mathsymbol",
-    "khoj",
-    "incombiningdiacriticalmarkssupplement",
-    "warangciti",
+    "titlecaseletter",
+    "ugar",
+    "incombiningdiacriticalmarksforsymbols",
+    "spacingmark",
+    "shrd",
+    "injavanese",
     "syriac",
-    "finalpunctuation",
-    "othersymbol",
-    "currencysymbol",
+    "space",
+    "hebr",
+    "ext",
+    "inhanguljamo",
+    "phag",
+    "inhanguljamoextendeda",
+    "wancho",
+    "bugi",
+    "tamil",
+    "sogd",
+    "orkh",
+    "oldpermic",
+    "siddham",
+    "incyrillicextendedb",
+    "inbrahmi",
+    "inmongoliansupplement",
+    "thaa",
+    "thaana",
+    "thai",
+    "buginese",
+    "ingeorgiansupplement",
     "digit",
-    "emojipresentation",
-    "inpsalterpahlavi",
-    "softdotted",
-    "phlp",
-    "noncharactercodepoint",
-    "inlimbu",
-    "nonspacingmark",
-    "omath",
     "cyrillic",
-    "inenclosedcjklettersandmonths",
-    "tangut",
-    "changeswhenlowercased",
-    "inalphabeticpresentationforms",
-    "intangutcomponents",
-    "incombiningdiacriticalmarksextended",
-    "ogham",
-    "osmanya",
-    "intagbanwa",
-    "inprivateusearea",
-    "inpaucinhau",
-    "otheruppercase",
     "sylo",
-    "elba",
-    "paragraphseparator",
-    "inbassavah",
-    "otheridstart",
-    "signwriting",
+    "inphoneticextensions",
+    "separator",
+    "inethiopicextended",
+    "inmathematicalalphanumericsymbols",
+    "insymbolsandpictographsextendeda",
+    "nd",
+    "tirh",
+    "tirhuta",
+    "incombiningdiacriticalmarkssupplement",
+    "extender",
+    "wcho",
+    "inbengali",
+    "talu",
+    "tang",
+    "warangciti",
+    "tagbanwa",
+    "orya",
+    "nl",
+    "induployan",
+    "cwu",
+    "inbuginese",
+    "telu",
+    "ogam",
+    "taitham",
     "rjng",
+    "insuttonsignwriting",
+    "incombiningdiacriticalmarksextended",
+    "number",
+    "inyijinghexagramsymbols",
     "whitespace",
+    "currencysymbol",
+    "inottomansiyaqnumbers",
+    "inlimbu",
+    "incopticepactnumbers",
+    "ingeorgianextended",
+    "inphoneticextensionssupplement",
+    "any",
+    "osge",
+    "defaultignorablecodepoint",
+    "hangul",
+    "newa",
+    "ethi",
+    "hanifirohingya",
+    "hmnp",
+    "olditalic",
     "incjkunifiedideographsextensionb",
-    "inletterlikesymbols",
-    "buhid",
-    "oupper",
-    "bassavah",
-    "inhebrew",
-    "narb",
-    "inbuhid",
-    "inbopomofo",
-    "elbasan",
-    "incombininghalfmarks",
-    "inindicsiyaqnumbers",
-    "changeswhenuppercased",
-    "inmathematicaloperators",
-    "inarabicmathematicalalphabeticsymbols",
-    "hluw",
-    "hexdigit",
+    "rohg",
+    "innyiakengpuachuehmong",
+    "incjkradicalssupplement",
+    "newtailue",
+    "newline",
+    "lepcha",
     "deprecated",
-    "insuperscriptsandsubscripts",
-    "nshu",
-    "injavanese",
-    "inbamumsupplement",
-    "hangul",
-    "unifiedideograph",
-    "tavt",
-    "othermath",
-    "pahawhhmong",
+    "buhd",
+    "inglagolitic",
+    "inaegeannumbers",
+    "modifiersymbol",
+    "surrogate",
+    "inletterlikesymbols",
+    "idstrinaryoperator",
+    "intagalog",
+    "tangut",
+    "osmanya",
+    "oalpha",
+    "inphagspa",
+    "ugaritic",
+    "otheridcontinue",
+    "inarabicpresentationformsb",
+    "inbassavah",
+    "other",
+    "othernumber",
     "sylotinagri",
+    "ingothic",
+    "inbuhid",
+    "inlatin1supplement",
+    "intagbanwa",
+    "shaw",
+    "oldhungarian",
+    "inmahjongtiles",
     "hung",
+    "tifinagh",
+    "inbopomofo",
+    "narb",
+    "inyisyllables",
     "kayahli",
-    "inpahawhhmong",
-    "upper",
-    "inalchemicalsymbols",
-    "nbat",
-    "nabataean",
-    "uppercase",
-    "hebr",
-    "inmahjongtiles",
-    "oldnortharabian",
-    "inarabicsupplement",
+    "otheralphabetic",
+    "phagspa",
+    "inprivateusearea",
+    "elba",
+    "nchar",
+    "spaceseparator",
     "tibt",
+    "extendedpictographic",
     "tibetan",
-    "inhighprivateusesurrogates",
-    "insupplementalarrowsa",
-    "inarabicpresentationformsb",
-    "otherdefaultignorablecodepoint",
+    "sgnw",
+    "hexdigit",
+    "tfng",
+    "inbamumsupplement",
+    "tavt",
+    "incombininghalfmarks",
+    "inarabicmathematicalalphabeticsymbols",
+    "khudawadi",
+    "inhalfwidthandfullwidthforms",
+    "inhangulsyllables",
+    "elym",
     "symbol",
+    "bassavah",
+    "elymaic",
+    "changeswhencasemapped",
+    "oldturkic",
     "inplayingcards",
-    "inhalfwidthandfullwidthforms",
+    "zp",
+    "elbasan",
+    "buhid",
+    "noncharactercodepoint",
+    "finalpunctuation",
+    "inpsalterpahlavi",
+    "inpaucinhau",
+    "nonspacingmark",
+    "changeswhentitlecased",
+    "inindicsiyaqnumbers",
+    "phlp",
     "wspace",
-    "tfng",
-    "insupplementalmathematicaloperators",
-    "insupplementalarrowsc",
-    "inhanguljamoextendedb",
-    "aghb",
+    "nbat",
+    "hluw",
     "cypriot",
-    "nushu",
-    "tifinagh",
-    "otherpunctuation",
-    "alphabetic",
+    "nabataean",
+    "inalchemicalsymbols",
     "dupl",
-    "tglg",
-    "changeswhencasefolded",
-    "tagalog",
-    "modifiersymbol",
-    "any",
-    "inglagoliticsupplement",
-    "ethiopic",
-    "uppercaseletter",
+    "otherlowercase",
+    "inarabicsupplement",
+    "inalphabeticpresentationforms",
+    "otherletter",
+    "emojipresentation",
+    "changeswhenlowercased",
     "dashpunctuation",
-    "hanifirohingya",
-    "inyijinghexagramsymbols",
+    "oldsogdian",
+    "intangutcomponents",
+    "soyombo",
+    "paragraphseparator",
+    "changeswhencasefolded",
+    "othersymbol",
+    "inlatinextendedb",
+    "otheruppercase",
+    "otheridstart",
+    "inhebrew",
+    "oldnortharabian",
+    "omath",
     "incypriotsyllabary",
+    "inmathematicaloperators",
+    "changeswhenuppercased",
+    "nshu",
+    "insuperscriptsandsubscripts",
+    "ogrext",
+    "inhanguljamoextendedb",
+    "alphabetic",
+    "dep",
+    "oupper",
+    "zyyy",
+    "aghb",
+    "ogham",
     "rejang",
-    "defaultignorablecodepoint",
     "tagb",
-    "dep",
-    "inyisyllables",
+    "hyphen",
+    "insupplementalarrowsa",
+    "inpahawhhmong",
+    "nushu",
+    "othermath",
+    "insupplementalarrowsc",
+    "insupplementalmathematicaloperators",
+    "otherdefaultignorablecodepoint",
+    "inhighprivateusesurrogates",
+    "duployan",
     "oldsoutharabian",
-    "inlatinextendedb",
-    "insupplementalpunctuation",
-    "othergraphemeextend",
+    "tglg",
+    "tagalog",
+    "inbopomofoextended",
+    "signwriting",
+    "inegyptianhieroglyphs",
+    "inegyptianhieroglyphformatcontrols",
+    "upper",
+    "otherpunctuation",
+    "ethiopic",
     "hebrew",
+    "telugu",
+    "uppercase",
+    "insupplementalpunctuation",
+    "unifiedideograph",
+    "pahawhhmong",
+    "inglagoliticsupplement",
     "inboxdrawing",
+    "uppercaseletter",
+    "othergraphemeextend",
     "inhighsurrogates",
-    "telugu",
-    "inbopomofoextended",
-    "soyombo",
-    "inegyptianhieroglyphs",
-    "openpunctuation",
-    "insupplementaryprivateuseareaa",
-    "hyphen",
+    "insupplementalarrowsb",
     "inhangulcompatibilityjamo",
     "egyp",
-    "insupplementalarrowsb",
-    "duployan",
     "insupplementalsymbolsandpictographs",
-    "zyyy",
+    "nyiakengpuachuehmong",
+    "insupplementaryprivateuseareaa",
+    "openpunctuation",
     "egyptianhieroglyphs",
     "insupplementaryprivateuseareab"
   };
@@ -26639,2216 +27028,2305 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(10),                               235},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(10),                               238},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(17),                               124},
+      {pool_offset(14),                                  262},
+      {-1},
 
-      {pool_offset(18),                                 257},
-      {-1}, {-1}, {-1},
+      {pool_offset(16),                                 261},
+
+      {pool_offset(17),                               125},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(22),                                  53},
+      {pool_offset(24),                                 154},
+
+      {pool_offset(25),                               261},
       {-1},
 
-      {pool_offset(24),                                  258},
+      {pool_offset(27),                                  53},
 
-      {pool_offset(25),                                 153},
+      {pool_offset(28),                               139},
       {-1},
 
-      {pool_offset(27),                               257},
+      {pool_offset(30),                               142},
       {-1}, {-1},
 
-      {pool_offset(30),                                  40},
+      {pool_offset(33),                               252},
 
-      {pool_offset(31),                               141},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(34),                          295},
+
+      {pool_offset(35),                                  40},
+      {-1},
 
-      {pool_offset(39),                                 129},
+      {pool_offset(37),                                 130},
 
-      {pool_offset(40),                                120},
+      {pool_offset(38),                                121},
 
-      {pool_offset(41),                               120},
+      {pool_offset(39),                               121},
       {-1}, {-1}, {-1},
 
-      {pool_offset(45),                               152},
+      {pool_offset(43),                               153},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(46),                               138},
+      {pool_offset(51),                              283},
+      {-1},
 
-      {pool_offset(47),                                 146},
+      {pool_offset(53),                                  54},
       {-1}, {-1},
 
-      {pool_offset(50),                                  54},
+      {pool_offset(56),                                 147},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(51),                                130},
+      {pool_offset(60),                                131},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(68),                          291},
+      {pool_offset(70),                                83},
       {-1},
 
-      {pool_offset(70),                              279},
-
-      {pool_offset(71),                               249},
-      {-1},
-
-      {pool_offset(73),                                82},
-      {-1},
-
-      {pool_offset(75),                                 202},
+      {pool_offset(72),                                 205},
       {-1}, {-1}, {-1},
 
-      {pool_offset(79),                            124},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(76),                            125},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(84),                                39},
+      {pool_offset(84),                               137},
+      {-1},
 
-      {pool_offset(85),                              39},
-      {-1}, {-1}, {-1},
+      {pool_offset(86),                                39},
 
-      {pool_offset(89),                                 198},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(87),                              39},
+      {-1}, {-1},
 
-      {pool_offset(95),                                 203},
+      {pool_offset(90),                                 206},
 
-      {pool_offset(96),                               112},
+      {pool_offset(91),                       150},
       {-1}, {-1},
 
-      {pool_offset(99),                       149},
+      {pool_offset(94),                                87},
       {-1},
 
-      {pool_offset(101),                                79},
-
-      {pool_offset(102),                        148},
+      {pool_offset(96),                                 201},
       {-1}, {-1},
 
-      {pool_offset(105),                               136},
+      {pool_offset(99),                        149},
       {-1},
 
-      {pool_offset(107),                                  136},
-      {-1},
-
-      {pool_offset(109),                                86},
-      {-1},
+      {pool_offset(101),                       460},
 
-      {pool_offset(111),                               151},
-      {-1},
+      {pool_offset(102),                                80},
 
-      {pool_offset(113),                                156},
+      {pool_offset(103),                               87},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(114),                               156},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(107),                                157},
 
-      {pool_offset(120),                               143},
+      {pool_offset(108),                               157},
       {-1},
 
-      {pool_offset(122),                                   37},
+      {pool_offset(110),                               113},
+
+      {pool_offset(111),                               152},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(120),                                  137},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(132),                                45},
-      {-1}, {-1},
+      {pool_offset(133),                               144},
 
-      {pool_offset(135),                               86},
-      {-1}, {-1},
+      {pool_offset(134),                                45},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(138),                       456},
+      {pool_offset(139),                          446},
       {-1}, {-1},
 
-      {pool_offset(141),                            140},
-      {-1},
+      {pool_offset(142),                       463},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(143),                          442},
+      {pool_offset(146),                         277},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(144),                         273},
+      {pool_offset(151),                              512},
 
-      {pool_offset(145),                       459},
+      {pool_offset(152),                             516},
       {-1}, {-1}, {-1},
 
-      {pool_offset(149),                              55},
+      {pool_offset(156),                                   37},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(156),                              504},
+      {pool_offset(163),                           478},
+      {-1}, {-1},
 
-      {pool_offset(157),                             508},
+      {pool_offset(166),                              55},
       {-1}, {-1},
 
-      {pool_offset(160),                               105},
+      {pool_offset(169),                            141},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(182),                          301},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(187),                          503},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(192),                               106},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(168),                           473},
-      {-1},
+      {pool_offset(200), 517},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(170),                                38},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {pool_offset(204),                            314},
+      {-1}, {-1},
 
-      {pool_offset(181),               196},
+      {pool_offset(207),                                38},
       {-1},
 
-      {pool_offset(183),                                 128},
-      {-1}, {-1}, {-1},
+      {pool_offset(209),         207},
+      {-1},
 
-      {pool_offset(187),                               142},
+      {pool_offset(211),                                 129},
 
-      {pool_offset(188),                          297},
+      {pool_offset(212),                               143},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(189),                                251},
+      {pool_offset(219),               199},
 
-      {pool_offset(190),                               251},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(220),                            309},
 
-      {pool_offset(199), 509},
+      {pool_offset(221),                           437},
       {-1},
 
-      {pool_offset(201),                               150},
+      {pool_offset(223),                          464},
       {-1},
 
-      {pool_offset(203),                          460},
+      {pool_offset(225),                      137},
 
-      {pool_offset(204),   499},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(226),   506},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(210),                          497},
+      {pool_offset(231),                               151},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(211),                            305},
+      {pool_offset(238),                               177},
 
-      {pool_offset(212),                           433},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(239),                             492},
 
-      {pool_offset(217),         204},
+      {pool_offset(240),                    271},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(219),                                 119},
+      {pool_offset(251),                         306},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(220),                    267},
+      {pool_offset(257),                          480},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(222),                            310},
-      {-1}, {-1},
+      {pool_offset(268),                            139},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(225),                               174},
-      {-1},
+      {pool_offset(272),                           344},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(227),                      136},
+      {pool_offset(277),                                 120},
       {-1},
 
-      {pool_offset(229),                             487},
+      {pool_offset(279),                       144},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(230),                                  43},
-      {-1},
+      {pool_offset(283),                        505},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(290),                                 146},
+      {-1}, {-1},
 
-      {pool_offset(232),                         302},
+      {pool_offset(293),                                  43},
+      {-1},
 
-      {pool_offset(233),                                 145},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(295),                  496},
       {-1}, {-1},
 
-      {pool_offset(245),                          475},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(298),                      264},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(251),                       143},
+      {pool_offset(302),                                22},
+      {-1}, {-1},
 
-      {pool_offset(252),                        498},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(305),                              210},
 
-      {pool_offset(257),                            138},
+      {pool_offset(306),                               105},
       {-1}, {-1},
 
-      {pool_offset(260),                                56},
+      {pool_offset(309),                        284},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(261),                           340},
+      {pool_offset(316),                            22},
+      {-1},
 
-      {pool_offset(262),                                22},
-      {-1}, {-1},
+      {pool_offset(318),                          500},
 
-      {pool_offset(265),                      260},
+      {pool_offset(319),                     501},
+      {-1},
 
-      {pool_offset(266),                               104},
+      {pool_offset(321),                                56},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(275),                                 196},
+      {pool_offset(330),                                 199},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(335),              108},
 
-      {pool_offset(276),                            22},
+      {pool_offset(336),                               122},
       {-1}, {-1}, {-1},
 
-      {pool_offset(280),                        280},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(290),                     495},
+      {pool_offset(340),                              122},
       {-1},
 
-      {pool_offset(292),                  490},
+      {pool_offset(342),                                 212},
+      {-1}, {-1},
 
-      {pool_offset(293),                              207},
-      {-1},
+      {pool_offset(345),                           282},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(295),                          494},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(352),                     320},
+      {-1}, {-1},
 
-      {pool_offset(301),                                 262},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(355),                         375},
 
-      {pool_offset(314),                                  57},
-      {-1}, {-1}, {-1},
+      {pool_offset(356),                         275},
+
+      {pool_offset(357),                             298},
+      {-1},
 
-      {pool_offset(318),                         271},
+      {pool_offset(359),                             405},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(319),                             401},
-      {-1}, {-1}, {-1},
+      {pool_offset(367),                           476},
+      {-1},
 
-      {pool_offset(323),                               121},
+      {pool_offset(369),                                 266},
       {-1}, {-1},
 
-      {pool_offset(326),              107},
+      {pool_offset(372),                               149},
+      {-1}, {-1},
 
-      {pool_offset(327),                              121},
-      {-1},
+      {pool_offset(375),                                254},
+
+      {pool_offset(376),                               254},
+      {-1}, {-1},
 
-      {pool_offset(329),                                 209},
+      {pool_offset(379),                 205},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(383),                                  57},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(336),                     316},
+      {pool_offset(399),                           280},
+      {-1},
+
+      {pool_offset(401),                                207},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(415),                            491},
       {-1},
 
-      {pool_offset(347),                                204},
+      {pool_offset(417),                               141},
       {-1},
 
-      {pool_offset(349),                           278},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(419),                                  119},
 
-      {pool_offset(355),                               148},
-      {-1}, {-1},
+      {pool_offset(420),                                 208},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(358),                           276},
+      {pool_offset(427),                                 66},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(359),                                 205},
+      {pool_offset(431),                    521},
       {-1},
 
-      {pool_offset(361),                             294},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(433),                                  62},
+      {-1}, {-1},
 
-      {pool_offset(367),                                  118},
-      {-1}, {-1}, {-1},
+      {pool_offset(436),                               150},
 
-      {pool_offset(371),                             481},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(437),                               155},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(376),                         371},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(441),                               104},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(382),                               14},
+      {pool_offset(445),                           113},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(383),                 202},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(449),                               108},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(388),                           471},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(456), 372},
 
-      {pool_offset(393),                              21},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {pool_offset(457),                          450},
 
-      {pool_offset(405), 368},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(458),                        259},
       {-1}, {-1},
 
-      {pool_offset(417),                          446},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(461),                                34},
+      {-1},
 
-      {pool_offset(423),                               140},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(463),                              299},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(429),                          155},
+      {pool_offset(472),                               14},
+      {-1},
 
-      {pool_offset(430),                              295},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(474),                          54},
+      {-1}, {-1},
 
-      {pool_offset(435),                           112},
-      {-1},
+      {pool_offset(477),                              21},
 
-      {pool_offset(437),                               149},
+      {pool_offset(478),                          156},
       {-1},
 
-      {pool_offset(439),                            486},
-      {-1},
+      {pool_offset(480),                 406},
 
-      {pool_offset(441),               467},
+      {pool_offset(481),               471},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(442),                               107},
+      {pool_offset(485),                             119},
       {-1},
 
-      {pool_offset(444),                               154},
+      {pool_offset(487),                      495},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(447),                       489},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(453),            421},
-      {-1}, {-1}, {-1},
+      {pool_offset(499),                      412},
 
-      {pool_offset(457),                         425},
+      {pool_offset(500),                  462},
+      {-1}, {-1},
 
-      {pool_offset(458),       415},
+      {pool_offset(503),                              86},
 
-      {pool_offset(459),                               103},
+      {pool_offset(504),                               112},
       {-1}, {-1},
 
-      {pool_offset(462),                          54},
-
-      {pool_offset(463),                               113},
+      {pool_offset(507),                            112},
       {-1},
 
-      {pool_offset(465),                 402},
-      {-1}, {-1},
+      {pool_offset(509),            425},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(514),       419},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(468),                             118},
+      {pool_offset(528),                             489},
+
+      {pool_offset(529),                               114},
+      {-1}, {-1},
 
-      {pool_offset(469),                                34},
+      {pool_offset(532),                             43},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(470),                    513},
+      {pool_offset(536),                            538},
       {-1},
 
-      {pool_offset(472),                                 252},
+      {pool_offset(538),                         429},
+      {-1},
 
-      {pool_offset(473),                        255},
-      {-1}, {-1}, {-1},
+      {pool_offset(540),                     537},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(477),                                6},
+      {pool_offset(545),           550},
+      {-1},
 
-      {pool_offset(478),                     543},
+      {pool_offset(547),                       167},
       {-1},
 
-      {pool_offset(480),                             43},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(549),                               259},
 
-      {pool_offset(487),                            527},
+      {pool_offset(550),                      515},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(488),                              85},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(558),                     555},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(495),                               111},
+      {pool_offset(564),                        548},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(496),                      408},
+      {pool_offset(573),                              33},
       {-1},
 
-      {pool_offset(498),                            111},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(575),                        439},
+      {-1}, {-1},
 
-      {pool_offset(511), 351},
-      {-1}, {-1}, {-1},
+      {pool_offset(578),                               195},
+      {-1},
 
-      {pool_offset(515),                               192},
+      {pool_offset(580),                           436},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(516),                           432},
+      {pool_offset(588), 355},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(517),           538},
+      {pool_offset(594),                               260},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(526),                  458},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(603),                     209},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(532),                        536},
+      {pool_offset(619),                        325},
 
-      {pool_offset(533),                       165},
+      {pool_offset(620),                       472},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(536),                             484},
-      {-1}, {-1},
+      {pool_offset(632),                           66},
+      {-1},
 
-      {pool_offset(539),                               255},
-      {-1}, {-1}, {-1},
+      {pool_offset(634),                              82},
 
-      {pool_offset(543),                          131},
-      {-1},
+      {pool_offset(635),                   434},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(545),                   430},
-      {-1}, {-1},
+      {pool_offset(639),                    151},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(548),                                48},
+      {pool_offset(643),                        296},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(553),                      507},
+      {pool_offset(648),                  197},
+
+      {pool_offset(649),                                 225},
       {-1}, {-1},
 
-      {pool_offset(556),                     206},
+      {pool_offset(652),               522},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(656),                          285},
+
+      {pool_offset(657),                                 133},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(564),                              81},
+      {pool_offset(665),                                 227},
 
-      {pool_offset(565),                     526},
+      {pool_offset(666),                 431},
       {-1},
 
-      {pool_offset(567),                              33},
-      {-1},
+      {pool_offset(668),           396},
 
-      {pool_offset(569),                        435},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {pool_offset(669), 562},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(580),                        292},
+      {pool_offset(677),                                102},
 
-      {pool_offset(581),                               256},
+      {pool_offset(678),                  461},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(582),           392},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(699),                      395},
+      {-1},
 
-      {pool_offset(588),                    150},
+      {pool_offset(701),                  100},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(589),                 427},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(707),                               230},
 
-      {pool_offset(597),                  194},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(708),                               26},
 
-      {pool_offset(604),                        321},
-      {-1},
+      {pool_offset(709),                   520},
 
-      {pool_offset(606),                              109},
+      {pool_offset(710),                       380},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(611),                       468},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(619),                       376},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(715),                              110},
+      {-1}, {-1},
 
-      {pool_offset(626),                                 224},
+      {pool_offset(718),      348},
       {-1}, {-1}, {-1},
 
-      {pool_offset(630),                      193},
-
-      {pool_offset(631),                                 132},
-
-      {pool_offset(632), 549},
-      {-1}, {-1},
+      {pool_offset(722),                                 255},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(635),                          281},
+      {pool_offset(728),                      543},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(636),                      391},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(732),                                28},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(641),                                101},
+      {pool_offset(739),                               85},
+      {-1},
 
-      {pool_offset(642),                                 222},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(741),                               28},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(656),                               13},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(749),                              197},
+      {-1}, {-1},
 
-      {pool_offset(670),                               227},
+      {pool_offset(752),              393},
 
-      {pool_offset(671),                               26},
+      {pool_offset(753),                               175},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(672),                  457},
+      {pool_offset(760),                                27},
       {-1}, {-1},
 
-      {pool_offset(675),                              194},
+      {pool_offset(763),                      163},
+      {-1},
 
-      {pool_offset(676),                   518},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(765),                               13},
+      {-1},
 
-      {pool_offset(690),                   99},
+      {pool_offset(767),                                103},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(699),                      531},
+      {pool_offset(776),                                7},
       {-1},
 
-      {pool_offset(701),                                27},
-      {-1},
+      {pool_offset(778),                   269},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(703),                        315},
-      {-1},
+      {pool_offset(782),                          322},
 
-      {pool_offset(705),                               172},
+      {pool_offset(783),                   527},
       {-1},
 
-      {pool_offset(707),             349},
+      {pool_offset(785),                            318},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(794),                               216},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(809),                          216},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(813),                                  215},
       {-1}, {-1},
 
-      {pool_offset(710),      344},
+      {pool_offset(816),                   410},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(820),                                25},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(826),                               127},
+
+      {pool_offset(827),                               198},
+
+      {pool_offset(828),                      196},
 
-      {pool_offset(711),                               84},
+      {pool_offset(829),                  347},
 
-      {pool_offset(712),                   512},
+      {pool_offset(830),                                2},
       {-1}, {-1}, {-1},
 
-      {pool_offset(716),    357},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(834),             353},
 
-      {pool_offset(721), 535},
-      {-1},
+      {pool_offset(835),                                 128},
 
-      {pool_offset(723),                            249},
+      {pool_offset(836),      528},
 
-      {pool_offset(724),              389},
+      {pool_offset(837),                                 264},
 
-      {pool_offset(725),                                102},
+      {pool_offset(838),                           457},
+
+      {pool_offset(839),                                 226},
       {-1}, {-1}, {-1},
 
-      {pool_offset(729),                                 260},
+      {pool_offset(843),    361},
 
-      {pool_offset(730),                   265},
+      {pool_offset(844),                         442},
 
-      {pool_offset(731),                                 127},
+      {pool_offset(845),                             29},
 
-      {pool_offset(732),                            314},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(846),                                 200},
+      {-1},
 
-      {pool_offset(738),                  343},
+      {pool_offset(848), 547},
       {-1},
 
-      {pool_offset(740),                                  212},
+      {pool_offset(850),                               148},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(741),                                28},
+      {pool_offset(855),                                  44},
+      {-1}, {-1},
 
-      {pool_offset(742),                               213},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(858),                            25},
       {-1},
 
-      {pool_offset(753),                               126},
-      {-1}, {-1},
+      {pool_offset(860),                        148},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(756),                                7},
+      {pool_offset(865),                                 91},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(757),                          213},
+      {pool_offset(869),                            293},
 
-      {pool_offset(758),                   406},
+      {pool_offset(870),                                91},
 
-      {pool_offset(759),                          318},
+      {pool_offset(871),                          483},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(760),                               195},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(879),                                94},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(767),                               28},
-      {-1}, {-1},
+      {pool_offset(887),          525},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(770),                                 223},
-      {-1}, {-1},
+      {pool_offset(891),                       398},
+
+      {pool_offset(892),                                 202},
+      {-1},
+
+      {pool_offset(894),                        468},
+      {-1},
 
-      {pool_offset(773),                                25},
+      {pool_offset(896),                         102},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(778),      519},
+      {pool_offset(901),                             94},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(905),                                 218},
 
-      {pool_offset(779),                              248},
-      {-1},
+      {pool_offset(906),                           482},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(781),               521},
+      {pool_offset(913),                               101},
+      {-1},
 
-      {pool_offset(782),                              179},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(915),                  38},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(791),                364},
+      {pool_offset(923),                                98},
       {-1},
 
-      {pool_offset(793),                             29},
+      {pool_offset(925),                               153},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(794),                         438},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(939),                449},
 
-      {pool_offset(801),                            25},
+      {pool_offset(940),                          444},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(806),                                 215},
+      {pool_offset(945),           507},
 
-      {pool_offset(807),                            289},
+      {pool_offset(946),           272},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(808),                           453},
+      {pool_offset(950),                             486},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(809),                          478},
+      {pool_offset(972),                            103},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(814),                                88},
+      {pool_offset(977),                               106},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(981),                368},
       {-1}, {-1},
 
-      {pool_offset(817),                                2},
+      {pool_offset(984),                                64},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(993),                               41},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(823),                          480},
+      {pool_offset(999),                          81},
+      {-1}, {-1},
 
-      {pool_offset(824),                               155},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1002),                   470},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(833),           500},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1006),              433},
+      {-1},
 
-      {pool_offset(838),                       394},
+      {pool_offset(1008),            408},
 
-      {pool_offset(839),                            79},
+      {pool_offset(1009),               530},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(846),                               105},
+      {pool_offset(1016),                        110},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1020),                               214},
       {-1}, {-1},
 
-      {pool_offset(849),                            443},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1023),                       494},
+      {-1},
 
-      {pool_offset(854),               334},
+      {pool_offset(1025),                             64},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1035),                         374},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1039),                               118},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1047),                            52},
       {-1}, {-1},
 
-      {pool_offset(857),                445},
+      {pool_offset(1050),                   363},
       {-1},
 
-      {pool_offset(859),                                 197},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1052),                                16},
 
-      {pool_offset(866),                  38},
+      {pool_offset(1053),                         204},
+      {-1}, {-1},
 
-      {pool_offset(867),                          80},
+      {pool_offset(1056),                                52},
       {-1}, {-1},
 
-      {pool_offset(870),           268},
+      {pool_offset(1059),                            143},
+      {-1}, {-1},
 
-      {pool_offset(871),                         101},
-      {-1}, {-1}, {-1},
+      {pool_offset(1062),                        484},
 
-      {pool_offset(875),                        464},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1063),                            224},
+      {-1}, {-1},
 
-      {pool_offset(884),                               152},
+      {pool_offset(1066),                                6},
+      {-1},
 
-      {pool_offset(885),                        109},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1068),                        86},
 
-      {pool_offset(890),                               100},
+      {pool_offset(1069),                           260},
       {-1},
 
-      {pool_offset(892),                   466},
+      {pool_offset(1071),                          485},
 
-      {pool_offset(893),                              180},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1072),                               31},
+      {-1},
 
-      {pool_offset(898),                325},
+      {pool_offset(1074),                              11},
       {-1},
 
-      {pool_offset(900),                         298},
+      {pool_offset(1076),                        120},
       {-1},
 
-      {pool_offset(902),                          53},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1078),                                89},
 
-      {pool_offset(907),                    127},
+      {pool_offset(1079),                            158},
+      {-1}, {-1},
 
-      {pool_offset(908),                               71},
-      {-1}, {-1}, {-1},
+      {pool_offset(1082),                        89},
+      {-1},
 
-      {pool_offset(912),                          440},
-      {-1}, {-1}, {-1},
+      {pool_offset(1084),                                46},
+      {-1},
 
-      {pool_offset(916),              429},
+      {pool_offset(1086),                              45},
 
-      {pool_offset(917),                        311},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1087),                               156},
 
-      {pool_offset(922),                                52},
+      {pool_offset(1088),                             111},
 
-      {pool_offset(923),                            52},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1089),                         479},
 
-      {pool_offset(928),                         370},
+      {pool_offset(1090),                        84},
       {-1},
 
-      {pool_offset(930),                         201},
+      {pool_offset(1092),                          488},
+      {-1}, {-1},
 
-      {pool_offset(931),                            142},
+      {pool_offset(1095),                            308},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(937),                                58},
+      {pool_offset(1101),                            447},
 
-      {pool_offset(938),                                46},
+      {pool_offset(1102),              531},
       {-1},
 
-      {pool_offset(940),                              45},
-      {-1}, {-1},
+      {pool_offset(1104),                           536},
+
+      {pool_offset(1105),                             117},
+      {-1},
 
-      {pool_offset(943),            404},
+      {pool_offset(1107),               338},
 
-      {pool_offset(944),                   359},
+      {pool_offset(1108),                            80},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1117),                329},
+
+      {pool_offset(1118),                          400},
       {-1}, {-1},
 
-      {pool_offset(947),                             110},
-      {-1}, {-1}, {-1},
+      {pool_offset(1121),                               115},
+      {-1}, {-1},
 
-      {pool_offset(951),                        83},
+      {pool_offset(1124),                            292},
+      {-1},
 
-      {pool_offset(952),                            102},
+      {pool_offset(1126),                         142},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(953),                               181},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1132),                                26},
 
-      {pool_offset(962),                                16},
+      {pool_offset(1133),                               263},
       {-1}, {-1},
 
-      {pool_offset(965),                         474},
+      {pool_offset(1136),                              182},
 
-      {pool_offset(966),                               41},
+      {pool_offset(1137),                          328},
+
+      {pool_offset(1138),                               126},
       {-1}, {-1},
 
-      {pool_offset(969),                               211},
+      {pool_offset(1141),                         304},
+      {-1},
 
-      {pool_offset(970),                            221},
+      {pool_offset(1143),                               257},
 
-      {pool_offset(971),                         141},
+      {pool_offset(1144),                         302},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(972),                            304},
+      {pool_offset(1149),                        454},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(973),                        85},
-      {-1}, {-1},
+      {pool_offset(1154),                           378},
+      {-1},
 
-      {pool_offset(976),                         286},
+      {pool_offset(1156),                               16},
 
-      {pool_offset(977),                                 50},
+      {pool_offset(1157),                        499},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(982),                             116},
+      {pool_offset(1162),                          297},
 
-      {pool_offset(983),                               114},
-      {-1}, {-1}, {-1},
+      {pool_offset(1163),                          448},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(987),                            157},
-      {-1},
+      {pool_offset(1169),                          132},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(989),                        88},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1178),                              240},
 
-      {pool_offset(995),                        119},
+      {pool_offset(1179),                        315},
       {-1},
 
-      {pool_offset(997),                         300},
-      {-1},
+      {pool_offset(1181),                              390},
 
-      {pool_offset(999),                          324},
+      {pool_offset(1182),                                58},
 
-      {pool_offset(1000),                  252},
+      {pool_offset(1183),                                3},
       {-1}, {-1},
 
-      {pool_offset(1003),                               117},
+      {pool_offset(1186),                               72},
 
-      {pool_offset(1004),              522},
-      {-1}, {-1},
+      {pool_offset(1187),                              219},
+      {-1},
 
-      {pool_offset(1007),              130},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1189),                           58},
+      {-1}, {-1},
 
-      {pool_offset(1020),                          293},
-      {-1}, {-1}, {-1},
+      {pool_offset(1192),                                48},
+      {-1},
 
-      {pool_offset(1024),                               31},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1194),                              95},
+      {-1}, {-1},
 
-      {pool_offset(1034),                                 66},
+      {pool_offset(1197),                            126},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1035),                      472},
+      {pool_offset(1201),                              237},
 
-      {pool_offset(1036),                19},
-      {-1},
+      {pool_offset(1202),          336},
 
-      {pool_offset(1038),                    413},
+      {pool_offset(1203),            349},
       {-1},
 
-      {pool_offset(1040),                                  62},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1048),                                17},
-      {-1},
+      {pool_offset(1205),                19},
 
-      {pool_offset(1050),            345},
+      {pool_offset(1206),               276},
       {-1},
 
-      {pool_offset(1052),                               16},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1060),                        479},
-
-      {pool_offset(1061),                                3},
-
-      {pool_offset(1062),                           256},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1208),                  504},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1067),                              11},
+      {pool_offset(1215),           346},
       {-1},
 
-      {pool_offset(1069),                               201},
-      {-1},
+      {pool_offset(1217),                                17},
 
-      {pool_offset(1071),                       73},
+      {pool_offset(1218),               411},
 
-      {pool_offset(1072),                               115},
+      {pool_offset(1219),                               240},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1073),                          483},
+      {pool_offset(1224),                               116},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1077),                                 49},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1228),   384},
+      {-1}, {-1},
 
-      {pool_offset(1082),                                26},
-      {-1}, {-1}, {-1},
+      {pool_offset(1231),                      210},
+      {-1},
 
-      {pool_offset(1086),                   270},
+      {pool_offset(1233),                               135},
 
-      {pool_offset(1087),           342},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1234),                             135},
 
-      {pool_offset(1100),                              216},
+      {pool_offset(1235),                         290},
+      {-1},
 
-      {pool_offset(1101),               106},
+      {pool_offset(1237),                              214},
 
-      {pool_offset(1102),          332},
+      {pool_offset(1238),                               124},
+      {-1},
 
-      {pool_offset(1103),                         114},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1240),               107},
+      {-1},
 
-      {pool_offset(1125),                              211},
+      {pool_offset(1242),                                95},
       {-1},
 
-      {pool_offset(1127),                                183},
+      {pool_offset(1244),                  255},
+      {-1},
 
-      {pool_offset(1128),                                15},
-      {-1}, {-1}, {-1},
+      {pool_offset(1246),                     129},
 
-      {pool_offset(1132),                              115},
+      {pool_offset(1247),   560},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1138),               272},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1262),                               159},
+      {-1}, {-1},
+
+      {pool_offset(1265),                            159},
+      {-1},
 
-      {pool_offset(1145),               407},
+      {pool_offset(1267),                                 134},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1153),              454},
-      {-1}, {-1},
+      {pool_offset(1275),                         115},
 
-      {pool_offset(1156),                      146},
+      {pool_offset(1276),                           279},
+      {-1},
 
-      {pool_offset(1157),                                80},
+      {pool_offset(1278),                            211},
       {-1}, {-1},
 
-      {pool_offset(1160),                   367},
+      {pool_offset(1281),                              116},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1165),                               144},
-
-      {pool_offset(1166),                      207},
+      {pool_offset(1286), 307},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1172),                                81},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1179),                   74},
-
-      {pool_offset(1180),                               247},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1185),                                 133},
+      {pool_offset(1292),                              183},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1189),                            208},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1198),   380},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1296),                          232},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1203),                                29},
+      {pool_offset(1300),                        319},
       {-1},
 
-      {pool_offset(1205),                             34},
+      {pool_offset(1302),              131},
       {-1},
 
-      {pool_offset(1207),                                  159},
+      {pool_offset(1304),                               145},
       {-1},
 
-      {pool_offset(1209),                          229},
-
-      {pool_offset(1210),                               170},
-      {-1},
+      {pool_offset(1306),                             34},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1212),   547},
+      {pool_offset(1311),                                82},
 
-      {pool_offset(1213),                           66},
+      {pool_offset(1312),                      477},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1217),                             82},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1316),                          497},
+
+      {pool_offset(1317),                                21},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1322),                               217},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1223),   533},
+      {pool_offset(1329),                                90},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1227),                            170},
+      {pool_offset(1333),                               244},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1228),                               185},
+      {pool_offset(1337),                          198},
 
-      {pool_offset(1229),                             187},
+      {pool_offset(1338),                       267},
 
-      {pool_offset(1230),                  209},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1339),         421},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1239),                                 166},
+      {pool_offset(1347),                                8},
 
-      {pool_offset(1240),                          482},
-      {-1},
+      {pool_offset(1348),                            90},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1242),                           451},
+      {pool_offset(1354),                             83},
 
-      {pool_offset(1243),                               214},
+      {pool_offset(1355),                          445},
 
-      {pool_offset(1244),                               110},
-      {-1},
+      {pool_offset(1356),                               184},
 
-      {pool_offset(1246),                  348},
-      {-1}, {-1}, {-1},
+      {pool_offset(1357),   545},
+      {-1}, {-1},
 
-      {pool_offset(1250),                                89},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1360),                          487},
 
-      {pool_offset(1256),                    333},
-      {-1},
+      {pool_offset(1361),                          474},
 
-      {pool_offset(1258),                          195},
+      {pool_offset(1362),                           455},
       {-1},
 
-      {pool_offset(1260),                               175},
+      {pool_offset(1364),   558},
+
+      {pool_offset(1365),                       74},
       {-1}, {-1},
 
-      {pool_offset(1263),                                  190},
+      {pool_offset(1368),                              251},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1264),                               106},
+      {pool_offset(1373),                         31},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1265),                                164},
+      {pool_offset(1379),                               204},
 
-      {pool_offset(1266),                               164},
+      {pool_offset(1380),                              124},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1270),                               186},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1384),                                  160},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1276),                            488},
+      {pool_offset(1388),    546},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1280),                       452},
-      {-1}, {-1},
+      {pool_offset(1392),                               158},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1283),                                8},
+      {pool_offset(1398),                               111},
 
-      {pool_offset(1284),                              123},
+      {pool_offset(1399),             386},
       {-1},
 
-      {pool_offset(1286),                            89},
+      {pool_offset(1401),                   274},
+      {-1},
 
-      {pool_offset(1287),                               157},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1403),                     469},
+      {-1}, {-1},
 
-      {pool_offset(1293),                                33},
-      {-1}, {-1}, {-1},
+      {pool_offset(1406),                 383},
+      {-1}, {-1},
 
-      {pool_offset(1297),                              234},
+      {pool_offset(1409),                              84},
       {-1},
 
-      {pool_offset(1299),                     465},
+      {pool_offset(1411),                        162},
+
+      {pool_offset(1412),                                33},
       {-1},
 
-      {pool_offset(1301),                              237},
+      {pool_offset(1414),                                 168},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1421),                                 228},
       {-1},
 
-      {pool_offset(1303),                         31},
+      {pool_offset(1423),                                166},
 
-      {pool_offset(1304),                              386},
+      {pool_offset(1424),                               166},
+      {-1}, {-1},
 
-      {pool_offset(1305),   545},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1427),                               178},
+      {-1}, {-1},
 
-      {pool_offset(1314),    534},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1430),                               222},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1320),                      161},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1435),                          106},
       {-1},
 
-      {pool_offset(1331),                               122},
-      {-1},
+      {pool_offset(1437),                                  193},
+      {-1}, {-1},
 
-      {pool_offset(1333),                          105},
-      {-1}, {-1}, {-1},
+      {pool_offset(1440),                               107},
+      {-1}, {-1},
 
-      {pool_offset(1337),             382},
+      {pool_offset(1443),              458},
 
-      {pool_offset(1338),                      84},
+      {pool_offset(1444),                       456},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1339),                         214},
+      {pool_offset(1449),                    529},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1343),                       40},
-
-      {pool_offset(1344),                      72},
+      {pool_offset(1453),                         217},
+      {-1},
 
-      {pool_offset(1345),                               237},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1455),                   371},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1360),             502},
-      {-1}, {-1},
+      {pool_offset(1461),                      147},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1363),               537},
-      {-1}, {-1},
+      {pool_offset(1467),                      85},
 
-      {pool_offset(1366),                     431},
+      {pool_offset(1468),                                29},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1371),                          469},
-
-      {pool_offset(1372),                         350},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1473),                            326},
 
-      {pool_offset(1390),                                 225},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1474),                                81},
 
-      {pool_offset(1395),                               259},
+      {pool_offset(1475),                                15},
       {-1},
 
-      {pool_offset(1397),            476},
-
-      {pool_offset(1398),                        103},
+      {pool_offset(1477),                             196},
+      {-1},
 
-      {pool_offset(1399),                               219},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1479),                                186},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1404),                               125},
+      {pool_offset(1486),                               67},
       {-1}, {-1},
 
-      {pool_offset(1407),                            226},
+      {pool_offset(1489),                          300},
+      {-1},
+
+      {pool_offset(1491),                               136},
 
-      {pool_offset(1408),                                30},
-      {-1}, {-1},
+      {pool_offset(1492),                             136},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1411),                               176},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1499),                    351},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1420),                           30},
-      {-1}, {-1},
+      {pool_offset(1506),                                47},
 
-      {pool_offset(1423),                               241},
-      {-1},
+      {pool_offset(1507), 316},
 
-      {pool_offset(1425),              327},
-      {-1}, {-1},
+      {pool_offset(1508),                  212},
 
-      {pool_offset(1428),                             550},
+      {pool_offset(1509),                    337},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1432),                        450},
-      {-1}, {-1},
-
-      {pool_offset(1435),                               221},
-      {-1}, {-1},
+      {pool_offset(1513),                   75},
 
-      {pool_offset(1438),                            218},
+      {pool_offset(1514),             510},
       {-1},
 
-      {pool_offset(1440),                        493},
+      {pool_offset(1516),                            493},
 
-      {pool_offset(1441),                          444},
+      {pool_offset(1517),                            239},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1442),                  448},
-      {-1}, {-1}, {-1},
+      {pool_offset(1524),                       388},
 
-      {pool_offset(1446),                          441},
-      {-1},
+      {pool_offset(1525),                          53},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1448),                           510},
+      {pool_offset(1532),              331},
       {-1}, {-1},
 
-      {pool_offset(1451),          516},
+      {pool_offset(1535),                      343},
       {-1}, {-1},
 
-      {pool_offset(1454),                           374},
-
-      {pool_offset(1455),                   216},
+      {pool_offset(1538),                    128},
       {-1}, {-1},
 
-      {pool_offset(1458),                               147},
+      {pool_offset(1541),                                67},
+
+      {pool_offset(1542),                               123},
       {-1}, {-1},
 
-      {pool_offset(1461),                              56},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1545),                                30},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1466),                            125},
-      {-1},
+      {pool_offset(1553),                                12},
 
-      {pool_offset(1468),                        147},
+      {pool_offset(1554),                                88},
+
+      {pool_offset(1555),                     435},
       {-1},
 
-      {pool_offset(1470),                405},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1557),                           30},
+      {-1}, {-1},
 
-      {pool_offset(1478),                          307},
-      {-1}, {-1}, {-1},
+      {pool_offset(1560),                                61},
+      {-1},
+
+      {pool_offset(1562),                  287},
+      {-1}, {-1},
 
-      {pool_offset(1482),                                 90},
+      {pool_offset(1565),                            88},
 
-      {pool_offset(1483),                                47},
-      {-1}, {-1}, {-1},
+      {pool_offset(1566),                   394},
 
-      {pool_offset(1487),                                90},
+      {pool_offset(1567),                          567},
       {-1}, {-1},
 
-      {pool_offset(1490),                               123},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1570),                               109},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1497),                                93},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1576),                  352},
 
-      {pool_offset(1504),          540},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1577),                                60},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1520),                             93},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1582),                       288},
 
-      {pool_offset(1528),                   390},
+      {pool_offset(1583),                         324},
       {-1},
 
-      {pool_offset(1530),                           275},
-
-      {pool_offset(1531),                                 51},
-      {-1}, {-1},
-
-      {pool_offset(1534),                       15},
-      {-1}, {-1},
+      {pool_offset(1585),          526},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1537),            461},
+      {pool_offset(1589),                               237},
       {-1},
 
-      {pool_offset(1539),                              44},
-
-      {pool_offset(1540),             462},
+      {pool_offset(1591),                                65},
       {-1}, {-1},
 
-      {pool_offset(1543),                                97},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1594),                                 97},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1549),                                64},
+      {pool_offset(1601),                 404},
       {-1},
 
-      {pool_offset(1551),                                56},
+      {pool_offset(1603),                               224},
 
-      {pool_offset(1552),                           247},
-      {-1}, {-1},
+      {pool_offset(1604),                                 50},
+      {-1},
+
+      {pool_offset(1606),                            221},
 
-      {pool_offset(1555),                               163},
+      {pool_offset(1607),                          65},
       {-1},
 
-      {pool_offset(1557),                                21},
+      {pool_offset(1609),                               188},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1615),                           109},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1558),                           477},
+      {pool_offset(1621),                               140},
 
-      {pool_offset(1559),                         175},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1622),   559},
+      {-1},
 
-      {pool_offset(1569),                        190},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1624),                   219},
       {-1},
 
-      {pool_offset(1580),                             64},
+      {pool_offset(1626),                          140},
+      {-1},
 
-      {pool_offset(1581),                          162},
+      {pool_offset(1628),                          311},
 
-      {pool_offset(1582),                              0},
+      {pool_offset(1629),            481},
       {-1},
 
-      {pool_offset(1584),                                 78},
+      {pool_offset(1631),                               173},
       {-1},
 
-      {pool_offset(1586),                               229},
+      {pool_offset(1633),                  452},
+      {-1}, {-1},
 
-      {pool_offset(1587),                               169},
+      {pool_offset(1636),                             190},
       {-1},
 
-      {pool_offset(1589),                       263},
+      {pool_offset(1638),                          195},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1590),         417},
+      {pool_offset(1642),                             24},
       {-1}, {-1},
 
-      {pool_offset(1593),                                59},
+      {pool_offset(1645),   561},
 
-      {pool_offset(1594),                    104},
-      {-1}, {-1},
+      {pool_offset(1646),                          473},
 
-      {pool_offset(1597),   546},
+      {pool_offset(1647),                         354},
 
-      {pool_offset(1598),                            23},
+      {pool_offset(1648),                            173},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1654),                               189},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1605),                            236},
+      {pool_offset(1661),                        193},
+      {-1},
+
+      {pool_offset(1663),                               232},
+      {-1}, {-1},
+
+      {pool_offset(1666),                  357},
+      {-1}, {-1},
+
+      {pool_offset(1669),                      73},
       {-1}, {-1},
 
-      {pool_offset(1608),                            514},
+      {pool_offset(1672),                        104},
+
+      {pool_offset(1673),                               241},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1618),                            288},
-      {-1}, {-1}, {-1},
+      {pool_offset(1688),                              44},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1622),                               253},
-      {-1},
+      {pool_offset(1694),               549},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1624),                               108},
+      {pool_offset(1700),                              56},
       {-1},
 
-      {pool_offset(1626),                        227},
-      {-1},
+      {pool_offset(1702),                       40},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1628),                          396},
-      {-1},
+      {pool_offset(1708),                               100},
 
-      {pool_offset(1630),                               178},
+      {pool_offset(1709), 359},
       {-1}, {-1},
 
-      {pool_offset(1633),                   198},
+      {pool_offset(1712),                            229},
       {-1}, {-1},
 
-      {pool_offset(1636),                              83},
-      {-1},
+      {pool_offset(1715),                               179},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1638),                               234},
+      {pool_offset(1720),                244},
       {-1},
 
-      {pool_offset(1640),                                32},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1722),                           518},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1729),                         366},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1733),                    417},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1659),                           108},
+      {pool_offset(1743),               422},
       {-1},
 
-      {pool_offset(1661),                               180},
+      {pool_offset(1745),                                56},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1662),                          174},
+      {pool_offset(1750),                               231},
       {-1}, {-1},
 
-      {pool_offset(1665),                       439},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1753),                             563},
       {-1}, {-1},
 
-      {pool_offset(1677),                               200},
-
-      {pool_offset(1678),                                1},
-      {-1},
-
-      {pool_offset(1680),                               134},
-
-      {pool_offset(1681),                             134},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1756),                    423},
 
-      {pool_offset(1687),       377},
+      {pool_offset(1757),            465},
       {-1}, {-1},
 
-      {pool_offset(1690),         369},
+      {pool_offset(1760),             466},
+      {-1}, {-1},
 
-      {pool_offset(1691),                       299},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1763),                152},
 
-      {pool_offset(1697),              398},
-      {-1}, {-1}, {-1},
+      {pool_offset(1764),                       15},
+      {-1},
 
-      {pool_offset(1701),                             24},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1766),                409},
 
-      {pool_offset(1708),                        449},
+      {pool_offset(1767),                  332},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1709),                           323},
+      {pool_offset(1781),                               162},
 
-      {pool_offset(1710),                       284},
+      {pool_offset(1782),                                 49},
       {-1}, {-1},
 
-      {pool_offset(1713),                               238},
+      {pool_offset(1785),                                59},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1714),                               220},
+      {pool_offset(1791),                            523},
       {-1}, {-1},
 
-      {pool_offset(1717),                    347},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1726),                             385},
-      {-1},
-
-      {pool_offset(1728),                               158},
+      {pool_offset(1794),                    263},
       {-1}, {-1},
 
-      {pool_offset(1731),                            158},
-      {-1},
+      {pool_offset(1797),          552},
 
-      {pool_offset(1733),                                5},
-      {-1}, {-1},
+      {pool_offset(1798),                                24},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1736),                           58},
+      {pool_offset(1808),                    105},
+      {-1},
 
-      {pool_offset(1737),                            78},
-      {-1}, {-1}, {-1},
+      {pool_offset(1810),                                32},
+      {-1},
 
-      {pool_offset(1741),               329},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1812),                               180},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1749),              485},
+      {pool_offset(1819),                       443},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(1750),                            32},
+      {pool_offset(1830),                          407},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1754),                          296},
+      {pool_offset(1834),                               138},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1758),                      339},
+      {pool_offset(1838),       381},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1759),                               218},
+      {pool_offset(1845),                           138},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1760),                            322},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1871),                   201},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1765),                        437},
+      {pool_offset(1875),                             389},
+      {-1}, {-1},
 
-      {pool_offset(1766),                           360},
+      {pool_offset(1878),                         228},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1776),               418},
-      {-1}, {-1},
+      {pool_offset(1897),                            252},
 
-      {pool_offset(1779),                          491},
+      {pool_offset(1898),     564},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(1782),                241},
-
-      {pool_offset(1783),                                35},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1791),                 282},
-      {-1},
+      {pool_offset(1910),                               234},
 
-      {pool_offset(1793),                               226},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1911),                                92},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1798),                              94},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1926),         373},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1807),          517},
-      {-1},
+      {pool_offset(1932),                         291},
 
-      {pool_offset(1809),                         320},
-      {-1},
+      {pool_offset(1933),                            32},
+      {-1}, {-1},
 
-      {pool_offset(1811),                            35},
-      {-1}, {-1}, {-1},
+      {pool_offset(1936),                                1},
 
-      {pool_offset(1815),                          554},
+      {pool_offset(1937),                               117},
       {-1},
 
-      {pool_offset(1817),               301},
+      {pool_offset(1939),                        453},
       {-1}, {-1},
 
-      {pool_offset(1820),                       358},
-      {-1}, {-1}, {-1},
-
-      {pool_offset(1824),               361},
-      {-1},
-
-      {pool_offset(1826),                                9},
+      {pool_offset(1942),                     502},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1827),                            217},
+      {pool_offset(1948),                        441},
       {-1},
 
-      {pool_offset(1829),                               67},
+      {pool_offset(1950),                           327},
 
-      {pool_offset(1830),                                24},
+      {pool_offset(1951),                            23},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1834),                                 96},
+      {pool_offset(1955),                  340},
       {-1}, {-1},
 
-      {pool_offset(1837), 303},
+      {pool_offset(1958),                426},
 
-      {pool_offset(1838),                    419},
+      {pool_offset(1959),                        230},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1839),                        145},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1964),                 430},
 
-      {pool_offset(1845),                  283},
-      {-1}, {-1}, {-1},
+      {pool_offset(1965),                         178},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1849),                                94},
+      {pool_offset(1972),                   42},
 
-      {pool_offset(1850),                     128},
+      {pool_offset(1973),      382},
       {-1},
 
-      {pool_offset(1852),                 400},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1858),                 379},
-      {-1},
+      {pool_offset(1975),                            98},
 
-      {pool_offset(1860),                          117},
+      {pool_offset(1976),                            392},
       {-1}, {-1},
 
-      {pool_offset(1863),                  328},
+      {pool_offset(1979),                           401},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1868),                 363},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1875),                 326},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1984),                                5},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1883),                               217},
-      {-1}, {-1}, {-1},
+      {pool_offset(1990),                            220},
 
-      {pool_offset(1887),                                67},
+      {pool_offset(1991),               305},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1892),                           290},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1996),               399},
 
-      {pool_offset(1898), 355},
+      {pool_offset(1997),                           364},
 
-      {pool_offset(1899),                    520},
-      {-1}, {-1},
+      {pool_offset(1998),                 286},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1902),                          172},
-      {-1},
+      {pool_offset(2004),                  459},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1904),                  353},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2014),                               194},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1911),                             182},
-      {-1},
+      {pool_offset(2022),                           294},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1913),  523},
+      {pool_offset(2029),        273},
       {-1},
 
-      {pool_offset(1915),     330},
-
-      {pool_offset(1916),                          306},
+      {pool_offset(2031),                         226},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1921),                524},
+      {pool_offset(2036),                    133},
       {-1},
 
-      {pool_offset(1923),                            219},
-      {-1}, {-1}, {-1},
+      {pool_offset(2038),                               250},
 
-      {pool_offset(1927),                          403},
-      {-1}, {-1}, {-1},
+      {pool_offset(2039), 341},
 
-      {pool_offset(1931),                                 165},
+      {pool_offset(2040),                        146},
       {-1}, {-1},
 
-      {pool_offset(1934),                          258},
+      {pool_offset(2043),                               220},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1938),                                76},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2047),                         403},
 
-      {pool_offset(1943),                             193},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2048),                             234},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1948),                                92},
+      {pool_offset(2054),                                9},
       {-1},
 
-      {pool_offset(1950),     551},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2056),                                96},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1956),                       384},
+      {pool_offset(2061),                                 79},
+      {-1}, {-1},
 
-      {pool_offset(1957),                    185},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2064),                       303},
+      {-1},
 
-      {pool_offset(1964),                                99},
+      {pool_offset(2066),                               203},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1965),                422},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2076),              402},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1972),                               135},
+      {pool_offset(2082),                             256},
+      {-1},
 
-      {pool_offset(1973),                             135},
+      {pool_offset(2084),                                35},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1978),                               37},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1987),                        166},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-
-      {pool_offset(1999),                                60},
+      {pool_offset(2089),                              241},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2003),                                 161},
+      {pool_offset(2093),                               229},
+
+      {pool_offset(2094),                               181},
       {-1}, {-1},
 
-      {pool_offset(2006),                         515},
-      {-1},
+      {pool_offset(2097),                          177},
+      {-1}, {-1},
 
-      {pool_offset(2008),                                61},
+      {pool_offset(2100),                            222},
       {-1},
 
-      {pool_offset(2010),                    259},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2016),               434},
-      {-1}, {-1}, {-1},
+      {pool_offset(2102),                391},
+      {-1}, {-1},
 
-      {pool_offset(2020),                             159},
+      {pool_offset(2105),                           475},
       {-1}, {-1},
 
-      {pool_offset(2023),                          393},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2108),              490},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2032),                               139},
+      {pool_offset(2113),                               245},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2037),                          139},
+      {pool_offset(2118),                             245},
+      {-1},
 
-      {pool_offset(2038),                                12},
+      {pool_offset(2120),                               246},
       {-1},
 
-      {pool_offset(2040),                               177},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2122),                            35},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2127),               365},
+      {-1},
 
-      {pool_offset(2047),                               239},
+      {pool_offset(2129),                                4},
       {-1}, {-1},
 
-      {pool_offset(2050),                    182},
+      {pool_offset(2132),                            60},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2051),                           233},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2149),                               233},
 
-      {pool_offset(2057),                             122},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2150),               333},
 
-      {pool_offset(2062),                           57},
+      {pool_offset(2151),                          262},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2063),                          192},
+      {pool_offset(2159),                 367},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2064),                                  44},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2163),  532},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2070),                           436},
+      {pool_offset(2168),   556},
+      {-1},
 
-      {pool_offset(2071),                  455},
+      {pool_offset(2170),                                 163},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2077),                              238},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2176),                               249},
+      {-1},
 
-      {pool_offset(2084),                       171},
+      {pool_offset(2178),                            249},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2085),                    132},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2184), 335},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2092),                               242},
-      {-1}, {-1},
+      {pool_offset(2193),                            79},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2095), 312},
+      {pool_offset(2197),                               256},
       {-1},
 
-      {pool_offset(2097),                             242},
+      {pool_offset(2199),                          289},
       {-1},
 
-      {pool_offset(2099),                               243},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2201),                               164},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2109),                                 199},
+      {pool_offset(2206),                               242},
 
-      {pool_offset(2110),                77},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2207),                         257},
+      {-1}, {-1},
+
+      {pool_offset(2210),                           236},
+
+      {pool_offset(2211),                               182},
+
+      {pool_offset(2212),                                 167},
+
+      {pool_offset(2213),                         524},
+
+      {pool_offset(2214),                                 51},
       {-1},
 
-      {pool_offset(2121),            366},
+      {pool_offset(2216),                         321},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(2220),                               243},
       {-1}, {-1},
 
-      {pool_offset(2124),               395},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2223),                               172},
+      {-1}, {-1},
 
-      {pool_offset(2133),                                87},
+      {pool_offset(2226),                            238},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(2144),                            87},
+      {pool_offset(2237),                               213},
+      {-1}, {-1},
+
+      {pool_offset(2240),                533},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2158),                               246},
-      {-1},
+      {pool_offset(2250), 323},
 
-      {pool_offset(2160),                   42},
+      {pool_offset(2251),                             160},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2178),                387},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2264),            385},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2187),                               228},
+      {pool_offset(2277),                         258},
 
-      {pool_offset(2188),                  409},
-      {-1},
+      {pool_offset(2278),                     218},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2190),                            388},
+      {pool_offset(2285),              540},
+      {-1}, {-1},
 
-      {pool_offset(2191),                            235},
+      {pool_offset(2288),                            317},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2196),                151},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2293),               438},
+      {-1},
 
-      {pool_offset(2213),                         362},
+      {pool_offset(2295),                 330},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2214),                               162},
+      {pool_offset(2305),     334},
       {-1}, {-1},
 
-      {pool_offset(2217),                          285},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2222),   548},
+      {pool_offset(2308),                                 20},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(2223),                                36},
+      {pool_offset(2320),                               183},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2228),                               240},
+      {pool_offset(2325),           62},
 
-      {pool_offset(2229),                         317},
-      {-1}, {-1},
+      {pool_offset(2326),                              92},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2232),                 100},
+      {pool_offset(2333),                               165},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2233),                            246},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2343),                                77},
+      {-1},
 
-      {pool_offset(2238),                          178},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2345),                      93},
 
-      {pool_offset(2245),        269},
-      {-1}, {-1}, {-1},
+      {pool_offset(2346),                               171},
+      {-1},
 
-      {pool_offset(2249),                            200},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2348),                          175},
 
-      {pool_offset(2255), 337},
+      {pool_offset(2349),   557},
       {-1}, {-1},
 
-      {pool_offset(2258),               48},
+      {pool_offset(2352),                                93},
 
-      {pool_offset(2259),                 264},
+      {pool_offset(2353),             535},
       {-1},
 
-      {pool_offset(2261),                           470},
-      {-1},
+      {pool_offset(2355),            370},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2263),                                91},
+      {pool_offset(2364),                          164},
 
-      {pool_offset(2264),                              167},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(2365),                              0},
+
+      {pool_offset(2366),                             123},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2375),                          63},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2286),                         176},
+      {pool_offset(2381),                                36},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2391),                       362},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2299),                                65},
-      {-1},
+      {pool_offset(2395),                    432},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2301),                         287},
-      {-1}, {-1}, {-1},
+      {pool_offset(2400),                     225},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2305),                     187},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2410),                           57},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2311),                     496},
-      {-1}, {-1}, {-1},
+      {pool_offset(2418),                342},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2315),                          65},
-      {-1}, {-1}, {-1},
+      {pool_offset(2426),                 101},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2319),                               231},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2442),                          310},
 
-      {pool_offset(2325),                               137},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2443),                             242},
+      {-1},
 
-      {pool_offset(2330),                            97},
-      {-1}, {-1},
+      {pool_offset(2445),                            184},
+      {-1},
 
-      {pool_offset(2333),                               179},
-      {-1}, {-1},
+      {pool_offset(2447),                             185},
 
-      {pool_offset(2336),                           137},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2448),                          397},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2341),                  336},
+      {pool_offset(2455),                           250},
 
-      {pool_offset(2342),                     262},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2456),                    188},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2347),                        129},
+      {pool_offset(2460),         427},
+      {-1},
 
-      {pool_offset(2348),                 426},
-      {-1}, {-1},
+      {pool_offset(2462),                         513},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2351),                           397},
+      {pool_offset(2469),                               37},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2352),                               191},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2478),                        168},
+      {-1},
 
-      {pool_offset(2357),                             184},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2480),                        233},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2376),                    428},
+      {pool_offset(2487),                           440},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(2498),                            312},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2389),               50},
+      {pool_offset(2502),                 268},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2409),                                 261},
-      {-1},
+      {pool_offset(2516),                         313},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2411),                         223},
-      {-1}, {-1},
+      {pool_offset(2523),                               221},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2414),                               116},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2529),                       174},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2538),                     542},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2419), 331},
+      {pool_offset(2542),                               174},
       {-1},
 
-      {pool_offset(2421),                         253},
+      {pool_offset(2544),                           248},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2554),                         376},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2428),                             231},
-
-      {pool_offset(2429),                   199},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2561),                               176},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2437),                        224},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2571),                      387},
+      {-1},
 
-      {pool_offset(2444),                     215},
+      {pool_offset(2573),                            114},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2445),                                4},
+      {pool_offset(2578),                    185},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2449),                   75},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2455),                   463},
+      {pool_offset(2582),                            203},
+      {-1},
 
-      {pool_offset(2456),                         225},
+      {pool_offset(2584),                   418},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2460),                               206},
-
-      {pool_offset(2461),              167},
+      {pool_offset(2588),                                70},
       {-1}, {-1},
 
-      {pool_offset(2464),                            313},
+      {pool_offset(2591),                              169},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2465),                     153},
+      {pool_offset(2607),                     266},
       {-1},
 
-      {pool_offset(2467),                              188},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2609),                               247},
+      {-1},
 
-      {pool_offset(2473),                            60},
-      {-1}, {-1},
+      {pool_offset(2611),                78},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2476),      378},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2615),                            247},
 
-      {pool_offset(2482),                             239},
-      {-1},
+      {pool_offset(2616),                               223},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2484),               49},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {pool_offset(2622),                            97},
 
-      {pool_offset(2496),      416},
+      {pool_offset(2623),                               248},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2500),                 511},
-      {-1}, {-1},
-
-      {pool_offset(2503), 319},
+      {pool_offset(2627),                  511},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2508),                              169},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2518),                            181},
-      {-1}, {-1},
+      {pool_offset(2632),                               239},
 
-      {pool_offset(2521),                         309},
-      {-1}, {-1}, {-1},
+      {pool_offset(2633),               424},
 
-      {pool_offset(2525),                   414},
+      {pool_offset(2634), 541},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2529),                        492},
+      {pool_offset(2638),                          118},
       {-1}, {-1},
 
-      {pool_offset(2532),                     189},
+      {pool_offset(2641),       428},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2533),                               230},
-      {-1}, {-1}, {-1},
+      {pool_offset(2652),                  413},
 
-      {pool_offset(2537),                                70},
+      {pool_offset(2653),                                71},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2553),                 261},
-
-      {pool_offset(2554),                         505},
+      {pool_offset(2669),                             215},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2559),                       186},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2567),                        220},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2692),                            27},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2576),                               210},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2696),                             71},
+      {-1},
 
-      {pool_offset(2584),                         254},
+      {pool_offset(2698),               48},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2585),   544},
+      {pool_offset(2709),                          181},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2586),                338},
+      {pool_offset(2725),                     544},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2623),                               36},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2767),                                 265},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2642),                             189},
-      {-1},
+      {pool_offset(2775),                             70},
 
-      {pool_offset(2644),                            27},
+      {pool_offset(2776),                               36},
       {-1}, {-1},
 
-      {pool_offset(2647),                           274},
+      {pool_offset(2779),              169},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2653),                               173},
+      {pool_offset(2785),                   202},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2794),                   467},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2659),                            308},
-      {-1}, {-1},
+      {pool_offset(2800),                        498},
 
-      {pool_offset(2662),                         372},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2801),                     154},
       {-1}, {-1},
 
-      {pool_offset(2692),                             70},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2700),               420},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2707),                528},
+      {pool_offset(2804),               50},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2711),               51},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2808),                539},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2743),            341},
-      {-1},
-
-      {pool_offset(2745), 529},
+      {pool_offset(2813),                               209},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2764),                                19},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2770),                            96},
+      {pool_offset(2824),                             258},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2771),                          63},
+      {pool_offset(2831),                               161},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2776),        335},
+      {pool_offset(2836),                                19},
+      {-1},
 
-      {pool_offset(2777),                               168},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2838),                             59},
 
-      {pool_offset(2782),                         399},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2839),                          161},
+      {-1},
 
-      {pool_offset(2790),                  503},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2841),                551},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2798),                              91},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2847),                                68},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2856),                     190},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2826),                   248},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2875),                 281},
 
-      {pool_offset(2831),                               236},
+      {pool_offset(2876),      420},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-
-      {pool_offset(2843),                          188},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2849),                        191},
-
-      {pool_offset(2850),                        230},
-      {-1}, {-1},
-
-      {pool_offset(2853),                               171},
-      {-1}, {-1},
-
-      {pool_offset(2856),                            113},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2861),                      506},
-      {-1},
-
-      {pool_offset(2863),                               10},
+      {pool_offset(2890),                        130},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2884),                539},
+      {pool_offset(2916),                   76},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2930),               49},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2907),                               160},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2953),                    200},
 
-      {pool_offset(2915),                          160},
+      {pool_offset(2954),                         179},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2929),                          250},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2970),                 519},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2937),                                95},
+      {pool_offset(2977),                            231},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2947),                     530},
+      {pool_offset(2996),                 265},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2954),                    173},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3012),               47},
+      {-1}, {-1},
 
-      {pool_offset(2963),                 277},
+      {pool_offset(3015),                        227},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2968),                               244},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3020),                   270},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2974),                            244},
+      {pool_offset(3072),                     192},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2975),         412},
+      {pool_offset(3079),                       189},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2976),              352},
+      {pool_offset(3084),                           278},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2977),         423},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3088),                    176},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2986),     183},
+      {pool_offset(3092),                              191},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2987),                             212},
+      {pool_offset(3099),                 451},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3012),                     532},
-
-      {pool_offset(3013),       424},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3118),            345},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
 
-      {pool_offset(3052),                             254},
+      {pool_offset(3146),               51},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3154),                               170},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3071),                               245},
+      {pool_offset(3182),        339},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3188),                             187},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3080), 356},
-      {-1}, {-1},
+      {pool_offset(3197),              414},
 
-      {pool_offset(3083),              541},
+      {pool_offset(3198),                          18},
 
-      {pool_offset(3084),              410},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3199),                                 63},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3112),                                42},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3120),                             59},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3127),                              168},
-      {-1}, {-1},
-
-      {pool_offset(3130),                           245},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3139),                   203},
+      {pool_offset(3216),                             192},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-
-      {pool_offset(3177),                          18},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3184),                                68},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3190),                               232},
-      {-1}, {-1},
-
-      {pool_offset(3193),               47},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3258),                                55},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3210),                            232},
+      {pool_offset(3267),                                42},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3228),                     222},
+      {pool_offset(3285),                              172},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(3231),                                 20},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3306),                             213},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3239),             525},
+      {pool_offset(3324),                               236},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3350),                              99},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3262),                            76},
+      {pool_offset(3355),              356},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1},
 
-      {pool_offset(3293),                    133},
-      {-1}, {-1}, {-1},
-
-      {pool_offset(3297),                    197},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3413),                      514},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3304),                      92},
+      {pool_offset(3459),                              170},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3478),                          191},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(3491),              553},
+      {-1}, {-1},
+
+      {pool_offset(3494), 360},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3328),            381},
+      {pool_offset(3500),     186},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3337),                 447},
+      {pool_offset(3527),         416},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(3538),                            68},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-
-      {pool_offset(3375),                             210},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3426),           62},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3663),                    180},
+      {-1}, {-1},
 
-      {pool_offset(3431),                               233},
+      {pool_offset(3666),                               235},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3685),                            235},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3447),                                 63},
+      {pool_offset(3692),                 379},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3471),                      383},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(3485),                    177},
+      {pool_offset(3731),                        223},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3504),                   266},
+      {pool_offset(3750),              508},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(3514),          365},
-      {-1}, {-1},
-
-      {pool_offset(3517),                184},
+      {pool_offset(3763), 509},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3562),                              95},
-      {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3564),                       346},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3807),                               10},
+      {-1}, {-1},
 
-      {pool_offset(3570),                   411},
+      {pool_offset(3810),                   206},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3872),                            77},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3603),                             240},
+      {pool_offset(3881),                              96},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(3623),                 375},
+      {pool_offset(3901),                             243},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3910),                          253},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3937),          369},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3946),                   251},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3961),                        194},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3666),                            228},
+      {pool_offset(3971),             534},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+
+      {pool_offset(3992),                       350},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28857,9 +29335,6 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3764),              501},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28883,33 +29358,38 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4279),                    134},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4298),                187},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4052),                    205},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(4401),                   415},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4129),     552},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+
+      {pool_offset(4476),              358},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28919,34 +29399,32 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4562),          377},
 
-      {pool_offset(4261),                              98},
+      {pool_offset(4563),                                69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(4277),          373},
+      {pool_offset(4577), 554},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4332),                                69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
 
-      {pool_offset(4363),              354},
+      {pool_offset(4659),               171},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(4404),                            68},
+      {pool_offset(4688),     565},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28961,9 +29439,15 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4822),                    208},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(4851),                 69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28973,15 +29457,10 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4639), 542},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4682),                                55},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -29042,9 +29521,6 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(5231),                 69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -29076,9 +29552,11 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(5516),     553}
+      {pool_offset(5809),     566}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -29102,10 +29580,10 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 
 
 
-#define UNICODE_PROPERTY_VERSION  11_0_0
+#define UNICODE_PROPERTY_VERSION  12_1_0
 
 #define PROPERTY_NAME_MAX_SIZE  59
-#define CODE_RANGES_NUM         555
+#define CODE_RANGES_NUM         568
 
 #define PROP_INDEX_NEWLINE 0
 #define PROP_INDEX_ALPHA 1
@@ -29131,8 +29609,8 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 #define PROP_INDEX_ANATOLIANHIEROGLYPHS 19
 #define PROP_INDEX_HLUW 19
 #define PROP_INDEX_ANY 20
-#define PROP_INDEX_ARAB 21
 #define PROP_INDEX_ARABIC 21
+#define PROP_INDEX_ARAB 21
 #define PROP_INDEX_ARMN 22
 #define PROP_INDEX_ARMENIAN 22
 #define PROP_INDEX_ASSIGNED 23
@@ -29228,666 +29706,683 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 #define PROP_INDEX_EGYP 69
 #define PROP_INDEX_ELBA 70
 #define PROP_INDEX_ELBASAN 70
-#define PROP_INDEX_EMOJI 71
-#define PROP_INDEX_EMOJICOMPONENT 72
-#define PROP_INDEX_EMOJIMODIFIER 73
-#define PROP_INDEX_EMOJIMODIFIERBASE 74
-#define PROP_INDEX_EMOJIPRESENTATION 75
-#define PROP_INDEX_ETHIOPIC 76
-#define PROP_INDEX_ETHI 76
-#define PROP_INDEX_EXTENDEDPICTOGRAPHIC 77
-#define PROP_INDEX_EXT 78
-#define PROP_INDEX_EXTENDER 78
-#define PROP_INDEX_GEORGIAN 79
-#define PROP_INDEX_GEOR 79
-#define PROP_INDEX_GLAG 80
-#define PROP_INDEX_GLAGOLITIC 80
-#define PROP_INDEX_GOTH 81
-#define PROP_INDEX_GOTHIC 81
-#define PROP_INDEX_GRAN 82
-#define PROP_INDEX_GRANTHA 82
-#define PROP_INDEX_GRBASE 83
-#define PROP_INDEX_GRAPHEMEBASE 83
-#define PROP_INDEX_GREXT 84
-#define PROP_INDEX_GRAPHEMEEXTEND 84
-#define PROP_INDEX_GRAPHEMELINK 85
-#define PROP_INDEX_GRLINK 85
-#define PROP_INDEX_GREEK 86
-#define PROP_INDEX_GREK 86
-#define PROP_INDEX_GUJARATI 87
-#define PROP_INDEX_GUJR 87
-#define PROP_INDEX_GUNJALAGONDI 88
-#define PROP_INDEX_GONG 88
-#define PROP_INDEX_GURU 89
-#define PROP_INDEX_GURMUKHI 89
-#define PROP_INDEX_HANI 90
-#define PROP_INDEX_HAN 90
-#define PROP_INDEX_HANG 91
-#define PROP_INDEX_HANGUL 91
-#define PROP_INDEX_HANIFIROHINGYA 92
-#define PROP_INDEX_ROHG 92
-#define PROP_INDEX_HANUNOO 93
-#define PROP_INDEX_HANO 93
-#define PROP_INDEX_HATR 94
-#define PROP_INDEX_HATRAN 94
-#define PROP_INDEX_HEBREW 95
-#define PROP_INDEX_HEBR 95
-#define PROP_INDEX_HEXDIGIT 96
-#define PROP_INDEX_HEX 96
-#define PROP_INDEX_HIRAGANA 97
-#define PROP_INDEX_HIRA 97
-#define PROP_INDEX_HYPHEN 98
-#define PROP_INDEX_IDSB 99
-#define PROP_INDEX_IDSBINARYOPERATOR 99
-#define PROP_INDEX_IDST 100
-#define PROP_INDEX_IDSTRINARYOPERATOR 100
-#define PROP_INDEX_IDCONTINUE 101
-#define PROP_INDEX_IDC 101
-#define PROP_INDEX_IDS 102
-#define PROP_INDEX_IDSTART 102
-#define PROP_INDEX_IDEO 103
-#define PROP_INDEX_IDEOGRAPHIC 103
-#define PROP_INDEX_ARMI 104
-#define PROP_INDEX_IMPERIALARAMAIC 104
-#define PROP_INDEX_ZINH 105
-#define PROP_INDEX_INHERITED 105
-#define PROP_INDEX_QAAI 105
-#define PROP_INDEX_PHLI 106
-#define PROP_INDEX_INSCRIPTIONALPAHLAVI 106
-#define PROP_INDEX_INSCRIPTIONALPARTHIAN 107
-#define PROP_INDEX_PRTI 107
-#define PROP_INDEX_JAVANESE 108
-#define PROP_INDEX_JAVA 108
-#define PROP_INDEX_JOINC 109
-#define PROP_INDEX_JOINCONTROL 109
-#define PROP_INDEX_KAITHI 110
-#define PROP_INDEX_KTHI 110
-#define PROP_INDEX_KNDA 111
-#define PROP_INDEX_KANNADA 111
-#define PROP_INDEX_KATAKANA 112
-#define PROP_INDEX_KANA 112
-#define PROP_INDEX_KAYAHLI 113
-#define PROP_INDEX_KALI 113
-#define PROP_INDEX_KHAROSHTHI 114
-#define PROP_INDEX_KHAR 114
-#define PROP_INDEX_KHMR 115
-#define PROP_INDEX_KHMER 115
-#define PROP_INDEX_KHOJ 116
-#define PROP_INDEX_KHOJKI 116
-#define PROP_INDEX_KHUDAWADI 117
-#define PROP_INDEX_SIND 117
-#define PROP_INDEX_L 118
-#define PROP_INDEX_LETTER 118
-#define PROP_INDEX_LC 119
-#define PROP_INDEX_CASEDLETTER 119
-#define PROP_INDEX_LAO 120
-#define PROP_INDEX_LAOO 120
-#define PROP_INDEX_LATN 121
-#define PROP_INDEX_LATIN 121
-#define PROP_INDEX_LEPC 122
-#define PROP_INDEX_LEPCHA 122
-#define PROP_INDEX_LIMBU 123
-#define PROP_INDEX_LIMB 123
-#define PROP_INDEX_LINA 124
-#define PROP_INDEX_LINEARA 124
-#define PROP_INDEX_LINB 125
-#define PROP_INDEX_LINEARB 125
-#define PROP_INDEX_LISU 126
-#define PROP_INDEX_LOWERCASELETTER 127
-#define PROP_INDEX_LL 127
-#define PROP_INDEX_LM 128
-#define PROP_INDEX_MODIFIERLETTER 128
-#define PROP_INDEX_LO 129
-#define PROP_INDEX_OTHERLETTER 129
-#define PROP_INDEX_LOGICALORDEREXCEPTION 130
-#define PROP_INDEX_LOE 130
-#define PROP_INDEX_LOWERCASE 131
-#define PROP_INDEX_LT 132
-#define PROP_INDEX_TITLECASELETTER 132
-#define PROP_INDEX_UPPERCASELETTER 133
-#define PROP_INDEX_LU 133
-#define PROP_INDEX_LYCI 134
-#define PROP_INDEX_LYCIAN 134
-#define PROP_INDEX_LYDI 135
-#define PROP_INDEX_LYDIAN 135
-#define PROP_INDEX_M 136
-#define PROP_INDEX_COMBININGMARK 136
-#define PROP_INDEX_MARK 136
-#define PROP_INDEX_MAHJ 137
-#define PROP_INDEX_MAHAJANI 137
-#define PROP_INDEX_MAKASAR 138
-#define PROP_INDEX_MAKA 138
-#define PROP_INDEX_MALAYALAM 139
-#define PROP_INDEX_MLYM 139
-#define PROP_INDEX_MAND 140
-#define PROP_INDEX_MANDAIC 140
-#define PROP_INDEX_MANI 141
-#define PROP_INDEX_MANICHAEAN 141
-#define PROP_INDEX_MARC 142
-#define PROP_INDEX_MARCHEN 142
-#define PROP_INDEX_MASARAMGONDI 143
-#define PROP_INDEX_GONM 143
-#define PROP_INDEX_MATH 144
-#define PROP_INDEX_MC 145
-#define PROP_INDEX_SPACINGMARK 145
-#define PROP_INDEX_ENCLOSINGMARK 146
-#define PROP_INDEX_ME 146
-#define PROP_INDEX_MEDEFAIDRIN 147
-#define PROP_INDEX_MEDF 147
-#define PROP_INDEX_MEETEIMAYEK 148
-#define PROP_INDEX_MTEI 148
-#define PROP_INDEX_MENDEKIKAKUI 149
-#define PROP_INDEX_MEND 149
-#define PROP_INDEX_MEROITICCURSIVE 150
-#define PROP_INDEX_MERC 150
-#define PROP_INDEX_MEROITICHIEROGLYPHS 151
-#define PROP_INDEX_MERO 151
-#define PROP_INDEX_PLRD 152
-#define PROP_INDEX_MIAO 152
-#define PROP_INDEX_MN 153
-#define PROP_INDEX_NONSPACINGMARK 153
-#define PROP_INDEX_MODI 154
-#define PROP_INDEX_MONGOLIAN 155
-#define PROP_INDEX_MONG 155
-#define PROP_INDEX_MRO 156
-#define PROP_INDEX_MROO 156
-#define PROP_INDEX_MULT 157
-#define PROP_INDEX_MULTANI 157
-#define PROP_INDEX_MYANMAR 158
-#define PROP_INDEX_MYMR 158
-#define PROP_INDEX_NUMBER 159
-#define PROP_INDEX_N 159
-#define PROP_INDEX_NABATAEAN 160
-#define PROP_INDEX_NBAT 160
-#define PROP_INDEX_DECIMALNUMBER 161
-#define PROP_INDEX_ND 161
-#define PROP_INDEX_TALU 162
-#define PROP_INDEX_NEWTAILUE 162
-#define PROP_INDEX_NEWA 163
-#define PROP_INDEX_NKO 164
-#define PROP_INDEX_NKOO 164
-#define PROP_INDEX_LETTERNUMBER 165
-#define PROP_INDEX_NL 165
-#define PROP_INDEX_OTHERNUMBER 166
-#define PROP_INDEX_NO 166
-#define PROP_INDEX_NONCHARACTERCODEPOINT 167
-#define PROP_INDEX_NCHAR 167
-#define PROP_INDEX_NSHU 168
-#define PROP_INDEX_NUSHU 168
-#define PROP_INDEX_OGHAM 169
-#define PROP_INDEX_OGAM 169
-#define PROP_INDEX_OLCK 170
-#define PROP_INDEX_OLCHIKI 170
-#define PROP_INDEX_HUNG 171
-#define PROP_INDEX_OLDHUNGARIAN 171
-#define PROP_INDEX_ITAL 172
-#define PROP_INDEX_OLDITALIC 172
-#define PROP_INDEX_NARB 173
-#define PROP_INDEX_OLDNORTHARABIAN 173
-#define PROP_INDEX_OLDPERMIC 174
-#define PROP_INDEX_PERM 174
-#define PROP_INDEX_OLDPERSIAN 175
-#define PROP_INDEX_XPEO 175
-#define PROP_INDEX_SOGO 176
-#define PROP_INDEX_OLDSOGDIAN 176
-#define PROP_INDEX_SARB 177
-#define PROP_INDEX_OLDSOUTHARABIAN 177
-#define PROP_INDEX_OLDTURKIC 178
-#define PROP_INDEX_ORKH 178
-#define PROP_INDEX_ORYA 179
-#define PROP_INDEX_ORIYA 179
-#define PROP_INDEX_OSAGE 180
-#define PROP_INDEX_OSGE 180
-#define PROP_INDEX_OSMANYA 181
-#define PROP_INDEX_OSMA 181
-#define PROP_INDEX_OTHERALPHABETIC 182
-#define PROP_INDEX_OALPHA 182
-#define PROP_INDEX_ODI 183
-#define PROP_INDEX_OTHERDEFAULTIGNORABLECODEPOINT 183
-#define PROP_INDEX_OGREXT 184
-#define PROP_INDEX_OTHERGRAPHEMEEXTEND 184
-#define PROP_INDEX_OIDC 185
-#define PROP_INDEX_OTHERIDCONTINUE 185
-#define PROP_INDEX_OTHERIDSTART 186
-#define PROP_INDEX_OIDS 186
-#define PROP_INDEX_OTHERLOWERCASE 187
-#define PROP_INDEX_OLOWER 187
-#define PROP_INDEX_OTHERMATH 188
-#define PROP_INDEX_OMATH 188
-#define PROP_INDEX_OTHERUPPERCASE 189
-#define PROP_INDEX_OUPPER 189
-#define PROP_INDEX_P 190
-#define PROP_INDEX_PUNCTUATION 190
-#define PROP_INDEX_PAHAWHHMONG 191
-#define PROP_INDEX_HMNG 191
-#define PROP_INDEX_PALMYRENE 192
-#define PROP_INDEX_PALM 192
-#define PROP_INDEX_PATTERNSYNTAX 193
-#define PROP_INDEX_PATSYN 193
-#define PROP_INDEX_PATWS 194
-#define PROP_INDEX_PATTERNWHITESPACE 194
-#define PROP_INDEX_PAUCINHAU 195
-#define PROP_INDEX_PAUC 195
-#define PROP_INDEX_CONNECTORPUNCTUATION 196
-#define PROP_INDEX_PC 196
-#define PROP_INDEX_DASHPUNCTUATION 197
-#define PROP_INDEX_PD 197
-#define PROP_INDEX_PE 198
-#define PROP_INDEX_CLOSEPUNCTUATION 198
-#define PROP_INDEX_FINALPUNCTUATION 199
-#define PROP_INDEX_PF 199
-#define PROP_INDEX_PHAG 200
-#define PROP_INDEX_PHAGSPA 200
-#define PROP_INDEX_PHOENICIAN 201
-#define PROP_INDEX_PHNX 201
-#define PROP_INDEX_PI 202
-#define PROP_INDEX_INITIALPUNCTUATION 202
-#define PROP_INDEX_OTHERPUNCTUATION 203
-#define PROP_INDEX_PO 203
-#define PROP_INDEX_PREPENDEDCONCATENATIONMARK 204
-#define PROP_INDEX_PCM 204
-#define PROP_INDEX_PS 205
-#define PROP_INDEX_OPENPUNCTUATION 205
-#define PROP_INDEX_PHLP 206
-#define PROP_INDEX_PSALTERPAHLAVI 206
-#define PROP_INDEX_QUOTATIONMARK 207
-#define PROP_INDEX_QMARK 207
-#define PROP_INDEX_RADICAL 208
-#define PROP_INDEX_RI 209
-#define PROP_INDEX_REGIONALINDICATOR 209
-#define PROP_INDEX_REJANG 210
-#define PROP_INDEX_RJNG 210
-#define PROP_INDEX_RUNIC 211
-#define PROP_INDEX_RUNR 211
-#define PROP_INDEX_S 212
-#define PROP_INDEX_SYMBOL 212
-#define PROP_INDEX_SAMARITAN 213
-#define PROP_INDEX_SAMR 213
-#define PROP_INDEX_SAURASHTRA 214
-#define PROP_INDEX_SAUR 214
-#define PROP_INDEX_SC 215
-#define PROP_INDEX_CURRENCYSYMBOL 215
-#define PROP_INDEX_SENTENCETERMINAL 216
-#define PROP_INDEX_STERM 216
-#define PROP_INDEX_SHARADA 217
-#define PROP_INDEX_SHRD 217
-#define PROP_INDEX_SHAVIAN 218
-#define PROP_INDEX_SHAW 218
-#define PROP_INDEX_SIDDHAM 219
-#define PROP_INDEX_SIDD 219
-#define PROP_INDEX_SIGNWRITING 220
-#define PROP_INDEX_SGNW 220
-#define PROP_INDEX_SINH 221
-#define PROP_INDEX_SINHALA 221
-#define PROP_INDEX_SK 222
-#define PROP_INDEX_MODIFIERSYMBOL 222
-#define PROP_INDEX_MATHSYMBOL 223
-#define PROP_INDEX_SM 223
-#define PROP_INDEX_SO 224
-#define PROP_INDEX_OTHERSYMBOL 224
-#define PROP_INDEX_SD 225
-#define PROP_INDEX_SOFTDOTTED 225
-#define PROP_INDEX_SOGD 226
-#define PROP_INDEX_SOGDIAN 226
-#define PROP_INDEX_SORASOMPENG 227
-#define PROP_INDEX_SORA 227
-#define PROP_INDEX_SOYO 228
-#define PROP_INDEX_SOYOMBO 228
-#define PROP_INDEX_SUND 229
-#define PROP_INDEX_SUNDANESE 229
-#define PROP_INDEX_SYLO 230
-#define PROP_INDEX_SYLOTINAGRI 230
-#define PROP_INDEX_SYRC 231
-#define PROP_INDEX_SYRIAC 231
-#define PROP_INDEX_TGLG 232
-#define PROP_INDEX_TAGALOG 232
-#define PROP_INDEX_TAGBANWA 233
-#define PROP_INDEX_TAGB 233
-#define PROP_INDEX_TAILE 234
-#define PROP_INDEX_TALE 234
-#define PROP_INDEX_TAITHAM 235
-#define PROP_INDEX_LANA 235
-#define PROP_INDEX_TAIVIET 236
-#define PROP_INDEX_TAVT 236
-#define PROP_INDEX_TAKRI 237
-#define PROP_INDEX_TAKR 237
-#define PROP_INDEX_TAMIL 238
-#define PROP_INDEX_TAML 238
-#define PROP_INDEX_TANG 239
-#define PROP_INDEX_TANGUT 239
-#define PROP_INDEX_TELUGU 240
-#define PROP_INDEX_TELU 240
-#define PROP_INDEX_TERM 241
-#define PROP_INDEX_TERMINALPUNCTUATION 241
-#define PROP_INDEX_THAA 242
-#define PROP_INDEX_THAANA 242
-#define PROP_INDEX_THAI 243
-#define PROP_INDEX_TIBT 244
-#define PROP_INDEX_TIBETAN 244
-#define PROP_INDEX_TFNG 245
-#define PROP_INDEX_TIFINAGH 245
-#define PROP_INDEX_TIRHUTA 246
-#define PROP_INDEX_TIRH 246
-#define PROP_INDEX_UGAR 247
-#define PROP_INDEX_UGARITIC 247
-#define PROP_INDEX_UNIFIEDIDEOGRAPH 248
-#define PROP_INDEX_UIDEO 248
-#define PROP_INDEX_ZZZZ 249
-#define PROP_INDEX_UNKNOWN 249
-#define PROP_INDEX_UPPERCASE 250
-#define PROP_INDEX_VAII 251
-#define PROP_INDEX_VAI 251
-#define PROP_INDEX_VARIATIONSELECTOR 252
-#define PROP_INDEX_VS 252
-#define PROP_INDEX_WARANGCITI 253
-#define PROP_INDEX_WARA 253
-#define PROP_INDEX_WHITESPACE 254
-#define PROP_INDEX_WSPACE 254
-#define PROP_INDEX_XIDC 255
-#define PROP_INDEX_XIDCONTINUE 255
-#define PROP_INDEX_XIDS 256
-#define PROP_INDEX_XIDSTART 256
-#define PROP_INDEX_YI 257
-#define PROP_INDEX_YIII 257
-#define PROP_INDEX_SEPARATOR 258
-#define PROP_INDEX_Z 258
-#define PROP_INDEX_ZANABAZARSQUARE 259
-#define PROP_INDEX_ZANB 259
-#define PROP_INDEX_ZL 260
-#define PROP_INDEX_LINESEPARATOR 260
-#define PROP_INDEX_ZP 261
-#define PROP_INDEX_PARAGRAPHSEPARATOR 261
-#define PROP_INDEX_ZS 262
-#define PROP_INDEX_SPACESEPARATOR 262
-#define PROP_INDEX_INBASICLATIN 263
-#define PROP_INDEX_INLATIN1SUPPLEMENT 264
-#define PROP_INDEX_INLATINEXTENDEDA 265
-#define PROP_INDEX_INLATINEXTENDEDB 266
-#define PROP_INDEX_INIPAEXTENSIONS 267
-#define PROP_INDEX_INSPACINGMODIFIERLETTERS 268
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKS 269
-#define PROP_INDEX_INGREEKANDCOPTIC 270
-#define PROP_INDEX_INCYRILLIC 271
-#define PROP_INDEX_INCYRILLICSUPPLEMENT 272
-#define PROP_INDEX_INARMENIAN 273
-#define PROP_INDEX_INHEBREW 274
-#define PROP_INDEX_INARABIC 275
-#define PROP_INDEX_INSYRIAC 276
-#define PROP_INDEX_INARABICSUPPLEMENT 277
-#define PROP_INDEX_INTHAANA 278
-#define PROP_INDEX_INNKO 279
-#define PROP_INDEX_INSAMARITAN 280
-#define PROP_INDEX_INMANDAIC 281
-#define PROP_INDEX_INSYRIACSUPPLEMENT 282
-#define PROP_INDEX_INARABICEXTENDEDA 283
-#define PROP_INDEX_INDEVANAGARI 284
-#define PROP_INDEX_INBENGALI 285
-#define PROP_INDEX_INGURMUKHI 286
-#define PROP_INDEX_INGUJARATI 287
-#define PROP_INDEX_INORIYA 288
-#define PROP_INDEX_INTAMIL 289
-#define PROP_INDEX_INTELUGU 290
-#define PROP_INDEX_INKANNADA 291
-#define PROP_INDEX_INMALAYALAM 292
-#define PROP_INDEX_INSINHALA 293
-#define PROP_INDEX_INTHAI 294
-#define PROP_INDEX_INLAO 295
-#define PROP_INDEX_INTIBETAN 296
-#define PROP_INDEX_INMYANMAR 297
-#define PROP_INDEX_INGEORGIAN 298
-#define PROP_INDEX_INHANGULJAMO 299
-#define PROP_INDEX_INETHIOPIC 300
-#define PROP_INDEX_INETHIOPICSUPPLEMENT 301
-#define PROP_INDEX_INCHEROKEE 302
-#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICS 303
-#define PROP_INDEX_INOGHAM 304
-#define PROP_INDEX_INRUNIC 305
-#define PROP_INDEX_INTAGALOG 306
-#define PROP_INDEX_INHANUNOO 307
-#define PROP_INDEX_INBUHID 308
-#define PROP_INDEX_INTAGBANWA 309
-#define PROP_INDEX_INKHMER 310
-#define PROP_INDEX_INMONGOLIAN 311
-#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED 312
-#define PROP_INDEX_INLIMBU 313
-#define PROP_INDEX_INTAILE 314
-#define PROP_INDEX_INNEWTAILUE 315
-#define PROP_INDEX_INKHMERSYMBOLS 316
-#define PROP_INDEX_INBUGINESE 317
-#define PROP_INDEX_INTAITHAM 318
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSEXTENDED 319
-#define PROP_INDEX_INBALINESE 320
-#define PROP_INDEX_INSUNDANESE 321
-#define PROP_INDEX_INBATAK 322
-#define PROP_INDEX_INLEPCHA 323
-#define PROP_INDEX_INOLCHIKI 324
-#define PROP_INDEX_INCYRILLICEXTENDEDC 325
-#define PROP_INDEX_INGEORGIANEXTENDED 326
-#define PROP_INDEX_INSUNDANESESUPPLEMENT 327
-#define PROP_INDEX_INVEDICEXTENSIONS 328
-#define PROP_INDEX_INPHONETICEXTENSIONS 329
-#define PROP_INDEX_INPHONETICEXTENSIONSSUPPLEMENT 330
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSSUPPLEMENT 331
-#define PROP_INDEX_INLATINEXTENDEDADDITIONAL 332
-#define PROP_INDEX_INGREEKEXTENDED 333
-#define PROP_INDEX_INGENERALPUNCTUATION 334
-#define PROP_INDEX_INSUPERSCRIPTSANDSUBSCRIPTS 335
-#define PROP_INDEX_INCURRENCYSYMBOLS 336
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSFORSYMBOLS 337
-#define PROP_INDEX_INLETTERLIKESYMBOLS 338
-#define PROP_INDEX_INNUMBERFORMS 339
-#define PROP_INDEX_INARROWS 340
-#define PROP_INDEX_INMATHEMATICALOPERATORS 341
-#define PROP_INDEX_INMISCELLANEOUSTECHNICAL 342
-#define PROP_INDEX_INCONTROLPICTURES 343
-#define PROP_INDEX_INOPTICALCHARACTERRECOGNITION 344
-#define PROP_INDEX_INENCLOSEDALPHANUMERICS 345
-#define PROP_INDEX_INBOXDRAWING 346
-#define PROP_INDEX_INBLOCKELEMENTS 347
-#define PROP_INDEX_INGEOMETRICSHAPES 348
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLS 349
-#define PROP_INDEX_INDINGBATS 350
-#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSA 351
-#define PROP_INDEX_INSUPPLEMENTALARROWSA 352
-#define PROP_INDEX_INBRAILLEPATTERNS 353
-#define PROP_INDEX_INSUPPLEMENTALARROWSB 354
-#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSB 355
-#define PROP_INDEX_INSUPPLEMENTALMATHEMATICALOPERATORS 356
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDARROWS 357
-#define PROP_INDEX_INGLAGOLITIC 358
-#define PROP_INDEX_INLATINEXTENDEDC 359
-#define PROP_INDEX_INCOPTIC 360
-#define PROP_INDEX_INGEORGIANSUPPLEMENT 361
-#define PROP_INDEX_INTIFINAGH 362
-#define PROP_INDEX_INETHIOPICEXTENDED 363
-#define PROP_INDEX_INCYRILLICEXTENDEDA 364
-#define PROP_INDEX_INSUPPLEMENTALPUNCTUATION 365
-#define PROP_INDEX_INCJKRADICALSSUPPLEMENT 366
-#define PROP_INDEX_INKANGXIRADICALS 367
-#define PROP_INDEX_INIDEOGRAPHICDESCRIPTIONCHARACTERS 368
-#define PROP_INDEX_INCJKSYMBOLSANDPUNCTUATION 369
-#define PROP_INDEX_INHIRAGANA 370
-#define PROP_INDEX_INKATAKANA 371
-#define PROP_INDEX_INBOPOMOFO 372
-#define PROP_INDEX_INHANGULCOMPATIBILITYJAMO 373
-#define PROP_INDEX_INKANBUN 374
-#define PROP_INDEX_INBOPOMOFOEXTENDED 375
-#define PROP_INDEX_INCJKSTROKES 376
-#define PROP_INDEX_INKATAKANAPHONETICEXTENSIONS 377
-#define PROP_INDEX_INENCLOSEDCJKLETTERSANDMONTHS 378
-#define PROP_INDEX_INCJKCOMPATIBILITY 379
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONA 380
-#define PROP_INDEX_INYIJINGHEXAGRAMSYMBOLS 381
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHS 382
-#define PROP_INDEX_INYISYLLABLES 383
-#define PROP_INDEX_INYIRADICALS 384
-#define PROP_INDEX_INLISU 385
-#define PROP_INDEX_INVAI 386
-#define PROP_INDEX_INCYRILLICEXTENDEDB 387
-#define PROP_INDEX_INBAMUM 388
-#define PROP_INDEX_INMODIFIERTONELETTERS 389
-#define PROP_INDEX_INLATINEXTENDEDD 390
-#define PROP_INDEX_INSYLOTINAGRI 391
-#define PROP_INDEX_INCOMMONINDICNUMBERFORMS 392
-#define PROP_INDEX_INPHAGSPA 393
-#define PROP_INDEX_INSAURASHTRA 394
-#define PROP_INDEX_INDEVANAGARIEXTENDED 395
-#define PROP_INDEX_INKAYAHLI 396
-#define PROP_INDEX_INREJANG 397
-#define PROP_INDEX_INHANGULJAMOEXTENDEDA 398
-#define PROP_INDEX_INJAVANESE 399
-#define PROP_INDEX_INMYANMAREXTENDEDB 400
-#define PROP_INDEX_INCHAM 401
-#define PROP_INDEX_INMYANMAREXTENDEDA 402
-#define PROP_INDEX_INTAIVIET 403
-#define PROP_INDEX_INMEETEIMAYEKEXTENSIONS 404
-#define PROP_INDEX_INETHIOPICEXTENDEDA 405
-#define PROP_INDEX_INLATINEXTENDEDE 406
-#define PROP_INDEX_INCHEROKEESUPPLEMENT 407
-#define PROP_INDEX_INMEETEIMAYEK 408
-#define PROP_INDEX_INHANGULSYLLABLES 409
-#define PROP_INDEX_INHANGULJAMOEXTENDEDB 410
-#define PROP_INDEX_INHIGHSURROGATES 411
-#define PROP_INDEX_INHIGHPRIVATEUSESURROGATES 412
-#define PROP_INDEX_INLOWSURROGATES 413
-#define PROP_INDEX_INPRIVATEUSEAREA 414
-#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHS 415
-#define PROP_INDEX_INALPHABETICPRESENTATIONFORMS 416
-#define PROP_INDEX_INARABICPRESENTATIONFORMSA 417
-#define PROP_INDEX_INVARIATIONSELECTORS 418
-#define PROP_INDEX_INVERTICALFORMS 419
-#define PROP_INDEX_INCOMBININGHALFMARKS 420
-#define PROP_INDEX_INCJKCOMPATIBILITYFORMS 421
-#define PROP_INDEX_INSMALLFORMVARIANTS 422
-#define PROP_INDEX_INARABICPRESENTATIONFORMSB 423
-#define PROP_INDEX_INHALFWIDTHANDFULLWIDTHFORMS 424
-#define PROP_INDEX_INSPECIALS 425
-#define PROP_INDEX_INLINEARBSYLLABARY 426
-#define PROP_INDEX_INLINEARBIDEOGRAMS 427
-#define PROP_INDEX_INAEGEANNUMBERS 428
-#define PROP_INDEX_INANCIENTGREEKNUMBERS 429
-#define PROP_INDEX_INANCIENTSYMBOLS 430
-#define PROP_INDEX_INPHAISTOSDISC 431
-#define PROP_INDEX_INLYCIAN 432
-#define PROP_INDEX_INCARIAN 433
-#define PROP_INDEX_INCOPTICEPACTNUMBERS 434
-#define PROP_INDEX_INOLDITALIC 435
-#define PROP_INDEX_INGOTHIC 436
-#define PROP_INDEX_INOLDPERMIC 437
-#define PROP_INDEX_INUGARITIC 438
-#define PROP_INDEX_INOLDPERSIAN 439
-#define PROP_INDEX_INDESERET 440
-#define PROP_INDEX_INSHAVIAN 441
-#define PROP_INDEX_INOSMANYA 442
-#define PROP_INDEX_INOSAGE 443
-#define PROP_INDEX_INELBASAN 444
-#define PROP_INDEX_INCAUCASIANALBANIAN 445
-#define PROP_INDEX_INLINEARA 446
-#define PROP_INDEX_INCYPRIOTSYLLABARY 447
-#define PROP_INDEX_INIMPERIALARAMAIC 448
-#define PROP_INDEX_INPALMYRENE 449
-#define PROP_INDEX_INNABATAEAN 450
-#define PROP_INDEX_INHATRAN 451
-#define PROP_INDEX_INPHOENICIAN 452
-#define PROP_INDEX_INLYDIAN 453
-#define PROP_INDEX_INMEROITICHIEROGLYPHS 454
-#define PROP_INDEX_INMEROITICCURSIVE 455
-#define PROP_INDEX_INKHAROSHTHI 456
-#define PROP_INDEX_INOLDSOUTHARABIAN 457
-#define PROP_INDEX_INOLDNORTHARABIAN 458
-#define PROP_INDEX_INMANICHAEAN 459
-#define PROP_INDEX_INAVESTAN 460
-#define PROP_INDEX_ININSCRIPTIONALPARTHIAN 461
-#define PROP_INDEX_ININSCRIPTIONALPAHLAVI 462
-#define PROP_INDEX_INPSALTERPAHLAVI 463
-#define PROP_INDEX_INOLDTURKIC 464
-#define PROP_INDEX_INOLDHUNGARIAN 465
-#define PROP_INDEX_INHANIFIROHINGYA 466
-#define PROP_INDEX_INRUMINUMERALSYMBOLS 467
-#define PROP_INDEX_INOLDSOGDIAN 468
-#define PROP_INDEX_INSOGDIAN 469
-#define PROP_INDEX_INBRAHMI 470
-#define PROP_INDEX_INKAITHI 471
-#define PROP_INDEX_INSORASOMPENG 472
-#define PROP_INDEX_INCHAKMA 473
-#define PROP_INDEX_INMAHAJANI 474
-#define PROP_INDEX_INSHARADA 475
-#define PROP_INDEX_INSINHALAARCHAICNUMBERS 476
-#define PROP_INDEX_INKHOJKI 477
-#define PROP_INDEX_INMULTANI 478
-#define PROP_INDEX_INKHUDAWADI 479
-#define PROP_INDEX_INGRANTHA 480
-#define PROP_INDEX_INNEWA 481
-#define PROP_INDEX_INTIRHUTA 482
-#define PROP_INDEX_INSIDDHAM 483
-#define PROP_INDEX_INMODI 484
-#define PROP_INDEX_INMONGOLIANSUPPLEMENT 485
-#define PROP_INDEX_INTAKRI 486
-#define PROP_INDEX_INAHOM 487
-#define PROP_INDEX_INDOGRA 488
-#define PROP_INDEX_INWARANGCITI 489
-#define PROP_INDEX_INZANABAZARSQUARE 490
-#define PROP_INDEX_INSOYOMBO 491
-#define PROP_INDEX_INPAUCINHAU 492
-#define PROP_INDEX_INBHAIKSUKI 493
-#define PROP_INDEX_INMARCHEN 494
-#define PROP_INDEX_INMASARAMGONDI 495
-#define PROP_INDEX_INGUNJALAGONDI 496
-#define PROP_INDEX_INMAKASAR 497
-#define PROP_INDEX_INCUNEIFORM 498
-#define PROP_INDEX_INCUNEIFORMNUMBERSANDPUNCTUATION 499
-#define PROP_INDEX_INEARLYDYNASTICCUNEIFORM 500
-#define PROP_INDEX_INEGYPTIANHIEROGLYPHS 501
-#define PROP_INDEX_INANATOLIANHIEROGLYPHS 502
-#define PROP_INDEX_INBAMUMSUPPLEMENT 503
-#define PROP_INDEX_INMRO 504
-#define PROP_INDEX_INBASSAVAH 505
-#define PROP_INDEX_INPAHAWHHMONG 506
-#define PROP_INDEX_INMEDEFAIDRIN 507
-#define PROP_INDEX_INMIAO 508
-#define PROP_INDEX_INIDEOGRAPHICSYMBOLSANDPUNCTUATION 509
-#define PROP_INDEX_INTANGUT 510
-#define PROP_INDEX_INTANGUTCOMPONENTS 511
-#define PROP_INDEX_INKANASUPPLEMENT 512
-#define PROP_INDEX_INKANAEXTENDEDA 513
-#define PROP_INDEX_INNUSHU 514
-#define PROP_INDEX_INDUPLOYAN 515
-#define PROP_INDEX_INSHORTHANDFORMATCONTROLS 516
-#define PROP_INDEX_INBYZANTINEMUSICALSYMBOLS 517
-#define PROP_INDEX_INMUSICALSYMBOLS 518
-#define PROP_INDEX_INANCIENTGREEKMUSICALNOTATION 519
-#define PROP_INDEX_INMAYANNUMERALS 520
-#define PROP_INDEX_INTAIXUANJINGSYMBOLS 521
-#define PROP_INDEX_INCOUNTINGRODNUMERALS 522
-#define PROP_INDEX_INMATHEMATICALALPHANUMERICSYMBOLS 523
-#define PROP_INDEX_INSUTTONSIGNWRITING 524
-#define PROP_INDEX_INGLAGOLITICSUPPLEMENT 525
-#define PROP_INDEX_INMENDEKIKAKUI 526
-#define PROP_INDEX_INADLAM 527
-#define PROP_INDEX_ININDICSIYAQNUMBERS 528
-#define PROP_INDEX_INARABICMATHEMATICALALPHABETICSYMBOLS 529
-#define PROP_INDEX_INMAHJONGTILES 530
-#define PROP_INDEX_INDOMINOTILES 531
-#define PROP_INDEX_INPLAYINGCARDS 532
-#define PROP_INDEX_INENCLOSEDALPHANUMERICSUPPLEMENT 533
-#define PROP_INDEX_INENCLOSEDIDEOGRAPHICSUPPLEMENT 534
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDPICTOGRAPHS 535
-#define PROP_INDEX_INEMOTICONS 536
-#define PROP_INDEX_INORNAMENTALDINGBATS 537
-#define PROP_INDEX_INTRANSPORTANDMAPSYMBOLS 538
-#define PROP_INDEX_INALCHEMICALSYMBOLS 539
-#define PROP_INDEX_INGEOMETRICSHAPESEXTENDED 540
-#define PROP_INDEX_INSUPPLEMENTALARROWSC 541
-#define PROP_INDEX_INSUPPLEMENTALSYMBOLSANDPICTOGRAPHS 542
-#define PROP_INDEX_INCHESSSYMBOLS 543
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONB 544
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONC 545
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIOND 546
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONE 547
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONF 548
-#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT 549
-#define PROP_INDEX_INTAGS 550
-#define PROP_INDEX_INVARIATIONSELECTORSSUPPLEMENT 551
-#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAA 552
-#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAB 553
-#define PROP_INDEX_INNOBLOCK 554
+#define PROP_INDEX_ELYM 71
+#define PROP_INDEX_ELYMAIC 71
+#define PROP_INDEX_EMOJI 72
+#define PROP_INDEX_EMOJICOMPONENT 73
+#define PROP_INDEX_EMOJIMODIFIER 74
+#define PROP_INDEX_EMOJIMODIFIERBASE 75
+#define PROP_INDEX_EMOJIPRESENTATION 76
+#define PROP_INDEX_ETHIOPIC 77
+#define PROP_INDEX_ETHI 77
+#define PROP_INDEX_EXTENDEDPICTOGRAPHIC 78
+#define PROP_INDEX_EXT 79
+#define PROP_INDEX_EXTENDER 79
+#define PROP_INDEX_GEORGIAN 80
+#define PROP_INDEX_GEOR 80
+#define PROP_INDEX_GLAG 81
+#define PROP_INDEX_GLAGOLITIC 81
+#define PROP_INDEX_GOTH 82
+#define PROP_INDEX_GOTHIC 82
+#define PROP_INDEX_GRAN 83
+#define PROP_INDEX_GRANTHA 83
+#define PROP_INDEX_GRBASE 84
+#define PROP_INDEX_GRAPHEMEBASE 84
+#define PROP_INDEX_GREXT 85
+#define PROP_INDEX_GRAPHEMEEXTEND 85
+#define PROP_INDEX_GRAPHEMELINK 86
+#define PROP_INDEX_GRLINK 86
+#define PROP_INDEX_GREEK 87
+#define PROP_INDEX_GREK 87
+#define PROP_INDEX_GUJARATI 88
+#define PROP_INDEX_GUJR 88
+#define PROP_INDEX_GUNJALAGONDI 89
+#define PROP_INDEX_GONG 89
+#define PROP_INDEX_GURU 90
+#define PROP_INDEX_GURMUKHI 90
+#define PROP_INDEX_HANI 91
+#define PROP_INDEX_HAN 91
+#define PROP_INDEX_HANG 92
+#define PROP_INDEX_HANGUL 92
+#define PROP_INDEX_HANIFIROHINGYA 93
+#define PROP_INDEX_ROHG 93
+#define PROP_INDEX_HANUNOO 94
+#define PROP_INDEX_HANO 94
+#define PROP_INDEX_HATR 95
+#define PROP_INDEX_HATRAN 95
+#define PROP_INDEX_HEBREW 96
+#define PROP_INDEX_HEBR 96
+#define PROP_INDEX_HEXDIGIT 97
+#define PROP_INDEX_HEX 97
+#define PROP_INDEX_HIRAGANA 98
+#define PROP_INDEX_HIRA 98
+#define PROP_INDEX_HYPHEN 99
+#define PROP_INDEX_IDSB 100
+#define PROP_INDEX_IDSBINARYOPERATOR 100
+#define PROP_INDEX_IDST 101
+#define PROP_INDEX_IDSTRINARYOPERATOR 101
+#define PROP_INDEX_IDCONTINUE 102
+#define PROP_INDEX_IDC 102
+#define PROP_INDEX_IDS 103
+#define PROP_INDEX_IDSTART 103
+#define PROP_INDEX_IDEO 104
+#define PROP_INDEX_IDEOGRAPHIC 104
+#define PROP_INDEX_ARMI 105
+#define PROP_INDEX_IMPERIALARAMAIC 105
+#define PROP_INDEX_ZINH 106
+#define PROP_INDEX_INHERITED 106
+#define PROP_INDEX_QAAI 106
+#define PROP_INDEX_PHLI 107
+#define PROP_INDEX_INSCRIPTIONALPAHLAVI 107
+#define PROP_INDEX_INSCRIPTIONALPARTHIAN 108
+#define PROP_INDEX_PRTI 108
+#define PROP_INDEX_JAVANESE 109
+#define PROP_INDEX_JAVA 109
+#define PROP_INDEX_JOINC 110
+#define PROP_INDEX_JOINCONTROL 110
+#define PROP_INDEX_KAITHI 111
+#define PROP_INDEX_KTHI 111
+#define PROP_INDEX_KNDA 112
+#define PROP_INDEX_KANNADA 112
+#define PROP_INDEX_KATAKANA 113
+#define PROP_INDEX_KANA 113
+#define PROP_INDEX_KAYAHLI 114
+#define PROP_INDEX_KALI 114
+#define PROP_INDEX_KHAROSHTHI 115
+#define PROP_INDEX_KHAR 115
+#define PROP_INDEX_KHMR 116
+#define PROP_INDEX_KHMER 116
+#define PROP_INDEX_KHOJ 117
+#define PROP_INDEX_KHOJKI 117
+#define PROP_INDEX_KHUDAWADI 118
+#define PROP_INDEX_SIND 118
+#define PROP_INDEX_L 119
+#define PROP_INDEX_LETTER 119
+#define PROP_INDEX_LC 120
+#define PROP_INDEX_CASEDLETTER 120
+#define PROP_INDEX_LAO 121
+#define PROP_INDEX_LAOO 121
+#define PROP_INDEX_LATN 122
+#define PROP_INDEX_LATIN 122
+#define PROP_INDEX_LEPC 123
+#define PROP_INDEX_LEPCHA 123
+#define PROP_INDEX_LIMBU 124
+#define PROP_INDEX_LIMB 124
+#define PROP_INDEX_LINA 125
+#define PROP_INDEX_LINEARA 125
+#define PROP_INDEX_LINB 126
+#define PROP_INDEX_LINEARB 126
+#define PROP_INDEX_LISU 127
+#define PROP_INDEX_LOWERCASELETTER 128
+#define PROP_INDEX_LL 128
+#define PROP_INDEX_LM 129
+#define PROP_INDEX_MODIFIERLETTER 129
+#define PROP_INDEX_LO 130
+#define PROP_INDEX_OTHERLETTER 130
+#define PROP_INDEX_LOGICALORDEREXCEPTION 131
+#define PROP_INDEX_LOE 131
+#define PROP_INDEX_LOWERCASE 132
+#define PROP_INDEX_LT 133
+#define PROP_INDEX_TITLECASELETTER 133
+#define PROP_INDEX_UPPERCASELETTER 134
+#define PROP_INDEX_LU 134
+#define PROP_INDEX_LYCI 135
+#define PROP_INDEX_LYCIAN 135
+#define PROP_INDEX_LYDI 136
+#define PROP_INDEX_LYDIAN 136
+#define PROP_INDEX_M 137
+#define PROP_INDEX_COMBININGMARK 137
+#define PROP_INDEX_MARK 137
+#define PROP_INDEX_MAHJ 138
+#define PROP_INDEX_MAHAJANI 138
+#define PROP_INDEX_MAKASAR 139
+#define PROP_INDEX_MAKA 139
+#define PROP_INDEX_MALAYALAM 140
+#define PROP_INDEX_MLYM 140
+#define PROP_INDEX_MAND 141
+#define PROP_INDEX_MANDAIC 141
+#define PROP_INDEX_MANI 142
+#define PROP_INDEX_MANICHAEAN 142
+#define PROP_INDEX_MARC 143
+#define PROP_INDEX_MARCHEN 143
+#define PROP_INDEX_MASARAMGONDI 144
+#define PROP_INDEX_GONM 144
+#define PROP_INDEX_MATH 145
+#define PROP_INDEX_MC 146
+#define PROP_INDEX_SPACINGMARK 146
+#define PROP_INDEX_ENCLOSINGMARK 147
+#define PROP_INDEX_ME 147
+#define PROP_INDEX_MEDEFAIDRIN 148
+#define PROP_INDEX_MEDF 148
+#define PROP_INDEX_MEETEIMAYEK 149
+#define PROP_INDEX_MTEI 149
+#define PROP_INDEX_MENDEKIKAKUI 150
+#define PROP_INDEX_MEND 150
+#define PROP_INDEX_MEROITICCURSIVE 151
+#define PROP_INDEX_MERC 151
+#define PROP_INDEX_MEROITICHIEROGLYPHS 152
+#define PROP_INDEX_MERO 152
+#define PROP_INDEX_PLRD 153
+#define PROP_INDEX_MIAO 153
+#define PROP_INDEX_MN 154
+#define PROP_INDEX_NONSPACINGMARK 154
+#define PROP_INDEX_MODI 155
+#define PROP_INDEX_MONGOLIAN 156
+#define PROP_INDEX_MONG 156
+#define PROP_INDEX_MRO 157
+#define PROP_INDEX_MROO 157
+#define PROP_INDEX_MULT 158
+#define PROP_INDEX_MULTANI 158
+#define PROP_INDEX_MYANMAR 159
+#define PROP_INDEX_MYMR 159
+#define PROP_INDEX_NUMBER 160
+#define PROP_INDEX_N 160
+#define PROP_INDEX_NABATAEAN 161
+#define PROP_INDEX_NBAT 161
+#define PROP_INDEX_NAND 162
+#define PROP_INDEX_NANDINAGARI 162
+#define PROP_INDEX_DECIMALNUMBER 163
+#define PROP_INDEX_ND 163
+#define PROP_INDEX_TALU 164
+#define PROP_INDEX_NEWTAILUE 164
+#define PROP_INDEX_NEWA 165
+#define PROP_INDEX_NKO 166
+#define PROP_INDEX_NKOO 166
+#define PROP_INDEX_LETTERNUMBER 167
+#define PROP_INDEX_NL 167
+#define PROP_INDEX_OTHERNUMBER 168
+#define PROP_INDEX_NO 168
+#define PROP_INDEX_NONCHARACTERCODEPOINT 169
+#define PROP_INDEX_NCHAR 169
+#define PROP_INDEX_NSHU 170
+#define PROP_INDEX_NUSHU 170
+#define PROP_INDEX_HMNP 171
+#define PROP_INDEX_NYIAKENGPUACHUEHMONG 171
+#define PROP_INDEX_OGHAM 172
+#define PROP_INDEX_OGAM 172
+#define PROP_INDEX_OLCK 173
+#define PROP_INDEX_OLCHIKI 173
+#define PROP_INDEX_HUNG 174
+#define PROP_INDEX_OLDHUNGARIAN 174
+#define PROP_INDEX_ITAL 175
+#define PROP_INDEX_OLDITALIC 175
+#define PROP_INDEX_NARB 176
+#define PROP_INDEX_OLDNORTHARABIAN 176
+#define PROP_INDEX_OLDPERMIC 177
+#define PROP_INDEX_PERM 177
+#define PROP_INDEX_OLDPERSIAN 178
+#define PROP_INDEX_XPEO 178
+#define PROP_INDEX_SOGO 179
+#define PROP_INDEX_OLDSOGDIAN 179
+#define PROP_INDEX_SARB 180
+#define PROP_INDEX_OLDSOUTHARABIAN 180
+#define PROP_INDEX_OLDTURKIC 181
+#define PROP_INDEX_ORKH 181
+#define PROP_INDEX_ORYA 182
+#define PROP_INDEX_ORIYA 182
+#define PROP_INDEX_OSAGE 183
+#define PROP_INDEX_OSGE 183
+#define PROP_INDEX_OSMANYA 184
+#define PROP_INDEX_OSMA 184
+#define PROP_INDEX_OTHERALPHABETIC 185
+#define PROP_INDEX_OALPHA 185
+#define PROP_INDEX_ODI 186
+#define PROP_INDEX_OTHERDEFAULTIGNORABLECODEPOINT 186
+#define PROP_INDEX_OGREXT 187
+#define PROP_INDEX_OTHERGRAPHEMEEXTEND 187
+#define PROP_INDEX_OIDC 188
+#define PROP_INDEX_OTHERIDCONTINUE 188
+#define PROP_INDEX_OTHERIDSTART 189
+#define PROP_INDEX_OIDS 189
+#define PROP_INDEX_OTHERLOWERCASE 190
+#define PROP_INDEX_OLOWER 190
+#define PROP_INDEX_OTHERMATH 191
+#define PROP_INDEX_OMATH 191
+#define PROP_INDEX_OTHERUPPERCASE 192
+#define PROP_INDEX_OUPPER 192
+#define PROP_INDEX_P 193
+#define PROP_INDEX_PUNCTUATION 193
+#define PROP_INDEX_PAHAWHHMONG 194
+#define PROP_INDEX_HMNG 194
+#define PROP_INDEX_PALMYRENE 195
+#define PROP_INDEX_PALM 195
+#define PROP_INDEX_PATTERNSYNTAX 196
+#define PROP_INDEX_PATSYN 196
+#define PROP_INDEX_PATWS 197
+#define PROP_INDEX_PATTERNWHITESPACE 197
+#define PROP_INDEX_PAUCINHAU 198
+#define PROP_INDEX_PAUC 198
+#define PROP_INDEX_CONNECTORPUNCTUATION 199
+#define PROP_INDEX_PC 199
+#define PROP_INDEX_DASHPUNCTUATION 200
+#define PROP_INDEX_PD 200
+#define PROP_INDEX_PE 201
+#define PROP_INDEX_CLOSEPUNCTUATION 201
+#define PROP_INDEX_FINALPUNCTUATION 202
+#define PROP_INDEX_PF 202
+#define PROP_INDEX_PHAG 203
+#define PROP_INDEX_PHAGSPA 203
+#define PROP_INDEX_PHOENICIAN 204
+#define PROP_INDEX_PHNX 204
+#define PROP_INDEX_PI 205
+#define PROP_INDEX_INITIALPUNCTUATION 205
+#define PROP_INDEX_OTHERPUNCTUATION 206
+#define PROP_INDEX_PO 206
+#define PROP_INDEX_PREPENDEDCONCATENATIONMARK 207
+#define PROP_INDEX_PCM 207
+#define PROP_INDEX_PS 208
+#define PROP_INDEX_OPENPUNCTUATION 208
+#define PROP_INDEX_PHLP 209
+#define PROP_INDEX_PSALTERPAHLAVI 209
+#define PROP_INDEX_QUOTATIONMARK 210
+#define PROP_INDEX_QMARK 210
+#define PROP_INDEX_RADICAL 211
+#define PROP_INDEX_RI 212
+#define PROP_INDEX_REGIONALINDICATOR 212
+#define PROP_INDEX_REJANG 213
+#define PROP_INDEX_RJNG 213
+#define PROP_INDEX_RUNIC 214
+#define PROP_INDEX_RUNR 214
+#define PROP_INDEX_S 215
+#define PROP_INDEX_SYMBOL 215
+#define PROP_INDEX_SAMARITAN 216
+#define PROP_INDEX_SAMR 216
+#define PROP_INDEX_SAURASHTRA 217
+#define PROP_INDEX_SAUR 217
+#define PROP_INDEX_SC 218
+#define PROP_INDEX_CURRENCYSYMBOL 218
+#define PROP_INDEX_SENTENCETERMINAL 219
+#define PROP_INDEX_STERM 219
+#define PROP_INDEX_SHARADA 220
+#define PROP_INDEX_SHRD 220
+#define PROP_INDEX_SHAVIAN 221
+#define PROP_INDEX_SHAW 221
+#define PROP_INDEX_SIDDHAM 222
+#define PROP_INDEX_SIDD 222
+#define PROP_INDEX_SIGNWRITING 223
+#define PROP_INDEX_SGNW 223
+#define PROP_INDEX_SINH 224
+#define PROP_INDEX_SINHALA 224
+#define PROP_INDEX_SK 225
+#define PROP_INDEX_MODIFIERSYMBOL 225
+#define PROP_INDEX_MATHSYMBOL 226
+#define PROP_INDEX_SM 226
+#define PROP_INDEX_SO 227
+#define PROP_INDEX_OTHERSYMBOL 227
+#define PROP_INDEX_SD 228
+#define PROP_INDEX_SOFTDOTTED 228
+#define PROP_INDEX_SOGD 229
+#define PROP_INDEX_SOGDIAN 229
+#define PROP_INDEX_SORASOMPENG 230
+#define PROP_INDEX_SORA 230
+#define PROP_INDEX_SOYO 231
+#define PROP_INDEX_SOYOMBO 231
+#define PROP_INDEX_SUND 232
+#define PROP_INDEX_SUNDANESE 232
+#define PROP_INDEX_SYLO 233
+#define PROP_INDEX_SYLOTINAGRI 233
+#define PROP_INDEX_SYRC 234
+#define PROP_INDEX_SYRIAC 234
+#define PROP_INDEX_TGLG 235
+#define PROP_INDEX_TAGALOG 235
+#define PROP_INDEX_TAGBANWA 236
+#define PROP_INDEX_TAGB 236
+#define PROP_INDEX_TAILE 237
+#define PROP_INDEX_TALE 237
+#define PROP_INDEX_TAITHAM 238
+#define PROP_INDEX_LANA 238
+#define PROP_INDEX_TAIVIET 239
+#define PROP_INDEX_TAVT 239
+#define PROP_INDEX_TAKRI 240
+#define PROP_INDEX_TAKR 240
+#define PROP_INDEX_TAMIL 241
+#define PROP_INDEX_TAML 241
+#define PROP_INDEX_TANG 242
+#define PROP_INDEX_TANGUT 242
+#define PROP_INDEX_TELUGU 243
+#define PROP_INDEX_TELU 243
+#define PROP_INDEX_TERM 244
+#define PROP_INDEX_TERMINALPUNCTUATION 244
+#define PROP_INDEX_THAA 245
+#define PROP_INDEX_THAANA 245
+#define PROP_INDEX_THAI 246
+#define PROP_INDEX_TIBT 247
+#define PROP_INDEX_TIBETAN 247
+#define PROP_INDEX_TFNG 248
+#define PROP_INDEX_TIFINAGH 248
+#define PROP_INDEX_TIRHUTA 249
+#define PROP_INDEX_TIRH 249
+#define PROP_INDEX_UGAR 250
+#define PROP_INDEX_UGARITIC 250
+#define PROP_INDEX_UNIFIEDIDEOGRAPH 251
+#define PROP_INDEX_UIDEO 251
+#define PROP_INDEX_ZZZZ 252
+#define PROP_INDEX_UNKNOWN 252
+#define PROP_INDEX_UPPERCASE 253
+#define PROP_INDEX_VAII 254
+#define PROP_INDEX_VAI 254
+#define PROP_INDEX_VARIATIONSELECTOR 255
+#define PROP_INDEX_VS 255
+#define PROP_INDEX_WCHO 256
+#define PROP_INDEX_WANCHO 256
+#define PROP_INDEX_WARANGCITI 257
+#define PROP_INDEX_WARA 257
+#define PROP_INDEX_WHITESPACE 258
+#define PROP_INDEX_WSPACE 258
+#define PROP_INDEX_XIDC 259
+#define PROP_INDEX_XIDCONTINUE 259
+#define PROP_INDEX_XIDS 260
+#define PROP_INDEX_XIDSTART 260
+#define PROP_INDEX_YI 261
+#define PROP_INDEX_YIII 261
+#define PROP_INDEX_SEPARATOR 262
+#define PROP_INDEX_Z 262
+#define PROP_INDEX_ZANABAZARSQUARE 263
+#define PROP_INDEX_ZANB 263
+#define PROP_INDEX_ZL 264
+#define PROP_INDEX_LINESEPARATOR 264
+#define PROP_INDEX_ZP 265
+#define PROP_INDEX_PARAGRAPHSEPARATOR 265
+#define PROP_INDEX_ZS 266
+#define PROP_INDEX_SPACESEPARATOR 266
+#define PROP_INDEX_INBASICLATIN 267
+#define PROP_INDEX_INLATIN1SUPPLEMENT 268
+#define PROP_INDEX_INLATINEXTENDEDA 269
+#define PROP_INDEX_INLATINEXTENDEDB 270
+#define PROP_INDEX_INIPAEXTENSIONS 271
+#define PROP_INDEX_INSPACINGMODIFIERLETTERS 272
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKS 273
+#define PROP_INDEX_INGREEKANDCOPTIC 274
+#define PROP_INDEX_INCYRILLIC 275
+#define PROP_INDEX_INCYRILLICSUPPLEMENT 276
+#define PROP_INDEX_INARMENIAN 277
+#define PROP_INDEX_INHEBREW 278
+#define PROP_INDEX_INARABIC 279
+#define PROP_INDEX_INSYRIAC 280
+#define PROP_INDEX_INARABICSUPPLEMENT 281
+#define PROP_INDEX_INTHAANA 282
+#define PROP_INDEX_INNKO 283
+#define PROP_INDEX_INSAMARITAN 284
+#define PROP_INDEX_INMANDAIC 285
+#define PROP_INDEX_INSYRIACSUPPLEMENT 286
+#define PROP_INDEX_INARABICEXTENDEDA 287
+#define PROP_INDEX_INDEVANAGARI 288
+#define PROP_INDEX_INBENGALI 289
+#define PROP_INDEX_INGURMUKHI 290
+#define PROP_INDEX_INGUJARATI 291
+#define PROP_INDEX_INORIYA 292
+#define PROP_INDEX_INTAMIL 293
+#define PROP_INDEX_INTELUGU 294
+#define PROP_INDEX_INKANNADA 295
+#define PROP_INDEX_INMALAYALAM 296
+#define PROP_INDEX_INSINHALA 297
+#define PROP_INDEX_INTHAI 298
+#define PROP_INDEX_INLAO 299
+#define PROP_INDEX_INTIBETAN 300
+#define PROP_INDEX_INMYANMAR 301
+#define PROP_INDEX_INGEORGIAN 302
+#define PROP_INDEX_INHANGULJAMO 303
+#define PROP_INDEX_INETHIOPIC 304
+#define PROP_INDEX_INETHIOPICSUPPLEMENT 305
+#define PROP_INDEX_INCHEROKEE 306
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICS 307
+#define PROP_INDEX_INOGHAM 308
+#define PROP_INDEX_INRUNIC 309
+#define PROP_INDEX_INTAGALOG 310
+#define PROP_INDEX_INHANUNOO 311
+#define PROP_INDEX_INBUHID 312
+#define PROP_INDEX_INTAGBANWA 313
+#define PROP_INDEX_INKHMER 314
+#define PROP_INDEX_INMONGOLIAN 315
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED 316
+#define PROP_INDEX_INLIMBU 317
+#define PROP_INDEX_INTAILE 318
+#define PROP_INDEX_INNEWTAILUE 319
+#define PROP_INDEX_INKHMERSYMBOLS 320
+#define PROP_INDEX_INBUGINESE 321
+#define PROP_INDEX_INTAITHAM 322
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSEXTENDED 323
+#define PROP_INDEX_INBALINESE 324
+#define PROP_INDEX_INSUNDANESE 325
+#define PROP_INDEX_INBATAK 326
+#define PROP_INDEX_INLEPCHA 327
+#define PROP_INDEX_INOLCHIKI 328
+#define PROP_INDEX_INCYRILLICEXTENDEDC 329
+#define PROP_INDEX_INGEORGIANEXTENDED 330
+#define PROP_INDEX_INSUNDANESESUPPLEMENT 331
+#define PROP_INDEX_INVEDICEXTENSIONS 332
+#define PROP_INDEX_INPHONETICEXTENSIONS 333
+#define PROP_INDEX_INPHONETICEXTENSIONSSUPPLEMENT 334
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSSUPPLEMENT 335
+#define PROP_INDEX_INLATINEXTENDEDADDITIONAL 336
+#define PROP_INDEX_INGREEKEXTENDED 337
+#define PROP_INDEX_INGENERALPUNCTUATION 338
+#define PROP_INDEX_INSUPERSCRIPTSANDSUBSCRIPTS 339
+#define PROP_INDEX_INCURRENCYSYMBOLS 340
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSFORSYMBOLS 341
+#define PROP_INDEX_INLETTERLIKESYMBOLS 342
+#define PROP_INDEX_INNUMBERFORMS 343
+#define PROP_INDEX_INARROWS 344
+#define PROP_INDEX_INMATHEMATICALOPERATORS 345
+#define PROP_INDEX_INMISCELLANEOUSTECHNICAL 346
+#define PROP_INDEX_INCONTROLPICTURES 347
+#define PROP_INDEX_INOPTICALCHARACTERRECOGNITION 348
+#define PROP_INDEX_INENCLOSEDALPHANUMERICS 349
+#define PROP_INDEX_INBOXDRAWING 350
+#define PROP_INDEX_INBLOCKELEMENTS 351
+#define PROP_INDEX_INGEOMETRICSHAPES 352
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLS 353
+#define PROP_INDEX_INDINGBATS 354
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSA 355
+#define PROP_INDEX_INSUPPLEMENTALARROWSA 356
+#define PROP_INDEX_INBRAILLEPATTERNS 357
+#define PROP_INDEX_INSUPPLEMENTALARROWSB 358
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSB 359
+#define PROP_INDEX_INSUPPLEMENTALMATHEMATICALOPERATORS 360
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDARROWS 361
+#define PROP_INDEX_INGLAGOLITIC 362
+#define PROP_INDEX_INLATINEXTENDEDC 363
+#define PROP_INDEX_INCOPTIC 364
+#define PROP_INDEX_INGEORGIANSUPPLEMENT 365
+#define PROP_INDEX_INTIFINAGH 366
+#define PROP_INDEX_INETHIOPICEXTENDED 367
+#define PROP_INDEX_INCYRILLICEXTENDEDA 368
+#define PROP_INDEX_INSUPPLEMENTALPUNCTUATION 369
+#define PROP_INDEX_INCJKRADICALSSUPPLEMENT 370
+#define PROP_INDEX_INKANGXIRADICALS 371
+#define PROP_INDEX_INIDEOGRAPHICDESCRIPTIONCHARACTERS 372
+#define PROP_INDEX_INCJKSYMBOLSANDPUNCTUATION 373
+#define PROP_INDEX_INHIRAGANA 374
+#define PROP_INDEX_INKATAKANA 375
+#define PROP_INDEX_INBOPOMOFO 376
+#define PROP_INDEX_INHANGULCOMPATIBILITYJAMO 377
+#define PROP_INDEX_INKANBUN 378
+#define PROP_INDEX_INBOPOMOFOEXTENDED 379
+#define PROP_INDEX_INCJKSTROKES 380
+#define PROP_INDEX_INKATAKANAPHONETICEXTENSIONS 381
+#define PROP_INDEX_INENCLOSEDCJKLETTERSANDMONTHS 382
+#define PROP_INDEX_INCJKCOMPATIBILITY 383
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONA 384
+#define PROP_INDEX_INYIJINGHEXAGRAMSYMBOLS 385
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHS 386
+#define PROP_INDEX_INYISYLLABLES 387
+#define PROP_INDEX_INYIRADICALS 388
+#define PROP_INDEX_INLISU 389
+#define PROP_INDEX_INVAI 390
+#define PROP_INDEX_INCYRILLICEXTENDEDB 391
+#define PROP_INDEX_INBAMUM 392
+#define PROP_INDEX_INMODIFIERTONELETTERS 393
+#define PROP_INDEX_INLATINEXTENDEDD 394
+#define PROP_INDEX_INSYLOTINAGRI 395
+#define PROP_INDEX_INCOMMONINDICNUMBERFORMS 396
+#define PROP_INDEX_INPHAGSPA 397
+#define PROP_INDEX_INSAURASHTRA 398
+#define PROP_INDEX_INDEVANAGARIEXTENDED 399
+#define PROP_INDEX_INKAYAHLI 400
+#define PROP_INDEX_INREJANG 401
+#define PROP_INDEX_INHANGULJAMOEXTENDEDA 402
+#define PROP_INDEX_INJAVANESE 403
+#define PROP_INDEX_INMYANMAREXTENDEDB 404
+#define PROP_INDEX_INCHAM 405
+#define PROP_INDEX_INMYANMAREXTENDEDA 406
+#define PROP_INDEX_INTAIVIET 407
+#define PROP_INDEX_INMEETEIMAYEKEXTENSIONS 408
+#define PROP_INDEX_INETHIOPICEXTENDEDA 409
+#define PROP_INDEX_INLATINEXTENDEDE 410
+#define PROP_INDEX_INCHEROKEESUPPLEMENT 411
+#define PROP_INDEX_INMEETEIMAYEK 412
+#define PROP_INDEX_INHANGULSYLLABLES 413
+#define PROP_INDEX_INHANGULJAMOEXTENDEDB 414
+#define PROP_INDEX_INHIGHSURROGATES 415
+#define PROP_INDEX_INHIGHPRIVATEUSESURROGATES 416
+#define PROP_INDEX_INLOWSURROGATES 417
+#define PROP_INDEX_INPRIVATEUSEAREA 418
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHS 419
+#define PROP_INDEX_INALPHABETICPRESENTATIONFORMS 420
+#define PROP_INDEX_INARABICPRESENTATIONFORMSA 421
+#define PROP_INDEX_INVARIATIONSELECTORS 422
+#define PROP_INDEX_INVERTICALFORMS 423
+#define PROP_INDEX_INCOMBININGHALFMARKS 424
+#define PROP_INDEX_INCJKCOMPATIBILITYFORMS 425
+#define PROP_INDEX_INSMALLFORMVARIANTS 426
+#define PROP_INDEX_INARABICPRESENTATIONFORMSB 427
+#define PROP_INDEX_INHALFWIDTHANDFULLWIDTHFORMS 428
+#define PROP_INDEX_INSPECIALS 429
+#define PROP_INDEX_INLINEARBSYLLABARY 430
+#define PROP_INDEX_INLINEARBIDEOGRAMS 431
+#define PROP_INDEX_INAEGEANNUMBERS 432
+#define PROP_INDEX_INANCIENTGREEKNUMBERS 433
+#define PROP_INDEX_INANCIENTSYMBOLS 434
+#define PROP_INDEX_INPHAISTOSDISC 435
+#define PROP_INDEX_INLYCIAN 436
+#define PROP_INDEX_INCARIAN 437
+#define PROP_INDEX_INCOPTICEPACTNUMBERS 438
+#define PROP_INDEX_INOLDITALIC 439
+#define PROP_INDEX_INGOTHIC 440
+#define PROP_INDEX_INOLDPERMIC 441
+#define PROP_INDEX_INUGARITIC 442
+#define PROP_INDEX_INOLDPERSIAN 443
+#define PROP_INDEX_INDESERET 444
+#define PROP_INDEX_INSHAVIAN 445
+#define PROP_INDEX_INOSMANYA 446
+#define PROP_INDEX_INOSAGE 447
+#define PROP_INDEX_INELBASAN 448
+#define PROP_INDEX_INCAUCASIANALBANIAN 449
+#define PROP_INDEX_INLINEARA 450
+#define PROP_INDEX_INCYPRIOTSYLLABARY 451
+#define PROP_INDEX_INIMPERIALARAMAIC 452
+#define PROP_INDEX_INPALMYRENE 453
+#define PROP_INDEX_INNABATAEAN 454
+#define PROP_INDEX_INHATRAN 455
+#define PROP_INDEX_INPHOENICIAN 456
+#define PROP_INDEX_INLYDIAN 457
+#define PROP_INDEX_INMEROITICHIEROGLYPHS 458
+#define PROP_INDEX_INMEROITICCURSIVE 459
+#define PROP_INDEX_INKHAROSHTHI 460
+#define PROP_INDEX_INOLDSOUTHARABIAN 461
+#define PROP_INDEX_INOLDNORTHARABIAN 462
+#define PROP_INDEX_INMANICHAEAN 463
+#define PROP_INDEX_INAVESTAN 464
+#define PROP_INDEX_ININSCRIPTIONALPARTHIAN 465
+#define PROP_INDEX_ININSCRIPTIONALPAHLAVI 466
+#define PROP_INDEX_INPSALTERPAHLAVI 467
+#define PROP_INDEX_INOLDTURKIC 468
+#define PROP_INDEX_INOLDHUNGARIAN 469
+#define PROP_INDEX_INHANIFIROHINGYA 470
+#define PROP_INDEX_INRUMINUMERALSYMBOLS 471
+#define PROP_INDEX_INOLDSOGDIAN 472
+#define PROP_INDEX_INSOGDIAN 473
+#define PROP_INDEX_INELYMAIC 474
+#define PROP_INDEX_INBRAHMI 475
+#define PROP_INDEX_INKAITHI 476
+#define PROP_INDEX_INSORASOMPENG 477
+#define PROP_INDEX_INCHAKMA 478
+#define PROP_INDEX_INMAHAJANI 479
+#define PROP_INDEX_INSHARADA 480
+#define PROP_INDEX_INSINHALAARCHAICNUMBERS 481
+#define PROP_INDEX_INKHOJKI 482
+#define PROP_INDEX_INMULTANI 483
+#define PROP_INDEX_INKHUDAWADI 484
+#define PROP_INDEX_INGRANTHA 485
+#define PROP_INDEX_INNEWA 486
+#define PROP_INDEX_INTIRHUTA 487
+#define PROP_INDEX_INSIDDHAM 488
+#define PROP_INDEX_INMODI 489
+#define PROP_INDEX_INMONGOLIANSUPPLEMENT 490
+#define PROP_INDEX_INTAKRI 491
+#define PROP_INDEX_INAHOM 492
+#define PROP_INDEX_INDOGRA 493
+#define PROP_INDEX_INWARANGCITI 494
+#define PROP_INDEX_INNANDINAGARI 495
+#define PROP_INDEX_INZANABAZARSQUARE 496
+#define PROP_INDEX_INSOYOMBO 497
+#define PROP_INDEX_INPAUCINHAU 498
+#define PROP_INDEX_INBHAIKSUKI 499
+#define PROP_INDEX_INMARCHEN 500
+#define PROP_INDEX_INMASARAMGONDI 501
+#define PROP_INDEX_INGUNJALAGONDI 502
+#define PROP_INDEX_INMAKASAR 503
+#define PROP_INDEX_INTAMILSUPPLEMENT 504
+#define PROP_INDEX_INCUNEIFORM 505
+#define PROP_INDEX_INCUNEIFORMNUMBERSANDPUNCTUATION 506
+#define PROP_INDEX_INEARLYDYNASTICCUNEIFORM 507
+#define PROP_INDEX_INEGYPTIANHIEROGLYPHS 508
+#define PROP_INDEX_INEGYPTIANHIEROGLYPHFORMATCONTROLS 509
+#define PROP_INDEX_INANATOLIANHIEROGLYPHS 510
+#define PROP_INDEX_INBAMUMSUPPLEMENT 511
+#define PROP_INDEX_INMRO 512
+#define PROP_INDEX_INBASSAVAH 513
+#define PROP_INDEX_INPAHAWHHMONG 514
+#define PROP_INDEX_INMEDEFAIDRIN 515
+#define PROP_INDEX_INMIAO 516
+#define PROP_INDEX_INIDEOGRAPHICSYMBOLSANDPUNCTUATION 517
+#define PROP_INDEX_INTANGUT 518
+#define PROP_INDEX_INTANGUTCOMPONENTS 519
+#define PROP_INDEX_INKANASUPPLEMENT 520
+#define PROP_INDEX_INKANAEXTENDEDA 521
+#define PROP_INDEX_INSMALLKANAEXTENSION 522
+#define PROP_INDEX_INNUSHU 523
+#define PROP_INDEX_INDUPLOYAN 524
+#define PROP_INDEX_INSHORTHANDFORMATCONTROLS 525
+#define PROP_INDEX_INBYZANTINEMUSICALSYMBOLS 526
+#define PROP_INDEX_INMUSICALSYMBOLS 527
+#define PROP_INDEX_INANCIENTGREEKMUSICALNOTATION 528
+#define PROP_INDEX_INMAYANNUMERALS 529
+#define PROP_INDEX_INTAIXUANJINGSYMBOLS 530
+#define PROP_INDEX_INCOUNTINGRODNUMERALS 531
+#define PROP_INDEX_INMATHEMATICALALPHANUMERICSYMBOLS 532
+#define PROP_INDEX_INSUTTONSIGNWRITING 533
+#define PROP_INDEX_INGLAGOLITICSUPPLEMENT 534
+#define PROP_INDEX_INNYIAKENGPUACHUEHMONG 535
+#define PROP_INDEX_INWANCHO 536
+#define PROP_INDEX_INMENDEKIKAKUI 537
+#define PROP_INDEX_INADLAM 538
+#define PROP_INDEX_ININDICSIYAQNUMBERS 539
+#define PROP_INDEX_INOTTOMANSIYAQNUMBERS 540
+#define PROP_INDEX_INARABICMATHEMATICALALPHABETICSYMBOLS 541
+#define PROP_INDEX_INMAHJONGTILES 542
+#define PROP_INDEX_INDOMINOTILES 543
+#define PROP_INDEX_INPLAYINGCARDS 544
+#define PROP_INDEX_INENCLOSEDALPHANUMERICSUPPLEMENT 545
+#define PROP_INDEX_INENCLOSEDIDEOGRAPHICSUPPLEMENT 546
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDPICTOGRAPHS 547
+#define PROP_INDEX_INEMOTICONS 548
+#define PROP_INDEX_INORNAMENTALDINGBATS 549
+#define PROP_INDEX_INTRANSPORTANDMAPSYMBOLS 550
+#define PROP_INDEX_INALCHEMICALSYMBOLS 551
+#define PROP_INDEX_INGEOMETRICSHAPESEXTENDED 552
+#define PROP_INDEX_INSUPPLEMENTALARROWSC 553
+#define PROP_INDEX_INSUPPLEMENTALSYMBOLSANDPICTOGRAPHS 554
+#define PROP_INDEX_INCHESSSYMBOLS 555
+#define PROP_INDEX_INSYMBOLSANDPICTOGRAPHSEXTENDEDA 556
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONB 557
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONC 558
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIOND 559
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONE 560
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONF 561
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT 562
+#define PROP_INDEX_INTAGS 563
+#define PROP_INDEX_INVARIATIONSELECTORSSUPPLEMENT 564
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAA 565
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAB 566
+#define PROP_INDEX_INNOBLOCK 567
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c
index b3b72729e2..205b9c0159 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf2.tmp unicode_property_data_posix.gperf  */
+/* Command-line: /usr/local/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf2.tmp unicode_property_data_posix.gperf  */
 /* Computed positions: -k'1,3' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -42,7 +42,7 @@ CR_NEWLINE[] = { 1,
 
 /* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */
 static const OnigCodePoint
-CR_Alpha[] = { 676,
+CR_Alpha[] = { 679,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -226,16 +226,10 @@ CR_Alpha[] = { 676,
 0x0e4d, 0x0e4d,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -250,11 +244,8 @@ CR_Alpha[] = { 676,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x103f,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x109c, 0x109d,
+0x1050, 0x108f,
+0x109a, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -275,7 +266,6 @@ CR_Alpha[] = { 676,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -316,7 +306,7 @@ CR_Alpha[] = { 676,
 0x1bac, 0x1baf,
 0x1bba, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c7d,
 0x1c80, 0x1c88,
@@ -325,6 +315,7 @@ CR_Alpha[] = { 676,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -409,31 +400,28 @@ CR_Alpha[] = { 676,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
+0xa8fd, 0xa8ff,
 0xa90a, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
+0xa9e0, 0xa9ef,
 0xa9fa, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -445,7 +433,7 @@ CR_Alpha[] = { 676,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -533,6 +521,7 @@ CR_Alpha[] = { 676,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11082, 0x110b8,
 0x110d0, 0x110e8,
@@ -570,6 +559,7 @@ CR_Alpha[] = { 676,
 0x11400, 0x11441,
 0x11443, 0x11445,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -580,15 +570,20 @@ CR_Alpha[] = { 676,
 0x11640, 0x11640,
 0x11644, 0x11644,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
 0x11800, 0x11838,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -621,18 +616,21 @@ CR_Alpha[] = { 676,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -674,9 +672,14 @@ CR_Alpha[] = { 676,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -743,7 +746,7 @@ CR_Cntrl[] = { 2,
 
 /* PROPERTY: 'Digit': POSIX [[:Digit:]] */
 static const OnigCodePoint
-CR_Digit[] = { 57,
+CR_Digit[] = { 59,
 0x0030, 0x0039,
 0x0660, 0x0669,
 0x06f0, 0x06f9,
@@ -800,12 +803,14 @@ CR_Digit[] = { 57,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e950, 0x1e959,
 }; /* END of CR_Digit */
 
 /* PROPERTY: 'Graph': POSIX [[:Graph:]] */
 static const OnigCodePoint
-CR_Graph[] = { 663,
+CR_Graph[] = { 671,
 0x0021, 0x007e,
 0x00a1, 0x0377,
 0x037a, 0x037f,
@@ -916,7 +921,7 @@ CR_Graph[] = { 663,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -953,17 +958,10 @@ CR_Graph[] = { 663,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -1040,7 +1038,7 @@ CR_Graph[] = { 663,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -1072,9 +1070,7 @@ CR_Graph[] = { 663,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -1091,7 +1087,7 @@ CR_Graph[] = { 663,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -1104,14 +1100,14 @@ CR_Graph[] = { 663,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -1132,7 +1128,7 @@ CR_Graph[] = { 663,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -1239,6 +1235,7 @@ CR_Graph[] = { 663,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -1277,7 +1274,7 @@ CR_Graph[] = { 663,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -1285,7 +1282,7 @@ CR_Graph[] = { 663,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -1293,9 +1290,11 @@ CR_Graph[] = { 663,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -1318,11 +1317,13 @@ CR_Graph[] = { 663,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -1336,13 +1337,15 @@ CR_Graph[] = { 663,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -1384,12 +1387,19 @@ CR_Graph[] = { 663,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -1431,33 +1441,36 @@ CR_Graph[] = { 663,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -1473,7 +1486,7 @@ CR_Graph[] = { 663,
 
 /* PROPERTY: 'Lower': POSIX [[:Lower:]] */
 static const OnigCodePoint
-CR_Lower[] = { 645,
+CR_Lower[] = { 649,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
 0x00b5, 0x00b5,
@@ -2078,9 +2091,13 @@ CR_Lower[] = { 645,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -2123,7 +2140,7 @@ CR_Lower[] = { 645,
 
 /* PROPERTY: 'Print': POSIX [[:Print:]] */
 static const OnigCodePoint
-CR_Print[] = { 660,
+CR_Print[] = { 668,
 0x0020, 0x007e,
 0x00a0, 0x0377,
 0x037a, 0x037f,
@@ -2234,7 +2251,7 @@ CR_Print[] = { 660,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -2271,17 +2288,10 @@ CR_Print[] = { 660,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -2357,7 +2367,7 @@ CR_Print[] = { 660,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -2387,9 +2397,7 @@ CR_Print[] = { 660,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -2406,7 +2414,7 @@ CR_Print[] = { 660,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -2419,14 +2427,14 @@ CR_Print[] = { 660,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -2447,7 +2455,7 @@ CR_Print[] = { 660,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -2554,6 +2562,7 @@ CR_Print[] = { 660,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -2592,7 +2601,7 @@ CR_Print[] = { 660,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -2600,7 +2609,7 @@ CR_Print[] = { 660,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -2608,9 +2617,11 @@ CR_Print[] = { 660,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -2633,11 +2644,13 @@ CR_Print[] = { 660,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -2651,13 +2664,15 @@ CR_Print[] = { 660,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -2699,12 +2714,19 @@ CR_Print[] = { 660,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -2746,33 +2768,36 @@ CR_Print[] = { 660,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -2788,7 +2813,7 @@ CR_Print[] = { 660,
 
 /* PROPERTY: 'Punct': POSIX [[:Punct:]] */
 static const OnigCodePoint
-CR_Punct[] = { 178,
+CR_Punct[] = { 182,
 0x0021, 0x0023,
 0x0025, 0x002a,
 0x002c, 0x002f,
@@ -2828,6 +2853,7 @@ CR_Punct[] = { 178,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -2842,7 +2868,7 @@ CR_Punct[] = { 178,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
 0x1400, 0x1400,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x169b, 0x169c,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
@@ -2877,7 +2903,7 @@ CR_Punct[] = { 178,
 0x2cfe, 0x2cff,
 0x2d70, 0x2d70,
 0x2e00, 0x2e2e,
-0x2e30, 0x2e4e,
+0x2e30, 0x2e4f,
 0x3001, 0x3003,
 0x3008, 0x3011,
 0x3014, 0x301f,
@@ -2952,18 +2978,21 @@ CR_Punct[] = { 178,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -2986,7 +3015,7 @@ CR_Space[] = { 10,
 
 /* PROPERTY: 'Upper': POSIX [[:Upper:]] */
 static const OnigCodePoint
-CR_Upper[] = { 636,
+CR_Upper[] = { 641,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -3582,6 +3611,11 @@ CR_Upper[] = { 636,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -3635,7 +3669,7 @@ CR_XDigit[] = { 3,
 
 /* PROPERTY: 'Word': POSIX [[:Word:]] */
 static const OnigCodePoint
-CR_Word[] = { 710,
+CR_Word[] = { 716,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -3820,17 +3854,10 @@ CR_Word[] = { 710,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -3921,7 +3948,7 @@ CR_Word[] = { 710,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -4007,7 +4034,8 @@ CR_Word[] = { 710,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -4034,7 +4062,7 @@ CR_Word[] = { 710,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -4136,6 +4164,7 @@ CR_Word[] = { 710,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -4177,7 +4206,7 @@ CR_Word[] = { 710,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -4187,7 +4216,7 @@ CR_Word[] = { 710,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -4195,10 +4224,13 @@ CR_Word[] = { 710,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4238,13 +4270,16 @@ CR_Word[] = { 710,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -4299,9 +4334,14 @@ CR_Word[] = { 710,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -4350,7 +4390,7 @@ CR_Word[] = { 710,
 
 /* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */
 static const OnigCodePoint
-CR_Alnum[] = { 713,
+CR_Alnum[] = { 715,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x0061, 0x007a,
@@ -4543,16 +4583,10 @@ CR_Alnum[] = { 713,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -4569,12 +4603,7 @@ CR_Alnum[] = { 713,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x1049,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x1090, 0x1099,
-0x109c, 0x109d,
+0x1050, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -4595,7 +4624,6 @@ CR_Alnum[] = { 713,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -4641,7 +4669,7 @@ CR_Alnum[] = { 713,
 0x1b80, 0x1ba9,
 0x1bac, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c40, 0x1c49,
 0x1c4d, 0x1c7d,
 0x1c80, 0x1c88,
@@ -4650,6 +4678,7 @@ CR_Alnum[] = { 713,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -4733,32 +4762,28 @@ CR_Alnum[] = { 713,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8d0, 0xa8d9,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
-0xa900, 0xa92a,
+0xa8fd, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9d9,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9fe,
+0xa9e0, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa50, 0xaa59,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -4770,7 +4795,7 @@ CR_Alnum[] = { 713,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -4862,6 +4887,7 @@ CR_Alnum[] = { 713,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11066, 0x1106f,
 0x11082, 0x110b8,
@@ -4904,6 +4930,7 @@ CR_Alnum[] = { 713,
 0x11443, 0x11445,
 0x11447, 0x1144a,
 0x11450, 0x11459,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -4916,6 +4943,7 @@ CR_Alnum[] = { 713,
 0x11644, 0x11644,
 0x11650, 0x11659,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
@@ -4923,10 +4951,14 @@ CR_Alnum[] = { 713,
 0x11800, 0x11838,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4963,19 +4995,22 @@ CR_Alnum[] = { 713,
 0x16a40, 0x16a5e,
 0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5018,9 +5053,16 @@ CR_Alnum[] = { 713,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c
index 37a147e9db..10f7889ea3 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_unfold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1,0 -N onigenc_unicode_unfold_key unicode_unfold_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1,0 -N onigenc_unicode_unfold_key unicode_unfold_key.gperf  */
 /* Computed positions: -k'1-3' */
 
 
@@ -36,12 +36,12 @@
 //#include <string.h>
 #include "regenc.h"
 
-#define TOTAL_KEYWORDS 1480
+#define TOTAL_KEYWORDS 1487
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 3
 #define MIN_HASH_VALUE 10
-#define MAX_HASH_VALUE 1993
-/* maximum key range = 1984, duplicates = 0 */
+#define MAX_HASH_VALUE 1958
+/* maximum key range = 1949, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -56,36 +56,36 @@ hash(OnigCodePoint codes[])
 {
   static const unsigned short asso_values[] =
     {
-         9,    5,    2,  214,  176,    1,  110, 1994, 1994, 1994,
-      1994, 1994, 1994,   13, 1994, 1994, 1994,   77, 1994, 1994,
-        71, 1994, 1994, 1994, 1994,   86, 1994, 1994, 1994,    7,
-      1994,    0,    3, 1994,   50,  560, 1509,  132, 1501,  552,
-      1492,  546, 1586,  538, 1491,    4, 1480,  518, 1475,  510,
-      1467,  879, 1578,  855, 1459,  527, 1426,  234, 1067,  497,
-      1458,  486, 1450,  352, 1436,  831, 1577,  783,  285,  639,
-      1576,  629, 1567,  575, 1566,  609, 1556,  567, 1425,  598,
-      1151,  587, 1064,  461,  668, 1035,  427, 1414,  160, 1411,
-        21, 1404, 1253, 1289, 1416, 1537,  482, 1402,  669, 1391,
-      1302, 1305, 1277, 1095, 1220, 1076,  261,  869, 1387,  475,
-      1340,  151,  327,  845,  859,  824,  731,  816,  539,  715,
-       212,  707,   83, 1297, 1046, 1278,  529, 1380,  520, 1352,
-       184, 1086,  235, 1073,  275, 1052,  193, 1258,    8, 1060,
-       655, 1030,  513, 1022,  393,  254,  344, 1265,  203, 1246,
-       193, 1548,   15, 1376,  120, 1545, 1591,  525, 1590,  232,
-      1583, 1365, 1465,  464, 1011,  451, 1353,   18,    6,  383,
-      1236,  802,    8,  438,  940,  163, 1533,  427,  858,  244,
-      1225,  360, 1212,  333,  575,  219, 1002,  206, 1209,  320,
-       735,  140, 1199,  410, 1188,   73,  973,  103,  965,   63,
-       944,   53,  791,  196,  788,  116,  695,   93,  921,   83,
-       930,  182,  762,   31,  685,  311,  913,  268,  671,   44,
-       906,  302, 1186,  293, 1180,  280, 1154,  885, 1354,  660,
-       760,  650, 1174, 1169,  402,  897,  641,  726, 1162, 1153,
-       622, 1316,  994, 1143,  664, 1134,  447,  173,  375, 1124,
-         0, 1111,  371,  956,  156, 1270,  147, 1117,  113,  504,
-      1994, 1105,  112, 1347, 1994, 1339,   75, 1335,   65, 1331,
-       591, 1096,   45, 1393, 1994, 1198,  239, 1324,   26,  984,
-        18, 1528,   40, 1517,  124,  421,   27,  904,   91,  137,
-        16
+         9,    5,    2,  111,  176,    1,  110, 1959, 1959, 1959,
+      1959, 1959, 1959,   13, 1959, 1959, 1959,   77, 1959, 1959,
+        63, 1959, 1959, 1959, 1959,   86, 1959, 1959, 1959,    7,
+      1959,    0,    3, 1959,  191,  624, 1536,  132, 1519,  613,
+      1513,  607, 1602,  586, 1505,    4, 1497,  570, 1492,  554,
+      1482,  907, 1601,  898, 1469,  595, 1468,  405, 1463,  546,
+      1458,  538, 1453,  474, 1444,  890, 1596,  877, 1419,  725,
+      1590,  698, 1588,  635, 1160,  682, 1021,  338, 1122,  671,
+       812,  559,  819, 1580,  756, 1082,  744, 1438,  637, 1428,
+       266, 1429, 1502, 1285, 1440, 1578,  467, 1419,  873,  490,
+      1380,  779,  731, 1057, 1261, 1034, 1567,  762, 1389,  495,
+      1510,  156,  648,  805, 1537,  862, 1523,  853, 1469,  845,
+      1252,  796,  342, 1297,  801, 1287,  542, 1408,  477, 1400,
+       237, 1109,   20, 1099,  548, 1067,    1, 1280,  326, 1043,
+       767, 1030,  756,  938,  598,  254,   26, 1275,  165, 1270,
+       149, 1575,   15, 1368,  133, 1202,  625,  403,  408,  373,
+       296, 1397,  283,  519, 1381,  503, 1372,   18,    6,  415,
+      1253,  769,    8,  484, 1358,  658, 1565,  464,  427,  244,
+      1241,  360, 1233,  390, 1350,  219,  377,  206, 1223,  328,
+      1211,  145, 1198,  454,  135,   73, 1020,  103, 1012,   63,
+       995,   53,  748,  196,  573,  116,  684,   93,  983,   83,
+      1004,  182,  735,   31,  713,  319,  977,  306,  706,   44,
+       836,  293, 1187,  280, 1135,  268,  671,  976, 1350,  447,
+      1182,  437,  964,  946,  351,  932, 1349,  923, 1090, 1194,
+      1175,  827, 1299, 1165, 1410, 1155, 1522, 1557,  313, 1146,
+       424, 1136,  233, 1130,  161, 1316,   93,  167,  134,  618,
+      1959, 1118,  128, 1342, 1959, 1335,  124, 1331,   75, 1327,
+       191, 1308,   45, 1545, 1959, 1534,    1,  230,    9,  643,
+         5, 1564,   40, 1553,   65,  531,   55,  993,   25, 1476,
+         2
     };
   return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+35] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)+1] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];
 }
@@ -98,21 +98,20 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1040a, 3420, 1},
-
-      {0x01d7, 444, 1},
+      {0x1040a, 3441, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fd7, 31, 3},
+      {0x01f1, 483, 1},
 
-      {0x1e0a, 1876, 1},
+      {0x1e0a, 1882, 1},
 
-      {0x040a, 1026, 1},
+      {0x040a, 1029, 1},
 
       {0x010a, 186, 1},
 
-      {0x1f0a, 2237, 1},
+      {0x1f0a, 2243, 1},
 
-      {0x2c0a, 2600, 1},
+      {0x2c0a, 2606, 1},
 
       {0x1f85, 154, 2},
 
@@ -120,3133 +119,3154 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
 
       {0x1f89, 134, 2},
 
-      {0x2c67, 2720, 1},
+      {0x1ff3, 96, 2},
 
-      {0x1c85, 951, 1},
+      {0x1c85, 954, 1},
 
-      {0xab85, 1660, 1},
+      {0xab85, 1663, 1},
 
-      {0x10c85, 3633, 1},
+      {0x10c85, 3654, 1},
 
-      {0xab89, 1672, 1},
+      {0xab89, 1675, 1},
 
-      {0x10c89, 3645, 1},
+      {0x10c89, 3666, 1},
 
-      {0x1e84, 2060, 1},
+      {0x1e84, 2066, 1},
 
-      {0x2c75, 2732, 1},
+      {0x2c75, 2738, 1},
 
       {0x0184, 360, 1},
 
       {0x1f84, 149, 2},
 
-      {0x2c84, 2741, 1},
+      {0x2c84, 2747, 1},
 
-      {0xab75, 1612, 1},
+      {0xab75, 1615, 1},
 
-      {0xa784, 3255, 1},
+      {0xa784, 3261, 1},
 
-      {0x1c84, 951, 1},
+      {0x1c84, 954, 1},
 
-      {0xab84, 1657, 1},
+      {0xab84, 1660, 1},
 
-      {0x10c84, 3630, 1},
+      {0x10c84, 3651, 1},
 
-      {0x104b2, 3516, 1},
+      {0x104b2, 3537, 1},
 
-      {0x1ff3, 96, 2},
+      {0x1f6f, 2378, 1},
 
-      {0x1ffb, 2414, 1},
+      {0x2c6f, 604, 1},
 
-      {0x1eb2, 2114, 1},
+      {0x1eb2, 2120, 1},
 
-      {0x04b2, 1156, 1},
+      {0x04b2, 1159, 1},
 
-      {0x01b2, 697, 1},
+      {0x01b2, 700, 1},
 
       {0x1fb2, 249, 2},
 
-      {0x2cb2, 2810, 1},
+      {0x2cb2, 2816, 1},
 
-      {0xa684, 3090, 1},
+      {0xa684, 3096, 1},
 
-      {0xa7b2, 706, 1},
+      {0xa7b2, 709, 1},
 
-      {0x1cb2, 1561, 1},
+      {0x1cb2, 1564, 1},
 
-      {0xabb2, 1795, 1},
+      {0xabb2, 1798, 1},
 
-      {0x10cb2, 3768, 1},
+      {0x10cb2, 3789, 1},
 
-      {0x104b8, 3534, 1},
+      {0x104b8, 3555, 1},
 
       {0x01f7, 414, 1},
 
       {0x1ff7, 67, 3},
 
-      {0x1eb8, 2123, 1},
+      {0x1eb8, 2129, 1},
 
-      {0x04b8, 1165, 1},
+      {0x04b8, 1168, 1},
 
       {0x01b8, 408, 1},
 
-      {0x1fb8, 2417, 1},
+      {0x1fb8, 2423, 1},
 
-      {0x2cb8, 2819, 1},
+      {0x2cb8, 2825, 1},
 
-      {0x2ced, 2888, 1},
+      {0x2ced, 2894, 1},
 
-      {0xa7b8, 3306, 1},
+      {0xa7b8, 3315, 1},
 
-      {0x1cb8, 1579, 1},
+      {0x1cb8, 1582, 1},
 
-      {0xabb8, 1813, 1},
+      {0xabb8, 1816, 1},
 
-      {0x1ea6, 2096, 1},
+      {0x1ea6, 2102, 1},
 
-      {0x04a6, 1138, 1},
+      {0x04a6, 1141, 1},
 
       {0x01a6, 679, 1},
 
       {0x1fa6, 239, 2},
 
-      {0x2ca6, 2792, 1},
+      {0x2ca6, 2798, 1},
 
-      {0x2167, 2462, 1},
+      {0x1ffb, 2420, 1},
 
-      {0xa7a6, 3294, 1},
+      {0xa7a6, 3303, 1},
 
-      {0x1ca6, 1525, 1},
+      {0x1ca6, 1528, 1},
 
-      {0xaba6, 1759, 1},
+      {0xaba6, 1762, 1},
 
-      {0x10ca6, 3732, 1},
+      {0x10ca6, 3753, 1},
 
-      {0x1ea4, 2093, 1},
+      {0x1ea4, 2099, 1},
 
-      {0x04a4, 1135, 1},
+      {0x04a4, 1138, 1},
 
       {0x01a4, 390, 1},
 
       {0x1fa4, 229, 2},
 
-      {0x2ca4, 2789, 1},
+      {0x2ca4, 2795, 1},
 
-      {0x1fe9, 2432, 1},
+      {0x1ff9, 2408, 1},
 
-      {0xa7a4, 3291, 1},
+      {0xa7a4, 3300, 1},
 
-      {0x1ca4, 1519, 1},
+      {0x1ca4, 1522, 1},
 
-      {0xaba4, 1753, 1},
+      {0xaba4, 1756, 1},
 
-      {0x10ca4, 3726, 1},
+      {0x10ca4, 3747, 1},
 
-      {0x1ea0, 2087, 1},
+      {0x1ea0, 2093, 1},
 
-      {0x04a0, 1129, 1},
+      {0x04a0, 1132, 1},
 
       {0x01a0, 384, 1},
 
       {0x1fa0, 209, 2},
 
-      {0x2ca0, 2783, 1},
+      {0x2ca0, 2789, 1},
 
-      {0x1fe7, 47, 3},
+      {0x1fe9, 2438, 1},
 
-      {0xa7a0, 3285, 1},
+      {0xa7a0, 3294, 1},
 
-      {0x1ca0, 1507, 1},
+      {0x1ca0, 1510, 1},
 
-      {0xaba0, 1741, 1},
+      {0xaba0, 1744, 1},
 
-      {0x10ca0, 3714, 1},
+      {0x10ca0, 3735, 1},
 
-      {0x1eae, 2108, 1},
+      {0x1eae, 2114, 1},
 
-      {0x04ae, 1150, 1},
+      {0x04ae, 1153, 1},
 
-      {0x01ae, 688, 1},
+      {0x01ae, 691, 1},
 
       {0x1fae, 239, 2},
 
-      {0x2cae, 2804, 1},
+      {0x2cae, 2810, 1},
 
-      {0x0057, 65, 1},
+      {0x13fd, 1855, 1},
 
       {0xa7ae, 655, 1},
 
-      {0x1cae, 1549, 1},
+      {0x1cae, 1552, 1},
 
-      {0xabae, 1783, 1},
+      {0xabae, 1786, 1},
 
-      {0x10cae, 3756, 1},
+      {0x10cae, 3777, 1},
 
-      {0x1eac, 2105, 1},
+      {0x1eac, 2111, 1},
 
-      {0x04ac, 1147, 1},
+      {0x04ac, 1150, 1},
 
       {0x01ac, 396, 1},
 
       {0x1fac, 229, 2},
 
-      {0x2cac, 2801, 1},
+      {0x2cac, 2807, 1},
 
-      {0x13fb, 1846, 1},
+      {0x00dd, 162, 1},
 
       {0xa7ac, 637, 1},
 
-      {0x1cac, 1543, 1},
+      {0x1cac, 1546, 1},
 
-      {0xabac, 1777, 1},
+      {0xabac, 1780, 1},
 
-      {0x10cac, 3750, 1},
+      {0x10cac, 3771, 1},
 
-      {0x1ea2, 2090, 1},
+      {0x1ea2, 2096, 1},
 
-      {0x04a2, 1132, 1},
+      {0x04a2, 1135, 1},
 
       {0x01a2, 387, 1},
 
       {0x1fa2, 219, 2},
 
-      {0x2ca2, 2786, 1},
+      {0x2ca2, 2792, 1},
 
-      {0x10b2, 2948, 1},
+      {0x10b2, 2954, 1},
 
-      {0xa7a2, 3288, 1},
+      {0xa7a2, 3297, 1},
 
-      {0x1ca2, 1513, 1},
+      {0x1ca2, 1516, 1},
 
-      {0xaba2, 1747, 1},
+      {0xaba2, 1750, 1},
 
-      {0x10ca2, 3720, 1},
+      {0x10ca2, 3741, 1},
 
-      {0x118b2, 3825, 1},
+      {0x118b2, 3846, 1},
 
-      {0x050a, 1288, 1},
+      {0x050a, 1291, 1},
 
-      {0x1fe3, 41, 3},
+      {0x020a, 517, 1},
 
-      {0x1eaa, 2102, 1},
+      {0x1eaa, 2108, 1},
 
-      {0x04aa, 1144, 1},
+      {0x04aa, 1147, 1},
 
-      {0x00df, 24, 2},
+      {0x13fb, 1849, 1},
 
       {0x1faa, 219, 2},
 
-      {0x2caa, 2798, 1},
+      {0x2caa, 2804, 1},
 
-      {0x10b8, 2966, 1},
+      {0x10b8, 2972, 1},
 
       {0xa7aa, 646, 1},
 
-      {0x1caa, 1537, 1},
+      {0x1caa, 1540, 1},
 
-      {0xabaa, 1771, 1},
+      {0xabaa, 1774, 1},
 
-      {0x10caa, 3744, 1},
+      {0x10caa, 3765, 1},
 
-      {0x118b8, 3843, 1},
+      {0x118b8, 3864, 1},
 
-      {0x1ff9, 2402, 1},
+      {0x1fe7, 47, 3},
 
-      {0xab77, 1618, 1},
+      {0x13f9, 1843, 1},
 
-      {0x10402, 3396, 1},
+      {0x10402, 3417, 1},
 
-      {0x10a6, 2912, 1},
+      {0x10a6, 2918, 1},
 
-      {0x0537, 1363, 1},
+      {0x1fe3, 41, 3},
 
-      {0x1e02, 1864, 1},
+      {0x1e02, 1870, 1},
 
-      {0x0402, 1002, 1},
+      {0x0402, 1005, 1},
 
       {0x0102, 174, 1},
 
-      {0x118a6, 3789, 1},
+      {0x118a6, 3810, 1},
 
-      {0x2c02, 2576, 1},
+      {0x2c02, 2582, 1},
 
-      {0x1efe, 2228, 1},
+      {0x019f, 673, 1},
 
-      {0x04fe, 1270, 1},
+      {0x1f9f, 204, 2},
 
-      {0x01fe, 499, 1},
+      {0x00df, 24, 2},
+
+      {0x10a4, 2912, 1},
+
+      {0xab77, 1621, 1},
+
+      {0x1c9f, 1507, 1},
+
+      {0xab9f, 1741, 1},
 
-      {0x10a4, 2906, 1},
+      {0x10c9f, 3732, 1},
 
-      {0x049c, 1123, 1},
+      {0x118a4, 3804, 1},
+
+      {0x049c, 1126, 1},
 
       {0x019c, 664, 1},
 
       {0x1f9c, 189, 2},
 
-      {0x2c9c, 2777, 1},
+      {0x2c9c, 2783, 1},
 
-      {0x118a4, 3783, 1},
+      {0x10a0, 2900, 1},
 
-      {0xa79c, 3279, 1},
+      {0xa79c, 3288, 1},
 
-      {0x1c9c, 1495, 1},
+      {0x1c9c, 1498, 1},
 
-      {0xab9c, 1729, 1},
+      {0xab9c, 1732, 1},
 
-      {0x10c9c, 3702, 1},
+      {0x10c9c, 3723, 1},
 
-      {0x10a0, 2894, 1},
+      {0x118a0, 3792, 1},
 
-      {0x1e4c, 1975, 1},
+      {0x1e4c, 1981, 1},
 
-      {0x00dd, 162, 1},
+      {0xab73, 1609, 1},
 
       {0x014c, 279, 1},
 
-      {0x1f4c, 2333, 1},
+      {0x1f4c, 2339, 1},
 
-      {0x118a0, 3771, 1},
+      {0x10ae, 2942, 1},
 
       {0x004c, 31, 1},
 
-      {0xa74c, 3186, 1},
+      {0xa74c, 3192, 1},
 
       {0x01db, 450, 1},
 
-      {0x1fdb, 2396, 1},
+      {0x1fdb, 2402, 1},
 
-      {0x10ae, 2936, 1},
+      {0x118ae, 3834, 1},
 
       {0x00db, 156, 1},
 
-      {0x13fd, 1852, 1},
-
-      {0x1e8c, 2072, 1},
-
-      {0x048c, 1099, 1},
-
-      {0x118ae, 3813, 1},
-
-      {0x1f8c, 149, 2},
-
-      {0x2c8c, 2753, 1},
+      {0x1ede, 2186, 1},
 
-      {0xff37, 3378, 1},
+      {0x04de, 1225, 1},
 
-      {0xa64c, 3033, 1},
-
-      {0x10ac, 2930, 1},
+      {0x01de, 456, 1},
 
-      {0xab8c, 1681, 1},
+      {0x10ac, 2936, 1},
 
-      {0x10c8c, 3654, 1},
+      {0x2cde, 2882, 1},
 
-      {0x1ed4, 2165, 1},
+      {0x00de, 165, 1},
 
-      {0x04d4, 1207, 1},
+      {0xab71, 1603, 1},
 
-      {0x118ac, 3807, 1},
+      {0xa64c, 3039, 1},
 
-      {0x24b8, 2498, 1},
+      {0x118ac, 3828, 1},
 
-      {0x2cd4, 2861, 1},
+      {0x24b8, 2504, 1},
 
-      {0x00d4, 138, 1},
+      {0x03f1, 802, 1},
 
-      {0x104b0, 3510, 1},
+      {0x03ff, 730, 1},
 
-      {0x10a2, 2900, 1},
+      {0x104b0, 3531, 1},
 
-      {0xa68c, 3102, 1},
+      {0x10a2, 2906, 1},
 
-      {0x1eb0, 2111, 1},
+      {0x03f5, 758, 1},
 
-      {0x04b0, 1153, 1},
+      {0x1eb0, 2117, 1},
 
-      {0x0389, 736, 1},
+      {0x04b0, 1156, 1},
 
-      {0x118a2, 3777, 1},
+      {0x0389, 739, 1},
 
-      {0x2cb0, 2807, 1},
+      {0x118a2, 3798, 1},
 
-      {0x1f5f, 2348, 1},
+      {0x2cb0, 2813, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa7b0, 709, 1},
+      {0xa7b0, 712, 1},
 
-      {0x1cb0, 1555, 1},
+      {0x1cb0, 1558, 1},
 
-      {0xabb0, 1789, 1},
+      {0xabb0, 1792, 1},
 
-      {0x10cb0, 3762, 1},
+      {0x10cb0, 3783, 1},
 
-      {0x03ff, 727, 1},
+      {0x2165, 2462, 1},
 
-      {0x10aa, 2924, 1},
+      {0x10aa, 2930, 1},
 
-      {0x03f5, 755, 1},
+      {0x1feb, 2414, 1},
 
-      {0x13f9, 1840, 1},
+      {0x2ceb, 2891, 1},
 
-      {0x1ea8, 2099, 1},
+      {0x1ea8, 2105, 1},
 
-      {0x04a8, 1141, 1},
+      {0x04a8, 1144, 1},
 
-      {0x118aa, 3801, 1},
+      {0x118aa, 3822, 1},
 
       {0x1fa8, 209, 2},
 
-      {0x2ca8, 2795, 1},
+      {0x2ca8, 2801, 1},
 
-      {0xab73, 1606, 1},
+      {0x03fd, 724, 1},
 
-      {0xa7a8, 3297, 1},
+      {0xa7a8, 3306, 1},
 
-      {0x1ca8, 1531, 1},
+      {0x1ca8, 1534, 1},
 
-      {0xaba8, 1765, 1},
+      {0xaba8, 1768, 1},
 
-      {0x10ca8, 3738, 1},
+      {0x10ca8, 3759, 1},
 
       {0x1e98, 38, 2},
 
-      {0x0498, 1117, 1},
+      {0x0498, 1120, 1},
 
       {0x0198, 375, 1},
 
       {0x1f98, 169, 2},
 
-      {0x2c98, 2771, 1},
-
-      {0xab71, 1600, 1},
+      {0x2c98, 2777, 1},
 
-      {0xa798, 3273, 1},
+      {0x2161, 2450, 1},
 
-      {0x1c98, 1483, 1},
+      {0xa798, 3282, 1},
 
-      {0xab98, 1717, 1},
+      {0x1c98, 1486, 1},
 
-      {0x10c98, 3690, 1},
+      {0xab98, 1720, 1},
 
-      {0x03f7, 887, 1},
+      {0x10c98, 3711, 1},
 
-      {0x0055, 59, 1},
+      {0x03f7, 890, 1},
 
-      {0x020a, 517, 1},
+      {0x216f, 2492, 1},
+      {0xffffffff, -1, 0},
 
       {0x1e96, 16, 2},
 
-      {0x0496, 1114, 1},
+      {0x0496, 1117, 1},
 
       {0x0196, 652, 1},
 
       {0x1f96, 199, 2},
 
-      {0x2c96, 2768, 1},
+      {0x2c96, 2774, 1},
 
-      {0xa698, 3120, 1},
+      {0xa698, 3126, 1},
 
-      {0xa796, 3270, 1},
+      {0xa796, 3279, 1},
 
-      {0x1c96, 1477, 1},
+      {0x1c96, 1480, 1},
 
-      {0xab96, 1711, 1},
+      {0xab96, 1714, 1},
 
-      {0x10c96, 3684, 1},
+      {0x10c96, 3705, 1},
 
-      {0x03a6, 813, 1},
+      {0x03a6, 816, 1},
 
-      {0x16e57, 3936, 1},
+      {0x1ef2, 2216, 1},
 
-      {0x10416, 3456, 1},
+      {0x04f2, 1255, 1},
 
-      {0x1e7c, 2048, 1},
+      {0x01f2, 483, 1},
 
-      {0x047c, 1087, 1},
+      {0x1ff2, 257, 2},
 
-      {0x1e16, 1894, 1},
+      {0x2cf2, 2897, 1},
 
-      {0x0416, 913, 1},
+      {0x01d9, 447, 1},
 
-      {0x0116, 204, 1},
+      {0x1fd9, 2432, 1},
 
-      {0xa696, 3117, 1},
+      {0xa696, 3123, 1},
 
-      {0x2c16, 2636, 1},
+      {0x00d9, 150, 1},
 
-      {0x03a4, 807, 1},
+      {0x03a4, 810, 1},
 
-      {0xab7c, 1633, 1},
+      {0x1f5f, 2354, 1},
 
-      {0x01f1, 483, 1},
+      {0x03f9, 884, 1},
 
-      {0x0502, 1276, 1},
+      {0x0502, 1279, 1},
 
-      {0x2165, 2456, 1},
+      {0x0202, 505, 1},
 
-      {0x1e90, 2078, 1},
+      {0x1e90, 2084, 1},
 
-      {0x0490, 1105, 1},
+      {0x0490, 1108, 1},
 
       {0x0190, 628, 1},
 
       {0x1f90, 169, 2},
 
-      {0x2c90, 2759, 1},
+      {0x2c90, 2765, 1},
 
-      {0x03a0, 795, 1},
+      {0x03a0, 798, 1},
 
-      {0xa790, 3264, 1},
+      {0xa790, 3270, 1},
 
-      {0x1c90, 1459, 1},
+      {0x1c90, 1462, 1},
 
-      {0xab90, 1693, 1},
+      {0xab90, 1696, 1},
 
-      {0x10c90, 3666, 1},
+      {0x10c90, 3687, 1},
 
-      {0x1e6e, 2027, 1},
+      {0x1e6e, 2033, 1},
 
-      {0x046e, 1066, 1},
+      {0x046e, 1069, 1},
 
       {0x016e, 330, 1},
 
-      {0x1f6e, 2369, 1},
+      {0x1f6e, 2375, 1},
 
       {0x2c6e, 667, 1},
 
-      {0x10b0, 2942, 1},
+      {0x10b0, 2948, 1},
 
-      {0xa76e, 3237, 1},
-
-      {0x054c, 1426, 1},
+      {0xa76e, 3243, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa690, 3108, 1},
+      {0xa690, 3114, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0147, 273, 1},
+      {0x118b0, 3840, 1},
 
-      {0x118b0, 3819, 1},
+      {0x104be, 3573, 1},
 
-      {0x104b6, 3528, 1},
+      {0x054c, 1429, 1},
 
-      {0x0047, 18, 1},
+      {0x024c, 598, 1},
 
-      {0x03fd, 721, 1},
+      {0x1ebe, 2138, 1},
 
-      {0x1eb6, 2120, 1},
+      {0x04be, 1177, 1},
+      {0xffffffff, -1, 0},
 
-      {0x04b6, 1162, 1},
+      {0x1fbe, 773, 1},
 
-      {0x0535, 1357, 1},
+      {0x2cbe, 2834, 1},
 
-      {0x1fb6, 58, 2},
+      {0x10a8, 2924, 1},
 
-      {0x2cb6, 2816, 1},
+      {0xa7be, 3324, 1},
 
-      {0x10a8, 2918, 1},
+      {0x1cbe, 1594, 1},
 
-      {0xa7b6, 3303, 1},
+      {0xabbe, 1834, 1},
 
-      {0x1cb6, 1573, 1},
+      {0x104bc, 3567, 1},
 
-      {0xabb6, 1807, 1},
+      {0x118a8, 3816, 1},
+      {0xffffffff, -1, 0},
 
-      {0x104be, 3552, 1},
+      {0x1ebc, 2135, 1},
 
-      {0x118a8, 3795, 1},
+      {0x04bc, 1174, 1},
 
-      {0x2c63, 1858, 1},
+      {0x01bc, 411, 1},
 
-      {0x1ebe, 2132, 1},
+      {0x1fbc, 62, 2},
 
-      {0x04be, 1174, 1},
+      {0x2cbc, 2831, 1},
 
-      {0x10421, 3489, 1},
+      {0x017f, 52, 1},
 
-      {0x1fbe, 770, 1},
+      {0xa7bc, 3321, 1},
 
-      {0x2cbe, 2828, 1},
+      {0x2c7f, 583, 1},
 
-      {0x2161, 2444, 1},
+      {0xabbc, 1828, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0421, 947, 1},
+      {0x104ba, 3561, 1},
 
-      {0x1cbe, 1591, 1},
+      {0xab7f, 1645, 1},
 
-      {0xabbe, 1831, 1},
+      {0x03aa, 830, 1},
 
-      {0x2c21, 2669, 1},
+      {0x1eba, 2132, 1},
 
-      {0x104bc, 3546, 1},
+      {0x04ba, 1171, 1},
       {0xffffffff, -1, 0},
 
-      {0x03aa, 827, 1},
+      {0x1fba, 2381, 1},
 
-      {0x1ebc, 2129, 1},
+      {0x2cba, 2828, 1},
 
-      {0x04bc, 1171, 1},
+      {0x017d, 351, 1},
 
-      {0x01bc, 411, 1},
+      {0xa7ba, 3318, 1},
 
-      {0x1fbc, 62, 2},
+      {0x1cba, 1588, 1},
+
+      {0xabba, 1822, 1},
 
-      {0x2cbc, 2825, 1},
+      {0xa77d, 1858, 1},
 
-      {0x16e4c, 3903, 1},
+      {0x104b6, 3549, 1},
 
-      {0x104ba, 3540, 1},
+      {0xab7d, 1639, 1},
+      {0xffffffff, -1, 0},
 
-      {0x03f9, 881, 1},
+      {0x1eb6, 2126, 1},
 
-      {0xabbc, 1825, 1},
+      {0x04b6, 1165, 1},
 
-      {0x1eba, 2126, 1},
+      {0x16e4c, 3924, 1},
 
-      {0x04ba, 1168, 1},
+      {0x1fb6, 58, 2},
 
-      {0x216e, 2483, 1},
+      {0x2cb6, 2822, 1},
 
-      {0x1fba, 2375, 1},
+      {0x039f, 795, 1},
 
-      {0x2cba, 2822, 1},
+      {0xa7b6, 3312, 1},
 
-      {0xff35, 3372, 1},
+      {0x1cb6, 1576, 1},
 
-      {0x104b4, 3522, 1},
+      {0xabb6, 1810, 1},
 
-      {0x1cba, 1585, 1},
+      {0x01d5, 441, 1},
 
-      {0xabba, 1819, 1},
+      {0x104b4, 3543, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1eb4, 2117, 1},
+      {0x00d5, 141, 1},
 
-      {0x04b4, 1159, 1},
+      {0x1eb4, 2123, 1},
 
-      {0x03fe, 724, 1},
+      {0x04b4, 1162, 1},
 
-      {0x1fb4, 50, 2},
+      {0x039c, 785, 1},
 
-      {0x2cb4, 2813, 1},
+      {0x1fb4, 50, 2},
 
-      {0x039c, 782, 1},
+      {0x2cb4, 2819, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa7b4, 3300, 1},
+      {0xa7b4, 3309, 1},
 
-      {0x1cb4, 1567, 1},
+      {0x1cb4, 1570, 1},
 
-      {0xabb4, 1801, 1},
+      {0xabb4, 1804, 1},
 
       {0x1e9a, 0, 2},
 
-      {0x049a, 1120, 1},
+      {0x049a, 1123, 1},
 
-      {0x0555, 1453, 1},
+      {0x2c67, 2726, 1},
 
       {0x1f9a, 179, 2},
 
-      {0x2c9a, 2774, 1},
+      {0x2c9a, 2780, 1},
+      {0xffffffff, -1, 0},
+
+      {0xa79a, 3285, 1},
 
-      {0x2163, 2450, 1},
+      {0x1c9a, 1492, 1},
 
-      {0xa79a, 3276, 1},
+      {0xab9a, 1726, 1},
 
-      {0x1c9a, 1489, 1},
+      {0x10c9a, 3717, 1},
 
-      {0xab9a, 1723, 1},
+      {0x1e2a, 1930, 1},
 
-      {0x10c9a, 3696, 1},
+      {0x042a, 980, 1},
 
-      {0x1f4d, 2336, 1},
+      {0x012a, 234, 1},
 
-      {0x16e5f, 3960, 1},
+      {0x1f2a, 2285, 1},
 
-      {0x004d, 34, 1},
+      {0x2c2a, 2702, 1},
 
-      {0x1e94, 2084, 1},
+      {0x03de, 857, 1},
 
-      {0x0494, 1111, 1},
+      {0xa72a, 3144, 1},
 
-      {0x0194, 640, 1},
+      {0x10be, 2990, 1},
 
-      {0x1f94, 189, 2},
+      {0xa69a, 3129, 1},
 
-      {0x2c94, 2765, 1},
+      {0x0057, 65, 1},
+
+      {0x104c7, 3600, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa69a, 3123, 1},
+      {0x118be, 3882, 1},
 
-      {0x038c, 833, 1},
+      {0x1e90a, 4014, 1},
 
-      {0x1c94, 1471, 1},
+      {0x04c7, 1189, 1},
 
-      {0xab94, 1705, 1},
+      {0x01c7, 421, 1},
 
-      {0x10c94, 3678, 1},
+      {0x1fc7, 15, 3},
       {0xffffffff, -1, 0},
 
-      {0x0516, 1306, 1},
+      {0x00c7, 99, 1},
 
-      {0x10b6, 2960, 1},
+      {0x10bc, 2984, 1},
 
-      {0x0202, 505, 1},
+      {0x03b0, 41, 3},
 
-      {0x1f6f, 2372, 1},
+      {0xff37, 3399, 1},
 
-      {0x2c6f, 604, 1},
+      {0x1e92, 2087, 1},
 
-      {0x1041c, 3474, 1},
+      {0x0492, 1111, 1},
 
-      {0x118b6, 3837, 1},
+      {0x118bc, 3876, 1},
 
-      {0xa694, 3114, 1},
+      {0x1f92, 179, 2},
 
-      {0x1e1c, 1903, 1},
+      {0x2c92, 2768, 1},
 
-      {0x041c, 931, 1},
+      {0xfb02, 12, 2},
 
-      {0x011c, 213, 1},
+      {0xa792, 3273, 1},
 
-      {0x1f1c, 2267, 1},
+      {0x1c92, 1468, 1},
 
-      {0x2c1c, 2654, 1},
+      {0xab92, 1702, 1},
 
-      {0x10be, 2984, 1},
+      {0x10c92, 3693, 1},
 
-      {0x03b0, 41, 3},
+      {0x10ba, 2978, 1},
+      {0xffffffff, -1, 0},
 
-      {0x16e55, 3930, 1},
+      {0x03a8, 823, 1},
 
-      {0x1e92, 2081, 1},
+      {0x1e7c, 2054, 1},
 
-      {0x0492, 1108, 1},
+      {0x047c, 1090, 1},
 
-      {0x118be, 3861, 1},
+      {0x118ba, 3870, 1},
 
-      {0x1f92, 179, 2},
+      {0x0537, 1366, 1},
+
+      {0x1e97, 34, 2},
 
-      {0x2c92, 2762, 1},
+      {0xa692, 3117, 1},
 
-      {0x024c, 598, 1},
+      {0x0197, 649, 1},
 
-      {0xa792, 3267, 1},
+      {0x1f97, 204, 2},
 
-      {0x1c92, 1465, 1},
+      {0xab7c, 1636, 1},
 
-      {0xab92, 1699, 1},
+      {0x0398, 768, 1},
 
-      {0x10c92, 3672, 1},
+      {0x10b6, 2966, 1},
 
-      {0x10bc, 2978, 1},
+      {0x1c97, 1483, 1},
 
-      {0x0547, 1411, 1},
+      {0xab97, 1717, 1},
 
-      {0x03a8, 820, 1},
+      {0x10c97, 3708, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01d9, 447, 1},
+      {0x118b6, 3858, 1},
 
-      {0x1fd9, 2426, 1},
+      {0x16e5f, 3981, 1},
 
-      {0x118bc, 3855, 1},
+      {0x1e94, 2090, 1},
 
-      {0x00d9, 150, 1},
+      {0x0494, 1114, 1},
 
-      {0x01d5, 441, 1},
+      {0x0194, 640, 1},
 
-      {0xa692, 3111, 1},
+      {0x1f94, 189, 2},
 
-      {0x10ba, 2972, 1},
+      {0x2c94, 2771, 1},
 
-      {0x00d5, 141, 1},
-      {0xffffffff, -1, 0},
+      {0x0396, 762, 1},
 
-      {0x0398, 765, 1},
+      {0x10b4, 2960, 1},
 
-      {0x1e86, 2063, 1},
+      {0x1c94, 1474, 1},
 
-      {0x118ba, 3849, 1},
+      {0xab94, 1708, 1},
 
-      {0x0186, 616, 1},
+      {0x10c94, 3699, 1},
 
-      {0x1f86, 159, 2},
+      {0x24be, 2522, 1},
 
-      {0x2c86, 2744, 1},
+      {0x118b4, 3852, 1},
 
-      {0x10b4, 2954, 1},
+      {0x10416, 3477, 1},
 
-      {0xa786, 3258, 1},
+      {0x1e7a, 2051, 1},
 
-      {0x1c86, 977, 1},
+      {0x047a, 1087, 1},
 
-      {0xab86, 1663, 1},
+      {0x1e16, 1900, 1},
 
-      {0x10c86, 3636, 1},
+      {0x0416, 916, 1},
+
+      {0x0116, 204, 1},
 
-      {0x118b4, 3831, 1},
+      {0xa694, 3120, 1},
 
-      {0x216f, 2486, 1},
+      {0x2c16, 2642, 1},
 
-      {0x0396, 759, 1},
+      {0x017b, 348, 1},
 
-      {0x1f6d, 2366, 1},
+      {0xab7a, 1630, 1},
 
-      {0x2c6d, 607, 1},
+      {0x24bc, 2516, 1},
       {0xffffffff, -1, 0},
 
-      {0x104c7, 3579, 1},
+      {0xa77b, 3249, 1},
 
-      {0x24b6, 2492, 1},
+      {0x1e86, 2069, 1},
 
-      {0xa686, 3093, 1},
+      {0xab7b, 1633, 1},
 
-      {0x1e90a, 3993, 1},
+      {0x0186, 616, 1},
 
-      {0x04c7, 1186, 1},
+      {0x1f86, 159, 2},
 
-      {0x01c7, 421, 1},
+      {0x2c86, 2750, 1},
 
-      {0x1fc7, 15, 3},
-      {0xffffffff, -1, 0},
+      {0x0390, 25, 3},
 
-      {0x00c7, 99, 1},
+      {0xa786, 3264, 1},
 
-      {0x16e47, 3888, 1},
-      {0xffffffff, -1, 0},
+      {0x1c86, 980, 1},
 
-      {0x1e9e, 24, 2},
+      {0xab86, 1666, 1},
 
-      {0x049e, 1126, 1},
+      {0x10c86, 3657, 1},
 
-      {0x24be, 2516, 1},
+      {0x24ba, 2510, 1},
 
-      {0x1f9e, 199, 2},
+      {0x01d7, 444, 1},
 
-      {0x2c9e, 2780, 1},
+      {0x1fd7, 31, 3},
 
-      {0x03f1, 799, 1},
+      {0x10c7, 3014, 1},
 
-      {0xa79e, 3282, 1},
+      {0x018f, 625, 1},
 
-      {0x1c9e, 1501, 1},
+      {0x1f8f, 164, 2},
 
-      {0xab9e, 1735, 1},
+      {0xff2a, 3360, 1},
+      {0xffffffff, -1, 0},
 
-      {0x10c9e, 3708, 1},
+      {0xa686, 3099, 1},
 
-      {0x0390, 25, 3},
+      {0x104c4, 3591, 1},
 
-      {0x1efa, 2222, 1},
+      {0xab8f, 1693, 1},
 
-      {0x04fa, 1264, 1},
+      {0x10c8f, 3684, 1},
 
-      {0x01fa, 493, 1},
+      {0x1ec4, 2147, 1},
 
-      {0x1ffa, 2411, 1},
+      {0x24b6, 2498, 1},
 
-      {0x24bc, 2510, 1},
-      {0xffffffff, -1, 0},
+      {0x01c4, 417, 1},
 
-      {0x1e8e, 2075, 1},
+      {0x1fc4, 54, 2},
 
-      {0x048e, 1102, 1},
+      {0x2cc4, 2843, 1},
 
-      {0x018e, 453, 1},
+      {0x00c4, 89, 1},
 
-      {0x1f8e, 159, 2},
+      {0xa7c4, 3276, 1},
 
-      {0x2c8e, 2756, 1},
+      {0x104c2, 3585, 1},
 
-      {0xff21, 3312, 1},
+      {0x216e, 2489, 1},
       {0xffffffff, -1, 0},
 
-      {0x24ba, 2504, 1},
+      {0x1ec2, 2144, 1},
+
+      {0x052a, 1339, 1},
 
-      {0xab8e, 1687, 1},
+      {0x022a, 562, 1},
 
-      {0x10c8e, 3660, 1},
+      {0x1fc2, 253, 2},
 
-      {0x054d, 1429, 1},
+      {0x2cc2, 2840, 1},
 
-      {0x1e8a, 2069, 1},
+      {0x00c2, 83, 1},
 
-      {0x048a, 1096, 1},
+      {0xa7c2, 3327, 1},
 
-      {0x018a, 622, 1},
+      {0x1e9e, 24, 2},
 
-      {0x1f8a, 139, 2},
+      {0x049e, 1129, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c8a, 2750, 1},
+      {0x1f9e, 199, 2},
 
-      {0x216d, 2480, 1},
+      {0x2c9e, 2786, 1},
 
-      {0x104d3, 3615, 1},
+      {0x037f, 887, 1},
 
-      {0xa68e, 3105, 1},
+      {0xa79e, 3291, 1},
 
-      {0xab8a, 1675, 1},
+      {0x1c9e, 1504, 1},
 
-      {0x10c8a, 3648, 1},
+      {0xab9e, 1738, 1},
 
-      {0x0216, 535, 1},
+      {0x10c9e, 3729, 1},
 
-      {0x01d3, 438, 1},
+      {0x1e8e, 2081, 1},
 
-      {0x1fd3, 25, 3},
+      {0x048e, 1105, 1},
 
-      {0x1e82, 2057, 1},
+      {0x018e, 453, 1},
 
-      {0x00d3, 135, 1},
+      {0x1f8e, 159, 2},
 
-      {0x0182, 357, 1},
+      {0x2c8e, 2762, 1},
 
-      {0x1f82, 139, 2},
+      {0x013d, 258, 1},
 
-      {0x2c82, 2738, 1},
+      {0x1f3d, 2318, 1},
 
-      {0xa68a, 3099, 1},
+      {0x1041c, 3495, 1},
 
-      {0xa782, 3252, 1},
+      {0xab8e, 1690, 1},
 
-      {0x1c82, 937, 1},
+      {0x10c8e, 3681, 1},
 
-      {0xab82, 1651, 1},
+      {0x1e1c, 1909, 1},
 
-      {0x10c82, 3624, 1},
+      {0x041c, 934, 1},
 
-      {0x1e30, 1933, 1},
+      {0x011c, 213, 1},
 
-      {0x051c, 1315, 1},
+      {0x1f1c, 2273, 1},
 
-      {0x0130, 261, 2},
+      {0x2c1c, 2660, 1},
 
-      {0x1e80, 2054, 1},
+      {0x1e902, 3990, 1},
 
-      {0x0480, 1093, 1},
+      {0x1f5d, 2351, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f80, 129, 2},
+      {0xa68e, 3111, 1},
 
-      {0x2c80, 2735, 1},
+      {0x24c7, 2549, 1},
 
-      {0xa682, 3087, 1},
+      {0x1e8a, 2075, 1},
 
-      {0xa780, 3249, 1},
+      {0x048a, 1099, 1},
 
-      {0x1c80, 899, 1},
+      {0x018a, 622, 1},
 
-      {0xab80, 1645, 1},
+      {0x1f8a, 139, 2},
 
-      {0x10c80, 3618, 1},
+      {0x2c8a, 2756, 1},
 
-      {0x16e4d, 3906, 1},
+      {0x03d5, 816, 1},
 
-      {0x1e4a, 1972, 1},
+      {0x1e40, 1963, 1},
       {0xffffffff, -1, 0},
 
-      {0x014a, 276, 1},
-
-      {0x1f4a, 2327, 1},
+      {0xab8a, 1678, 1},
 
-      {0x10c7, 3008, 1},
+      {0x10c8a, 3669, 1},
 
-      {0x004a, 24, 1},
+      {0x16e57, 3957, 1},
 
-      {0xa74a, 3183, 1},
+      {0x1e4a, 1978, 1},
 
-      {0xa680, 3084, 1},
+      {0xa740, 3174, 1},
 
-      {0x1041a, 3468, 1},
+      {0x014a, 276, 1},
 
-      {0x013d, 258, 1},
+      {0x1f4a, 2333, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f3d, 2312, 1},
+      {0x004a, 24, 1},
 
-      {0x1e1a, 1900, 1},
+      {0xa74a, 3189, 1},
 
-      {0x041a, 925, 1},
+      {0xa68a, 3105, 1},
 
-      {0x011a, 210, 1},
+      {0x1e82, 2063, 1},
 
-      {0x1f1a, 2261, 1},
+      {0x039a, 778, 1},
 
-      {0x2c1a, 2648, 1},
-      {0xffffffff, -1, 0},
+      {0x0182, 357, 1},
 
-      {0x13fa, 1843, 1},
+      {0x1f82, 139, 2},
 
-      {0xa64a, 3029, 1},
+      {0x2c82, 2744, 1},
 
-      {0x10418, 3462, 1},
-      {0xffffffff, -1, 0},
+      {0xa640, 3020, 1},
 
-      {0x039a, 775, 1},
+      {0xa782, 3258, 1},
 
-      {0x1e18, 1897, 1},
+      {0x1c82, 940, 1},
 
-      {0x0418, 919, 1},
+      {0xab82, 1654, 1},
 
-      {0x0118, 207, 1},
+      {0x10c82, 3645, 1},
 
-      {0x1f18, 2255, 1},
+      {0xa64a, 3035, 1},
 
-      {0x2c18, 2642, 1},
-      {0xffffffff, -1, 0},
+      {0x10c4, 3008, 1},
 
-      {0xfb02, 12, 2},
+      {0x0516, 1309, 1},
 
-      {0x1ee0, 2183, 1},
+      {0x0216, 535, 1},
 
-      {0x04e0, 1225, 1},
+      {0x2167, 2468, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01e0, 459, 1},
+      {0x1e80, 2060, 1},
 
-      {0x1040e, 3432, 1},
+      {0x0480, 1096, 1},
 
-      {0x2ce0, 2879, 1},
+      {0xa682, 3093, 1},
 
-      {0x0394, 752, 1},
+      {0x1f80, 129, 2},
 
-      {0x1e0e, 1882, 1},
+      {0x2c80, 2741, 1},
 
-      {0x040e, 1038, 1},
+      {0x10c2, 3002, 1},
 
-      {0x010e, 192, 1},
+      {0xa780, 3255, 1},
 
-      {0x1f0e, 2249, 1},
+      {0x1c80, 902, 1},
 
-      {0x2c0e, 2612, 1},
+      {0xab80, 1648, 1},
 
-      {0x1040c, 3426, 1},
+      {0x10c80, 3639, 1},
 
-      {0x1f6b, 2360, 1},
+      {0x212a, 27, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c6b, 2726, 1},
+      {0x1efa, 2228, 1},
 
-      {0x1e0c, 1879, 1},
+      {0x04fa, 1267, 1},
 
-      {0x040c, 1032, 1},
+      {0x01fa, 493, 1},
 
-      {0x010c, 189, 1},
+      {0x1ffa, 2417, 1},
 
-      {0x1f0c, 2243, 1},
+      {0x1041a, 3489, 1},
 
-      {0x2c0c, 2606, 1},
+      {0x0392, 748, 1},
 
-      {0x1f5d, 2345, 1},
+      {0xa680, 3090, 1},
 
-      {0x10414, 3450, 1},
+      {0x1e1a, 1906, 1},
 
-      {0x1e7a, 2045, 1},
+      {0x041a, 928, 1},
 
-      {0x047a, 1084, 1},
+      {0x011a, 210, 1},
 
-      {0x1e14, 1891, 1},
+      {0x1f1a, 2267, 1},
 
-      {0x0414, 906, 1},
+      {0x2c1a, 2654, 1},
 
-      {0x0114, 201, 1},
+      {0x10418, 3483, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e902, 3969, 1},
+      {0x1f5b, 2348, 1},
 
-      {0x2c14, 2630, 1},
+      {0x1e18, 1903, 1},
 
-      {0x1f5b, 2342, 1},
+      {0x0418, 922, 1},
 
-      {0xab7a, 1627, 1},
+      {0x0118, 207, 1},
 
-      {0x24c7, 2543, 1},
+      {0x1f18, 2261, 1},
 
-      {0x10408, 3414, 1},
+      {0x2c18, 2648, 1},
 
-      {0x0392, 745, 1},
+      {0x1040e, 3453, 1},
 
-      {0x0533, 1351, 1},
+      {0x2c63, 1861, 1},
 
-      {0x1e08, 1873, 1},
+      {0x0397, 765, 1},
 
-      {0x0408, 1020, 1},
+      {0x1e0e, 1888, 1},
 
-      {0x0108, 183, 1},
+      {0x040e, 1041, 1},
 
-      {0x1f08, 2231, 1},
+      {0x010e, 192, 1},
 
-      {0x2c08, 2594, 1},
+      {0x1f0e, 2255, 1},
 
-      {0x10406, 3408, 1},
+      {0x2c0e, 2618, 1},
 
-      {0x0053, 52, 1},
-      {0xffffffff, -1, 0},
+      {0x1e2e, 1936, 1},
 
-      {0x1e06, 1870, 1},
+      {0x042e, 993, 1},
 
-      {0x0406, 1014, 1},
+      {0x012e, 240, 1},
 
-      {0x0106, 180, 1},
+      {0x1f2e, 2297, 1},
 
-      {0x10404, 3402, 1},
+      {0x2c2e, 2714, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c06, 2588, 1},
+      {0xa72e, 3150, 1},
 
-      {0x03d5, 813, 1},
+      {0x0394, 755, 1},
 
-      {0x1e04, 1867, 1},
+      {0x1040c, 3447, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0404, 1008, 1},
+      {0x24c4, 2540, 1},
 
-      {0x0104, 177, 1},
-      {0xffffffff, -1, 0},
+      {0x1e0c, 1885, 1},
 
-      {0x2c04, 2582, 1},
+      {0x040c, 1035, 1},
 
-      {0x10400, 3390, 1},
-      {0xffffffff, -1, 0},
+      {0x010c, 189, 1},
 
-      {0x0386, 730, 1},
+      {0x1f0c, 2249, 1},
 
-      {0x1e00, 1861, 1},
+      {0x2c0c, 2612, 1},
 
-      {0x0400, 996, 1},
+      {0x01a9, 685, 1},
 
-      {0x0100, 171, 1},
+      {0x1fa9, 214, 2},
 
-      {0x216b, 2474, 1},
+      {0x053d, 1384, 1},
 
-      {0x2c00, 2570, 1},
-      {0xffffffff, -1, 0},
+      {0x023d, 378, 1},
 
-      {0x021c, 544, 1},
+      {0x24c2, 2534, 1},
 
-      {0x1e2a, 1924, 1},
+      {0x1ca9, 1537, 1},
 
-      {0x042a, 977, 1},
+      {0xaba9, 1771, 1},
 
-      {0x012a, 234, 1},
+      {0x10ca9, 3762, 1},
 
-      {0x1f2a, 2279, 1},
+      {0x10408, 3435, 1},
 
-      {0x2c2a, 2696, 1},
+      {0x051c, 1318, 1},
 
-      {0x10426, 3504, 1},
+      {0x021c, 544, 1},
 
-      {0xa72a, 3138, 1},
+      {0x1e08, 1879, 1},
 
-      {0xff33, 3366, 1},
+      {0x0408, 1023, 1},
 
-      {0x1e26, 1918, 1},
+      {0x0108, 183, 1},
 
-      {0x0426, 965, 1},
+      {0x1f08, 2237, 1},
 
-      {0x0126, 228, 1},
+      {0x2c08, 2600, 1},
 
-      {0x1f95, 194, 2},
+      {0x0386, 733, 1},
 
-      {0x2c26, 2684, 1},
+      {0x10414, 3471, 1},
       {0xffffffff, -1, 0},
 
-      {0xa726, 3132, 1},
+      {0x13fa, 1846, 1},
 
-      {0x1c95, 1474, 1},
+      {0x1e14, 1897, 1},
 
-      {0xab95, 1708, 1},
+      {0x0414, 909, 1},
 
-      {0x10c95, 3681, 1},
+      {0x0114, 201, 1},
+      {0xffffffff, -1, 0},
 
-      {0x054a, 1420, 1},
+      {0x2c14, 2636, 1},
 
-      {0x039e, 789, 1},
+      {0x0540, 1393, 1},
 
-      {0x1e2e, 1930, 1},
+      {0x1f6d, 2372, 1},
 
-      {0x042e, 990, 1},
+      {0x2c6d, 607, 1},
 
-      {0x012e, 240, 1},
+      {0x038f, 842, 1},
 
-      {0x1f2e, 2291, 1},
+      {0x10406, 3429, 1},
 
-      {0x2c2e, 2708, 1},
+      {0x054a, 1423, 1},
 
-      {0x053d, 1381, 1},
+      {0x024a, 595, 1},
 
-      {0xa72e, 3144, 1},
+      {0x1e06, 1876, 1},
 
-      {0x1feb, 2408, 1},
+      {0x0406, 1017, 1},
 
-      {0x2ceb, 2885, 1},
+      {0x0106, 180, 1},
 
-      {0x051a, 1312, 1},
+      {0x10404, 3423, 1},
 
-      {0x03fa, 890, 1},
+      {0x2c06, 2594, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e2c, 1927, 1},
+      {0x1e04, 1873, 1},
 
-      {0x042c, 984, 1},
+      {0x0404, 1011, 1},
 
-      {0x012c, 237, 1},
+      {0x0104, 177, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f2c, 2285, 1},
+      {0x2c04, 2588, 1},
 
-      {0x2c2c, 2702, 1},
+      {0x1ee0, 2189, 1},
 
-      {0x038e, 836, 1},
+      {0x04e0, 1228, 1},
 
-      {0xa72c, 3141, 1},
+      {0x01e0, 459, 1},
 
-      {0xfb16, 125, 2},
-      {0xffffffff, -1, 0},
+      {0x10400, 3411, 1},
 
-      {0x0518, 1309, 1},
+      {0x2ce0, 2885, 1},
 
-      {0xff30, 3357, 1},
+      {0x03c2, 806, 1},
 
-      {0x1e28, 1921, 1},
+      {0x1e00, 1867, 1},
 
-      {0x0428, 971, 1},
+      {0x0400, 999, 1},
 
-      {0x0128, 231, 1},
+      {0x0100, 171, 1},
 
-      {0x1f28, 2273, 1},
+      {0x0179, 345, 1},
 
-      {0x2c28, 2690, 1},
+      {0x2c00, 2576, 1},
 
-      {0x038a, 739, 1},
+      {0x16e5d, 3975, 1},
 
-      {0xa728, 3135, 1},
-      {0xffffffff, -1, 0},
+      {0x039e, 792, 1},
 
-      {0x212a, 27, 1},
-      {0xffffffff, -1, 0},
+      {0xa779, 3246, 1},
 
-      {0x104cd, 3597, 1},
+      {0x10426, 3525, 1},
 
-      {0x050e, 1294, 1},
+      {0xab79, 1627, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e4a, 3897, 1},
-
-      {0x04cd, 1195, 1},
+      {0x1e26, 1924, 1},
 
-      {0x01cd, 429, 1},
+      {0x0426, 968, 1},
 
-      {0x2126, 823, 1},
+      {0x0126, 228, 1},
 
-      {0x10424, 3498, 1},
+      {0xfb16, 125, 2},
 
-      {0x00cd, 117, 1},
+      {0x2c26, 2690, 1},
 
-      {0x050c, 1291, 1},
+      {0x038e, 839, 1},
 
-      {0x1e24, 1915, 1},
+      {0xa726, 3138, 1},
 
-      {0x0424, 959, 1},
+      {0x16e40, 3888, 1},
 
-      {0x0124, 225, 1},
+      {0x1ef4, 2219, 1},
 
-      {0x1e916, 4029, 1},
+      {0x04f4, 1258, 1},
 
-      {0x2c24, 2678, 1},
-      {0xffffffff, -1, 0},
+      {0x01f4, 487, 1},
 
-      {0xa724, 3129, 1},
+      {0x1ff4, 101, 2},
 
-      {0x10422, 3492, 1},
+      {0x16e4a, 3918, 1},
 
-      {0x0514, 1303, 1},
+      {0x051a, 1315, 1},
 
-      {0x104c9, 3585, 1},
+      {0x021a, 541, 1},
 
-      {0x1e22, 1912, 1},
+      {0x10a9, 2927, 1},
 
-      {0x0422, 951, 1},
+      {0x1f4d, 2342, 1},
 
-      {0x0122, 222, 1},
+      {0xff2e, 3372, 1},
 
-      {0x04c9, 1189, 1},
+      {0x004d, 34, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c22, 2672, 1},
+      {0x118a9, 3819, 1},
 
-      {0x1fc9, 2384, 1},
+      {0x0518, 1312, 1},
 
-      {0xa722, 3126, 1},
+      {0x0218, 538, 1},
 
-      {0x00c9, 105, 1},
+      {0x1e8c, 2078, 1},
 
-      {0x104c4, 3570, 1},
+      {0x048c, 1102, 1},
 
-      {0x0508, 1285, 1},
+      {0x038a, 742, 1},
 
-      {0x0553, 1447, 1},
+      {0x1f8c, 149, 2},
 
-      {0x1ec4, 2141, 1},
+      {0x2c8c, 2759, 1},
       {0xffffffff, -1, 0},
 
-      {0x01c4, 417, 1},
+      {0x050e, 1297, 1},
 
-      {0x1fc4, 54, 2},
+      {0x020e, 523, 1},
 
-      {0x2cc4, 2837, 1},
+      {0xab8c, 1684, 1},
 
-      {0x00c4, 89, 1},
+      {0x10c8c, 3675, 1},
 
-      {0x0506, 1282, 1},
+      {0x104bf, 3576, 1},
 
-      {0x104c2, 3564, 1},
+      {0x052e, 1345, 1},
 
-      {0x1f69, 2354, 1},
+      {0x022e, 568, 1},
 
-      {0x2c69, 2723, 1},
+      {0x1e2c, 1933, 1},
 
-      {0x1ec2, 2138, 1},
+      {0x042c, 987, 1},
 
-      {0x104d1, 3609, 1},
+      {0x012c, 237, 1},
 
-      {0x0504, 1279, 1},
+      {0x1f2c, 2291, 1},
 
-      {0x1fc2, 253, 2},
+      {0x2c2c, 2708, 1},
 
-      {0x2cc2, 2834, 1},
+      {0xa68c, 3108, 1},
 
-      {0x00c2, 83, 1},
+      {0xa72c, 3147, 1},
 
-      {0x01d1, 435, 1},
+      {0x1cbf, 1597, 1},
 
-      {0x16e5d, 3954, 1},
+      {0xabbf, 1837, 1},
 
-      {0x104b7, 3531, 1},
+      {0x050c, 1294, 1},
 
-      {0x00d1, 129, 1},
+      {0x020c, 520, 1},
 
-      {0x0500, 1273, 1},
+      {0x1e28, 1927, 1},
 
-      {0x013f, 261, 1},
-
-      {0x1f3f, 2318, 1},
-
-      {0x01b7, 703, 1},
-
-      {0x1fb7, 10, 3},
-
-      {0x0230, 571, 1},
-
-      {0x16e5b, 3948, 1},
+      {0x0428, 974, 1},
 
-      {0x052a, 1336, 1},
-
-      {0x1cb7, 1576, 1},
+      {0x0128, 231, 1},
 
-      {0xabb7, 1810, 1},
+      {0x1f28, 2279, 1},
 
-      {0x03e0, 857, 1},
-      {0xffffffff, -1, 0},
+      {0x2c28, 2696, 1},
 
-      {0x104b3, 3519, 1},
+      {0x1fab, 224, 2},
 
-      {0x1e921, 4062, 1},
+      {0xa728, 3141, 1},
       {0xffffffff, -1, 0},
 
-      {0x0526, 1330, 1},
-
-      {0x16e53, 3924, 1},
-
-      {0x01b3, 402, 1},
-
-      {0x1fb3, 62, 2},
-
-      {0x024a, 595, 1},
-      {0xffffffff, -1, 0},
+      {0xa7ab, 631, 1},
 
-      {0xa7b3, 3309, 1},
+      {0x1cab, 1543, 1},
 
-      {0x1cb3, 1564, 1},
+      {0xabab, 1777, 1},
 
-      {0xabb3, 1798, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x10cab, 3768, 1},
 
-      {0x023d, 378, 1},
+      {0x16e5b, 3969, 1},
 
-      {0x052e, 1342, 1},
+      {0x10424, 3519, 1},
 
-      {0x1fab, 224, 2},
+      {0x0508, 1288, 1},
 
-      {0x10cd, 3011, 1},
+      {0x0208, 514, 1},
 
-      {0x021a, 541, 1},
+      {0x1e24, 1921, 1},
 
-      {0xa7ab, 631, 1},
+      {0x0424, 962, 1},
 
-      {0x1cab, 1540, 1},
+      {0x0124, 225, 1},
+      {0xffffffff, -1, 0},
 
-      {0xabab, 1774, 1},
+      {0x2c24, 2684, 1},
 
-      {0x10cab, 3747, 1},
+      {0x104b7, 3552, 1},
 
-      {0x2169, 2468, 1},
-      {0xffffffff, -1, 0},
+      {0xa724, 3135, 1},
 
-      {0x1e56, 1990, 1},
+      {0x0514, 1306, 1},
 
-      {0x052c, 1339, 1},
+      {0x0214, 532, 1},
 
-      {0x0156, 294, 1},
+      {0x03fa, 893, 1},
 
-      {0x1f56, 62, 3},
+      {0x01b7, 706, 1},
 
-      {0x0218, 538, 1},
+      {0x1fb7, 10, 3},
 
-      {0x0056, 62, 1},
+      {0x104b3, 3540, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa756, 3201, 1},
+      {0x1cb7, 1579, 1},
 
-      {0xff2a, 3339, 1},
+      {0xabb7, 1813, 1},
 
-      {0x1e54, 1987, 1},
-      {0xffffffff, -1, 0},
+      {0x01b3, 402, 1},
 
-      {0x0154, 291, 1},
+      {0x1fb3, 62, 2},
 
-      {0x1f54, 57, 3},
+      {0x0506, 1285, 1},
 
-      {0x0528, 1333, 1},
+      {0x0206, 511, 1},
 
-      {0x0054, 56, 1},
+      {0xa7b3, 3330, 1},
 
-      {0xa754, 3198, 1},
+      {0x1cb3, 1567, 1},
 
-      {0xff26, 3327, 1},
+      {0xabb3, 1801, 1},
 
-      {0x104ca, 3588, 1},
+      {0x10422, 3513, 1},
 
-      {0x020e, 523, 1},
+      {0x0504, 1282, 1},
 
-      {0xa656, 3048, 1},
+      {0x0204, 508, 1},
 
-      {0x1eca, 2150, 1},
+      {0x1e22, 1918, 1},
 
-      {0x10c4, 3002, 1},
+      {0x0422, 954, 1},
 
-      {0x01ca, 425, 1},
+      {0x0122, 222, 1},
 
-      {0x1fca, 2387, 1},
+      {0xff26, 3348, 1},
 
-      {0x2cca, 2846, 1},
+      {0x2c22, 2678, 1},
 
-      {0x00ca, 108, 1},
+      {0xff35, 3393, 1},
 
-      {0x020c, 520, 1},
+      {0xa722, 3132, 1},
 
-      {0xa654, 3045, 1},
+      {0x104b1, 3534, 1},
 
-      {0xff2e, 3351, 1},
+      {0x0143, 267, 1},
 
-      {0x1e9b, 2005, 1},
+      {0x0500, 1276, 1},
 
-      {0x0051, 46, 1},
+      {0x0200, 502, 1},
 
-      {0x10c2, 2996, 1},
+      {0x0043, 6, 1},
 
-      {0x1f9b, 184, 2},
+      {0x01b1, 697, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0524, 1327, 1},
+      {0x2163, 2456, 1},
       {0xffffffff, -1, 0},
 
-      {0x0214, 532, 1},
+      {0xa7b1, 688, 1},
 
-      {0x1c9b, 1492, 1},
+      {0x1cb1, 1561, 1},
 
-      {0xab9b, 1726, 1},
+      {0xabb1, 1795, 1},
 
-      {0x10c9b, 3699, 1},
+      {0x10cb1, 3786, 1},
 
-      {0xff2c, 3345, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x0526, 1333, 1},
 
-      {0x10b7, 2963, 1},
+      {0x0226, 556, 1},
 
-      {0x0522, 1324, 1},
+      {0x0535, 1360, 1},
 
-      {0x1e91c, 4047, 1},
+      {0x10bf, 2993, 1},
 
-      {0x0395, 755, 1},
+      {0x03a9, 826, 1},
 
-      {0x0208, 514, 1},
+      {0x01a7, 393, 1},
+
+      {0x1fa7, 244, 2},
 
-      {0x118b7, 3840, 1},
+      {0x1e916, 4050, 1},
 
-      {0x24cd, 2561, 1},
+      {0x118bf, 3885, 1},
       {0xffffffff, -1, 0},
 
-      {0xff28, 3333, 1},
+      {0x1ca7, 1531, 1},
 
-      {0x104c3, 3567, 1},
-      {0xffffffff, -1, 0},
+      {0xaba7, 1765, 1},
 
-      {0x104b1, 3513, 1},
+      {0x10ca7, 3756, 1},
 
-      {0x0206, 511, 1},
+      {0x054d, 1432, 1},
 
-      {0x04c3, 1180, 1},
+      {0x1f6b, 2366, 1},
 
-      {0x10b3, 2951, 1},
+      {0x2c6b, 2732, 1},
 
-      {0x1fc3, 71, 2},
+      {0x10ab, 2933, 1},
 
-      {0x01b1, 694, 1},
+      {0x1e48, 1975, 1},
+      {0xffffffff, -1, 0},
 
-      {0x00c3, 86, 1},
+      {0xff2c, 3366, 1},
 
-      {0x0204, 508, 1},
+      {0x1f48, 2327, 1},
 
-      {0x118b3, 3828, 1},
+      {0x118ab, 3825, 1},
 
-      {0xa7b1, 685, 1},
+      {0x0048, 21, 1},
 
-      {0x1cb1, 1558, 1},
+      {0xa748, 3186, 1},
 
-      {0xabb1, 1792, 1},
+      {0x1e88, 2072, 1},
 
-      {0x10cb1, 3765, 1},
+      {0x1f69, 2360, 1},
 
-      {0x10ab, 2927, 1},
+      {0x2c69, 2729, 1},
 
-      {0x24c9, 2549, 1},
+      {0x1f88, 129, 2},
 
-      {0x0200, 502, 1},
+      {0x2c88, 2753, 1},
       {0xffffffff, -1, 0},
 
-      {0xff24, 3321, 1},
+      {0xff28, 3354, 1},
 
-      {0x118ab, 3804, 1},
+      {0x1c88, 3035, 1},
 
-      {0x0531, 1345, 1},
+      {0xab88, 1672, 1},
 
-      {0x053f, 1387, 1},
+      {0x10c88, 3663, 1},
 
-      {0x10420, 3486, 1},
+      {0x1e42, 1966, 1},
 
-      {0x022a, 562, 1},
-
-      {0x24c4, 2534, 1},
+      {0xa648, 3032, 1},
 
-      {0x1e20, 1909, 1},
+      {0x052c, 1342, 1},
 
-      {0x0420, 944, 1},
+      {0x022c, 565, 1},
 
-      {0x0120, 219, 1},
+      {0x10b7, 2969, 1},
 
-      {0xff22, 3315, 1},
+      {0x0042, 3, 1},
 
-      {0x2c20, 2666, 1},
+      {0xa742, 3177, 1},
       {0xffffffff, -1, 0},
 
-      {0x0226, 556, 1},
+      {0xa688, 3102, 1},
 
-      {0x01a9, 682, 1},
+      {0x118b7, 3861, 1},
 
-      {0x1fa9, 214, 2},
+      {0x216d, 2486, 1},
 
-      {0x24c2, 2528, 1},
+      {0x10b3, 2957, 1},
 
-      {0x01a7, 393, 1},
+      {0xff24, 3342, 1},
 
-      {0x1fa7, 244, 2},
+      {0x0528, 1336, 1},
 
-      {0x1ca9, 1534, 1},
+      {0x0228, 559, 1},
 
-      {0xaba9, 1768, 1},
+      {0x03e0, 860, 1},
 
-      {0x10ca9, 3741, 1},
+      {0x118b3, 3849, 1},
 
-      {0x1ca7, 1528, 1},
+      {0x1e56, 1996, 1},
 
-      {0xaba7, 1762, 1},
+      {0xa642, 3023, 1},
 
-      {0x10ca7, 3735, 1},
+      {0x0156, 294, 1},
 
-      {0x022e, 568, 1},
+      {0x1f56, 62, 3},
 
-      {0x1e88, 2066, 1},
+      {0x16e4d, 3927, 1},
 
-      {0x24b7, 2495, 1},
-      {0xffffffff, -1, 0},
+      {0x0056, 62, 1},
 
-      {0x1f88, 129, 2},
+      {0xa756, 3207, 1},
 
-      {0x2c88, 2747, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x24bf, 2525, 1},
 
-      {0x1c88, 3029, 1},
+      {0x1f59, 2345, 1},
 
-      {0xab88, 1669, 1},
+      {0x1e4e, 1984, 1},
 
-      {0x10c88, 3642, 1},
+      {0x0059, 71, 1},
 
-      {0x022c, 565, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x014e, 282, 1},
 
-      {0xff31, 3360, 1},
+      {0x0524, 1330, 1},
 
-      {0x1e52, 1984, 1},
+      {0x0224, 553, 1},
 
-      {0x0556, 1456, 1},
+      {0x004e, 37, 1},
 
-      {0x0152, 288, 1},
+      {0xa74e, 3195, 1},
 
-      {0x1f52, 52, 3},
+      {0x10b1, 2951, 1},
 
-      {0xa688, 3096, 1},
+      {0x042d, 990, 1},
 
-      {0x0052, 49, 1},
+      {0xa656, 3054, 1},
 
-      {0xa752, 3195, 1},
+      {0x1f2d, 2294, 1},
 
-      {0x0228, 559, 1},
+      {0x2c2d, 2711, 1},
 
-      {0x1e50, 1981, 1},
+      {0x118b1, 3843, 1},
 
-      {0x0554, 1450, 1},
+      {0xff22, 3336, 1},
 
-      {0x0150, 285, 1},
+      {0x03f4, 768, 1},
 
-      {0x1f50, 84, 2},
+      {0x042f, 996, 1},
 
-      {0x1041e, 3480, 1},
+      {0x1e91c, 4068, 1},
 
-      {0x0050, 43, 1},
+      {0x1f2f, 2300, 1},
 
-      {0xa750, 3192, 1},
+      {0xa64e, 3042, 1},
 
-      {0x1e1e, 1906, 1},
+      {0x104ce, 3621, 1},
 
-      {0x041e, 937, 1},
+      {0x10a7, 2921, 1},
 
-      {0x011e, 216, 1},
+      {0x2126, 826, 1},
 
-      {0xa652, 3042, 1},
+      {0x1ece, 2162, 1},
 
-      {0x2c1e, 2660, 1},
+      {0xfb14, 109, 2},
+      {0xffffffff, -1, 0},
 
-      {0x03c2, 803, 1},
+      {0x118a7, 3813, 1},
 
-      {0x10c3, 2999, 1},
-      {0xffffffff, -1, 0},
+      {0x2cce, 2858, 1},
 
-      {0x10b1, 2945, 1},
+      {0x00ce, 120, 1},
 
-      {0x03d1, 765, 1},
+      {0x104b9, 3558, 1},
 
-      {0x0551, 1441, 1},
+      {0x038c, 836, 1},
 
-      {0xa650, 3039, 1},
+      {0x0522, 1327, 1},
 
-      {0x0224, 553, 1},
+      {0x0222, 550, 1},
 
-      {0x118b1, 3822, 1},
+      {0xff33, 3387, 1},
 
-      {0x1e4e, 1978, 1},
-      {0xffffffff, -1, 0},
+      {0x24b7, 2501, 1},
 
-      {0x014e, 282, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1fb9, 2426, 1},
 
-      {0x004e, 37, 1},
+      {0xfb06, 29, 2},
 
-      {0xa74e, 3189, 1},
+      {0x0543, 1402, 1},
 
-      {0x10412, 3444, 1},
+      {0x0243, 354, 1},
 
-      {0x0222, 550, 1},
+      {0x1cb9, 1585, 1},
 
-      {0x16e56, 3933, 1},
+      {0xabb9, 1819, 1},
 
-      {0x1e12, 1888, 1},
+      {0x1e54, 1993, 1},
 
-      {0x0412, 899, 1},
+      {0xfb04, 5, 3},
 
-      {0x0112, 198, 1},
+      {0x0154, 291, 1},
+
+      {0x1f54, 57, 3},
 
-      {0x24ca, 2552, 1},
+      {0xff31, 3381, 1},
 
-      {0x2c12, 2624, 1},
+      {0x0054, 56, 1},
 
-      {0x018f, 625, 1},
+      {0xa754, 3204, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f8f, 164, 2},
+      {0x1e52, 1990, 1},
 
-      {0x16e54, 3927, 1},
+      {0x0533, 1354, 1},
 
-      {0xa64e, 3036, 1},
+      {0x0152, 288, 1},
 
-      {0x004f, 40, 1},
+      {0x1f52, 52, 3},
 
-      {0x10a9, 2921, 1},
+      {0xfb00, 4, 2},
 
-      {0xab8f, 1690, 1},
+      {0x0052, 49, 1},
 
-      {0x10c8f, 3663, 1},
+      {0xa752, 3201, 1},
 
-      {0x10a7, 2915, 1},
+      {0x03ab, 833, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e48, 1969, 1},
+      {0x1e50, 1987, 1},
 
-      {0x118a9, 3798, 1},
+      {0xa654, 3051, 1},
 
-      {0x03ab, 830, 1},
+      {0x0150, 285, 1},
 
-      {0x1f48, 2321, 1},
+      {0x1f50, 84, 2},
 
-      {0x118a7, 3792, 1},
+      {0x0531, 1348, 1},
 
-      {0x0048, 21, 1},
+      {0x0050, 43, 1},
 
-      {0xa748, 3180, 1},
+      {0xa750, 3198, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x10410, 3438, 1},
-      {0xffffffff, -1, 0},
+      {0xa652, 3048, 1},
 
-      {0x16e51, 3918, 1},
+      {0x0548, 1417, 1},
 
-      {0x1e10, 1885, 1},
+      {0x0248, 592, 1},
 
-      {0x0410, 893, 1},
+      {0x10420, 3507, 1},
 
-      {0x0110, 195, 1},
+      {0x013f, 261, 1},
 
-      {0x104c0, 3558, 1},
+      {0x1f3f, 2324, 1},
 
-      {0x2c10, 2618, 1},
+      {0x1e20, 1915, 1},
 
-      {0x1e91a, 4041, 1},
+      {0x0420, 947, 1},
 
-      {0x1ec0, 2135, 1},
+      {0x0120, 219, 1},
 
-      {0x04c0, 1198, 1},
+      {0xa650, 3045, 1},
 
-      {0xa648, 3026, 1},
+      {0x2c20, 2672, 1},
       {0xffffffff, -1, 0},
 
-      {0x2cc0, 2831, 1},
+      {0x16e43, 3897, 1},
+      {0xffffffff, -1, 0},
 
-      {0x00c0, 77, 1},
+      {0x1e91a, 4062, 1},
       {0xffffffff, -1, 0},
 
-      {0x24c3, 2531, 1},
+      {0x1041e, 3501, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0520, 1321, 1},
+      {0x0542, 1399, 1},
 
-      {0x104c8, 3582, 1},
+      {0x1e1e, 1912, 1},
 
-      {0x1e918, 4035, 1},
-      {0xffffffff, -1, 0},
+      {0x041e, 940, 1},
 
-      {0x1ec8, 2147, 1},
+      {0x011e, 216, 1},
 
-      {0xfb14, 109, 2},
+      {0x1e918, 4056, 1},
 
-      {0x01c8, 421, 1},
+      {0x2c1e, 2666, 1},
 
-      {0x1fc8, 2381, 1},
+      {0x10412, 3465, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2cc8, 2843, 1},
+      {0x1e12, 1894, 1},
 
-      {0x00c8, 102, 1},
+      {0x0412, 902, 1},
 
-      {0x104b9, 3537, 1},
+      {0x0112, 198, 1},
 
-      {0x1efc, 2225, 1},
+      {0x1e90e, 4026, 1},
 
-      {0x04fc, 1267, 1},
+      {0x2c12, 2630, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01fc, 496, 1},
+      {0x10410, 3459, 1},
 
-      {0x1ffc, 96, 2},
+      {0xff2d, 3369, 1},
 
-      {0x1e90e, 4005, 1},
+      {0x0556, 1459, 1},
 
-      {0x1fb9, 2420, 1},
+      {0x1e10, 1891, 1},
 
-      {0x104b5, 3525, 1},
+      {0x0410, 896, 1},
 
-      {0x039b, 779, 1},
+      {0x0110, 195, 1},
       {0xffffffff, -1, 0},
 
-      {0x1cb9, 1582, 1},
+      {0x2c10, 2624, 1},
 
-      {0xabb9, 1816, 1},
+      {0xff2f, 3375, 1},
 
-      {0x01b5, 405, 1},
+      {0x10b9, 2975, 1},
 
-      {0x1e90c, 3999, 1},
+      {0x16e48, 3912, 1},
 
-      {0xfb06, 29, 2},
+      {0x054e, 1435, 1},
 
-      {0x00b5, 782, 1},
-      {0xffffffff, -1, 0},
+      {0x024e, 601, 1},
 
-      {0x1cb5, 1570, 1},
+      {0x1e90c, 4020, 1},
 
-      {0xabb5, 1804, 1},
+      {0x118b9, 3867, 1},
       {0xffffffff, -1, 0},
 
-      {0xfb04, 5, 3},
+      {0x104ca, 3609, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1fad, 234, 2},
+      {0x1eca, 2156, 1},
 
-      {0x1e914, 4023, 1},
+      {0x03a7, 820, 1},
 
-      {0x0552, 1444, 1},
+      {0x01ca, 425, 1},
 
-      {0xa7ad, 661, 1},
+      {0x1fca, 2393, 1},
 
-      {0x1cad, 1546, 1},
+      {0x2cca, 2852, 1},
 
-      {0xabad, 1780, 1},
+      {0x00ca, 108, 1},
 
-      {0x10cad, 3753, 1},
+      {0x104c8, 3603, 1},
+      {0xffffffff, -1, 0},
 
-      {0xfb00, 4, 2},
+      {0x16e42, 3894, 1},
 
-      {0x01af, 399, 1},
+      {0x1ec8, 2153, 1},
 
-      {0x1faf, 244, 2},
+      {0x1e908, 4008, 1},
 
-      {0x0550, 1438, 1},
-      {0xffffffff, -1, 0},
+      {0x01c8, 421, 1},
 
-      {0x1e908, 3987, 1},
+      {0x1fc8, 2387, 1},
 
-      {0x1caf, 1552, 1},
+      {0x2cc8, 2849, 1},
 
-      {0xabaf, 1786, 1},
+      {0x00c8, 102, 1},
 
-      {0x10caf, 3759, 1},
-      {0xffffffff, -1, 0},
+      {0x1e6c, 2030, 1},
 
-      {0x051e, 1318, 1},
+      {0x046c, 1066, 1},
 
-      {0x018b, 366, 1},
+      {0x016c, 327, 1},
 
-      {0x1f8b, 144, 2},
+      {0x1f6c, 2369, 1},
 
-      {0x1e906, 3981, 1},
-      {0xffffffff, -1, 0},
+      {0x1e914, 4044, 1},
 
-      {0xa78b, 3261, 1},
+      {0x104c6, 3597, 1},
 
-      {0x1fa5, 234, 2},
+      {0xa76c, 3240, 1},
 
-      {0xab8b, 1678, 1},
+      {0x0388, 736, 1},
 
-      {0x10c8b, 3651, 1},
+      {0x1ec6, 2150, 1},
 
-      {0x1e904, 3975, 1},
+      {0x216b, 2480, 1},
 
-      {0x1ca5, 1522, 1},
+      {0x16e56, 3954, 1},
 
-      {0xaba5, 1756, 1},
+      {0x1fc6, 67, 2},
 
-      {0x10ca5, 3729, 1},
-      {0xffffffff, -1, 0},
+      {0x2cc6, 2846, 1},
 
-      {0x054e, 1432, 1},
+      {0x00c6, 96, 1},
 
-      {0x1eda, 2174, 1},
+      {0xa7c6, 1864, 1},
 
-      {0x04da, 1216, 1},
+      {0x16e59, 3963, 1},
 
-      {0x1e900, 3963, 1},
+      {0x1e906, 4002, 1},
 
-      {0x1fda, 2393, 1},
+      {0x0554, 1453, 1},
 
-      {0x2cda, 2870, 1},
+      {0xa66c, 3087, 1},
 
-      {0x00da, 153, 1},
+      {0x16e4e, 3930, 1},
 
-      {0x10c0, 2990, 1},
+      {0x2169, 2474, 1},
 
-      {0x16e52, 3921, 1},
+      {0x24ce, 2570, 1},
 
-      {0x03a9, 823, 1},
+      {0x1e904, 3996, 1},
 
-      {0x0512, 1300, 1},
+      {0x104c5, 3594, 1},
       {0xffffffff, -1, 0},
 
-      {0x03a7, 817, 1},
+      {0x0552, 1447, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fa3, 224, 2},
+      {0x04c5, 1186, 1},
 
-      {0x054f, 1435, 1},
+      {0x01c5, 417, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e50, 3915, 1},
+      {0x24b9, 2507, 1},
+
+      {0x00c5, 92, 1},
 
-      {0x1ca3, 1516, 1},
+      {0xa7c5, 682, 1},
 
-      {0xaba3, 1750, 1},
+      {0x1e900, 3984, 1},
 
-      {0x10ca3, 3723, 1},
+      {0x0550, 1441, 1},
 
-      {0x13fc, 1849, 1},
+      {0x104c0, 3579, 1},
 
-      {0x1fa1, 214, 2},
+      {0x104b5, 3546, 1},
       {0xffffffff, -1, 0},
 
-      {0x0388, 733, 1},
+      {0x1ec0, 2141, 1},
 
-      {0x0548, 1414, 1},
+      {0x04c0, 1201, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ca1, 1510, 1},
+      {0x01b5, 405, 1},
 
-      {0xaba1, 1744, 1},
+      {0x2cc0, 2837, 1},
 
-      {0x10ca1, 3717, 1},
+      {0x00c0, 77, 1},
 
-      {0x10b9, 2969, 1},
+      {0x00b5, 785, 1},
 
-      {0x1ef4, 2213, 1},
+      {0x053f, 1390, 1},
 
-      {0x04f4, 1255, 1},
+      {0x1cb5, 1573, 1},
 
-      {0x01f4, 487, 1},
+      {0xabb5, 1807, 1},
 
-      {0x1ff4, 101, 2},
+      {0x1fad, 234, 2},
 
-      {0x118b9, 3846, 1},
+      {0x0520, 1324, 1},
 
-      {0x0510, 1297, 1},
+      {0x0220, 381, 1},
 
-      {0x10b5, 2957, 1},
+      {0xa7ad, 661, 1},
 
-      {0x104cf, 3603, 1},
+      {0x1cad, 1549, 1},
 
-      {0x16e4e, 3909, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xabad, 1783, 1},
 
-      {0x118b5, 3834, 1},
+      {0x10cad, 3774, 1},
 
-      {0x01cf, 432, 1},
+      {0x1efc, 2231, 1},
 
-      {0x0220, 381, 1},
+      {0x04fc, 1270, 1},
 
-      {0x10ad, 2933, 1},
+      {0x01fc, 496, 1},
 
-      {0x00cf, 123, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1ffc, 96, 2},
 
-      {0x1e97, 34, 2},
+      {0x16e54, 3948, 1},
 
-      {0x118ad, 3810, 1},
+      {0x1fa5, 234, 2},
+      {0xffffffff, -1, 0},
 
-      {0x0197, 649, 1},
+      {0x051e, 1321, 1},
 
-      {0x1f97, 204, 2},
+      {0x021e, 547, 1},
 
-      {0x16e4f, 3912, 1},
+      {0x1ca5, 1525, 1},
 
-      {0x10af, 2939, 1},
-      {0xffffffff, -1, 0},
+      {0xaba5, 1759, 1},
 
-      {0x1c97, 1480, 1},
+      {0x10ca5, 3750, 1},
 
-      {0xab97, 1714, 1},
+      {0x16e52, 3942, 1},
 
-      {0x10c97, 3687, 1},
+      {0x01af, 399, 1},
 
-      {0x118af, 3816, 1},
+      {0x1faf, 244, 2},
 
-      {0x0181, 613, 1},
+      {0x0512, 1303, 1},
 
-      {0x1f81, 134, 2},
+      {0x0212, 529, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e48, 3891, 1},
+      {0x1caf, 1555, 1},
 
-      {0x24c0, 2522, 1},
+      {0xabaf, 1789, 1},
 
-      {0x1c81, 906, 1},
+      {0x10caf, 3780, 1},
 
-      {0xab81, 1648, 1},
+      {0x16e50, 3936, 1},
 
-      {0x10c81, 3621, 1},
+      {0x1fa3, 224, 2},
+      {0xffffffff, -1, 0},
 
-      {0x10a5, 2909, 1},
+      {0x0510, 1300, 1},
 
-      {0x1e6c, 2024, 1},
+      {0x0210, 526, 1},
 
-      {0x046c, 1063, 1},
+      {0x1ca3, 1519, 1},
 
-      {0x016c, 327, 1},
+      {0xaba3, 1753, 1},
 
-      {0x1f6c, 2363, 1},
+      {0x10ca3, 3744, 1},
 
-      {0x118a5, 3786, 1},
-      {0xffffffff, -1, 0},
+      {0x0429, 977, 1},
 
-      {0xa76c, 3234, 1},
+      {0x1fa1, 214, 2},
 
-      {0x24c8, 2546, 1},
+      {0x1f29, 2282, 1},
 
-      {0x1e6a, 2021, 1},
+      {0x2c29, 2699, 1},
+      {0xffffffff, -1, 0},
 
-      {0x046a, 1060, 1},
+      {0x1ca1, 1513, 1},
 
-      {0x016a, 324, 1},
+      {0xaba1, 1747, 1},
 
-      {0x1f6a, 2357, 1},
+      {0x10ca1, 3738, 1},
 
-      {0x038f, 839, 1},
+      {0x1e6a, 2027, 1},
 
-      {0x1e32, 1936, 1},
+      {0x046a, 1063, 1},
 
-      {0xa76a, 3231, 1},
+      {0x016a, 324, 1},
 
-      {0x0132, 243, 1},
+      {0x1f6a, 2363, 1},
 
-      {0x24b9, 2501, 1},
+      {0x1e46, 1972, 1},
       {0xffffffff, -1, 0},
 
-      {0xa66c, 3081, 1},
+      {0xa76a, 3237, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa732, 3147, 1},
+      {0x0046, 15, 1},
 
-      {0x10a3, 2903, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xa746, 3183, 1},
 
-      {0x021e, 547, 1},
+      {0x10c5, 3011, 1},
       {0xffffffff, -1, 0},
 
-      {0x118a3, 3780, 1},
+      {0x1e68, 2024, 1},
 
-      {0xa66a, 3078, 1},
+      {0x0468, 1060, 1},
 
-      {0x1f59, 2339, 1},
+      {0x0168, 321, 1},
 
-      {0x10a1, 2897, 1},
+      {0x1f68, 2357, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0059, 71, 1},
+      {0xa66a, 3084, 1},
 
-      {0x1e64, 2012, 1},
+      {0xa768, 3234, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x0464, 1051, 1},
+      {0xa646, 3029, 1},
 
-      {0x0164, 315, 1},
+      {0x10c0, 2996, 1},
 
-      {0x118a1, 3774, 1},
+      {0x10b5, 2963, 1},
 
-      {0x2c64, 676, 1},
-      {0xffffffff, -1, 0},
+      {0x24ca, 2558, 1},
 
-      {0xa764, 3222, 1},
+      {0x13fc, 1852, 1},
 
-      {0x024e, 601, 1},
+      {0x1e44, 1969, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e68, 2018, 1},
+      {0x118b5, 3855, 1},
 
-      {0x0468, 1057, 1},
+      {0x10ad, 2939, 1},
 
-      {0x0168, 321, 1},
+      {0xa668, 3081, 1},
 
-      {0x1f68, 2351, 1},
+      {0x0044, 9, 1},
 
-      {0x10417, 3459, 1},
+      {0xa744, 3180, 1},
 
-      {0x042f, 993, 1},
+      {0x24c8, 2552, 1},
 
-      {0xa768, 3228, 1},
+      {0x118ad, 3831, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f2f, 2294, 1},
+      {0x1e64, 2018, 1},
 
-      {0x0417, 916, 1},
+      {0x0464, 1054, 1},
 
-      {0x0212, 529, 1},
+      {0x0164, 315, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa664, 3069, 1},
+      {0x2c64, 676, 1},
 
-      {0x2c17, 2639, 1},
+      {0x10a5, 2915, 1},
 
-      {0x216c, 2477, 1},
+      {0xa764, 3228, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e62, 2009, 1},
+      {0xa644, 3026, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0462, 1047, 1},
+      {0x118a5, 3807, 1},
 
-      {0x0162, 312, 1},
+      {0x24c6, 2546, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e46, 1966, 1},
+      {0x10af, 2945, 1},
 
-      {0x2c62, 658, 1},
+      {0x1e32, 1942, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa668, 3075, 1},
+      {0x0132, 243, 1},
 
-      {0xa762, 3219, 1},
+      {0xa664, 3075, 1},
 
-      {0x216a, 2471, 1},
+      {0x118af, 3837, 1},
 
-      {0x0046, 15, 1},
+      {0x104cb, 3612, 1},
 
-      {0xa746, 3177, 1},
+      {0xa732, 3153, 1},
 
-      {0x0248, 592, 1},
+      {0x10a3, 2909, 1},
       {0xffffffff, -1, 0},
 
-      {0x2132, 2438, 1},
+      {0x04cb, 1195, 1},
 
-      {0x1e60, 2005, 1},
+      {0x01cb, 425, 1},
 
-      {0x0460, 1044, 1},
+      {0x1fcb, 2396, 1},
 
-      {0x0160, 309, 1},
+      {0x118a3, 3801, 1},
+
+      {0x00cb, 111, 1},
+
+      {0x24c5, 2543, 1},
+
+      {0x10a1, 2903, 1},
       {0xffffffff, -1, 0},
 
-      {0x2c60, 2711, 1},
+      {0x1e62, 2015, 1},
 
-      {0xa662, 3066, 1},
+      {0x0462, 1050, 1},
 
-      {0xa760, 3216, 1},
+      {0x0162, 312, 1},
 
-      {0x0210, 526, 1},
+      {0x118a1, 3795, 1},
 
-      {0xa646, 3023, 1},
+      {0x2c62, 658, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e44, 1963, 1},
+      {0xa762, 3225, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1eec, 2201, 1},
+      {0x24c0, 2528, 1},
 
-      {0x04ec, 1243, 1},
+      {0x1e60, 2011, 1},
 
-      {0x01ec, 477, 1},
+      {0x0460, 1047, 1},
 
-      {0x1fec, 2435, 1},
+      {0x0160, 309, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0044, 9, 1},
+      {0x2c60, 2717, 1},
 
-      {0xa744, 3174, 1},
+      {0xff29, 3357, 1},
 
-      {0x2164, 2453, 1},
+      {0xa760, 3222, 1},
       {0xffffffff, -1, 0},
 
-      {0xa660, 3063, 1},
+      {0xa662, 3072, 1},
 
-      {0x1ee2, 2186, 1},
+      {0x1ee2, 2192, 1},
 
-      {0x04e2, 1228, 1},
+      {0x04e2, 1231, 1},
 
       {0x01e2, 462, 1},
 
       {0x1fe2, 36, 3},
 
-      {0x2ce2, 2882, 1},
+      {0x2ce2, 2888, 1},
 
-      {0x2168, 2465, 1},
+      {0x042b, 984, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ed8, 2171, 1},
+      {0x1f2b, 2288, 1},
 
-      {0x04d8, 1213, 1},
+      {0x2c2b, 2705, 1},
 
-      {0xa644, 3020, 1},
+      {0xa660, 3069, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fd8, 2423, 1},
+      {0x216c, 2483, 1},
 
-      {0x2cd8, 2867, 1},
+      {0x1eda, 2180, 1},
 
-      {0x00d8, 147, 1},
+      {0x04da, 1219, 1},
 
-      {0x1ede, 2180, 1},
+      {0x104bd, 3570, 1},
 
-      {0x04de, 1222, 1},
+      {0x1fda, 2399, 1},
 
-      {0x01de, 456, 1},
+      {0x2cda, 2876, 1},
 
-      {0x03a5, 810, 1},
+      {0x00da, 153, 1},
 
-      {0x2cde, 2876, 1},
+      {0x1ed8, 2177, 1},
 
-      {0x00de, 165, 1},
+      {0x04d8, 1216, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2162, 2447, 1},
+      {0x1fd8, 2429, 1},
 
-      {0x1ed6, 2168, 1},
+      {0x2cd8, 2873, 1},
 
-      {0x04d6, 1210, 1},
+      {0x00d8, 147, 1},
 
-      {0x24cf, 2567, 1},
+      {0x1cbd, 1591, 1},
 
-      {0x1fd6, 76, 2},
+      {0xabbd, 1831, 1},
 
-      {0x2cd6, 2864, 1},
+      {0x0546, 1411, 1},
 
-      {0x00d6, 144, 1},
-      {0xffffffff, -1, 0},
+      {0x0246, 589, 1},
 
-      {0x104d2, 3612, 1},
+      {0x1ed6, 2174, 1},
 
-      {0x03da, 848, 1},
+      {0x04d6, 1213, 1},
       {0xffffffff, -1, 0},
 
-      {0x1ed2, 2162, 1},
+      {0x1fd6, 76, 2},
 
-      {0x04d2, 1204, 1},
+      {0x2cd6, 2870, 1},
 
-      {0x2160, 2441, 1},
+      {0x00d6, 144, 1},
 
-      {0x1fd2, 20, 3},
+      {0x104d2, 3633, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2cd2, 2858, 1},
+      {0x1ed2, 2168, 1},
 
-      {0x00d2, 132, 1},
+      {0x04d2, 1207, 1},
 
-      {0x104d0, 3606, 1},
+      {0x10427, 3528, 1},
 
-      {0x03a3, 803, 1},
-      {0xffffffff, -1, 0},
+      {0x1fd2, 20, 3},
+
+      {0x2cd2, 2864, 1},
 
-      {0x1ed0, 2159, 1},
+      {0x00d2, 132, 1},
 
-      {0x04d0, 1201, 1},
+      {0x0427, 971, 1},
 
-      {0x0532, 1348, 1},
+      {0x104d0, 3627, 1},
       {0xffffffff, -1, 0},
 
-      {0x2cd0, 2855, 1},
-
-      {0x00d0, 126, 1},
+      {0x2c27, 2693, 1},
 
-      {0x03a1, 799, 1},
+      {0x1ed0, 2165, 1},
 
-      {0x104cc, 3594, 1},
+      {0x04d0, 1204, 1},
 
-      {0x104bf, 3555, 1},
+      {0x0544, 1405, 1},
 
-      {0x042d, 987, 1},
+      {0x0244, 694, 1},
 
-      {0x1ecc, 2153, 1},
+      {0x2cd0, 2861, 1},
 
-      {0x1f2d, 2288, 1},
+      {0x00d0, 126, 1},
 
-      {0x2c2d, 2705, 1},
+      {0x03a5, 813, 1},
 
-      {0x1fcc, 71, 2},
+      {0x104cd, 3618, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2ccc, 2849, 1},
+      {0xff32, 3384, 1},
 
-      {0x00cc, 114, 1},
+      {0x04cd, 1198, 1},
 
-      {0x104cb, 3591, 1},
+      {0x01cd, 429, 1},
+      {0xffffffff, -1, 0},
 
-      {0x03f4, 765, 1},
+      {0x104c3, 3588, 1},
 
-      {0x1cbf, 1594, 1},
+      {0x00cd, 117, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xabbf, 1834, 1},
+      {0x04c3, 1183, 1},
 
-      {0x04cb, 1192, 1},
+      {0x104bb, 3564, 1},
 
-      {0x01cb, 425, 1},
+      {0x1fc3, 71, 2},
 
-      {0x1fcb, 2390, 1},
+      {0x16e46, 3906, 1},
 
-      {0x104c6, 3576, 1},
+      {0x00c3, 86, 1},
 
-      {0x00cb, 111, 1},
+      {0x03a3, 806, 1},
       {0xffffffff, -1, 0},
 
-      {0x1ec6, 2144, 1},
+      {0x1fbb, 2384, 1},
 
-      {0x03cf, 842, 1},
+      {0x104cc, 3615, 1},
 
-      {0x104c5, 3573, 1},
+      {0x0532, 1351, 1},
 
-      {0x1fc6, 67, 2},
-
-      {0x2cc6, 2840, 1},
-
-      {0x00c6, 96, 1},
+      {0x0232, 574, 1},
 
-      {0x04c5, 1183, 1},
+      {0x1ecc, 2159, 1},
 
-      {0x01c5, 417, 1},
+      {0xabbb, 1825, 1},
 
-      {0x104bd, 3549, 1},
+      {0x03a1, 802, 1},
 
-      {0x0397, 762, 1},
+      {0x1fcc, 71, 2},
 
-      {0x00c5, 92, 1},
-      {0xffffffff, -1, 0},
+      {0x2ccc, 2855, 1},
 
-      {0x1e920, 4059, 1},
+      {0x00cc, 114, 1},
 
-      {0xff32, 3363, 1},
+      {0x019d, 670, 1},
 
-      {0x104bb, 3543, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1f9d, 194, 2},
 
-      {0x0546, 1408, 1},
+      {0x1e78, 2048, 1},
 
-      {0x1cbd, 1588, 1},
+      {0x0478, 1084, 1},
 
-      {0xabbd, 1828, 1},
+      {0x0178, 168, 1},
 
-      {0x1fbb, 2378, 1},
+      {0x1c9d, 1501, 1},
 
-      {0x019f, 673, 1},
+      {0xab9d, 1735, 1},
 
-      {0x1f9f, 204, 2},
+      {0x10c9d, 3726, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e59, 3942, 1},
-
-      {0xabbb, 1822, 1},
+      {0x16e44, 3900, 1},
 
-      {0x1c9f, 1504, 1},
+      {0xab78, 1624, 1},
 
-      {0xab9f, 1738, 1},
+      {0x1e9b, 2011, 1},
 
-      {0x10c9f, 3711, 1},
+      {0x10bd, 2987, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ef0, 2207, 1},
+      {0x1f9b, 184, 2},
 
-      {0x04f0, 1249, 1},
+      {0xff2b, 3363, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01f0, 20, 2},
+      {0x118bd, 3879, 1},
 
-      {0x019d, 670, 1},
+      {0x1c9b, 1495, 1},
 
-      {0x1f9d, 194, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xab9b, 1729, 1},
 
-      {0x0544, 1402, 1},
+      {0x10c9b, 3720, 1},
 
-      {0x1c9d, 1498, 1},
+      {0x216a, 2477, 1},
 
-      {0xab9d, 1732, 1},
-
-      {0x10c9d, 3705, 1},
+      {0x24cb, 2561, 1},
 
       {0x1e99, 42, 2},
-      {0xffffffff, -1, 0},
 
-      {0xff2f, 3354, 1},
+      {0x1e920, 4080, 1},
+      {0xffffffff, -1, 0},
 
       {0x1f99, 174, 2},
-      {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x0193, 634, 1},
+      {0x1c99, 1489, 1},
 
-      {0x1f93, 184, 2},
+      {0xab99, 1723, 1},
 
-      {0x1c99, 1486, 1},
+      {0x10c99, 3714, 1},
+      {0xffffffff, -1, 0},
 
-      {0xab99, 1720, 1},
+      {0x2168, 2471, 1},
 
-      {0x10c99, 3693, 1},
+      {0x0193, 634, 1},
 
-      {0x1c93, 1468, 1},
+      {0x1f93, 184, 2},
 
-      {0xab93, 1702, 1},
+      {0x1e91e, 4074, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x10c93, 3675, 1},
+      {0x1c93, 1471, 1},
 
-      {0x0145, 270, 1},
+      {0xab93, 1705, 1},
 
-      {0x16e46, 3885, 1},
-      {0xffffffff, -1, 0},
-
-      {0x0045, 12, 1},
-      {0xffffffff, -1, 0},
+      {0x10c93, 3696, 1},
 
       {0x0191, 369, 1},
 
       {0x1f91, 174, 2},
 
-      {0x1e91e, 4053, 1},
-      {0xffffffff, -1, 0},
-
-      {0x10bf, 2987, 1},
+      {0x1e912, 4038, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1c91, 1462, 1},
+      {0x1c91, 1465, 1},
 
-      {0xab91, 1696, 1},
+      {0xab91, 1699, 1},
 
-      {0x10c91, 3669, 1},
+      {0x10c91, 3690, 1},
       {0xffffffff, -1, 0},
 
-      {0x118bf, 3864, 1},
-      {0xffffffff, -1, 0},
+      {0x10cd, 3017, 1},
 
-      {0x0187, 363, 1},
+      {0xff27, 3351, 1},
 
-      {0x1f87, 164, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e910, 4032, 1},
 
-      {0x16e44, 3879, 1},
+      {0x0187, 363, 1},
 
-      {0x1c87, 1047, 1},
+      {0x1f87, 164, 2},
 
-      {0xab87, 1666, 1},
+      {0x0055, 59, 1},
 
-      {0x10c87, 3639, 1},
+      {0x2164, 2459, 1},
 
-      {0x1e72, 2033, 1},
+      {0x10c3, 3005, 1},
 
-      {0x0472, 1072, 1},
+      {0x1c87, 1050, 1},
 
-      {0x0172, 336, 1},
+      {0xab87, 1669, 1},
 
-      {0x0232, 574, 1},
+      {0x10c87, 3660, 1},
 
-      {0x2c72, 2729, 1},
+      {0x0145, 270, 1},
 
-      {0x10c5, 3005, 1},
+      {0x10bb, 2981, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e912, 4017, 1},
-
-      {0xab72, 1603, 1},
-
-      {0x0139, 252, 1},
-
-      {0x1f39, 2300, 1},
+      {0x0045, 12, 1},
 
-      {0x10bd, 2981, 1},
+      {0x24bd, 2519, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e66, 2015, 1},
+      {0x118bb, 3873, 1},
 
-      {0x0466, 1054, 1},
+      {0x1e72, 2039, 1},
 
-      {0x0166, 318, 1},
-      {0xffffffff, -1, 0},
+      {0x0472, 1075, 1},
 
-      {0x118bd, 3858, 1},
+      {0x0172, 336, 1},
 
-      {0x10bb, 2975, 1},
+      {0x2132, 2444, 1},
 
-      {0xa766, 3225, 1},
+      {0x2c72, 2735, 1},
 
-      {0x1e70, 2030, 1},
+      {0x1e70, 2036, 1},
 
-      {0x0470, 1069, 1},
+      {0x0470, 1072, 1},
 
       {0x0170, 333, 1},
 
-      {0x118bb, 3852, 1},
+      {0xab72, 1606, 1},
 
       {0x2c70, 610, 1},
 
-      {0x1edc, 2177, 1},
+      {0x1e66, 2021, 1},
 
-      {0x04dc, 1219, 1},
+      {0x0466, 1057, 1},
 
-      {0x03ec, 875, 1},
-
-      {0xab70, 1597, 1},
-
-      {0x2cdc, 2873, 1},
+      {0x0166, 318, 1},
 
-      {0x00dc, 159, 1},
+      {0xab70, 1600, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa666, 3072, 1},
+      {0x1e3a, 1954, 1},
 
-      {0x1e910, 4011, 1},
+      {0xa766, 3231, 1},
 
-      {0x1e5a, 1996, 1},
+      {0x1e5a, 2002, 1},
 
-      {0x0143, 267, 1},
+      {0x1f3a, 2309, 1},
 
       {0x015a, 300, 1},
 
-      {0x03e2, 860, 1},
+      {0x2162, 2453, 1},
 
-      {0x0043, 6, 1},
+      {0xa73a, 3165, 1},
 
       {0x005a, 74, 1},
 
-      {0xa75a, 3207, 1},
+      {0xa75a, 3213, 1},
 
-      {0x24cc, 2558, 1},
+      {0x03e2, 863, 1},
+      {0xffffffff, -1, 0},
 
-      {0x24bf, 2519, 1},
+      {0x104cf, 3624, 1},
 
-      {0x03d8, 845, 1},
-      {0xffffffff, -1, 0},
+      {0x1e58, 1999, 1},
 
-      {0x1e3a, 1948, 1},
+      {0xa666, 3078, 1},
 
-      {0x0246, 589, 1},
-      {0xffffffff, -1, 0},
+      {0x0158, 297, 1},
 
-      {0x1f3a, 2303, 1},
+      {0x2160, 2447, 1},
 
-      {0x03de, 854, 1},
+      {0x01cf, 432, 1},
 
-      {0x24cb, 2555, 1},
+      {0x0058, 68, 1},
 
-      {0xa73a, 3159, 1},
+      {0xa758, 3210, 1},
 
-      {0xa65a, 3054, 1},
+      {0x00cf, 123, 1},
 
-      {0x1e58, 1993, 1},
+      {0xa65a, 3060, 1},
 
-      {0xff2d, 3348, 1},
+      {0x03da, 851, 1},
 
-      {0x0158, 297, 1},
+      {0x24cd, 2567, 1},
 
-      {0x03d6, 795, 1},
+      {0x1eec, 2207, 1},
 
-      {0x24c6, 2540, 1},
+      {0x04ec, 1246, 1},
 
-      {0x0058, 68, 1},
+      {0x01ec, 477, 1},
 
-      {0xa758, 3204, 1},
+      {0x1fec, 2441, 1},
 
-      {0x0141, 264, 1},
+      {0x03d8, 848, 1},
 
-      {0x1e42, 1960, 1},
+      {0x212b, 92, 1},
 
-      {0x24c5, 2537, 1},
+      {0x24c3, 2537, 1},
 
-      {0x0041, 0, 1},
+      {0xa658, 3057, 1},
 
-      {0x2166, 2459, 1},
+      {0x1edc, 2183, 1},
 
-      {0x0244, 691, 1},
+      {0x04dc, 1222, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0042, 3, 1},
+      {0x24bb, 2513, 1},
 
-      {0xa742, 3171, 1},
+      {0x2cdc, 2879, 1},
 
-      {0x24bd, 2513, 1},
+      {0x00dc, 159, 1},
 
-      {0x104ce, 3600, 1},
-      {0xffffffff, -1, 0},
+      {0x03d6, 798, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa658, 3051, 1},
+      {0x24cc, 2564, 1},
 
-      {0x1ece, 2156, 1},
-      {0xffffffff, -1, 0},
+      {0x1eea, 2204, 1},
 
-      {0x24bb, 2507, 1},
+      {0x04ea, 1243, 1},
 
-      {0x03d0, 745, 1},
+      {0x01ea, 474, 1},
 
-      {0x2cce, 2852, 1},
+      {0x1fea, 2411, 1},
 
-      {0x00ce, 120, 1},
-      {0xffffffff, -1, 0},
+      {0x1ee8, 2201, 1},
 
-      {0xa642, 3017, 1},
+      {0x04e8, 1240, 1},
 
-      {0x1ef2, 2210, 1},
+      {0x01e8, 471, 1},
 
-      {0x04f2, 1252, 1},
+      {0x1fe8, 2435, 1},
 
-      {0x01f2, 483, 1},
+      {0x1ee6, 2198, 1},
 
-      {0x1ff2, 257, 2},
+      {0x04e6, 1237, 1},
 
-      {0x2cf2, 2891, 1},
-      {0xffffffff, -1, 0},
+      {0x01e6, 468, 1},
 
-      {0x0545, 1405, 1},
+      {0x1fe6, 88, 2},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1eea, 2198, 1},
+      {0x03d0, 748, 1},
 
-      {0x04ea, 1240, 1},
+      {0x1ee4, 2195, 1},
 
-      {0x01ea, 474, 1},
+      {0x04e4, 1234, 1},
 
-      {0x1fea, 2405, 1},
+      {0x01e4, 465, 1},
 
-      {0x1ee8, 2195, 1},
+      {0x1fe4, 80, 2},
 
-      {0x04e8, 1237, 1},
+      {0x104c9, 3606, 1},
 
-      {0x01e8, 471, 1},
+      {0x104c1, 3582, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1fe8, 2429, 1},
+      {0x04c9, 1192, 1},
 
-      {0x1ee6, 2192, 1},
+      {0x04c1, 1180, 1},
 
-      {0x04e6, 1234, 1},
+      {0x1fc9, 2390, 1},
 
-      {0x01e6, 468, 1},
+      {0x1f95, 194, 2},
 
-      {0x1fe6, 88, 2},
+      {0x00c9, 105, 1},
 
-      {0x1f4b, 2330, 1},
+      {0x00c1, 80, 1},
       {0xffffffff, -1, 0},
 
-      {0x004b, 27, 1},
+      {0x1c95, 1477, 1},
 
-      {0x0587, 105, 2},
+      {0xab95, 1711, 1},
 
-      {0x1ee4, 2189, 1},
+      {0x10c95, 3702, 1},
 
-      {0x04e4, 1231, 1},
+      {0x018b, 366, 1},
 
-      {0x01e4, 465, 1},
+      {0x1f8b, 144, 2},
 
-      {0x1fe4, 80, 2},
+      {0x0555, 1456, 1},
 
-      {0x104c1, 3561, 1},
+      {0x0587, 105, 2},
 
-      {0x1e5e, 2002, 1},
+      {0xa78b, 3267, 1},
       {0xffffffff, -1, 0},
 
-      {0x015e, 306, 1},
+      {0xab8b, 1681, 1},
 
-      {0x04c1, 1177, 1},
+      {0x10c8b, 3672, 1},
 
-      {0x1f83, 144, 2},
-      {0xffffffff, -1, 0},
+      {0x1e76, 2045, 1},
 
-      {0xa75e, 3213, 1},
+      {0x0476, 1081, 1},
 
-      {0x00c1, 80, 1},
+      {0x0176, 342, 1},
 
-      {0x1c83, 947, 1},
+      {0x0545, 1408, 1},
 
-      {0xab83, 1654, 1},
+      {0x0245, 703, 1},
+      {0xffffffff, -1, 0},
+
+      {0x039d, 789, 1},
 
-      {0x10c83, 3627, 1},
+      {0x1f83, 144, 2},
 
-      {0x0539, 1369, 1},
+      {0xab76, 1618, 1},
+      {0xffffffff, -1, 0},
 
-      {0x039f, 792, 1},
+      {0xff3a, 3408, 1},
 
-      {0x1e7e, 2051, 1},
+      {0x1c83, 950, 1},
 
-      {0x047e, 1090, 1},
+      {0xab83, 1657, 1},
 
-      {0x16e45, 3882, 1},
-      {0xffffffff, -1, 0},
+      {0x10c83, 3648, 1},
 
-      {0x2c7e, 580, 1},
+      {0x0141, 264, 1},
 
-      {0xa65e, 3060, 1},
+      {0x0181, 613, 1},
 
-      {0xa77e, 3246, 1},
+      {0x1f81, 134, 2},
+
+      {0x0041, 0, 1},
       {0xffffffff, -1, 0},
 
-      {0xab7e, 1639, 1},
+      {0x039b, 782, 1},
 
-      {0x03f0, 775, 1},
+      {0x1c81, 909, 1},
 
-      {0x039d, 786, 1},
+      {0xab81, 1651, 1},
 
-      {0x1e76, 2039, 1},
+      {0x10c81, 3642, 1},
 
-      {0x0476, 1078, 1},
+      {0x0149, 46, 2},
 
-      {0x0176, 342, 1},
+      {0x1f49, 2330, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e5c, 1999, 1},
-      {0xffffffff, -1, 0},
+      {0x0049, 4086, 1},
 
-      {0x015c, 303, 1},
-      {0xffffffff, -1, 0},
+      {0x053a, 1375, 1},
 
-      {0xab76, 1615, 1},
+      {0x023a, 2720, 1},
 
-      {0x0399, 770, 1},
+      {0x1e7e, 2057, 1},
 
-      {0xa75c, 3210, 1},
+      {0x047e, 1093, 1},
 
-      {0x0543, 1399, 1},
+      {0x0399, 773, 1},
 
-      {0x0393, 749, 1},
+      {0x1e5e, 2008, 1},
 
-      {0x0149, 46, 2},
+      {0x2c7e, 580, 1},
 
-      {0x1f49, 2324, 1},
+      {0x015e, 306, 1},
 
-      {0x1e40, 1957, 1},
+      {0xa77e, 3252, 1},
 
-      {0x0049, 4065, 1},
+      {0x16e55, 3951, 1},
 
-      {0x1eee, 2204, 1},
+      {0xab7e, 1642, 1},
 
-      {0x04ee, 1246, 1},
+      {0xa75e, 3219, 1},
 
-      {0x01ee, 480, 1},
+      {0x104d1, 3630, 1},
 
-      {0x0345, 770, 1},
+      {0x1e5c, 2005, 1},
 
-      {0xa740, 3168, 1},
+      {0x0393, 752, 1},
 
-      {0xa65c, 3057, 1},
+      {0x015c, 303, 1},
+      {0xffffffff, -1, 0},
+
+      {0x01d1, 435, 1},
+
+      {0x16e45, 3903, 1},
 
-      {0x053a, 1372, 1},
+      {0xa75c, 3216, 1},
 
-      {0xff39, 3384, 1},
+      {0x00d1, 129, 1},
 
-      {0x0391, 742, 1},
+      {0x10421, 3510, 1},
 
-      {0x1e3e, 1954, 1},
+      {0x0391, 745, 1},
 
-      {0x2183, 2489, 1},
+      {0xa65e, 3066, 1},
 
-      {0x1e38, 1945, 1},
+      {0x1e3e, 1960, 1},
 
-      {0x1f3e, 2315, 1},
+      {0x0421, 950, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f38, 2297, 1},
+      {0x1f3e, 2321, 1},
 
-      {0xa73e, 3165, 1},
+      {0x2c21, 2675, 1},
+      {0xffffffff, -1, 0},
+
+      {0xa73e, 3171, 1},
 
-      {0xa640, 3014, 1},
+      {0xa65c, 3063, 1},
 
-      {0xa738, 3156, 1},
+      {0x10c1, 2999, 1},
 
-      {0x1e36, 1942, 1},
+      {0x1e36, 1948, 1},
 
-      {0x0541, 1393, 1},
+      {0x1e38, 1951, 1},
 
       {0x0136, 249, 1},
 
-      {0x1e34, 1939, 1},
+      {0x24cf, 2573, 1},
+
+      {0x1f38, 2303, 1},
+      {0xffffffff, -1, 0},
+
+      {0xa736, 3159, 1},
+
+      {0xa738, 3162, 1},
+      {0xffffffff, -1, 0},
+
+      {0x0345, 773, 1},
+
+      {0x1e34, 1945, 1},
 
-      {0x0542, 1396, 1},
+      {0x16e5a, 3966, 1},
 
       {0x0134, 246, 1},
 
-      {0xa736, 3153, 1},
+      {0x1041d, 3498, 1},
 
       {0x013b, 255, 1},
 
-      {0x1f3b, 2306, 1},
+      {0x1f3b, 2312, 1},
 
-      {0xa734, 3150, 1},
-      {0xffffffff, -1, 0},
-
-      {0x0372, 715, 1},
+      {0xa734, 3156, 1},
 
-      {0x10415, 3453, 1},
+      {0x041d, 937, 1},
 
-      {0x16e43, 3876, 1},
+      {0x0372, 718, 1},
 
-      {0x16e5a, 3945, 1},
+      {0x1f1d, 2276, 1},
 
-      {0x042b, 981, 1},
+      {0x2c1d, 2663, 1},
 
-      {0x0415, 910, 1},
+      {0x16e58, 3960, 1},
 
-      {0x1f2b, 2282, 1},
+      {0x1041b, 3492, 1},
 
-      {0x2c2b, 2699, 1},
+      {0x0370, 715, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2c15, 2633, 1},
+      {0x041b, 931, 1},
 
-      {0x10c1, 2993, 1},
-      {0xffffffff, -1, 0},
+      {0x10419, 3486, 1},
 
-      {0x1041d, 3477, 1},
+      {0x1f1b, 2270, 1},
 
-      {0x0245, 700, 1},
+      {0x2c1b, 2657, 1},
       {0xffffffff, -1, 0},
 
-      {0xff3a, 3387, 1},
+      {0x0419, 925, 1},
 
-      {0x041d, 934, 1},
+      {0x10417, 3480, 1},
 
-      {0xfb17, 117, 2},
+      {0x1f19, 2264, 1},
+
+      {0x2c19, 2651, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f1d, 2270, 1},
+      {0x0417, 919, 1},
 
-      {0x2c1d, 2657, 1},
+      {0x10415, 3474, 1},
 
-      {0x0370, 712, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x10413, 3468, 1},
 
-      {0x16e58, 3939, 1},
+      {0x2c17, 2645, 1},
       {0xffffffff, -1, 0},
 
-      {0x03dc, 851, 1},
+      {0x0415, 913, 1},
 
-      {0x1041b, 3471, 1},
+      {0x0413, 906, 1},
 
-      {0x24ce, 2564, 1},
+      {0x2166, 2465, 1},
 
-      {0x16e41, 3870, 1},
+      {0x2c15, 2639, 1},
 
-      {0x054b, 1423, 1},
+      {0x2c13, 2633, 1},
 
-      {0x041b, 928, 1},
+      {0x0053, 52, 1},
 
-      {0x16e42, 3873, 1},
+      {0x03cf, 845, 1},
 
-      {0x1f1b, 2264, 1},
+      {0x1efe, 2234, 1},
 
-      {0x2c1b, 2651, 1},
+      {0x04fe, 1273, 1},
 
-      {0x10419, 3465, 1},
+      {0x01fe, 499, 1},
 
-      {0x10413, 3447, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1040f, 3456, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0419, 922, 1},
+      {0x24c9, 2555, 1},
 
-      {0x0413, 903, 1},
+      {0x24c1, 2531, 1},
 
-      {0x1f19, 2258, 1},
+      {0x040f, 1044, 1},
 
-      {0x2c19, 2645, 1},
+      {0x03ec, 878, 1},
 
-      {0x2c13, 2627, 1},
+      {0x1f0f, 2258, 1},
 
-      {0x1040f, 3435, 1},
+      {0x2c0f, 2621, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e917, 4032, 1},
-      {0xffffffff, -1, 0},
+      {0x1040d, 3450, 1},
 
-      {0x017f, 52, 1},
+      {0x0541, 1396, 1},
 
-      {0x040f, 1041, 1},
+      {0x0241, 586, 1},
 
-      {0x2c7f, 583, 1},
+      {0x03dc, 854, 1},
 
-      {0x1f0f, 2252, 1},
+      {0x040d, 1038, 1},
 
-      {0x2c0f, 2615, 1},
+      {0x1040b, 3444, 1},
 
-      {0x1040d, 3429, 1},
+      {0x1f0d, 2252, 1},
 
-      {0xab7f, 1642, 1},
+      {0x2c0d, 2615, 1},
       {0xffffffff, -1, 0},
 
-      {0x212b, 92, 1},
+      {0x040b, 1032, 1},
 
-      {0x040d, 1035, 1},
+      {0x0549, 1420, 1},
 
-      {0x1040b, 3423, 1},
+      {0x1f0b, 2246, 1},
 
-      {0x1f0d, 2246, 1},
+      {0x2c0b, 2609, 1},
 
-      {0x2c0d, 2609, 1},
-      {0xffffffff, -1, 0},
+      {0x10409, 3438, 1},
 
-      {0x040b, 1029, 1},
-      {0xffffffff, -1, 0},
+      {0x03ea, 875, 1},
 
-      {0x1f0b, 2240, 1},
+      {0x0139, 252, 1},
 
-      {0x2c0b, 2603, 1},
-      {0xffffffff, -1, 0},
+      {0x1f39, 2306, 1},
 
-      {0x24c1, 2525, 1},
+      {0x0409, 1026, 1},
 
-      {0x16e4b, 3900, 1},
+      {0x03e8, 872, 1},
 
-      {0x10409, 3417, 1},
+      {0x1f09, 2240, 1},
 
-      {0x10405, 3405, 1},
-      {0xffffffff, -1, 0},
+      {0x2c09, 2603, 1},
 
-      {0x0243, 354, 1},
+      {0x10405, 3426, 1},
 
-      {0x0409, 1023, 1},
+      {0x03e6, 869, 1},
 
-      {0x0405, 1011, 1},
+      {0xff21, 3333, 1},
 
-      {0x1f09, 2234, 1},
+      {0x1f4b, 2336, 1},
 
-      {0x2c09, 2597, 1},
+      {0x0405, 1014, 1},
 
-      {0x2c05, 2585, 1},
+      {0x004b, 27, 1},
 
-      {0x0549, 1417, 1},
+      {0x10403, 3420, 1},
 
-      {0x10403, 3399, 1},
+      {0x2c05, 2591, 1},
 
-      {0x16e5e, 3957, 1},
-      {0xffffffff, -1, 0},
+      {0x03e4, 866, 1},
 
-      {0x0540, 1390, 1},
+      {0x104d3, 3636, 1},
 
-      {0x0403, 1005, 1},
+      {0x0403, 1008, 1},
 
-      {0x023a, 2714, 1},
-      {0xffffffff, -1, 0},
+      {0xff36, 3396, 1},
 
-      {0x2c03, 2579, 1},
+      {0xff38, 3402, 1},
 
-      {0x10401, 3393, 1},
+      {0x2c03, 2585, 1},
 
-      {0x03ea, 872, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x01d3, 438, 1},
 
-      {0x0401, 999, 1},
+      {0x1fd3, 25, 3},
 
-      {0x03e8, 869, 1},
+      {0x0395, 758, 1},
 
-      {0x053e, 1384, 1},
+      {0x00d3, 135, 1},
 
-      {0x2c01, 2573, 1},
+      {0x0051, 46, 1},
 
-      {0x0538, 1366, 1},
+      {0x053e, 1387, 1},
 
-      {0x03e6, 866, 1},
+      {0x023e, 2723, 1},
 
-      {0x0241, 586, 1},
+      {0xff34, 3390, 1},
 
-      {0x1ef8, 2219, 1},
+      {0x16e41, 3891, 1},
 
-      {0x04f8, 1261, 1},
+      {0x10401, 3414, 1},
 
-      {0x01f8, 490, 1},
+      {0x1ef0, 2213, 1},
 
-      {0x1ff8, 2399, 1},
+      {0x04f0, 1252, 1},
 
-      {0x0536, 1360, 1},
-      {0xffffffff, -1, 0},
+      {0x01f0, 20, 2},
 
-      {0x03e4, 863, 1},
+      {0x0401, 1002, 1},
 
-      {0x0534, 1354, 1},
-      {0xffffffff, -1, 0},
+      {0x0536, 1363, 1},
+
+      {0x0538, 1369, 1},
+
+      {0x2c01, 2579, 1},
 
-      {0x053b, 1375, 1},
+      {0x16e49, 3915, 1},
 
-      {0x16e5c, 3951, 1},
+      {0x004f, 40, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ef6, 2216, 1},
+      {0x0376, 721, 1},
 
-      {0x04f6, 1258, 1},
+      {0x1eee, 2210, 1},
 
-      {0x01f6, 372, 1},
+      {0x04ee, 1249, 1},
 
-      {0x1ff6, 92, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x01ee, 480, 1},
 
-      {0x16e49, 3894, 1},
+      {0x0534, 1357, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f8d, 154, 2},
+      {0x053b, 1378, 1},
 
-      {0x1e3c, 1951, 1},
+      {0x023b, 577, 1},
 
-      {0x16e40, 3867, 1},
+      {0x16e5e, 3978, 1},
 
-      {0xa78d, 643, 1},
+      {0x1ef8, 2225, 1},
 
-      {0x1f3c, 2309, 1},
+      {0x04f8, 1264, 1},
 
-      {0xab8d, 1684, 1},
+      {0x01f8, 490, 1},
+
+      {0x1ff8, 2405, 1},
 
-      {0x10c8d, 3657, 1},
+      {0x1ed4, 2171, 1},
 
-      {0xa73c, 3162, 1},
+      {0x04d4, 1210, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e78, 2042, 1},
+      {0x16e5c, 3972, 1},
 
-      {0x0478, 1081, 1},
+      {0x2cd4, 2867, 1},
 
-      {0x0178, 168, 1},
+      {0x00d4, 138, 1},
 
-      {0x1e74, 2036, 1},
+      {0x2183, 2495, 1},
 
-      {0x0474, 1075, 1},
+      {0x1ef6, 2222, 1},
 
-      {0x0174, 339, 1},
+      {0x04f6, 1261, 1},
 
-      {0xff38, 3381, 1},
+      {0x01f6, 372, 1},
 
-      {0x0376, 718, 1},
+      {0x1ff6, 92, 2},
 
-      {0xab78, 1621, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1f8d, 154, 2},
 
-      {0xab74, 1609, 1},
+      {0x0147, 273, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0429, 974, 1},
+      {0xa78d, 643, 1},
 
-      {0xff36, 3375, 1},
+      {0x0047, 18, 1},
 
-      {0x1f29, 2276, 1},
+      {0xab8d, 1687, 1},
 
-      {0x2c29, 2693, 1},
+      {0x10c8d, 3678, 1},
 
-      {0xff34, 3369, 1},
-      {0xffffffff, -1, 0},
+      {0x1e74, 2042, 1},
 
-      {0x10427, 3507, 1},
+      {0x0474, 1078, 1},
 
-      {0x10425, 3501, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x0174, 339, 1},
 
-      {0x0427, 968, 1},
+      {0x1e3c, 1957, 1},
 
-      {0x0425, 962, 1},
+      {0x0553, 1450, 1},
 
-      {0x03ee, 878, 1},
+      {0x1e30, 1939, 1},
 
-      {0x2c27, 2687, 1},
+      {0x1f3c, 2315, 1},
 
-      {0x2c25, 2681, 1},
+      {0x0130, 261, 2},
 
-      {0xff2b, 3342, 1},
+      {0xab74, 1612, 1},
 
-      {0x10423, 3495, 1},
+      {0xa73c, 3168, 1},
 
-      {0x1041f, 3483, 1},
+      {0x10425, 3522, 1},
 
-      {0x10411, 3441, 1},
-      {0xffffffff, -1, 0},
+      {0x03d1, 768, 1},
 
-      {0x0423, 956, 1},
+      {0x10423, 3516, 1},
+      {0xffffffff, -1, 0},
 
-      {0x041f, 941, 1},
+      {0x0425, 965, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0411, 896, 1},
+      {0x0423, 959, 1},
 
-      {0x2c23, 2675, 1},
+      {0x2c25, 2687, 1},
 
-      {0x2c1f, 2663, 1},
+      {0x1041f, 3504, 1},
 
-      {0x2c11, 2621, 1},
+      {0x2c23, 2681, 1},
 
-      {0x10407, 3411, 1},
+      {0xff39, 3405, 1},
       {0xffffffff, -1, 0},
 
-      {0x017d, 351, 1},
-      {0xffffffff, -1, 0},
+      {0x041f, 944, 1},
 
-      {0x0407, 1017, 1},
+      {0x10411, 3462, 1},
 
-      {0x13f8, 1837, 1},
+      {0x10407, 3432, 1},
 
-      {0xa77d, 1855, 1},
+      {0x2c1f, 2669, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c07, 2591, 1},
+      {0x0411, 899, 1},
 
-      {0xab7d, 1636, 1},
+      {0x0407, 1020, 1},
+      {0xffffffff, -1, 0},
 
-      {0x017b, 348, 1},
+      {0x2c11, 2627, 1},
 
-      {0x0179, 345, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x2c07, 2597, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa77b, 3243, 1},
+      {0x0539, 1372, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa779, 3240, 1},
+      {0x13f8, 1840, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xab7b, 1630, 1},
+      {0x054b, 1426, 1},
 
-      {0xab79, 1624, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x16e53, 3945, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0},
 
-      {0x023e, 2717, 1},
+      {0x0551, 1444, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x023b, 577, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x054f, 1438, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x037f, 884, 1},
+      {0x03fe, 727, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x053c, 1378, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x16e4b, 3921, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xff29, 3336, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xff30, 3378, 1},
+      {0xffffffff, -1, 0},
 
-      {0xff27, 3330, 1},
+      {0x16e51, 3939, 1},
+      {0xffffffff, -1, 0},
 
-      {0xff25, 3324, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x0547, 1414, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xff23, 3318, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xff25, 3345, 1},
+      {0xffffffff, -1, 0},
+
+      {0xff23, 3339, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x053c, 1381, 1},
+
+      {0x16e4f, 3933, 1},
+      {0xffffffff, -1, 0},
+
+      {0x0230, 571, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb17, 117, 2},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb15, 113, 2},
+
+      {0xfb13, 121, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x03f0, 778, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x16e47, 3909, 1},
+      {0xffffffff, -1, 0},
+
+      {0x03ee, 881, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb05, 29, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb03, 0, 3},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb15, 113, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e921, 4083, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb01, 8, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0},
 
-      {0x1e915, 4026, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0xfb13, 121, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0x1e91d, 4050, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e91d, 4071, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e91b, 4044, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e91b, 4065, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e919, 4038, 1},
+      {0x1e919, 4059, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e913, 4020, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e917, 4053, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb05, 29, 2},
-      {0xffffffff, -1, 0},
+      {0x1e915, 4047, 1},
 
-      {0x1e90f, 4008, 1},
+      {0x1e913, 4041, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0},
-
-      {0xfb03, 0, 3},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e90d, 4002, 1},
+      {0x1e90f, 4029, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e90b, 3996, 1},
-      {0xffffffff, -1, 0},
+      {0x1e90d, 4023, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb01, 8, 2},
+      {0x1e90b, 4017, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0x1e909, 3990, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e905, 3978, 1},
+      {0x1e909, 4011, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e903, 3972, 1},
+      {0x1e905, 3999, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e901, 3966, 1},
+      {0x1e903, 3993, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0},
+
+      {0x1e901, 3987, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
@@ -3258,15 +3278,14 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e91f, 4056, 1},
+      {0x1e91f, 4077, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e911, 4014, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e911, 4035, 1},
 
-      {0x1e907, 3984, 1}
+      {0x1e907, 4005, 1}
     };
 
   if (0 == 0)
@@ -3283,5 +3302,3 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
     }
   return 0;
 }
-
-
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_wb_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_wb_data.c
new file mode 100644
index 0000000000..ed7537f4d6
--- /dev/null
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_wb_data.c
@@ -0,0 +1,1023 @@
+/* unicode_wb_data.c: Generated by make_unicode_wb_data.py. */
+/*-
+ * Copyright (c) 2019  K.Kosako  <kkosako0 AT gmail DOT com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define WORD_BREAK_PROPERTY_VERSION  12_1_0
+
+/*
+ALetter
+CR
+Double_Quote
+Extend
+ExtendNumLet
+Format
+Hebrew_Letter
+Katakana
+LF
+MidLetter
+MidNum
+MidNumLet
+Newline
+Numeric
+Regional_Indicator
+Single_Quote
+WSegSpace
+ZWJ
+*/
+
+static int WB_RANGE_NUM = 970;
+static WB_RANGE_TYPE WB_RANGES[] = {
+ {0x00000a, 0x00000a, WB_LF },
+ {0x00000b, 0x00000c, WB_Newline },
+ {0x00000d, 0x00000d, WB_CR },
+ {0x000020, 0x000020, WB_WSegSpace },
+ {0x000022, 0x000022, WB_Double_Quote },
+ {0x000027, 0x000027, WB_Single_Quote },
+ {0x00002c, 0x00002c, WB_MidNum },
+ {0x00002e, 0x00002e, WB_MidNumLet },
+ {0x000030, 0x000039, WB_Numeric },
+ {0x00003a, 0x00003a, WB_MidLetter },
+ {0x00003b, 0x00003b, WB_MidNum },
+ {0x000041, 0x00005a, WB_ALetter },
+ {0x00005f, 0x00005f, WB_ExtendNumLet },
+ {0x000061, 0x00007a, WB_ALetter },
+ {0x000085, 0x000085, WB_Newline },
+ {0x0000aa, 0x0000aa, WB_ALetter },
+ {0x0000ad, 0x0000ad, WB_Format },
+ {0x0000b5, 0x0000b5, WB_ALetter },
+ {0x0000b7, 0x0000b7, WB_MidLetter },
+ {0x0000ba, 0x0000ba, WB_ALetter },
+ {0x0000c0, 0x0000d6, WB_ALetter },
+ {0x0000d8, 0x0000f6, WB_ALetter },
+ {0x0000f8, 0x0002d7, WB_ALetter },
+ {0x0002de, 0x0002e4, WB_ALetter },
+ {0x0002ec, 0x0002ff, WB_ALetter },
+ {0x000300, 0x00036f, WB_Extend },
+ {0x000370, 0x000374, WB_ALetter },
+ {0x000376, 0x000377, WB_ALetter },
+ {0x00037a, 0x00037d, WB_ALetter },
+ {0x00037e, 0x00037e, WB_MidNum },
+ {0x00037f, 0x00037f, WB_ALetter },
+ {0x000386, 0x000386, WB_ALetter },
+ {0x000387, 0x000387, WB_MidLetter },
+ {0x000388, 0x00038a, WB_ALetter },
+ {0x00038c, 0x00038c, WB_ALetter },
+ {0x00038e, 0x0003a1, WB_ALetter },
+ {0x0003a3, 0x0003f5, WB_ALetter },
+ {0x0003f7, 0x000481, WB_ALetter },
+ {0x000483, 0x000489, WB_Extend },
+ {0x00048a, 0x00052f, WB_ALetter },
+ {0x000531, 0x000556, WB_ALetter },
+ {0x000559, 0x000559, WB_ALetter },
+ {0x00055b, 0x00055c, WB_ALetter },
+ {0x00055e, 0x00055e, WB_ALetter },
+ {0x000560, 0x000588, WB_ALetter },
+ {0x000589, 0x000589, WB_MidNum },
+ {0x000591, 0x0005bd, WB_Extend },
+ {0x0005bf, 0x0005bf, WB_Extend },
+ {0x0005c1, 0x0005c2, WB_Extend },
+ {0x0005c4, 0x0005c5, WB_Extend },
+ {0x0005c7, 0x0005c7, WB_Extend },
+ {0x0005d0, 0x0005ea, WB_Hebrew_Letter },
+ {0x0005ef, 0x0005f2, WB_Hebrew_Letter },
+ {0x0005f3, 0x0005f3, WB_ALetter },
+ {0x0005f4, 0x0005f4, WB_MidLetter },
+ {0x000600, 0x000605, WB_Format },
+ {0x00060c, 0x00060d, WB_MidNum },
+ {0x000610, 0x00061a, WB_Extend },
+ {0x00061c, 0x00061c, WB_Format },
+ {0x000620, 0x00064a, WB_ALetter },
+ {0x00064b, 0x00065f, WB_Extend },
+ {0x000660, 0x000669, WB_Numeric },
+ {0x00066b, 0x00066b, WB_Numeric },
+ {0x00066c, 0x00066c, WB_MidNum },
+ {0x00066e, 0x00066f, WB_ALetter },
+ {0x000670, 0x000670, WB_Extend },
+ {0x000671, 0x0006d3, WB_ALetter },
+ {0x0006d5, 0x0006d5, WB_ALetter },
+ {0x0006d6, 0x0006dc, WB_Extend },
+ {0x0006dd, 0x0006dd, WB_Format },
+ {0x0006df, 0x0006e4, WB_Extend },
+ {0x0006e5, 0x0006e6, WB_ALetter },
+ {0x0006e7, 0x0006e8, WB_Extend },
+ {0x0006ea, 0x0006ed, WB_Extend },
+ {0x0006ee, 0x0006ef, WB_ALetter },
+ {0x0006f0, 0x0006f9, WB_Numeric },
+ {0x0006fa, 0x0006fc, WB_ALetter },
+ {0x0006ff, 0x0006ff, WB_ALetter },
+ {0x00070f, 0x00070f, WB_Format },
+ {0x000710, 0x000710, WB_ALetter },
+ {0x000711, 0x000711, WB_Extend },
+ {0x000712, 0x00072f, WB_ALetter },
+ {0x000730, 0x00074a, WB_Extend },
+ {0x00074d, 0x0007a5, WB_ALetter },
+ {0x0007a6, 0x0007b0, WB_Extend },
+ {0x0007b1, 0x0007b1, WB_ALetter },
+ {0x0007c0, 0x0007c9, WB_Numeric },
+ {0x0007ca, 0x0007ea, WB_ALetter },
+ {0x0007eb, 0x0007f3, WB_Extend },
+ {0x0007f4, 0x0007f5, WB_ALetter },
+ {0x0007f8, 0x0007f8, WB_MidNum },
+ {0x0007fa, 0x0007fa, WB_ALetter },
+ {0x0007fd, 0x0007fd, WB_Extend },
+ {0x000800, 0x000815, WB_ALetter },
+ {0x000816, 0x000819, WB_Extend },
+ {0x00081a, 0x00081a, WB_ALetter },
+ {0x00081b, 0x000823, WB_Extend },
+ {0x000824, 0x000824, WB_ALetter },
+ {0x000825, 0x000827, WB_Extend },
+ {0x000828, 0x000828, WB_ALetter },
+ {0x000829, 0x00082d, WB_Extend },
+ {0x000840, 0x000858, WB_ALetter },
+ {0x000859, 0x00085b, WB_Extend },
+ {0x000860, 0x00086a, WB_ALetter },
+ {0x0008a0, 0x0008b4, WB_ALetter },
+ {0x0008b6, 0x0008bd, WB_ALetter },
+ {0x0008d3, 0x0008e1, WB_Extend },
+ {0x0008e2, 0x0008e2, WB_Format },
+ {0x0008e3, 0x000903, WB_Extend },
+ {0x000904, 0x000939, WB_ALetter },
+ {0x00093a, 0x00093c, WB_Extend },
+ {0x00093d, 0x00093d, WB_ALetter },
+ {0x00093e, 0x00094f, WB_Extend },
+ {0x000950, 0x000950, WB_ALetter },
+ {0x000951, 0x000957, WB_Extend },
+ {0x000958, 0x000961, WB_ALetter },
+ {0x000962, 0x000963, WB_Extend },
+ {0x000966, 0x00096f, WB_Numeric },
+ {0x000971, 0x000980, WB_ALetter },
+ {0x000981, 0x000983, WB_Extend },
+ {0x000985, 0x00098c, WB_ALetter },
+ {0x00098f, 0x000990, WB_ALetter },
+ {0x000993, 0x0009a8, WB_ALetter },
+ {0x0009aa, 0x0009b0, WB_ALetter },
+ {0x0009b2, 0x0009b2, WB_ALetter },
+ {0x0009b6, 0x0009b9, WB_ALetter },
+ {0x0009bc, 0x0009bc, WB_Extend },
+ {0x0009bd, 0x0009bd, WB_ALetter },
+ {0x0009be, 0x0009c4, WB_Extend },
+ {0x0009c7, 0x0009c8, WB_Extend },
+ {0x0009cb, 0x0009cd, WB_Extend },
+ {0x0009ce, 0x0009ce, WB_ALetter },
+ {0x0009d7, 0x0009d7, WB_Extend },
+ {0x0009dc, 0x0009dd, WB_ALetter },
+ {0x0009df, 0x0009e1, WB_ALetter },
+ {0x0009e2, 0x0009e3, WB_Extend },
+ {0x0009e6, 0x0009ef, WB_Numeric },
+ {0x0009f0, 0x0009f1, WB_ALetter },
+ {0x0009fc, 0x0009fc, WB_ALetter },
+ {0x0009fe, 0x0009fe, WB_Extend },
+ {0x000a01, 0x000a03, WB_Extend },
+ {0x000a05, 0x000a0a, WB_ALetter },
+ {0x000a0f, 0x000a10, WB_ALetter },
+ {0x000a13, 0x000a28, WB_ALetter },
+ {0x000a2a, 0x000a30, WB_ALetter },
+ {0x000a32, 0x000a33, WB_ALetter },
+ {0x000a35, 0x000a36, WB_ALetter },
+ {0x000a38, 0x000a39, WB_ALetter },
+ {0x000a3c, 0x000a3c, WB_Extend },
+ {0x000a3e, 0x000a42, WB_Extend },
+ {0x000a47, 0x000a48, WB_Extend },
+ {0x000a4b, 0x000a4d, WB_Extend },
+ {0x000a51, 0x000a51, WB_Extend },
+ {0x000a59, 0x000a5c, WB_ALetter },
+ {0x000a5e, 0x000a5e, WB_ALetter },
+ {0x000a66, 0x000a6f, WB_Numeric },
+ {0x000a70, 0x000a71, WB_Extend },
+ {0x000a72, 0x000a74, WB_ALetter },
+ {0x000a75, 0x000a75, WB_Extend },
+ {0x000a81, 0x000a83, WB_Extend },
+ {0x000a85, 0x000a8d, WB_ALetter },
+ {0x000a8f, 0x000a91, WB_ALetter },
+ {0x000a93, 0x000aa8, WB_ALetter },
+ {0x000aaa, 0x000ab0, WB_ALetter },
+ {0x000ab2, 0x000ab3, WB_ALetter },
+ {0x000ab5, 0x000ab9, WB_ALetter },
+ {0x000abc, 0x000abc, WB_Extend },
+ {0x000abd, 0x000abd, WB_ALetter },
+ {0x000abe, 0x000ac5, WB_Extend },
+ {0x000ac7, 0x000ac9, WB_Extend },
+ {0x000acb, 0x000acd, WB_Extend },
+ {0x000ad0, 0x000ad0, WB_ALetter },
+ {0x000ae0, 0x000ae1, WB_ALetter },
+ {0x000ae2, 0x000ae3, WB_Extend },
+ {0x000ae6, 0x000aef, WB_Numeric },
+ {0x000af9, 0x000af9, WB_ALetter },
+ {0x000afa, 0x000aff, WB_Extend },
+ {0x000b01, 0x000b03, WB_Extend },
+ {0x000b05, 0x000b0c, WB_ALetter },
+ {0x000b0f, 0x000b10, WB_ALetter },
+ {0x000b13, 0x000b28, WB_ALetter },
+ {0x000b2a, 0x000b30, WB_ALetter },
+ {0x000b32, 0x000b33, WB_ALetter },
+ {0x000b35, 0x000b39, WB_ALetter },
+ {0x000b3c, 0x000b3c, WB_Extend },
+ {0x000b3d, 0x000b3d, WB_ALetter },
+ {0x000b3e, 0x000b44, WB_Extend },
+ {0x000b47, 0x000b48, WB_Extend },
+ {0x000b4b, 0x000b4d, WB_Extend },
+ {0x000b56, 0x000b57, WB_Extend },
+ {0x000b5c, 0x000b5d, WB_ALetter },
+ {0x000b5f, 0x000b61, WB_ALetter },
+ {0x000b62, 0x000b63, WB_Extend },
+ {0x000b66, 0x000b6f, WB_Numeric },
+ {0x000b71, 0x000b71, WB_ALetter },
+ {0x000b82, 0x000b82, WB_Extend },
+ {0x000b83, 0x000b83, WB_ALetter },
+ {0x000b85, 0x000b8a, WB_ALetter },
+ {0x000b8e, 0x000b90, WB_ALetter },
+ {0x000b92, 0x000b95, WB_ALetter },
+ {0x000b99, 0x000b9a, WB_ALetter },
+ {0x000b9c, 0x000b9c, WB_ALetter },
+ {0x000b9e, 0x000b9f, WB_ALetter },
+ {0x000ba3, 0x000ba4, WB_ALetter },
+ {0x000ba8, 0x000baa, WB_ALetter },
+ {0x000bae, 0x000bb9, WB_ALetter },
+ {0x000bbe, 0x000bc2, WB_Extend },
+ {0x000bc6, 0x000bc8, WB_Extend },
+ {0x000bca, 0x000bcd, WB_Extend },
+ {0x000bd0, 0x000bd0, WB_ALetter },
+ {0x000bd7, 0x000bd7, WB_Extend },
+ {0x000be6, 0x000bef, WB_Numeric },
+ {0x000c00, 0x000c04, WB_Extend },
+ {0x000c05, 0x000c0c, WB_ALetter },
+ {0x000c0e, 0x000c10, WB_ALetter },
+ {0x000c12, 0x000c28, WB_ALetter },
+ {0x000c2a, 0x000c39, WB_ALetter },
+ {0x000c3d, 0x000c3d, WB_ALetter },
+ {0x000c3e, 0x000c44, WB_Extend },
+ {0x000c46, 0x000c48, WB_Extend },
+ {0x000c4a, 0x000c4d, WB_Extend },
+ {0x000c55, 0x000c56, WB_Extend },
+ {0x000c58, 0x000c5a, WB_ALetter },
+ {0x000c60, 0x000c61, WB_ALetter },
+ {0x000c62, 0x000c63, WB_Extend },
+ {0x000c66, 0x000c6f, WB_Numeric },
+ {0x000c80, 0x000c80, WB_ALetter },
+ {0x000c81, 0x000c83, WB_Extend },
+ {0x000c85, 0x000c8c, WB_ALetter },
+ {0x000c8e, 0x000c90, WB_ALetter },
+ {0x000c92, 0x000ca8, WB_ALetter },
+ {0x000caa, 0x000cb3, WB_ALetter },
+ {0x000cb5, 0x000cb9, WB_ALetter },
+ {0x000cbc, 0x000cbc, WB_Extend },
+ {0x000cbd, 0x000cbd, WB_ALetter },
+ {0x000cbe, 0x000cc4, WB_Extend },
+ {0x000cc6, 0x000cc8, WB_Extend },
+ {0x000cca, 0x000ccd, WB_Extend },
+ {0x000cd5, 0x000cd6, WB_Extend },
+ {0x000cde, 0x000cde, WB_ALetter },
+ {0x000ce0, 0x000ce1, WB_ALetter },
+ {0x000ce2, 0x000ce3, WB_Extend },
+ {0x000ce6, 0x000cef, WB_Numeric },
+ {0x000cf1, 0x000cf2, WB_ALetter },
+ {0x000d00, 0x000d03, WB_Extend },
+ {0x000d05, 0x000d0c, WB_ALetter },
+ {0x000d0e, 0x000d10, WB_ALetter },
+ {0x000d12, 0x000d3a, WB_ALetter },
+ {0x000d3b, 0x000d3c, WB_Extend },
+ {0x000d3d, 0x000d3d, WB_ALetter },
+ {0x000d3e, 0x000d44, WB_Extend },
+ {0x000d46, 0x000d48, WB_Extend },
+ {0x000d4a, 0x000d4d, WB_Extend },
+ {0x000d4e, 0x000d4e, WB_ALetter },
+ {0x000d54, 0x000d56, WB_ALetter },
+ {0x000d57, 0x000d57, WB_Extend },
+ {0x000d5f, 0x000d61, WB_ALetter },
+ {0x000d62, 0x000d63, WB_Extend },
+ {0x000d66, 0x000d6f, WB_Numeric },
+ {0x000d7a, 0x000d7f, WB_ALetter },
+ {0x000d82, 0x000d83, WB_Extend },
+ {0x000d85, 0x000d96, WB_ALetter },
+ {0x000d9a, 0x000db1, WB_ALetter },
+ {0x000db3, 0x000dbb, WB_ALetter },
+ {0x000dbd, 0x000dbd, WB_ALetter },
+ {0x000dc0, 0x000dc6, WB_ALetter },
+ {0x000dca, 0x000dca, WB_Extend },
+ {0x000dcf, 0x000dd4, WB_Extend },
+ {0x000dd6, 0x000dd6, WB_Extend },
+ {0x000dd8, 0x000ddf, WB_Extend },
+ {0x000de6, 0x000def, WB_Numeric },
+ {0x000df2, 0x000df3, WB_Extend },
+ {0x000e31, 0x000e31, WB_Extend },
+ {0x000e34, 0x000e3a, WB_Extend },
+ {0x000e47, 0x000e4e, WB_Extend },
+ {0x000e50, 0x000e59, WB_Numeric },
+ {0x000eb1, 0x000eb1, WB_Extend },
+ {0x000eb4, 0x000ebc, WB_Extend },
+ {0x000ec8, 0x000ecd, WB_Extend },
+ {0x000ed0, 0x000ed9, WB_Numeric },
+ {0x000f00, 0x000f00, WB_ALetter },
+ {0x000f18, 0x000f19, WB_Extend },
+ {0x000f20, 0x000f29, WB_Numeric },
+ {0x000f35, 0x000f35, WB_Extend },
+ {0x000f37, 0x000f37, WB_Extend },
+ {0x000f39, 0x000f39, WB_Extend },
+ {0x000f3e, 0x000f3f, WB_Extend },
+ {0x000f40, 0x000f47, WB_ALetter },
+ {0x000f49, 0x000f6c, WB_ALetter },
+ {0x000f71, 0x000f84, WB_Extend },
+ {0x000f86, 0x000f87, WB_Extend },
+ {0x000f88, 0x000f8c, WB_ALetter },
+ {0x000f8d, 0x000f97, WB_Extend },
+ {0x000f99, 0x000fbc, WB_Extend },
+ {0x000fc6, 0x000fc6, WB_Extend },
+ {0x00102b, 0x00103e, WB_Extend },
+ {0x001040, 0x001049, WB_Numeric },
+ {0x001056, 0x001059, WB_Extend },
+ {0x00105e, 0x001060, WB_Extend },
+ {0x001062, 0x001064, WB_Extend },
+ {0x001067, 0x00106d, WB_Extend },
+ {0x001071, 0x001074, WB_Extend },
+ {0x001082, 0x00108d, WB_Extend },
+ {0x00108f, 0x00108f, WB_Extend },
+ {0x001090, 0x001099, WB_Numeric },
+ {0x00109a, 0x00109d, WB_Extend },
+ {0x0010a0, 0x0010c5, WB_ALetter },
+ {0x0010c7, 0x0010c7, WB_ALetter },
+ {0x0010cd, 0x0010cd, WB_ALetter },
+ {0x0010d0, 0x0010fa, WB_ALetter },
+ {0x0010fc, 0x001248, WB_ALetter },
+ {0x00124a, 0x00124d, WB_ALetter },
+ {0x001250, 0x001256, WB_ALetter },
+ {0x001258, 0x001258, WB_ALetter },
+ {0x00125a, 0x00125d, WB_ALetter },
+ {0x001260, 0x001288, WB_ALetter },
+ {0x00128a, 0x00128d, WB_ALetter },
+ {0x001290, 0x0012b0, WB_ALetter },
+ {0x0012b2, 0x0012b5, WB_ALetter },
+ {0x0012b8, 0x0012be, WB_ALetter },
+ {0x0012c0, 0x0012c0, WB_ALetter },
+ {0x0012c2, 0x0012c5, WB_ALetter },
+ {0x0012c8, 0x0012d6, WB_ALetter },
+ {0x0012d8, 0x001310, WB_ALetter },
+ {0x001312, 0x001315, WB_ALetter },
+ {0x001318, 0x00135a, WB_ALetter },
+ {0x00135d, 0x00135f, WB_Extend },
+ {0x001380, 0x00138f, WB_ALetter },
+ {0x0013a0, 0x0013f5, WB_ALetter },
+ {0x0013f8, 0x0013fd, WB_ALetter },
+ {0x001401, 0x00166c, WB_ALetter },
+ {0x00166f, 0x00167f, WB_ALetter },
+ {0x001680, 0x001680, WB_WSegSpace },
+ {0x001681, 0x00169a, WB_ALetter },
+ {0x0016a0, 0x0016ea, WB_ALetter },
+ {0x0016ee, 0x0016f8, WB_ALetter },
+ {0x001700, 0x00170c, WB_ALetter },
+ {0x00170e, 0x001711, WB_ALetter },
+ {0x001712, 0x001714, WB_Extend },
+ {0x001720, 0x001731, WB_ALetter },
+ {0x001732, 0x001734, WB_Extend },
+ {0x001740, 0x001751, WB_ALetter },
+ {0x001752, 0x001753, WB_Extend },
+ {0x001760, 0x00176c, WB_ALetter },
+ {0x00176e, 0x001770, WB_ALetter },
+ {0x001772, 0x001773, WB_Extend },
+ {0x0017b4, 0x0017d3, WB_Extend },
+ {0x0017dd, 0x0017dd, WB_Extend },
+ {0x0017e0, 0x0017e9, WB_Numeric },
+ {0x00180b, 0x00180d, WB_Extend },
+ {0x00180e, 0x00180e, WB_Format },
+ {0x001810, 0x001819, WB_Numeric },
+ {0x001820, 0x001878, WB_ALetter },
+ {0x001880, 0x001884, WB_ALetter },
+ {0x001885, 0x001886, WB_Extend },
+ {0x001887, 0x0018a8, WB_ALetter },
+ {0x0018a9, 0x0018a9, WB_Extend },
+ {0x0018aa, 0x0018aa, WB_ALetter },
+ {0x0018b0, 0x0018f5, WB_ALetter },
+ {0x001900, 0x00191e, WB_ALetter },
+ {0x001920, 0x00192b, WB_Extend },
+ {0x001930, 0x00193b, WB_Extend },
+ {0x001946, 0x00194f, WB_Numeric },
+ {0x0019d0, 0x0019d9, WB_Numeric },
+ {0x001a00, 0x001a16, WB_ALetter },
+ {0x001a17, 0x001a1b, WB_Extend },
+ {0x001a55, 0x001a5e, WB_Extend },
+ {0x001a60, 0x001a7c, WB_Extend },
+ {0x001a7f, 0x001a7f, WB_Extend },
+ {0x001a80, 0x001a89, WB_Numeric },
+ {0x001a90, 0x001a99, WB_Numeric },
+ {0x001ab0, 0x001abe, WB_Extend },
+ {0x001b00, 0x001b04, WB_Extend },
+ {0x001b05, 0x001b33, WB_ALetter },
+ {0x001b34, 0x001b44, WB_Extend },
+ {0x001b45, 0x001b4b, WB_ALetter },
+ {0x001b50, 0x001b59, WB_Numeric },
+ {0x001b6b, 0x001b73, WB_Extend },
+ {0x001b80, 0x001b82, WB_Extend },
+ {0x001b83, 0x001ba0, WB_ALetter },
+ {0x001ba1, 0x001bad, WB_Extend },
+ {0x001bae, 0x001baf, WB_ALetter },
+ {0x001bb0, 0x001bb9, WB_Numeric },
+ {0x001bba, 0x001be5, WB_ALetter },
+ {0x001be6, 0x001bf3, WB_Extend },
+ {0x001c00, 0x001c23, WB_ALetter },
+ {0x001c24, 0x001c37, WB_Extend },
+ {0x001c40, 0x001c49, WB_Numeric },
+ {0x001c4d, 0x001c4f, WB_ALetter },
+ {0x001c50, 0x001c59, WB_Numeric },
+ {0x001c5a, 0x001c7d, WB_ALetter },
+ {0x001c80, 0x001c88, WB_ALetter },
+ {0x001c90, 0x001cba, WB_ALetter },
+ {0x001cbd, 0x001cbf, WB_ALetter },
+ {0x001cd0, 0x001cd2, WB_Extend },
+ {0x001cd4, 0x001ce8, WB_Extend },
+ {0x001ce9, 0x001cec, WB_ALetter },
+ {0x001ced, 0x001ced, WB_Extend },
+ {0x001cee, 0x001cf3, WB_ALetter },
+ {0x001cf4, 0x001cf4, WB_Extend },
+ {0x001cf5, 0x001cf6, WB_ALetter },
+ {0x001cf7, 0x001cf9, WB_Extend },
+ {0x001cfa, 0x001cfa, WB_ALetter },
+ {0x001d00, 0x001dbf, WB_ALetter },
+ {0x001dc0, 0x001df9, WB_Extend },
+ {0x001dfb, 0x001dff, WB_Extend },
+ {0x001e00, 0x001f15, WB_ALetter },
+ {0x001f18, 0x001f1d, WB_ALetter },
+ {0x001f20, 0x001f45, WB_ALetter },
+ {0x001f48, 0x001f4d, WB_ALetter },
+ {0x001f50, 0x001f57, WB_ALetter },
+ {0x001f59, 0x001f59, WB_ALetter },
+ {0x001f5b, 0x001f5b, WB_ALetter },
+ {0x001f5d, 0x001f5d, WB_ALetter },
+ {0x001f5f, 0x001f7d, WB_ALetter },
+ {0x001f80, 0x001fb4, WB_ALetter },
+ {0x001fb6, 0x001fbc, WB_ALetter },
+ {0x001fbe, 0x001fbe, WB_ALetter },
+ {0x001fc2, 0x001fc4, WB_ALetter },
+ {0x001fc6, 0x001fcc, WB_ALetter },
+ {0x001fd0, 0x001fd3, WB_ALetter },
+ {0x001fd6, 0x001fdb, WB_ALetter },
+ {0x001fe0, 0x001fec, WB_ALetter },
+ {0x001ff2, 0x001ff4, WB_ALetter },
+ {0x001ff6, 0x001ffc, WB_ALetter },
+ {0x002000, 0x002006, WB_WSegSpace },
+ {0x002008, 0x00200a, WB_WSegSpace },
+ {0x00200c, 0x00200c, WB_Extend },
+ {0x00200d, 0x00200d, WB_ZWJ },
+ {0x00200e, 0x00200f, WB_Format },
+ {0x002018, 0x002019, WB_MidNumLet },
+ {0x002024, 0x002024, WB_MidNumLet },
+ {0x002027, 0x002027, WB_MidLetter },
+ {0x002028, 0x002029, WB_Newline },
+ {0x00202a, 0x00202e, WB_Format },
+ {0x00202f, 0x00202f, WB_ExtendNumLet },
+ {0x00203f, 0x002040, WB_ExtendNumLet },
+ {0x002044, 0x002044, WB_MidNum },
+ {0x002054, 0x002054, WB_ExtendNumLet },
+ {0x00205f, 0x00205f, WB_WSegSpace },
+ {0x002060, 0x002064, WB_Format },
+ {0x002066, 0x00206f, WB_Format },
+ {0x002071, 0x002071, WB_ALetter },
+ {0x00207f, 0x00207f, WB_ALetter },
+ {0x002090, 0x00209c, WB_ALetter },
+ {0x0020d0, 0x0020f0, WB_Extend },
+ {0x002102, 0x002102, WB_ALetter },
+ {0x002107, 0x002107, WB_ALetter },
+ {0x00210a, 0x002113, WB_ALetter },
+ {0x002115, 0x002115, WB_ALetter },
+ {0x002119, 0x00211d, WB_ALetter },
+ {0x002124, 0x002124, WB_ALetter },
+ {0x002126, 0x002126, WB_ALetter },
+ {0x002128, 0x002128, WB_ALetter },
+ {0x00212a, 0x00212d, WB_ALetter },
+ {0x00212f, 0x002139, WB_ALetter },
+ {0x00213c, 0x00213f, WB_ALetter },
+ {0x002145, 0x002149, WB_ALetter },
+ {0x00214e, 0x00214e, WB_ALetter },
+ {0x002160, 0x002188, WB_ALetter },
+ {0x0024b6, 0x0024e9, WB_ALetter },
+ {0x002c00, 0x002c2e, WB_ALetter },
+ {0x002c30, 0x002c5e, WB_ALetter },
+ {0x002c60, 0x002ce4, WB_ALetter },
+ {0x002ceb, 0x002cee, WB_ALetter },
+ {0x002cef, 0x002cf1, WB_Extend },
+ {0x002cf2, 0x002cf3, WB_ALetter },
+ {0x002d00, 0x002d25, WB_ALetter },
+ {0x002d27, 0x002d27, WB_ALetter },
+ {0x002d2d, 0x002d2d, WB_ALetter },
+ {0x002d30, 0x002d67, WB_ALetter },
+ {0x002d6f, 0x002d6f, WB_ALetter },
+ {0x002d7f, 0x002d7f, WB_Extend },
+ {0x002d80, 0x002d96, WB_ALetter },
+ {0x002da0, 0x002da6, WB_ALetter },
+ {0x002da8, 0x002dae, WB_ALetter },
+ {0x002db0, 0x002db6, WB_ALetter },
+ {0x002db8, 0x002dbe, WB_ALetter },
+ {0x002dc0, 0x002dc6, WB_ALetter },
+ {0x002dc8, 0x002dce, WB_ALetter },
+ {0x002dd0, 0x002dd6, WB_ALetter },
+ {0x002dd8, 0x002dde, WB_ALetter },
+ {0x002de0, 0x002dff, WB_Extend },
+ {0x002e2f, 0x002e2f, WB_ALetter },
+ {0x003000, 0x003000, WB_WSegSpace },
+ {0x003005, 0x003005, WB_ALetter },
+ {0x00302a, 0x00302f, WB_Extend },
+ {0x003031, 0x003035, WB_Katakana },
+ {0x00303b, 0x00303c, WB_ALetter },
+ {0x003099, 0x00309a, WB_Extend },
+ {0x00309b, 0x00309c, WB_Katakana },
+ {0x0030a0, 0x0030fa, WB_Katakana },
+ {0x0030fc, 0x0030ff, WB_Katakana },
+ {0x003105, 0x00312f, WB_ALetter },
+ {0x003131, 0x00318e, WB_ALetter },
+ {0x0031a0, 0x0031ba, WB_ALetter },
+ {0x0031f0, 0x0031ff, WB_Katakana },
+ {0x0032d0, 0x0032fe, WB_Katakana },
+ {0x003300, 0x003357, WB_Katakana },
+ {0x00a000, 0x00a48c, WB_ALetter },
+ {0x00a4d0, 0x00a4fd, WB_ALetter },
+ {0x00a500, 0x00a60c, WB_ALetter },
+ {0x00a610, 0x00a61f, WB_ALetter },
+ {0x00a620, 0x00a629, WB_Numeric },
+ {0x00a62a, 0x00a62b, WB_ALetter },
+ {0x00a640, 0x00a66e, WB_ALetter },
+ {0x00a66f, 0x00a672, WB_Extend },
+ {0x00a674, 0x00a67d, WB_Extend },
+ {0x00a67f, 0x00a69d, WB_ALetter },
+ {0x00a69e, 0x00a69f, WB_Extend },
+ {0x00a6a0, 0x00a6ef, WB_ALetter },
+ {0x00a6f0, 0x00a6f1, WB_Extend },
+ {0x00a717, 0x00a7bf, WB_ALetter },
+ {0x00a7c2, 0x00a7c6, WB_ALetter },
+ {0x00a7f7, 0x00a801, WB_ALetter },
+ {0x00a802, 0x00a802, WB_Extend },
+ {0x00a803, 0x00a805, WB_ALetter },
+ {0x00a806, 0x00a806, WB_Extend },
+ {0x00a807, 0x00a80a, WB_ALetter },
+ {0x00a80b, 0x00a80b, WB_Extend },
+ {0x00a80c, 0x00a822, WB_ALetter },
+ {0x00a823, 0x00a827, WB_Extend },
+ {0x00a840, 0x00a873, WB_ALetter },
+ {0x00a880, 0x00a881, WB_Extend },
+ {0x00a882, 0x00a8b3, WB_ALetter },
+ {0x00a8b4, 0x00a8c5, WB_Extend },
+ {0x00a8d0, 0x00a8d9, WB_Numeric },
+ {0x00a8e0, 0x00a8f1, WB_Extend },
+ {0x00a8f2, 0x00a8f7, WB_ALetter },
+ {0x00a8fb, 0x00a8fb, WB_ALetter },
+ {0x00a8fd, 0x00a8fe, WB_ALetter },
+ {0x00a8ff, 0x00a8ff, WB_Extend },
+ {0x00a900, 0x00a909, WB_Numeric },
+ {0x00a90a, 0x00a925, WB_ALetter },
+ {0x00a926, 0x00a92d, WB_Extend },
+ {0x00a930, 0x00a946, WB_ALetter },
+ {0x00a947, 0x00a953, WB_Extend },
+ {0x00a960, 0x00a97c, WB_ALetter },
+ {0x00a980, 0x00a983, WB_Extend },
+ {0x00a984, 0x00a9b2, WB_ALetter },
+ {0x00a9b3, 0x00a9c0, WB_Extend },
+ {0x00a9cf, 0x00a9cf, WB_ALetter },
+ {0x00a9d0, 0x00a9d9, WB_Numeric },
+ {0x00a9e5, 0x00a9e5, WB_Extend },
+ {0x00a9f0, 0x00a9f9, WB_Numeric },
+ {0x00aa00, 0x00aa28, WB_ALetter },
+ {0x00aa29, 0x00aa36, WB_Extend },
+ {0x00aa40, 0x00aa42, WB_ALetter },
+ {0x00aa43, 0x00aa43, WB_Extend },
+ {0x00aa44, 0x00aa4b, WB_ALetter },
+ {0x00aa4c, 0x00aa4d, WB_Extend },
+ {0x00aa50, 0x00aa59, WB_Numeric },
+ {0x00aa7b, 0x00aa7d, WB_Extend },
+ {0x00aab0, 0x00aab0, WB_Extend },
+ {0x00aab2, 0x00aab4, WB_Extend },
+ {0x00aab7, 0x00aab8, WB_Extend },
+ {0x00aabe, 0x00aabf, WB_Extend },
+ {0x00aac1, 0x00aac1, WB_Extend },
+ {0x00aae0, 0x00aaea, WB_ALetter },
+ {0x00aaeb, 0x00aaef, WB_Extend },
+ {0x00aaf2, 0x00aaf4, WB_ALetter },
+ {0x00aaf5, 0x00aaf6, WB_Extend },
+ {0x00ab01, 0x00ab06, WB_ALetter },
+ {0x00ab09, 0x00ab0e, WB_ALetter },
+ {0x00ab11, 0x00ab16, WB_ALetter },
+ {0x00ab20, 0x00ab26, WB_ALetter },
+ {0x00ab28, 0x00ab2e, WB_ALetter },
+ {0x00ab30, 0x00ab67, WB_ALetter },
+ {0x00ab70, 0x00abe2, WB_ALetter },
+ {0x00abe3, 0x00abea, WB_Extend },
+ {0x00abec, 0x00abed, WB_Extend },
+ {0x00abf0, 0x00abf9, WB_Numeric },
+ {0x00ac00, 0x00d7a3, WB_ALetter },
+ {0x00d7b0, 0x00d7c6, WB_ALetter },
+ {0x00d7cb, 0x00d7fb, WB_ALetter },
+ {0x00fb00, 0x00fb06, WB_ALetter },
+ {0x00fb13, 0x00fb17, WB_ALetter },
+ {0x00fb1d, 0x00fb1d, WB_Hebrew_Letter },
+ {0x00fb1e, 0x00fb1e, WB_Extend },
+ {0x00fb1f, 0x00fb28, WB_Hebrew_Letter },
+ {0x00fb2a, 0x00fb36, WB_Hebrew_Letter },
+ {0x00fb38, 0x00fb3c, WB_Hebrew_Letter },
+ {0x00fb3e, 0x00fb3e, WB_Hebrew_Letter },
+ {0x00fb40, 0x00fb41, WB_Hebrew_Letter },
+ {0x00fb43, 0x00fb44, WB_Hebrew_Letter },
+ {0x00fb46, 0x00fb4f, WB_Hebrew_Letter },
+ {0x00fb50, 0x00fbb1, WB_ALetter },
+ {0x00fbd3, 0x00fd3d, WB_ALetter },
+ {0x00fd50, 0x00fd8f, WB_ALetter },
+ {0x00fd92, 0x00fdc7, WB_ALetter },
+ {0x00fdf0, 0x00fdfb, WB_ALetter },
+ {0x00fe00, 0x00fe0f, WB_Extend },
+ {0x00fe10, 0x00fe10, WB_MidNum },
+ {0x00fe13, 0x00fe13, WB_MidLetter },
+ {0x00fe14, 0x00fe14, WB_MidNum },
+ {0x00fe20, 0x00fe2f, WB_Extend },
+ {0x00fe33, 0x00fe34, WB_ExtendNumLet },
+ {0x00fe4d, 0x00fe4f, WB_ExtendNumLet },
+ {0x00fe50, 0x00fe50, WB_MidNum },
+ {0x00fe52, 0x00fe52, WB_MidNumLet },
+ {0x00fe54, 0x00fe54, WB_MidNum },
+ {0x00fe55, 0x00fe55, WB_MidLetter },
+ {0x00fe70, 0x00fe74, WB_ALetter },
+ {0x00fe76, 0x00fefc, WB_ALetter },
+ {0x00feff, 0x00feff, WB_Format },
+ {0x00ff07, 0x00ff07, WB_MidNumLet },
+ {0x00ff0c, 0x00ff0c, WB_MidNum },
+ {0x00ff0e, 0x00ff0e, WB_MidNumLet },
+ {0x00ff10, 0x00ff19, WB_Numeric },
+ {0x00ff1a, 0x00ff1a, WB_MidLetter },
+ {0x00ff1b, 0x00ff1b, WB_MidNum },
+ {0x00ff21, 0x00ff3a, WB_ALetter },
+ {0x00ff3f, 0x00ff3f, WB_ExtendNumLet },
+ {0x00ff41, 0x00ff5a, WB_ALetter },
+ {0x00ff66, 0x00ff9d, WB_Katakana },
+ {0x00ff9e, 0x00ff9f, WB_Extend },
+ {0x00ffa0, 0x00ffbe, WB_ALetter },
+ {0x00ffc2, 0x00ffc7, WB_ALetter },
+ {0x00ffca, 0x00ffcf, WB_ALetter },
+ {0x00ffd2, 0x00ffd7, WB_ALetter },
+ {0x00ffda, 0x00ffdc, WB_ALetter },
+ {0x00fff9, 0x00fffb, WB_Format },
+ {0x010000, 0x01000b, WB_ALetter },
+ {0x01000d, 0x010026, WB_ALetter },
+ {0x010028, 0x01003a, WB_ALetter },
+ {0x01003c, 0x01003d, WB_ALetter },
+ {0x01003f, 0x01004d, WB_ALetter },
+ {0x010050, 0x01005d, WB_ALetter },
+ {0x010080, 0x0100fa, WB_ALetter },
+ {0x010140, 0x010174, WB_ALetter },
+ {0x0101fd, 0x0101fd, WB_Extend },
+ {0x010280, 0x01029c, WB_ALetter },
+ {0x0102a0, 0x0102d0, WB_ALetter },
+ {0x0102e0, 0x0102e0, WB_Extend },
+ {0x010300, 0x01031f, WB_ALetter },
+ {0x01032d, 0x01034a, WB_ALetter },
+ {0x010350, 0x010375, WB_ALetter },
+ {0x010376, 0x01037a, WB_Extend },
+ {0x010380, 0x01039d, WB_ALetter },
+ {0x0103a0, 0x0103c3, WB_ALetter },
+ {0x0103c8, 0x0103cf, WB_ALetter },
+ {0x0103d1, 0x0103d5, WB_ALetter },
+ {0x010400, 0x01049d, WB_ALetter },
+ {0x0104a0, 0x0104a9, WB_Numeric },
+ {0x0104b0, 0x0104d3, WB_ALetter },
+ {0x0104d8, 0x0104fb, WB_ALetter },
+ {0x010500, 0x010527, WB_ALetter },
+ {0x010530, 0x010563, WB_ALetter },
+ {0x010600, 0x010736, WB_ALetter },
+ {0x010740, 0x010755, WB_ALetter },
+ {0x010760, 0x010767, WB_ALetter },
+ {0x010800, 0x010805, WB_ALetter },
+ {0x010808, 0x010808, WB_ALetter },
+ {0x01080a, 0x010835, WB_ALetter },
+ {0x010837, 0x010838, WB_ALetter },
+ {0x01083c, 0x01083c, WB_ALetter },
+ {0x01083f, 0x010855, WB_ALetter },
+ {0x010860, 0x010876, WB_ALetter },
+ {0x010880, 0x01089e, WB_ALetter },
+ {0x0108e0, 0x0108f2, WB_ALetter },
+ {0x0108f4, 0x0108f5, WB_ALetter },
+ {0x010900, 0x010915, WB_ALetter },
+ {0x010920, 0x010939, WB_ALetter },
+ {0x010980, 0x0109b7, WB_ALetter },
+ {0x0109be, 0x0109bf, WB_ALetter },
+ {0x010a00, 0x010a00, WB_ALetter },
+ {0x010a01, 0x010a03, WB_Extend },
+ {0x010a05, 0x010a06, WB_Extend },
+ {0x010a0c, 0x010a0f, WB_Extend },
+ {0x010a10, 0x010a13, WB_ALetter },
+ {0x010a15, 0x010a17, WB_ALetter },
+ {0x010a19, 0x010a35, WB_ALetter },
+ {0x010a38, 0x010a3a, WB_Extend },
+ {0x010a3f, 0x010a3f, WB_Extend },
+ {0x010a60, 0x010a7c, WB_ALetter },
+ {0x010a80, 0x010a9c, WB_ALetter },
+ {0x010ac0, 0x010ac7, WB_ALetter },
+ {0x010ac9, 0x010ae4, WB_ALetter },
+ {0x010ae5, 0x010ae6, WB_Extend },
+ {0x010b00, 0x010b35, WB_ALetter },
+ {0x010b40, 0x010b55, WB_ALetter },
+ {0x010b60, 0x010b72, WB_ALetter },
+ {0x010b80, 0x010b91, WB_ALetter },
+ {0x010c00, 0x010c48, WB_ALetter },
+ {0x010c80, 0x010cb2, WB_ALetter },
+ {0x010cc0, 0x010cf2, WB_ALetter },
+ {0x010d00, 0x010d23, WB_ALetter },
+ {0x010d24, 0x010d27, WB_Extend },
+ {0x010d30, 0x010d39, WB_Numeric },
+ {0x010f00, 0x010f1c, WB_ALetter },
+ {0x010f27, 0x010f27, WB_ALetter },
+ {0x010f30, 0x010f45, WB_ALetter },
+ {0x010f46, 0x010f50, WB_Extend },
+ {0x010fe0, 0x010ff6, WB_ALetter },
+ {0x011000, 0x011002, WB_Extend },
+ {0x011003, 0x011037, WB_ALetter },
+ {0x011038, 0x011046, WB_Extend },
+ {0x011066, 0x01106f, WB_Numeric },
+ {0x01107f, 0x011082, WB_Extend },
+ {0x011083, 0x0110af, WB_ALetter },
+ {0x0110b0, 0x0110ba, WB_Extend },
+ {0x0110bd, 0x0110bd, WB_Format },
+ {0x0110cd, 0x0110cd, WB_Format },
+ {0x0110d0, 0x0110e8, WB_ALetter },
+ {0x0110f0, 0x0110f9, WB_Numeric },
+ {0x011100, 0x011102, WB_Extend },
+ {0x011103, 0x011126, WB_ALetter },
+ {0x011127, 0x011134, WB_Extend },
+ {0x011136, 0x01113f, WB_Numeric },
+ {0x011144, 0x011144, WB_ALetter },
+ {0x011145, 0x011146, WB_Extend },
+ {0x011150, 0x011172, WB_ALetter },
+ {0x011173, 0x011173, WB_Extend },
+ {0x011176, 0x011176, WB_ALetter },
+ {0x011180, 0x011182, WB_Extend },
+ {0x011183, 0x0111b2, WB_ALetter },
+ {0x0111b3, 0x0111c0, WB_Extend },
+ {0x0111c1, 0x0111c4, WB_ALetter },
+ {0x0111c9, 0x0111cc, WB_Extend },
+ {0x0111d0, 0x0111d9, WB_Numeric },
+ {0x0111da, 0x0111da, WB_ALetter },
+ {0x0111dc, 0x0111dc, WB_ALetter },
+ {0x011200, 0x011211, WB_ALetter },
+ {0x011213, 0x01122b, WB_ALetter },
+ {0x01122c, 0x011237, WB_Extend },
+ {0x01123e, 0x01123e, WB_Extend },
+ {0x011280, 0x011286, WB_ALetter },
+ {0x011288, 0x011288, WB_ALetter },
+ {0x01128a, 0x01128d, WB_ALetter },
+ {0x01128f, 0x01129d, WB_ALetter },
+ {0x01129f, 0x0112a8, WB_ALetter },
+ {0x0112b0, 0x0112de, WB_ALetter },
+ {0x0112df, 0x0112ea, WB_Extend },
+ {0x0112f0, 0x0112f9, WB_Numeric },
+ {0x011300, 0x011303, WB_Extend },
+ {0x011305, 0x01130c, WB_ALetter },
+ {0x01130f, 0x011310, WB_ALetter },
+ {0x011313, 0x011328, WB_ALetter },
+ {0x01132a, 0x011330, WB_ALetter },
+ {0x011332, 0x011333, WB_ALetter },
+ {0x011335, 0x011339, WB_ALetter },
+ {0x01133b, 0x01133c, WB_Extend },
+ {0x01133d, 0x01133d, WB_ALetter },
+ {0x01133e, 0x011344, WB_Extend },
+ {0x011347, 0x011348, WB_Extend },
+ {0x01134b, 0x01134d, WB_Extend },
+ {0x011350, 0x011350, WB_ALetter },
+ {0x011357, 0x011357, WB_Extend },
+ {0x01135d, 0x011361, WB_ALetter },
+ {0x011362, 0x011363, WB_Extend },
+ {0x011366, 0x01136c, WB_Extend },
+ {0x011370, 0x011374, WB_Extend },
+ {0x011400, 0x011434, WB_ALetter },
+ {0x011435, 0x011446, WB_Extend },
+ {0x011447, 0x01144a, WB_ALetter },
+ {0x011450, 0x011459, WB_Numeric },
+ {0x01145e, 0x01145e, WB_Extend },
+ {0x01145f, 0x01145f, WB_ALetter },
+ {0x011480, 0x0114af, WB_ALetter },
+ {0x0114b0, 0x0114c3, WB_Extend },
+ {0x0114c4, 0x0114c5, WB_ALetter },
+ {0x0114c7, 0x0114c7, WB_ALetter },
+ {0x0114d0, 0x0114d9, WB_Numeric },
+ {0x011580, 0x0115ae, WB_ALetter },
+ {0x0115af, 0x0115b5, WB_Extend },
+ {0x0115b8, 0x0115c0, WB_Extend },
+ {0x0115d8, 0x0115db, WB_ALetter },
+ {0x0115dc, 0x0115dd, WB_Extend },
+ {0x011600, 0x01162f, WB_ALetter },
+ {0x011630, 0x011640, WB_Extend },
+ {0x011644, 0x011644, WB_ALetter },
+ {0x011650, 0x011659, WB_Numeric },
+ {0x011680, 0x0116aa, WB_ALetter },
+ {0x0116ab, 0x0116b7, WB_Extend },
+ {0x0116b8, 0x0116b8, WB_ALetter },
+ {0x0116c0, 0x0116c9, WB_Numeric },
+ {0x01171d, 0x01172b, WB_Extend },
+ {0x011730, 0x011739, WB_Numeric },
+ {0x011800, 0x01182b, WB_ALetter },
+ {0x01182c, 0x01183a, WB_Extend },
+ {0x0118a0, 0x0118df, WB_ALetter },
+ {0x0118e0, 0x0118e9, WB_Numeric },
+ {0x0118ff, 0x0118ff, WB_ALetter },
+ {0x0119a0, 0x0119a7, WB_ALetter },
+ {0x0119aa, 0x0119d0, WB_ALetter },
+ {0x0119d1, 0x0119d7, WB_Extend },
+ {0x0119da, 0x0119e0, WB_Extend },
+ {0x0119e1, 0x0119e1, WB_ALetter },
+ {0x0119e3, 0x0119e3, WB_ALetter },
+ {0x0119e4, 0x0119e4, WB_Extend },
+ {0x011a00, 0x011a00, WB_ALetter },
+ {0x011a01, 0x011a0a, WB_Extend },
+ {0x011a0b, 0x011a32, WB_ALetter },
+ {0x011a33, 0x011a39, WB_Extend },
+ {0x011a3a, 0x011a3a, WB_ALetter },
+ {0x011a3b, 0x011a3e, WB_Extend },
+ {0x011a47, 0x011a47, WB_Extend },
+ {0x011a50, 0x011a50, WB_ALetter },
+ {0x011a51, 0x011a5b, WB_Extend },
+ {0x011a5c, 0x011a89, WB_ALetter },
+ {0x011a8a, 0x011a99, WB_Extend },
+ {0x011a9d, 0x011a9d, WB_ALetter },
+ {0x011ac0, 0x011af8, WB_ALetter },
+ {0x011c00, 0x011c08, WB_ALetter },
+ {0x011c0a, 0x011c2e, WB_ALetter },
+ {0x011c2f, 0x011c36, WB_Extend },
+ {0x011c38, 0x011c3f, WB_Extend },
+ {0x011c40, 0x011c40, WB_ALetter },
+ {0x011c50, 0x011c59, WB_Numeric },
+ {0x011c72, 0x011c8f, WB_ALetter },
+ {0x011c92, 0x011ca7, WB_Extend },
+ {0x011ca9, 0x011cb6, WB_Extend },
+ {0x011d00, 0x011d06, WB_ALetter },
+ {0x011d08, 0x011d09, WB_ALetter },
+ {0x011d0b, 0x011d30, WB_ALetter },
+ {0x011d31, 0x011d36, WB_Extend },
+ {0x011d3a, 0x011d3a, WB_Extend },
+ {0x011d3c, 0x011d3d, WB_Extend },
+ {0x011d3f, 0x011d45, WB_Extend },
+ {0x011d46, 0x011d46, WB_ALetter },
+ {0x011d47, 0x011d47, WB_Extend },
+ {0x011d50, 0x011d59, WB_Numeric },
+ {0x011d60, 0x011d65, WB_ALetter },
+ {0x011d67, 0x011d68, WB_ALetter },
+ {0x011d6a, 0x011d89, WB_ALetter },
+ {0x011d8a, 0x011d8e, WB_Extend },
+ {0x011d90, 0x011d91, WB_Extend },
+ {0x011d93, 0x011d97, WB_Extend },
+ {0x011d98, 0x011d98, WB_ALetter },
+ {0x011da0, 0x011da9, WB_Numeric },
+ {0x011ee0, 0x011ef2, WB_ALetter },
+ {0x011ef3, 0x011ef6, WB_Extend },
+ {0x012000, 0x012399, WB_ALetter },
+ {0x012400, 0x01246e, WB_ALetter },
+ {0x012480, 0x012543, WB_ALetter },
+ {0x013000, 0x01342e, WB_ALetter },
+ {0x013430, 0x013438, WB_Format },
+ {0x014400, 0x014646, WB_ALetter },
+ {0x016800, 0x016a38, WB_ALetter },
+ {0x016a40, 0x016a5e, WB_ALetter },
+ {0x016a60, 0x016a69, WB_Numeric },
+ {0x016ad0, 0x016aed, WB_ALetter },
+ {0x016af0, 0x016af4, WB_Extend },
+ {0x016b00, 0x016b2f, WB_ALetter },
+ {0x016b30, 0x016b36, WB_Extend },
+ {0x016b40, 0x016b43, WB_ALetter },
+ {0x016b50, 0x016b59, WB_Numeric },
+ {0x016b63, 0x016b77, WB_ALetter },
+ {0x016b7d, 0x016b8f, WB_ALetter },
+ {0x016e40, 0x016e7f, WB_ALetter },
+ {0x016f00, 0x016f4a, WB_ALetter },
+ {0x016f4f, 0x016f4f, WB_Extend },
+ {0x016f50, 0x016f50, WB_ALetter },
+ {0x016f51, 0x016f87, WB_Extend },
+ {0x016f8f, 0x016f92, WB_Extend },
+ {0x016f93, 0x016f9f, WB_ALetter },
+ {0x016fe0, 0x016fe1, WB_ALetter },
+ {0x016fe3, 0x016fe3, WB_ALetter },
+ {0x01b000, 0x01b000, WB_Katakana },
+ {0x01b164, 0x01b167, WB_Katakana },
+ {0x01bc00, 0x01bc6a, WB_ALetter },
+ {0x01bc70, 0x01bc7c, WB_ALetter },
+ {0x01bc80, 0x01bc88, WB_ALetter },
+ {0x01bc90, 0x01bc99, WB_ALetter },
+ {0x01bc9d, 0x01bc9e, WB_Extend },
+ {0x01bca0, 0x01bca3, WB_Format },
+ {0x01d165, 0x01d169, WB_Extend },
+ {0x01d16d, 0x01d172, WB_Extend },
+ {0x01d173, 0x01d17a, WB_Format },
+ {0x01d17b, 0x01d182, WB_Extend },
+ {0x01d185, 0x01d18b, WB_Extend },
+ {0x01d1aa, 0x01d1ad, WB_Extend },
+ {0x01d242, 0x01d244, WB_Extend },
+ {0x01d400, 0x01d454, WB_ALetter },
+ {0x01d456, 0x01d49c, WB_ALetter },
+ {0x01d49e, 0x01d49f, WB_ALetter },
+ {0x01d4a2, 0x01d4a2, WB_ALetter },
+ {0x01d4a5, 0x01d4a6, WB_ALetter },
+ {0x01d4a9, 0x01d4ac, WB_ALetter },
+ {0x01d4ae, 0x01d4b9, WB_ALetter },
+ {0x01d4bb, 0x01d4bb, WB_ALetter },
+ {0x01d4bd, 0x01d4c3, WB_ALetter },
+ {0x01d4c5, 0x01d505, WB_ALetter },
+ {0x01d507, 0x01d50a, WB_ALetter },
+ {0x01d50d, 0x01d514, WB_ALetter },
+ {0x01d516, 0x01d51c, WB_ALetter },
+ {0x01d51e, 0x01d539, WB_ALetter },
+ {0x01d53b, 0x01d53e, WB_ALetter },
+ {0x01d540, 0x01d544, WB_ALetter },
+ {0x01d546, 0x01d546, WB_ALetter },
+ {0x01d54a, 0x01d550, WB_ALetter },
+ {0x01d552, 0x01d6a5, WB_ALetter },
+ {0x01d6a8, 0x01d6c0, WB_ALetter },
+ {0x01d6c2, 0x01d6da, WB_ALetter },
+ {0x01d6dc, 0x01d6fa, WB_ALetter },
+ {0x01d6fc, 0x01d714, WB_ALetter },
+ {0x01d716, 0x01d734, WB_ALetter },
+ {0x01d736, 0x01d74e, WB_ALetter },
+ {0x01d750, 0x01d76e, WB_ALetter },
+ {0x01d770, 0x01d788, WB_ALetter },
+ {0x01d78a, 0x01d7a8, WB_ALetter },
+ {0x01d7aa, 0x01d7c2, WB_ALetter },
+ {0x01d7c4, 0x01d7cb, WB_ALetter },
+ {0x01d7ce, 0x01d7ff, WB_Numeric },
+ {0x01da00, 0x01da36, WB_Extend },
+ {0x01da3b, 0x01da6c, WB_Extend },
+ {0x01da75, 0x01da75, WB_Extend },
+ {0x01da84, 0x01da84, WB_Extend },
+ {0x01da9b, 0x01da9f, WB_Extend },
+ {0x01daa1, 0x01daaf, WB_Extend },
+ {0x01e000, 0x01e006, WB_Extend },
+ {0x01e008, 0x01e018, WB_Extend },
+ {0x01e01b, 0x01e021, WB_Extend },
+ {0x01e023, 0x01e024, WB_Extend },
+ {0x01e026, 0x01e02a, WB_Extend },
+ {0x01e100, 0x01e12c, WB_ALetter },
+ {0x01e130, 0x01e136, WB_Extend },
+ {0x01e137, 0x01e13d, WB_ALetter },
+ {0x01e140, 0x01e149, WB_Numeric },
+ {0x01e14e, 0x01e14e, WB_ALetter },
+ {0x01e2c0, 0x01e2eb, WB_ALetter },
+ {0x01e2ec, 0x01e2ef, WB_Extend },
+ {0x01e2f0, 0x01e2f9, WB_Numeric },
+ {0x01e800, 0x01e8c4, WB_ALetter },
+ {0x01e8d0, 0x01e8d6, WB_Extend },
+ {0x01e900, 0x01e943, WB_ALetter },
+ {0x01e944, 0x01e94a, WB_Extend },
+ {0x01e94b, 0x01e94b, WB_ALetter },
+ {0x01e950, 0x01e959, WB_Numeric },
+ {0x01ee00, 0x01ee03, WB_ALetter },
+ {0x01ee05, 0x01ee1f, WB_ALetter },
+ {0x01ee21, 0x01ee22, WB_ALetter },
+ {0x01ee24, 0x01ee24, WB_ALetter },
+ {0x01ee27, 0x01ee27, WB_ALetter },
+ {0x01ee29, 0x01ee32, WB_ALetter },
+ {0x01ee34, 0x01ee37, WB_ALetter },
+ {0x01ee39, 0x01ee39, WB_ALetter },
+ {0x01ee3b, 0x01ee3b, WB_ALetter },
+ {0x01ee42, 0x01ee42, WB_ALetter },
+ {0x01ee47, 0x01ee47, WB_ALetter },
+ {0x01ee49, 0x01ee49, WB_ALetter },
+ {0x01ee4b, 0x01ee4b, WB_ALetter },
+ {0x01ee4d, 0x01ee4f, WB_ALetter },
+ {0x01ee51, 0x01ee52, WB_ALetter },
+ {0x01ee54, 0x01ee54, WB_ALetter },
+ {0x01ee57, 0x01ee57, WB_ALetter },
+ {0x01ee59, 0x01ee59, WB_ALetter },
+ {0x01ee5b, 0x01ee5b, WB_ALetter },
+ {0x01ee5d, 0x01ee5d, WB_ALetter },
+ {0x01ee5f, 0x01ee5f, WB_ALetter },
+ {0x01ee61, 0x01ee62, WB_ALetter },
+ {0x01ee64, 0x01ee64, WB_ALetter },
+ {0x01ee67, 0x01ee6a, WB_ALetter },
+ {0x01ee6c, 0x01ee72, WB_ALetter },
+ {0x01ee74, 0x01ee77, WB_ALetter },
+ {0x01ee79, 0x01ee7c, WB_ALetter },
+ {0x01ee7e, 0x01ee7e, WB_ALetter },
+ {0x01ee80, 0x01ee89, WB_ALetter },
+ {0x01ee8b, 0x01ee9b, WB_ALetter },
+ {0x01eea1, 0x01eea3, WB_ALetter },
+ {0x01eea5, 0x01eea9, WB_ALetter },
+ {0x01eeab, 0x01eebb, WB_ALetter },
+ {0x01f130, 0x01f149, WB_ALetter },
+ {0x01f150, 0x01f169, WB_ALetter },
+ {0x01f170, 0x01f189, WB_ALetter },
+ {0x01f1e6, 0x01f1ff, WB_Regional_Indicator },
+ {0x01f3fb, 0x01f3ff, WB_Extend },
+ {0x0e0001, 0x0e0001, WB_Format },
+ {0x0e0020, 0x0e007f, WB_Extend },
+ {0x0e0100, 0x0e01ef, WB_Extend }
+};
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c
index b139f83ff0..535713852f 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c
@@ -2,7 +2,7 @@
   utf16_le.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -95,7 +95,15 @@ static const int EncLen_UTF16[] = {
 static int
 utf16le_code_to_mbclen(OnigCodePoint code)
 {
-  return (code > 0xffff ? 4 : 2);
+  if (code > 0xffff) {
+    if (code > 0x10ffff)
+      return ONIGERR_INVALID_CODE_POINT_VALUE;
+    else
+      return 4;
+  }
+  else {
+    return 2;
+  }
 }
 
 static int
@@ -110,7 +118,16 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
   const UChar* end1 = end - 1;
 
   while (p < end1) {
-    p += utf16le_mbc_enc_len(p);
+    int len = utf16le_mbc_enc_len(p);
+    if (len == 4) {
+      if (p + 3 < end && ! UTF16_IS_SURROGATE_SECOND(*(p + 3)))
+        return FALSE;
+    }
+    else
+      if (UTF16_IS_SURROGATE_SECOND(*(p + 1)))
+        return FALSE;
+
+    p += len;
   }
 
   if (p != end)
@@ -184,7 +201,7 @@ utf16le_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 utf16le_mbc_case_fold(OnigCaseFoldType flag,
-		      const UChar** pp, const UChar* end, UChar* fold)
+                      const UChar** pp, const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -207,13 +224,13 @@ utf16le_mbc_case_fold(OnigCaseFoldType flag,
   }
   else
     return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_LE, flag, pp, end,
-					 fold);
+                                         fold);
 }
 
 #if 0
 static int
 utf16le_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp,
-			 const UChar* end)
+                         const UChar* end)
 {
   const UChar* p = *pp;
 
@@ -252,7 +269,8 @@ utf16le_left_adjust_char_head(const UChar* start, const UChar* s)
     s--;
   }
 
-  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1)
+  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1 &&
+      UTF16_IS_SURROGATE_FIRST(*(s-1)))
     s -= 2;
 
   return (UChar* )s;
@@ -263,7 +281,7 @@ utf16le_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_LE,
-						    flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF16_LE = {
@@ -286,6 +304,6 @@ OnigEncodingType OnigEncodingUTF16_LE = {
   init,
   0, /* is_initialized */
   is_valid_mbc_string,
-  ENC_FLAG_UNICODE,
+  ENC_FLAG_UNICODE|ENC_FLAG_SKIP_OFFSET_1,
   0, 0
 };
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h
index 5f31a91c67..a2158e5cf9 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h
@@ -4,7 +4,7 @@
   oniguruma.h - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,9 +38,9 @@ extern "C" {
 #define ONIGURUMA
 #define ONIGURUMA_VERSION_MAJOR   6
 #define ONIGURUMA_VERSION_MINOR   9
-#define ONIGURUMA_VERSION_TEENY   0
+#define ONIGURUMA_VERSION_TEENY   3
 
-#define ONIGURUMA_VERSION_INT     60900
+#define ONIGURUMA_VERSION_INT     60903
 
 #ifndef P_
 #if defined(__STDC__) || defined(_WIN32)
@@ -54,6 +54,7 @@ extern "C" {
 # define PV_(args) args
 #endif
 
+#ifndef ONIG_STATIC
 #ifndef ONIG_EXTERN
 #if defined(_WIN32) && !defined(__GNUC__)
 #if defined(ONIGURUMA_EXPORT)
@@ -67,6 +68,9 @@ extern "C" {
 #ifndef ONIG_EXTERN
 #define ONIG_EXTERN   extern
 #endif
+#else
+#define ONIG_EXTERN   extern
+#endif
 
 /* PART: character encoding */
 
@@ -387,8 +391,10 @@ typedef unsigned int        OnigOptionType;
 #define ONIG_OPTION_DIGIT_IS_ASCII       (ONIG_OPTION_WORD_IS_ASCII << 1)
 #define ONIG_OPTION_SPACE_IS_ASCII       (ONIG_OPTION_DIGIT_IS_ASCII << 1)
 #define ONIG_OPTION_POSIX_IS_ASCII       (ONIG_OPTION_SPACE_IS_ASCII << 1)
+#define ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER  (ONIG_OPTION_POSIX_IS_ASCII << 1)
+#define ONIG_OPTION_TEXT_SEGMENT_WORD    (ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER << 1)
 
-#define ONIG_OPTION_MAXBIT               ONIG_OPTION_POSIX_IS_ASCII  /* limit */
+#define ONIG_OPTION_MAXBIT               ONIG_OPTION_TEXT_SEGMENT_WORD  /* limit */
 
 #define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))
 #define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))
@@ -492,10 +498,12 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (1U<<23) /* \R \r\n else [\x0a-\x0d] */
 #define ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT  (1U<<24) /* \N (?-m:.), \O (?m:.) */
 #define ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP   (1U<<25) /* (?~...) */
-#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER   (1U<<26) /* \X \y \Y */
+#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER   (1U<<26) /* obsoleted: use next */
+#define ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT       (1U<<26) /* \X \y \Y */
 #define ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL     (1U<<27) /* (?R), (?&name)... */
 #define ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (1U<<28) /* (?{...}) (?{{...}}) */
 #define ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME      (1U<<29) /* (*name) (*name{a,..}) */
+#define ONIG_SYN_OP2_OPTION_ONIGURUMA           (1U<<30) /* (?imxWDSPy) */
 
 /* syntax (behavior) */
 #define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */
@@ -515,6 +523,7 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1U<<21) /* [..\w..] etc.. */
 #define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1U<<22)
 #define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1U<<23) /* [0-9-a]=[0-9\-a] */
+#define ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC (1U<<26)
 /* syntax (behavior) warning */
 #define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
 #define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
@@ -764,6 +773,8 @@ int onig_init P_((void));
 ONIG_EXTERN
 int EFIAPI onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));
 ONIG_EXTERN
+int onig_is_error_code_needs_param PV_((int code));
+ONIG_EXTERN
 void onig_set_warn_func P_((OnigWarnFunc f));
 ONIG_EXTERN
 void onig_set_verb_warn_func P_((OnigWarnFunc f));
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h
index 46a51421e9..fc0e96bc61 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h
@@ -4,7 +4,7 @@
   regenc.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -114,6 +114,7 @@ struct PropertyNameCtype {
 /* #define USE_CRNL_AS_LINE_TERMINATOR */
 #define USE_UNICODE_PROPERTIES
 #define USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
+#define USE_UNICODE_WORD_BREAK
 /* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
 /* #define USE_UNICODE_ALL_LINE_TERMINATORS */  /* see Unicode.org UTS #18 */
 
@@ -121,8 +122,20 @@ struct PropertyNameCtype {
 #define ONIG_ENCODING_INIT_DEFAULT           ONIG_ENCODING_ASCII
 
 
+#define ENC_SKIP_OFFSET_1_OR_0             7
+
 #define ENC_FLAG_ASCII_COMPATIBLE      (1<<0)
 #define ENC_FLAG_UNICODE               (1<<1)
+#define ENC_FLAG_SKIP_OFFSET_MASK      (7<<2)
+#define ENC_FLAG_SKIP_OFFSET_0             0
+#define ENC_FLAG_SKIP_OFFSET_1         (1<<2)
+#define ENC_FLAG_SKIP_OFFSET_2         (2<<2)
+#define ENC_FLAG_SKIP_OFFSET_3         (3<<2)
+#define ENC_FLAG_SKIP_OFFSET_4         (4<<2)
+#define ENC_FLAG_SKIP_OFFSET_1_OR_0    (ENC_SKIP_OFFSET_1_OR_0<<2)
+
+#define ENC_GET_SKIP_OFFSET(enc) \
+  (((enc)->flag & ENC_FLAG_SKIP_OFFSET_MASK)>>2)
 
 
 /* for encoding system implementation (internal) */
@@ -162,15 +175,19 @@ extern int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, u
 extern struct PropertyNameCtype* onigenc_euc_jp_lookup_property_name P_((register const char *str, register size_t len));
 extern struct PropertyNameCtype* onigenc_sjis_lookup_property_name P_((register const char *str, register size_t len));
 
-/* in enc/unicode.c */
+/* in unicode.c */
 extern int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
 extern int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));
 extern int onigenc_unicode_ctype_code_range P_((OnigCtype ctype, const OnigCodePoint* ranges[]));
 extern int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
 extern int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
 extern int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
+
 extern int onigenc_egcb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));
 
+#ifdef USE_UNICODE_WORD_BREAK
+extern int onigenc_wb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));
+#endif
 
 #define UTF16_IS_SURROGATE_FIRST(c)    (((c) & 0xfc) == 0xd8)
 #define UTF16_IS_SURROGATE_SECOND(c)   (((c) & 0xfc) == 0xdc)
@@ -252,7 +269,7 @@ extern const unsigned short OnigEncAsciiCtypeTable[];
 #define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \
  (ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\
   ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))
-   
+
 #define ONIGENC_IS_UNICODE_ENCODING(enc) \
   (((enc)->flag & ENC_FLAG_UNICODE) != 0)
 
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h
index acfd1792ef..87704f2be8 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h
@@ -4,7 +4,7 @@
   regint.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -54,43 +54,36 @@
 #define PLATFORM_UNALIGNED_WORD_ACCESS
 #endif
 
+#ifdef __GNUC__
+#define USE_GOTO_LABELS_AS_VALUES
+#endif
+
 /* config */
 /* spec. config */
 #define USE_CALL
 #define USE_CALLOUT
 #define USE_BACKREF_WITH_LEVEL        /* \k<name+n>, \k<name-n> */
-#define USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT    /* /(?:()|())*\2/ */
+#define USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT     /* /(?:()|())*\2/ */
 #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */
 #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
-
 #define USE_RETRY_LIMIT_IN_MATCH
+#ifdef USE_GOTO_LABELS_AS_VALUES
+#define USE_THREADED_CODE
+#define USE_DIRECT_THREADED_CODE
+#endif
 
 /* internal config */
 #define USE_OP_PUSH_OR_JUMP_EXACT
 #define USE_QUANT_PEEK_NEXT
 #define USE_ST_LIBRARY
 
-#include "regenc.h"
-
-#ifdef __cplusplus
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */
-#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-#ifdef HAVE_STDARG_H
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
+#define USE_WORD_BEGIN_END        /* "\<", "\>" */
+#define USE_CAPTURE_HISTORY
+#define USE_VARIABLE_META_CHARS
+#define USE_POSIX_API_REGION_OPTION
+#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
 
+#include "regenc.h"
 
 #define INIT_MATCH_STACK_SIZE                     160
 #define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */
@@ -103,12 +96,6 @@
 #undef ONIG_ESCAPE_UCHAR_COLLISION
 #endif
 
-#define USE_WORD_BEGIN_END        /* "\<", "\>" */
-#define USE_CAPTURE_HISTORY
-#define USE_VARIABLE_META_CHARS
-#define USE_POSIX_API_REGION_OPTION
-#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
-
 #define xmalloc     malloc
 #define xrealloc    realloc
 #define xcalloc     calloc
@@ -150,17 +137,10 @@
 #define xstrcat(dest,src,size)   strcat(dest,src)
 #endif
 
-
-// #include <stddef.h>
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
 #if 0
-#ifdef HAVE_STDLIB_H
+#include <stddef.h>
+#include <limits.h>
 #include <stdlib.h>
-#endif
 
 #ifdef HAVE_STDINT_H
 #include <stdint.h>
@@ -170,11 +150,7 @@
 #include <alloca.h>
 #endif
 
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
+#include <string.h>
 
 #include <ctype.h>
 #ifdef HAVE_SYS_TYPES_H
@@ -226,6 +202,7 @@ typedef UINTN uintptr_t;
 #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
 #define NULL_UCHARP                   ((UChar* )0)
 
+#define CHAR_MAP_SIZE       256
 #define INFINITE_LEN        ONIG_INFINITE_DISTANCE
 
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS
@@ -290,64 +267,6 @@ typedef struct {
 
 #endif
 
-typedef struct {
-  const UChar* pattern;
-  const UChar* pattern_end;
-#ifdef USE_CALLOUT
-  void*  tag_table;
-  int    callout_num;
-  int    callout_list_alloc;
-  CalloutListEntry* callout_list;    /* index: callout num */
-#endif
-} RegexExt;
-
-#define REG_EXTP(reg)      ((RegexExt* )((reg)->chain))
-#define REG_EXTPL(reg)     ((reg)->chain)
-
-struct re_pattern_buffer {
-  /* common members of BBuf(bytes-buffer) */
-  unsigned char* p;         /* compiled pattern */
-  unsigned int used;        /* used space for p */
-  unsigned int alloc;       /* allocated space for p */
-
-  int num_mem;                   /* used memory(...) num counted from 1 */
-  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
-  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */
-  int num_comb_exp_check;        /* no longer used (combination explosion check) */
-  int num_call;                  /* number of subexp call */
-  unsigned int capture_history;  /* (?@...) flag (1-31) */
-  unsigned int bt_mem_start;     /* need backtrack flag */
-  unsigned int bt_mem_end;       /* need backtrack flag */
-  int stack_pop_level;
-  int repeat_range_alloc;
-  OnigRepeatRange* repeat_range;
-
-  OnigEncoding      enc;
-  OnigOptionType    options;
-  OnigSyntaxType*   syntax;
-  OnigCaseFoldType  case_fold_flag;
-  void*             name_table;
-
-  /* optimization info (string search, char-map and anchors) */
-  int            optimize;          /* optimize flag */
-  int            threshold_len;     /* search str-length for apply optimize */
-  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
-  OnigLen   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
-  OnigLen   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
-  int            sub_anchor;        /* start-anchor for exact or map */
-  unsigned char *exact;
-  unsigned char *exact_end;
-  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
-  int           *int_map;                   /* BM skip for exact_len > 255 */
-  int           *int_map_backward;          /* BM skip for backward search */
-  OnigLen   dmin;                      /* min-distance of exact or map */
-  OnigLen   dmax;                      /* max-distance of exact or map */
-
-  /* regex_t link chain */
-  struct re_pattern_buffer* chain;  /* escape compile-conflict */
-};
-
-
 /* stack pop level */
 enum StackPopLevel {
   STACK_POP_LEVEL_FREE      = 0,
@@ -357,12 +276,13 @@ enum StackPopLevel {
 
 /* optimize flags */
 enum OptimizeType {
-  OPTIMIZE_NONE            = 0,
-  OPTIMIZE_EXACT           = 1,  /* Slow Search */
-  OPTIMIZE_EXACT_BM        = 2,  /* Boyer Moore Search */
-  OPTIMIZE_EXACT_BM_NO_REV = 3,  /* BM   (but not simple match) */
-  OPTIMIZE_EXACT_IC        = 4,  /* Slow Search (ignore case) */
-  OPTIMIZE_MAP             = 5   /* char map */
+  OPTIMIZE_NONE = 0,
+  OPTIMIZE_STR,                   /* Slow Search */
+  OPTIMIZE_STR_FAST,              /* Sunday quick search / BMH */
+  OPTIMIZE_STR_FAST_STEP_FORWARD, /* Sunday quick search / BMH */
+  OPTIMIZE_STR_CASE_FOLD_FAST,    /* Sunday quick search / BMH (ignore case) */
+  OPTIMIZE_STR_CASE_FOLD,         /* Slow Search (ignore case) */
+  OPTIMIZE_MAP                    /* char map */
 };
 
 /* bit status */
@@ -436,8 +356,8 @@ typedef unsigned int  MemStatusType;
 #define DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag) \
   ((case_fold_flag) & ~INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR)
 
-#define REPEAT_INFINITE         -1
-#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
+#define INFINITE_REPEAT         -1
+#define IS_INFINITE_REPEAT(n)   ((n) == INFINITE_REPEAT)
 
 /* bitset */
 #define BITS_PER_BYTE      8
@@ -475,7 +395,7 @@ typedef struct _BBuf {
   unsigned int alloc;
 } BBuf;
 
-#define BB_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))
+#define BB_INIT(buf,size)    bbuf_init((BBuf* )(buf), (size))
 
 #define BB_SIZE_INC(buf,inc) do{\
   (buf)->alloc += (inc);\
@@ -551,32 +471,32 @@ typedef struct _BBuf {
 
 
 /* has body */
-#define ANCHOR_PREC_READ        (1<<0)
-#define ANCHOR_PREC_READ_NOT    (1<<1)
-#define ANCHOR_LOOK_BEHIND      (1<<2)
-#define ANCHOR_LOOK_BEHIND_NOT  (1<<3)
+#define ANCR_PREC_READ        (1<<0)
+#define ANCR_PREC_READ_NOT    (1<<1)
+#define ANCR_LOOK_BEHIND      (1<<2)
+#define ANCR_LOOK_BEHIND_NOT  (1<<3)
 /* no body */
-#define ANCHOR_BEGIN_BUF        (1<<4)
-#define ANCHOR_BEGIN_LINE       (1<<5)
-#define ANCHOR_BEGIN_POSITION   (1<<6)
-#define ANCHOR_END_BUF          (1<<7)
-#define ANCHOR_SEMI_END_BUF     (1<<8)
-#define ANCHOR_END_LINE         (1<<9)
-#define ANCHOR_WORD_BOUNDARY    (1<<10)
-#define ANCHOR_NO_WORD_BOUNDARY (1<<11)
-#define ANCHOR_WORD_BEGIN       (1<<12)
-#define ANCHOR_WORD_END         (1<<13)
-#define ANCHOR_ANYCHAR_INF      (1<<14)
-#define ANCHOR_ANYCHAR_INF_ML   (1<<15)
-#define ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY    (1<<16)
-#define ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<17)
-
-
-#define ANCHOR_HAS_BODY(a)      ((a)->type < ANCHOR_BEGIN_BUF)
+#define ANCR_BEGIN_BUF        (1<<4)
+#define ANCR_BEGIN_LINE       (1<<5)
+#define ANCR_BEGIN_POSITION   (1<<6)
+#define ANCR_END_BUF          (1<<7)
+#define ANCR_SEMI_END_BUF     (1<<8)
+#define ANCR_END_LINE         (1<<9)
+#define ANCR_WORD_BOUNDARY    (1<<10)
+#define ANCR_NO_WORD_BOUNDARY (1<<11)
+#define ANCR_WORD_BEGIN       (1<<12)
+#define ANCR_WORD_END         (1<<13)
+#define ANCR_ANYCHAR_INF      (1<<14)
+#define ANCR_ANYCHAR_INF_ML   (1<<15)
+#define ANCR_TEXT_SEGMENT_BOUNDARY    (1<<16)
+#define ANCR_NO_TEXT_SEGMENT_BOUNDARY (1<<17)
+
+
+#define ANCHOR_HAS_BODY(a)      ((a)->type < ANCR_BEGIN_BUF)
 
 #define IS_WORD_ANCHOR_TYPE(type) \
-  ((type) == ANCHOR_WORD_BOUNDARY || (type) == ANCHOR_NO_WORD_BOUNDARY || \
-   (type) == ANCHOR_WORD_BEGIN || (type) == ANCHOR_WORD_END)
+  ((type) == ANCR_WORD_BOUNDARY || (type) == ANCR_NO_WORD_BOUNDARY || \
+   (type) == ANCR_WORD_BEGIN || (type) == ANCR_WORD_END)
 
 /* operation code */
 enum OpCode {
@@ -605,9 +525,6 @@ enum OpCode {
   OP_CCLASS_NOT,
   OP_CCLASS_MB_NOT,
   OP_CCLASS_MIX_NOT,
-#ifdef USE_OP_CCLASS_NODE
-  OP_CCLASS_NODE,       /* pointer to CClassNode node */
-#endif
 
   OP_ANYCHAR,                 /* "."  */
   OP_ANYCHAR_ML,              /* "."  multi-line */
@@ -625,8 +542,7 @@ enum OpCode {
   OP_WORD_BEGIN,
   OP_WORD_END,
 
-  OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
-  OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
+  OP_TEXT_SEGMENT_BOUNDARY,
 
   OP_BEGIN_BUF,
   OP_END_BUF,
@@ -642,6 +558,7 @@ enum OpCode {
   OP_BACKREF_MULTI,
   OP_BACKREF_MULTI_IC,
   OP_BACKREF_WITH_LEVEL,        /* \k<xxx+n>, \k<xxx-n> */
+  OP_BACKREF_WITH_LEVEL_IC,     /* \k<xxx+n>, \k<xxx-n> */
   OP_BACKREF_CHECK,             /* (?(n)), (?('name')) */
   OP_BACKREF_CHECK_WITH_LEVEL,  /* (?(n-level)), (?('name-level')) */
 
@@ -657,7 +574,9 @@ enum OpCode {
   OP_PUSH,
   OP_PUSH_SUPER,
   OP_POP_OUT,
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
   OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */
+#endif
   OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */
   OP_REPEAT,               /* {n,m} */
   OP_REPEAT_NG,            /* {n,m}? (non greedy) */
@@ -704,6 +623,11 @@ enum UpdateVarType {
   UPDATE_VAR_RIGHT_RANGE_INIT         = 4,
 };
 
+enum TextSegmentBoundaryType {
+  EXTENDED_GRAPHEME_CLUSTER_BOUNDARY = 0,
+  WORD_BOUNDARY = 1,
+};
+
 typedef int RelAddrType;
 typedef int AbsAddrType;
 typedef int LengthType;
@@ -747,13 +671,16 @@ typedef int ModeType;
 
 
 /* op-code + arg size */
+#if 0
 #define SIZE_OP_ANYCHAR_STAR            SIZE_OPCODE
 #define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
 #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_PUSH_SUPER             (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_POP_OUT                 SIZE_OPCODE
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 #define SIZE_OP_PUSH_OR_JUMP_EXACT1    (SIZE_OPCODE + SIZE_RELADDR + 1)
+#endif
 #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
 #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)
 #define SIZE_OP_REPEAT_INC_NG          (SIZE_OPCODE + SIZE_MEMNUM)
@@ -786,6 +713,56 @@ typedef int ModeType;
 #define SIZE_OP_CALLOUT_NAME           (SIZE_OPCODE + SIZE_MEMNUM + SIZE_MEMNUM)
 #endif
 
+#else  /* if 0 */
+
+/* for relative address increment to go next op. */
+#define SIZE_INC_OP                     1
+
+#define SIZE_OP_ANYCHAR_STAR            1
+#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT  1
+#define SIZE_OP_JUMP                    1
+#define SIZE_OP_PUSH                    1
+#define SIZE_OP_PUSH_SUPER              1
+#define SIZE_OP_POP_OUT                 1
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+#define SIZE_OP_PUSH_OR_JUMP_EXACT1     1
+#endif
+#define SIZE_OP_PUSH_IF_PEEK_NEXT       1
+#define SIZE_OP_REPEAT                  1
+#define SIZE_OP_REPEAT_INC              1
+#define SIZE_OP_REPEAT_INC_NG           1
+#define SIZE_OP_WORD_BOUNDARY           1
+#define SIZE_OP_PREC_READ_START         1
+#define SIZE_OP_PREC_READ_NOT_START     1
+#define SIZE_OP_PREC_READ_END           1
+#define SIZE_OP_PREC_READ_NOT_END       1
+#define SIZE_OP_BACKREF                 1
+#define SIZE_OP_FAIL                    1
+#define SIZE_OP_MEMORY_START            1
+#define SIZE_OP_MEMORY_START_PUSH       1
+#define SIZE_OP_MEMORY_END_PUSH         1
+#define SIZE_OP_MEMORY_END_PUSH_REC     1
+#define SIZE_OP_MEMORY_END              1
+#define SIZE_OP_MEMORY_END_REC          1
+#define SIZE_OP_ATOMIC_START            1
+#define SIZE_OP_ATOMIC_END              1
+#define SIZE_OP_EMPTY_CHECK_START       1
+#define SIZE_OP_EMPTY_CHECK_END         1
+#define SIZE_OP_LOOK_BEHIND             1
+#define SIZE_OP_LOOK_BEHIND_NOT_START   1
+#define SIZE_OP_LOOK_BEHIND_NOT_END     1
+#define SIZE_OP_CALL                    1
+#define SIZE_OP_RETURN                  1
+#define SIZE_OP_PUSH_SAVE_VAL           1
+#define SIZE_OP_UPDATE_VAR              1
+
+#ifdef USE_CALLOUT
+#define SIZE_OP_CALLOUT_CONTENTS        1
+#define SIZE_OP_CALLOUT_NAME            1
+#endif
+#endif /* if 0 */
+
+
 #define MC_ESC(syn)               (syn)->meta_char_table.esc
 #define MC_ANYCHAR(syn)           (syn)->meta_char_table.anychar
 #define MC_ANYTIME(syn)           (syn)->meta_char_table.anytime
@@ -837,8 +814,186 @@ typedef int ModeType;
 #define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
 #define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
 
-extern void onig_add_end_call(void (*func)(void));
 
+typedef struct {
+#ifdef USE_DIRECT_THREADED_CODE
+  const void* opaddr;
+#else
+  enum OpCode opcode;
+#endif
+  union {
+    struct {
+      UChar s[16];  /* Now used first 7 bytes only. */
+    } exact;
+    struct {
+      UChar* s;
+      LengthType n;   /* number of chars */
+    } exact_n; /* EXACTN, EXACTN_IC, EXACTMB2N, EXACTMB3N */
+    struct {
+      UChar* s;
+      LengthType n;   /* number of chars */
+      LengthType len; /* char byte length */
+    } exact_len_n; /* EXACTMBN */
+    struct {
+      BitSetRef bsp;
+    } cclass;
+    struct {
+      void*  mb;
+    } cclass_mb;
+    struct {
+      void*  mb; /* mb must be same position with cclass_mb for match_at(). */
+      BitSetRef bsp;
+    } cclass_mix;
+    struct {
+      UChar c;
+    } anychar_star_peek_next;
+    struct {
+      ModeType mode;
+    } word_boundary; /* OP_WORD_BOUNDARY, OP_NO_WORD_BOUNDARY, OP_WORD_BEGIN, OP_WORD_END */
+    struct {
+      enum TextSegmentBoundaryType type;
+      int not;
+    } text_segment_boundary;
+    struct {
+      union {
+        MemNumType  n1; /* num == 1 */
+        MemNumType* ns; /* num >  1 */
+      };
+      int num;
+      int nest_level;
+    } backref_general; /* BACKREF_MULTI, BACKREF_MULTI_IC, BACKREF_WITH_LEVEL, BACKREF_CHECK, BACKREF_CHECK_WITH_LEVEL, */
+    struct {
+      MemNumType n1;
+    } backref_n; /* BACKREF_N, BACKREF_N_IC */
+    struct {
+      MemNumType num;
+    } memory_start; /* MEMORY_START, MEMORY_START_PUSH */
+    struct {
+      MemNumType num;
+    } memory_end; /* MEMORY_END, MEMORY_END_REC, MEMORY_END_PUSH, MEMORY_END_PUSH_REC */
+    struct {
+      RelAddrType addr;
+    } jump;
+    struct {
+      RelAddrType addr;
+    } push;
+    struct {
+      RelAddrType addr;
+      UChar c;
+    } push_or_jump_exact1;
+    struct {
+      RelAddrType addr;
+      UChar c;
+    } push_if_peek_next;
+    struct {
+      MemNumType  id;
+      RelAddrType addr;
+    } repeat; /* REPEAT, REPEAT_NG */
+    struct {
+      MemNumType  id;
+    } repeat_inc; /* REPEAT_INC, REPEAT_INC_SG, REPEAT_INC_NG, REPEAT_INC_NG_SG */
+    struct {
+      MemNumType mem;
+    } empty_check_start;
+    struct {
+      MemNumType mem;
+    } empty_check_end; /* EMPTY_CHECK_END, EMPTY_CHECK_END_MEMST, EMPTY_CHECK_END_MEMST_PUSH */
+    struct {
+      RelAddrType addr;
+    } prec_read_not_start;
+    struct {
+      LengthType len;
+    } look_behind;
+    struct {
+      LengthType  len;
+      RelAddrType addr;
+    } look_behind_not_start;
+    struct {
+      AbsAddrType addr;
+    } call;
+    struct {
+      SaveType   type;
+      MemNumType id;
+    } push_save_val;
+    struct {
+      UpdateVarType type;
+      MemNumType id;
+    } update_var;
+#ifdef USE_CALLOUT
+    struct {
+      MemNumType num;
+    } callout_contents;
+    struct {
+      MemNumType num;
+      MemNumType id;
+    } callout_name;
+#endif
+  };
+} Operation;
+
+typedef struct {
+  const UChar* pattern;
+  const UChar* pattern_end;
+#ifdef USE_CALLOUT
+  void*  tag_table;
+  int    callout_num;
+  int    callout_list_alloc;
+  CalloutListEntry* callout_list;    /* index: callout num */
+#endif
+} RegexExt;
+
+struct re_pattern_buffer {
+  /* common members of BBuf(bytes-buffer) */
+  Operation*   ops;
+#ifdef USE_DIRECT_THREADED_CODE
+  enum OpCode* ocs;
+#endif
+  Operation*   ops_curr;
+  unsigned int ops_used;    /* used space for ops */
+  unsigned int ops_alloc;   /* allocated space for ops */
+  unsigned char* string_pool;
+  unsigned char* string_pool_end;
+
+  int num_mem;                   /* used memory(...) num counted from 1 */
+  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
+  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */
+  int num_call;                  /* number of subexp call */
+  unsigned int capture_history;  /* (?@...) flag (1-31) */
+  unsigned int bt_mem_start;     /* need backtrack flag */
+  unsigned int bt_mem_end;       /* need backtrack flag */
+  int stack_pop_level;
+  int repeat_range_alloc;
+  OnigRepeatRange* repeat_range;
+
+  OnigEncoding      enc;
+  OnigOptionType    options;
+  OnigSyntaxType*   syntax;
+  OnigCaseFoldType  case_fold_flag;
+  void*             name_table;
+
+  /* optimization info (string search, char-map and anchors) */
+  int            optimize;          /* optimize flag */
+  int            threshold_len;     /* search str-length for apply optimize */
+  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
+  OnigLen        anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
+  OnigLen        anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
+  int            sub_anchor;        /* start-anchor for exact or map */
+  unsigned char *exact;
+  unsigned char *exact_end;
+  unsigned char  map[CHAR_MAP_SIZE]; /* used as BMH skip or char-map */
+  int            map_offset;
+  OnigLen        dmin;                      /* min-distance of exact or map */
+  OnigLen        dmax;                      /* max-distance of exact or map */
+  RegexExt*      extp;
+};
+
+#define COP(reg)            ((reg)->ops_curr)
+#define COP_CURR_OFFSET(reg)  ((reg)->ops_used - 1)
+#define COP_CURR_OFFSET_BYTES(reg, p)  \
+  ((int )((char* )(&((reg)->ops_curr->p)) - (char* )((reg)->ops)))
+
+
+extern void onig_add_end_call(void (*func)(void));
 
 #ifdef ONIG_DEBUG
 
@@ -854,13 +1009,12 @@ extern int  onig_print_statistics P_((FILE* f));
 
 extern void   onig_warning(const char* s);
 extern UChar* onig_error_code_to_format P_((int code));
-extern void EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
-extern int    onig_bbuf_init P_((BBuf* buf, int size));
+extern void  EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
 extern int    onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
-extern void   onig_transfer P_((regex_t* to, regex_t* from));
 extern int    onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));
 extern RegexExt* onig_get_regex_ext(regex_t* reg);
 extern int    onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_end);
+extern int    onig_positive_int_multiply(int x, int y);
 
 #ifdef USE_CALLOUT
 
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h
index e0086cd6c9..29e64341df 100644
--- a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h
+++ b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h
@@ -4,7 +4,7 @@
   regparse.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,6 +31,10 @@
 
 #include "regint.h"
 
+#define NODE_STRING_MARGIN         16
+#define NODE_STRING_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */
+#define NODE_BACKREFS_SIZE          6
+
 /* node type */
 typedef enum {
   NODE_STRING    =  0,
@@ -38,7 +42,7 @@ typedef enum {
   NODE_CTYPE     =  2,
   NODE_BACKREF   =  3,
   NODE_QUANT     =  4,
-  NODE_ENCLOSURE =  5,
+  NODE_BAG       =  5,
   NODE_ANCHOR    =  6,
   NODE_LIST      =  7,
   NODE_ALT       =  8,
@@ -46,161 +50,29 @@ typedef enum {
   NODE_GIMMICK   = 10
 } NodeType;
 
+enum BagType {
+  BAG_MEMORY         = 0,
+  BAG_OPTION         = 1,
+  BAG_STOP_BACKTRACK = 2,
+  BAG_IF_ELSE        = 3,
+};
+
 enum GimmickType {
-  GIMMICK_FAIL = 0,
-  GIMMICK_KEEP = 1,
-  GIMMICK_SAVE = 2,
-  GIMMICK_UPDATE_VAR = 3,
+  GIMMICK_FAIL       = 0,
+  GIMMICK_SAVE       = 1,
+  GIMMICK_UPDATE_VAR = 2,
 #ifdef USE_CALLOUT
-  GIMMICK_CALLOUT = 4,
+  GIMMICK_CALLOUT    = 3,
 #endif
 };
 
-
-/* node type bit */
-#define NODE_TYPE2BIT(type)      (1<<(type))
-
-#define NODE_BIT_STRING     NODE_TYPE2BIT(NODE_STRING)
-#define NODE_BIT_CCLASS     NODE_TYPE2BIT(NODE_CCLASS)
-#define NODE_BIT_CTYPE      NODE_TYPE2BIT(NODE_CTYPE)
-#define NODE_BIT_BACKREF    NODE_TYPE2BIT(NODE_BACKREF)
-#define NODE_BIT_QUANT      NODE_TYPE2BIT(NODE_QUANT)
-#define NODE_BIT_ENCLOSURE  NODE_TYPE2BIT(NODE_ENCLOSURE)
-#define NODE_BIT_ANCHOR     NODE_TYPE2BIT(NODE_ANCHOR)
-#define NODE_BIT_LIST       NODE_TYPE2BIT(NODE_LIST)
-#define NODE_BIT_ALT        NODE_TYPE2BIT(NODE_ALT)
-#define NODE_BIT_CALL       NODE_TYPE2BIT(NODE_CALL)
-#define NODE_BIT_GIMMICK    NODE_TYPE2BIT(NODE_GIMMICK)
-
-#define NODE_IS_SIMPLE_TYPE(node) \
-  ((NODE_TYPE2BIT(NODE_TYPE(node)) & \
-    (NODE_BIT_STRING | NODE_BIT_CCLASS | NODE_BIT_CTYPE | NODE_BIT_BACKREF)) != 0)
-
-#define NODE_TYPE(node)             ((node)->u.base.node_type)
-#define NODE_SET_TYPE(node, ntype)   (node)->u.base.node_type = (ntype)
-
-#define STR_(node)         (&((node)->u.str))
-#define CCLASS_(node)      (&((node)->u.cclass))
-#define CTYPE_(node)       (&((node)->u.ctype))
-#define BACKREF_(node)     (&((node)->u.backref))
-#define QUANT_(node)       (&((node)->u.quant))
-#define ENCLOSURE_(node)   (&((node)->u.enclosure))
-#define ANCHOR_(node)      (&((node)->u.anchor))
-#define CONS_(node)        (&((node)->u.cons))
-#define CALL_(node)        (&((node)->u.call))
-#define GIMMICK_(node)     (&((node)->u.gimmick))
-
-#define NODE_CAR(node)         (CONS_(node)->car)
-#define NODE_CDR(node)         (CONS_(node)->cdr)
-
-#define CTYPE_ANYCHAR      -1
-#define NODE_IS_ANYCHAR(node) \
-  (NODE_TYPE(node) == NODE_CTYPE && CTYPE_(node)->ctype == CTYPE_ANYCHAR)
-
-#define CTYPE_OPTION(node, reg) \
-  (NODE_IS_FIXED_OPTION(node) ? CTYPE_(node)->options : reg->options)
-
-
-#define ANCHOR_ANYCHAR_INF_MASK  (ANCHOR_ANYCHAR_INF | ANCHOR_ANYCHAR_INF_ML)
-#define ANCHOR_END_BUF_MASK      (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)
-
-enum EnclosureType {
-  ENCLOSURE_MEMORY = 0,
-  ENCLOSURE_OPTION = 1,
-  ENCLOSURE_STOP_BACKTRACK = 2,
-  ENCLOSURE_IF_ELSE = 3,
+enum BodyEmptyType {
+  BODY_IS_NOT_EMPTY             = 0,
+  BODY_IS_EMPTY_POSSIBILITY     = 1,
+  BODY_IS_EMPTY_POSSIBILITY_MEM = 2,
+  BODY_IS_EMPTY_POSSIBILITY_REC = 3
 };
 
-#define NODE_STRING_MARGIN         16
-#define NODE_STRING_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */
-#define NODE_BACKREFS_SIZE       6
-
-#define NODE_STRING_RAW                (1<<0) /* by backslashed number */
-#define NODE_STRING_AMBIG              (1<<1)
-#define NODE_STRING_DONT_GET_OPT_INFO  (1<<2)
-
-#define NODE_STRING_LEN(node)            (int )((node)->u.str.end - (node)->u.str.s)
-#define NODE_STRING_SET_RAW(node)        (node)->u.str.flag |= NODE_STRING_RAW
-#define NODE_STRING_CLEAR_RAW(node)      (node)->u.str.flag &= ~NODE_STRING_RAW
-#define NODE_STRING_SET_AMBIG(node)      (node)->u.str.flag |= NODE_STRING_AMBIG
-#define NODE_STRING_SET_DONT_GET_OPT_INFO(node) \
-  (node)->u.str.flag |= NODE_STRING_DONT_GET_OPT_INFO
-#define NODE_STRING_IS_RAW(node) \
-  (((node)->u.str.flag & NODE_STRING_RAW) != 0)
-#define NODE_STRING_IS_AMBIG(node) \
-  (((node)->u.str.flag & NODE_STRING_AMBIG) != 0)
-#define NODE_STRING_IS_DONT_GET_OPT_INFO(node) \
-  (((node)->u.str.flag & NODE_STRING_DONT_GET_OPT_INFO) != 0)
-
-#define BACKREFS_P(br) \
-  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static)
-
-enum QuantBodyEmpty {
-  QUANT_BODY_IS_NOT_EMPTY = 0,
-  QUANT_BODY_IS_EMPTY     = 1,
-  QUANT_BODY_IS_EMPTY_MEM = 2,
-  QUANT_BODY_IS_EMPTY_REC = 3
-};
-
-/* node status bits */
-#define NODE_ST_MIN_FIXED             (1<<0)
-#define NODE_ST_MAX_FIXED             (1<<1)
-#define NODE_ST_CLEN_FIXED            (1<<2)
-#define NODE_ST_MARK1                 (1<<3)
-#define NODE_ST_MARK2                 (1<<4)
-#define NODE_ST_STOP_BT_SIMPLE_REPEAT (1<<5)
-#define NODE_ST_RECURSION             (1<<6)
-#define NODE_ST_CALLED                (1<<7)
-#define NODE_ST_ADDR_FIXED            (1<<8)
-#define NODE_ST_NAMED_GROUP           (1<<9)
-#define NODE_ST_IN_REAL_REPEAT        (1<<10) /* STK_REPEAT is nested in stack. */
-#define NODE_ST_IN_ZERO_REPEAT        (1<<11) /* (....){0} */
-#define NODE_ST_IN_MULTI_ENTRY        (1<<12)
-#define NODE_ST_NEST_LEVEL            (1<<13)
-#define NODE_ST_BY_NUMBER             (1<<14) /* {n,m} */
-#define NODE_ST_BY_NAME               (1<<15) /* backref by name */
-#define NODE_ST_BACKREF               (1<<16)
-#define NODE_ST_CHECKER               (1<<17)
-#define NODE_ST_FIXED_OPTION          (1<<18)
-#define NODE_ST_PROHIBIT_RECURSION    (1<<19)
-#define NODE_ST_SUPER                 (1<<20)
-
-
-#define NODE_STATUS(node)           (((Node* )node)->u.base.status)
-#define NODE_STATUS_ADD(node,f)     (NODE_STATUS(node) |= (NODE_ST_ ## f))
-#define NODE_STATUS_REMOVE(node,f)  (NODE_STATUS(node) &= ~(NODE_ST_ ## f))
-
-#define NODE_IS_BY_NUMBER(node)       ((NODE_STATUS(node) & NODE_ST_BY_NUMBER)      != 0)
-#define NODE_IS_IN_REAL_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_REAL_REPEAT) != 0)
-#define NODE_IS_CALLED(node)          ((NODE_STATUS(node) & NODE_ST_CALLED)         != 0)
-#define NODE_IS_IN_MULTI_ENTRY(node)  ((NODE_STATUS(node) & NODE_ST_IN_MULTI_ENTRY) != 0)
-#define NODE_IS_RECURSION(node)       ((NODE_STATUS(node) & NODE_ST_RECURSION)      != 0)
-#define NODE_IS_IN_ZERO_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_ZERO_REPEAT) != 0)
-#define NODE_IS_NAMED_GROUP(node)     ((NODE_STATUS(node) & NODE_ST_NAMED_GROUP)  != 0)
-#define NODE_IS_ADDR_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_ADDR_FIXED)   != 0)
-#define NODE_IS_CLEN_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_CLEN_FIXED)   != 0)
-#define NODE_IS_MIN_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MIN_FIXED)    != 0)
-#define NODE_IS_MAX_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MAX_FIXED)    != 0)
-#define NODE_IS_MARK1(node)           ((NODE_STATUS(node) & NODE_ST_MARK1)        != 0)
-#define NODE_IS_MARK2(node)           ((NODE_STATUS(node) & NODE_ST_MARK2)        != 0)
-#define NODE_IS_NEST_LEVEL(node)      ((NODE_STATUS(node) & NODE_ST_NEST_LEVEL)   != 0)
-#define NODE_IS_BY_NAME(node)         ((NODE_STATUS(node) & NODE_ST_BY_NAME)      != 0)
-#define NODE_IS_BACKREF(node)         ((NODE_STATUS(node) & NODE_ST_BACKREF)      != 0)
-#define NODE_IS_CHECKER(node)         ((NODE_STATUS(node) & NODE_ST_CHECKER)      != 0)
-#define NODE_IS_FIXED_OPTION(node)    ((NODE_STATUS(node) & NODE_ST_FIXED_OPTION) != 0)
-#define NODE_IS_SUPER(node)           ((NODE_STATUS(node) & NODE_ST_SUPER)        != 0)
-#define NODE_IS_PROHIBIT_RECURSION(node) \
-    ((NODE_STATUS(node) & NODE_ST_PROHIBIT_RECURSION) != 0)
-#define NODE_IS_STOP_BT_SIMPLE_REPEAT(node) \
-    ((NODE_STATUS(node) & NODE_ST_STOP_BT_SIMPLE_REPEAT) != 0)
-
-#define NODE_BODY(node)           ((node)->u.base.body)
-#define NODE_QUANT_BODY(node)      ((node)->body)
-#define NODE_ENCLOSURE_BODY(node)   ((node)->body)
-#define NODE_CALL_BODY(node)      ((node)->body)
-#define NODE_ANCHOR_BODY(node)    ((node)->body)
-
-
 typedef struct {
   NodeType node_type;
   int status;
@@ -208,7 +80,7 @@ typedef struct {
   UChar* s;
   UChar* end;
   unsigned int flag;
-  int    capa;    /* (allocated size - 1) or 0: use buf[] */
+  int    capacity;    /* (allocated size - 1) or 0: use buf[] */
   UChar  buf[NODE_STRING_BUF_SIZE];
 } StrNode;
 
@@ -229,7 +101,7 @@ typedef struct {
   int lower;
   int upper;
   int greedy;
-  enum QuantBodyEmpty body_empty_info;
+  enum BodyEmptyType emptiness;
   struct _Node* head_exact;
   struct _Node* next_head_exact;
   int is_refered;     /* include called node. don't eliminate even if {0} */
@@ -240,7 +112,7 @@ typedef struct {
   int status;
   struct _Node* body;
 
-  enum EnclosureType type;
+  enum BagType type;
   union {
     struct {
       int regnum;
@@ -262,7 +134,7 @@ typedef struct {
   OnigLen max_len;   /* max length (byte) */
   int char_len;      /* character length  */
   int opt_count;     /* referenced count in optimize_nodes() */
-} EnclosureNode;
+} BagNode;
 
 #ifdef USE_CALL
 
@@ -280,7 +152,7 @@ typedef struct {
 typedef struct {
   NodeType node_type;
   int status;
-  struct _Node* body; /* to EnclosureNode : ENCLOSURE_MEMORY */
+  struct _Node* body; /* to BagNode : BAG_MEMORY */
 
   int     by_number;
   int     group_num;
@@ -350,7 +222,7 @@ typedef struct _Node {
     StrNode       str;
     CClassNode    cclass;
     QuantNode     quant;
-    EnclosureNode enclosure;
+    BagNode       bag;
     BackRefNode   backref;
     AnchorNode    anchor;
     ConsAltNode   cons;
@@ -362,9 +234,134 @@ typedef struct _Node {
   } u;
 } Node;
 
-
 #define NULL_NODE  ((Node* )0)
 
+
+/* node type bit */
+#define NODE_TYPE2BIT(type)      (1<<(type))
+
+#define NODE_BIT_STRING     NODE_TYPE2BIT(NODE_STRING)
+#define NODE_BIT_CCLASS     NODE_TYPE2BIT(NODE_CCLASS)
+#define NODE_BIT_CTYPE      NODE_TYPE2BIT(NODE_CTYPE)
+#define NODE_BIT_BACKREF    NODE_TYPE2BIT(NODE_BACKREF)
+#define NODE_BIT_QUANT      NODE_TYPE2BIT(NODE_QUANT)
+#define NODE_BIT_BAG        NODE_TYPE2BIT(NODE_BAG)
+#define NODE_BIT_ANCHOR     NODE_TYPE2BIT(NODE_ANCHOR)
+#define NODE_BIT_LIST       NODE_TYPE2BIT(NODE_LIST)
+#define NODE_BIT_ALT        NODE_TYPE2BIT(NODE_ALT)
+#define NODE_BIT_CALL       NODE_TYPE2BIT(NODE_CALL)
+#define NODE_BIT_GIMMICK    NODE_TYPE2BIT(NODE_GIMMICK)
+
+#define NODE_TYPE(node)             ((node)->u.base.node_type)
+#define NODE_SET_TYPE(node, ntype)   (node)->u.base.node_type = (ntype)
+
+#define STR_(node)         (&((node)->u.str))
+#define CCLASS_(node)      (&((node)->u.cclass))
+#define CTYPE_(node)       (&((node)->u.ctype))
+#define BACKREF_(node)     (&((node)->u.backref))
+#define QUANT_(node)       (&((node)->u.quant))
+#define BAG_(node)         (&((node)->u.bag))
+#define ANCHOR_(node)      (&((node)->u.anchor))
+#define CONS_(node)        (&((node)->u.cons))
+#define CALL_(node)        (&((node)->u.call))
+#define GIMMICK_(node)     (&((node)->u.gimmick))
+
+#define NODE_CAR(node)         (CONS_(node)->car)
+#define NODE_CDR(node)         (CONS_(node)->cdr)
+
+#define CTYPE_ANYCHAR      -1
+#define NODE_IS_ANYCHAR(node) \
+  (NODE_TYPE(node) == NODE_CTYPE && CTYPE_(node)->ctype == CTYPE_ANYCHAR)
+
+#define CTYPE_OPTION(node, reg) \
+  (NODE_IS_FIXED_OPTION(node) ? CTYPE_(node)->options : reg->options)
+
+
+#define ANCR_ANYCHAR_INF_MASK  (ANCR_ANYCHAR_INF | ANCR_ANYCHAR_INF_ML)
+#define ANCR_END_BUF_MASK      (ANCR_END_BUF | ANCR_SEMI_END_BUF)
+
+#define NODE_STRING_RAW                (1<<0) /* by backslashed number */
+#define NODE_STRING_AMBIG              (1<<1)
+#define NODE_STRING_GOOD_AMBIG         (1<<2)
+#define NODE_STRING_DONT_GET_OPT_INFO  (1<<3)
+
+#define NODE_STRING_LEN(node)            (int )((node)->u.str.end - (node)->u.str.s)
+#define NODE_STRING_SET_RAW(node)        (node)->u.str.flag |= NODE_STRING_RAW
+#define NODE_STRING_CLEAR_RAW(node)      (node)->u.str.flag &= ~NODE_STRING_RAW
+#define NODE_STRING_SET_AMBIG(node)      (node)->u.str.flag |= NODE_STRING_AMBIG
+#define NODE_STRING_SET_GOOD_AMBIG(node) (node)->u.str.flag |= NODE_STRING_GOOD_AMBIG
+#define NODE_STRING_SET_DONT_GET_OPT_INFO(node) \
+  (node)->u.str.flag |= NODE_STRING_DONT_GET_OPT_INFO
+#define NODE_STRING_IS_RAW(node) \
+  (((node)->u.str.flag & NODE_STRING_RAW) != 0)
+#define NODE_STRING_IS_AMBIG(node) \
+  (((node)->u.str.flag & NODE_STRING_AMBIG) != 0)
+#define NODE_STRING_IS_GOOD_AMBIG(node) \
+  (((node)->u.str.flag & NODE_STRING_GOOD_AMBIG) != 0)
+#define NODE_STRING_IS_DONT_GET_OPT_INFO(node) \
+  (((node)->u.str.flag & NODE_STRING_DONT_GET_OPT_INFO) != 0)
+
+#define BACKREFS_P(br) \
+  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static)
+
+/* node status bits */
+#define NODE_ST_MIN_FIXED             (1<<0)
+#define NODE_ST_MAX_FIXED             (1<<1)
+#define NODE_ST_CLEN_FIXED            (1<<2)
+#define NODE_ST_MARK1                 (1<<3)
+#define NODE_ST_MARK2                 (1<<4)
+#define NODE_ST_STRICT_REAL_REPEAT    (1<<5)
+#define NODE_ST_RECURSION             (1<<6)
+#define NODE_ST_CALLED                (1<<7)
+#define NODE_ST_ADDR_FIXED            (1<<8)
+#define NODE_ST_NAMED_GROUP           (1<<9)
+#define NODE_ST_IN_REAL_REPEAT        (1<<10) /* STK_REPEAT is nested in stack. */
+#define NODE_ST_IN_ZERO_REPEAT        (1<<11) /* (....){0} */
+#define NODE_ST_IN_MULTI_ENTRY        (1<<12)
+#define NODE_ST_NEST_LEVEL            (1<<13)
+#define NODE_ST_BY_NUMBER             (1<<14) /* {n,m} */
+#define NODE_ST_BY_NAME               (1<<15) /* backref by name */
+#define NODE_ST_BACKREF               (1<<16)
+#define NODE_ST_CHECKER               (1<<17)
+#define NODE_ST_FIXED_OPTION          (1<<18)
+#define NODE_ST_PROHIBIT_RECURSION    (1<<19)
+#define NODE_ST_SUPER                 (1<<20)
+
+
+#define NODE_STATUS(node)           (((Node* )node)->u.base.status)
+#define NODE_STATUS_ADD(node,f)     (NODE_STATUS(node) |= (NODE_ST_ ## f))
+#define NODE_STATUS_REMOVE(node,f)  (NODE_STATUS(node) &= ~(NODE_ST_ ## f))
+
+#define NODE_IS_BY_NUMBER(node)       ((NODE_STATUS(node) & NODE_ST_BY_NUMBER)      != 0)
+#define NODE_IS_IN_REAL_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_REAL_REPEAT) != 0)
+#define NODE_IS_CALLED(node)          ((NODE_STATUS(node) & NODE_ST_CALLED)         != 0)
+#define NODE_IS_IN_MULTI_ENTRY(node)  ((NODE_STATUS(node) & NODE_ST_IN_MULTI_ENTRY) != 0)
+#define NODE_IS_RECURSION(node)       ((NODE_STATUS(node) & NODE_ST_RECURSION)      != 0)
+#define NODE_IS_IN_ZERO_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_ZERO_REPEAT) != 0)
+#define NODE_IS_NAMED_GROUP(node)     ((NODE_STATUS(node) & NODE_ST_NAMED_GROUP)  != 0)
+#define NODE_IS_ADDR_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_ADDR_FIXED)   != 0)
+#define NODE_IS_CLEN_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_CLEN_FIXED)   != 0)
+#define NODE_IS_MIN_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MIN_FIXED)    != 0)
+#define NODE_IS_MAX_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MAX_FIXED)    != 0)
+#define NODE_IS_MARK1(node)           ((NODE_STATUS(node) & NODE_ST_MARK1)        != 0)
+#define NODE_IS_MARK2(node)           ((NODE_STATUS(node) & NODE_ST_MARK2)        != 0)
+#define NODE_IS_NEST_LEVEL(node)      ((NODE_STATUS(node) & NODE_ST_NEST_LEVEL)   != 0)
+#define NODE_IS_BY_NAME(node)         ((NODE_STATUS(node) & NODE_ST_BY_NAME)      != 0)
+#define NODE_IS_BACKREF(node)         ((NODE_STATUS(node) & NODE_ST_BACKREF)      != 0)
+#define NODE_IS_CHECKER(node)         ((NODE_STATUS(node) & NODE_ST_CHECKER)      != 0)
+#define NODE_IS_FIXED_OPTION(node)    ((NODE_STATUS(node) & NODE_ST_FIXED_OPTION) != 0)
+#define NODE_IS_SUPER(node)           ((NODE_STATUS(node) & NODE_ST_SUPER)        != 0)
+#define NODE_IS_PROHIBIT_RECURSION(node) \
+    ((NODE_STATUS(node) & NODE_ST_PROHIBIT_RECURSION) != 0)
+#define NODE_IS_STRICT_REAL_REPEAT(node) \
+    ((NODE_STATUS(node) & NODE_ST_STRICT_REAL_REPEAT) != 0)
+
+#define NODE_BODY(node)           ((node)->u.base.body)
+#define NODE_QUANT_BODY(node)     ((node)->body)
+#define NODE_BAG_BODY(node)       ((node)->body)
+#define NODE_CALL_BODY(node)      ((node)->body)
+#define NODE_ANCHOR_BODY(node)    ((node)->body)
+
 #define SCANENV_MEMENV_SIZE               8
 #define SCANENV_MEMENV(senv) \
  (IS_NOT_NULL((senv)->mem_env_dynamic) ? \
@@ -434,7 +431,7 @@ extern void   onig_node_conv_to_str_node P_((Node* node, int raw));
 extern int    onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));
 extern int    onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));
 extern void   onig_node_free P_((Node* node));
-extern Node*  onig_node_new_enclosure P_((int type));
+extern Node*  onig_node_new_bag P_((enum BagType type));
 extern Node*  onig_node_new_anchor P_((int type, int ascii_mode));
 extern Node*  onig_node_new_str P_((const UChar* s, const UChar* end));
 extern Node*  onig_node_new_list P_((Node* left, Node* right));
-- 
2.13.0.windows.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-08-08 13:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-08 13:31 [Patch] MdeModulePkg RegularExpressionDxe: Update Oniguruma from v6.9.0 to v6.9.3 Liming Gao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox