/// This file is generated by unicode_tablegen; do not edit manually!

///|
fn bitset_search(
  needle : Int,
  chunk_idx_map : Bytes,
  bitset_chunk_idx : FixedArray[Bytes],
  bitset_canonical : FixedArray[UInt64],
  bitset_canonicalized : FixedArray[(Byte, Byte)],
) -> Bool {
  // let n = chunk_idx_map.length()
  // let n1 = bitset_chunk_idx.length()
  let chunk_size = bitset_chunk_idx[0].length()
  // let canonical = bitset_canonical.length()
  // let canonicalized = bitset_canonicalized.length()
  let bucket_idx = needle / 64
  let chunk_map_idx = bucket_idx / chunk_size
  let chunk_piece = bucket_idx % chunk_size
  let chunk_idx = if chunk_map_idx < chunk_idx_map.length() {
    chunk_idx_map[chunk_map_idx].to_int()
  } else {
    return false
  }
  let idx = bitset_chunk_idx[chunk_idx][chunk_piece].to_int()
  let word = if idx < bitset_canonical.length() {
    bitset_canonical[idx]
  } else {
    let (real_idx, mapping) = bitset_canonicalized[idx -
      bitset_canonical.length()]
    let mut word = bitset_canonical[real_idx.to_int()]
    let should_invert = (mapping.to_uint() & (1U << 6)) != 0
    if should_invert {
      word = word.lnot()
    }
    // Lower 6 bits
    let quantity = (mapping.to_uint() & ((1U << 6) - 1)).reinterpret_as_int()
    if (mapping.to_uint() & (1U << 7)) != 0 {
      // shift
      word = word >> quantity
    } else {
      // rotate left
      word = (word << quantity) | (word >> (64 - quantity % 64))
    }
    word
  }
  (word & (1UL << (needle % 64))) != 0
}

///|
priv struct ShortOffsetRunHeader(UInt)

///|
fn ShortOffsetRunHeader::new(
  start_index~ : UInt,
  prefix_sum~ : UInt,
) -> ShortOffsetRunHeader {
  // start_index < (1 << 11)
  // prefix_sum <  (1 << 21)
  ShortOffsetRunHeader((start_index << 21) | prefix_sum)
}

///|
fn ShortOffsetRunHeader::start_index(self : ShortOffsetRunHeader) -> Int {
  (self.0 >> 21).reinterpret_as_int()
}

///|
fn ShortOffsetRunHeader::prefix_sum(self : ShortOffsetRunHeader) -> UInt {
  self.0 & ((1U << 21) - 1)
}

///|
fn[T] binary_search_by(
  arr : FixedArray[T],
  cmp : (T) -> Int,
) -> Result[Int, Int] {
  let len = arr.length()
  for i = 0, j = len; i < j; {
    let h = i + (j - i) / 2
    // Note even if self[h] == value, we still continue the search
    // because we want to find the leftmost match
    if cmp(arr.unsafe_get(h)) < 0 {
      continue h + 1, j
    } else {
      continue i, h
    }
  } else {
    if i < len && cmp(arr.unsafe_get(i)) == 0 {
      Ok(i)
    } else {
      Err(i)
    }
  }
}

///|
fn skip_search(
  needle : Char,
  short_offset_runs : FixedArray[ShortOffsetRunHeader],
  offsets : Bytes,
) -> Bool {
  let needle = needle.to_uint()
  let last_idx = match
    binary_search_by(short_offset_runs, fn(header) {
      (header.0 << 11).compare(needle << 11)
    }) {
    Err(idx) => idx
    Ok(idx) => idx + 1
  }
  // last_idx < short_offset_runs.length()
  let mut offset_idx = short_offset_runs[last_idx].start_index()
  let length = if short_offset_runs.length() > last_idx + 1 {
    let next = short_offset_runs[last_idx + 1]
    next.start_index() - offset_idx
  } else {
    offsets.length() - offset_idx
  }
  let prev = {
    let r = last_idx - 1
    if r < 0 {
      0U
    } else {
      short_offset_runs[r].prefix_sum()
    }
  }
  let total = needle - prev
  let mut prefix_sum = 0U
  for _ in 0..<(length - 1) {
    //     length <= offsets.length() - offset_idx
    // ==> length - 1 + offset_idx < offsets.length()
    let offset = offsets[offset_idx]
    prefix_sum = prefix_sum + offset.to_uint()
    if prefix_sum > total {
      break
    }
    offset_idx += 1
  }
  offset_idx % 2 == 1
}

///|
pub let unicode_version : (Byte, Byte, Byte) = (16, 0, 0)

///|
let short_offset_runs_alphabetic : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=706),
  ShortOffsetRunHeader::new(start_index=16, prefix_sum=4681),
  ShortOffsetRunHeader::new(start_index=418, prefix_sum=5741),
  ShortOffsetRunHeader::new(start_index=456, prefix_sum=7958),
  ShortOffsetRunHeader::new(start_index=556, prefix_sum=9398),
  ShortOffsetRunHeader::new(start_index=627, prefix_sum=11264),
  ShortOffsetRunHeader::new(start_index=629, prefix_sum=12293),
  ShortOffsetRunHeader::new(start_index=667, prefix_sum=13312),
  ShortOffsetRunHeader::new(start_index=691, prefix_sum=19904),
  ShortOffsetRunHeader::new(start_index=692, prefix_sum=42125),
  ShortOffsetRunHeader::new(start_index=694, prefix_sum=42509),
  ShortOffsetRunHeader::new(start_index=698, prefix_sum=55204),
  ShortOffsetRunHeader::new(start_index=788, prefix_sum=63744),
  ShortOffsetRunHeader::new(start_index=793, prefix_sum=64110),
  ShortOffsetRunHeader::new(start_index=794, prefix_sum=64830),
  ShortOffsetRunHeader::new(start_index=816, prefix_sum=66176),
  ShortOffsetRunHeader::new(start_index=857, prefix_sum=67383),
  ShortOffsetRunHeader::new(start_index=904, prefix_sum=73440),
  ShortOffsetRunHeader::new(start_index=1221, prefix_sum=74650),
  ShortOffsetRunHeader::new(start_index=1232, prefix_sum=77712),
  ShortOffsetRunHeader::new(start_index=1237, prefix_sum=78896),
  ShortOffsetRunHeader::new(start_index=1240, prefix_sum=82939),
  ShortOffsetRunHeader::new(start_index=1244, prefix_sum=83527),
  ShortOffsetRunHeader::new(start_index=1246, prefix_sum=90368),
  ShortOffsetRunHeader::new(start_index=1247, prefix_sum=92160),
  ShortOffsetRunHeader::new(start_index=1249, prefix_sum=92729),
  ShortOffsetRunHeader::new(start_index=1250, prefix_sum=93504),
  ShortOffsetRunHeader::new(start_index=1265, prefix_sum=100344),
  ShortOffsetRunHeader::new(start_index=1282, prefix_sum=101590),
  ShortOffsetRunHeader::new(start_index=1284, prefix_sum=110576),
  ShortOffsetRunHeader::new(start_index=1287, prefix_sum=110883),
  ShortOffsetRunHeader::new(start_index=1294, prefix_sum=111356),
  ShortOffsetRunHeader::new(start_index=1304, prefix_sum=113664),
  ShortOffsetRunHeader::new(start_index=1305, prefix_sum=119808),
  ShortOffsetRunHeader::new(start_index=1315, prefix_sum=120486),
  ShortOffsetRunHeader::new(start_index=1352, prefix_sum=122624),
  ShortOffsetRunHeader::new(start_index=1375, prefix_sum=123536),
  ShortOffsetRunHeader::new(start_index=1399, prefix_sum=124112),
  ShortOffsetRunHeader::new(start_index=1403, prefix_sum=124896),
  ShortOffsetRunHeader::new(start_index=1409, prefix_sum=126464),
  ShortOffsetRunHeader::new(start_index=1425, prefix_sum=127280),
  ShortOffsetRunHeader::new(start_index=1491, prefix_sum=131072),
  ShortOffsetRunHeader::new(start_index=1497, prefix_sum=173792),
  ShortOffsetRunHeader::new(start_index=1498, prefix_sum=177978),
  ShortOffsetRunHeader::new(start_index=1500, prefix_sum=183970),
  ShortOffsetRunHeader::new(start_index=1504, prefix_sum=191457),
  ShortOffsetRunHeader::new(start_index=1506, prefix_sum=192094),
  ShortOffsetRunHeader::new(start_index=1508, prefix_sum=194560),
  ShortOffsetRunHeader::new(start_index=1509, prefix_sum=195102),
  ShortOffsetRunHeader::new(start_index=1510, prefix_sum=196608),
  ShortOffsetRunHeader::new(start_index=1511, prefix_sum=201547),
  ShortOffsetRunHeader::new(start_index=1512, prefix_sum=205744),
  ShortOffsetRunHeader::new(start_index=1514, prefix_sum=1319856),
]

///|
let offsets_alphabetic : Bytes = [
  65, 26, 6, 26, 47, 1, 10, 1, 4, 1, 5, 23, 1, 31, 1, 0, 4, 12, 14, 5, 7, 1, 1, 1,
  86, 1, 29, 18, 1, 2, 2, 4, 1, 1, 6, 1, 1, 3, 1, 1, 1, 20, 1, 83, 1, 139, 8, 166,
  1, 38, 2, 1, 6, 41, 39, 14, 1, 1, 1, 2, 1, 2, 1, 1, 8, 27, 4, 4, 29, 11, 5, 56,
  1, 7, 14, 102, 1, 8, 4, 8, 4, 3, 10, 3, 2, 1, 16, 48, 13, 101, 24, 33, 9, 2, 4,
  1, 5, 24, 2, 19, 19, 25, 7, 11, 5, 24, 1, 6, 8, 1, 8, 42, 10, 12, 3, 7, 6, 76,
  1, 16, 1, 3, 4, 15, 13, 19, 1, 8, 2, 2, 2, 22, 1, 7, 1, 1, 3, 4, 3, 8, 2, 2, 2,
  2, 1, 1, 8, 1, 4, 2, 1, 5, 12, 2, 10, 1, 4, 3, 1, 6, 4, 2, 2, 22, 1, 7, 1, 2, 1,
  2, 1, 2, 4, 5, 4, 2, 2, 2, 4, 1, 7, 4, 1, 1, 17, 6, 11, 3, 1, 9, 1, 3, 1, 22, 1,
  7, 1, 2, 1, 5, 3, 9, 1, 3, 1, 2, 3, 1, 15, 4, 21, 4, 4, 3, 1, 8, 2, 2, 2, 22, 1,
  7, 1, 2, 1, 5, 3, 8, 2, 2, 2, 2, 9, 2, 4, 2, 1, 5, 13, 1, 16, 2, 1, 6, 3, 3, 1,
  4, 3, 2, 1, 1, 1, 2, 3, 2, 3, 3, 3, 12, 4, 5, 3, 3, 1, 3, 3, 1, 6, 1, 40, 13, 1,
  3, 1, 23, 1, 16, 3, 8, 1, 3, 1, 3, 8, 2, 1, 3, 2, 1, 2, 4, 28, 4, 1, 8, 1, 3, 1,
  23, 1, 10, 1, 5, 3, 8, 1, 3, 1, 3, 8, 2, 6, 2, 1, 4, 13, 3, 12, 13, 1, 3, 1, 41,
  2, 8, 1, 3, 1, 3, 1, 1, 5, 4, 7, 5, 22, 6, 1, 3, 1, 18, 3, 24, 1, 9, 1, 1, 2, 7,
  8, 6, 1, 1, 1, 8, 18, 2, 13, 58, 5, 7, 6, 1, 51, 2, 1, 1, 1, 5, 1, 24, 1, 1, 1,
  19, 1, 3, 2, 5, 1, 1, 6, 1, 14, 4, 32, 1, 63, 8, 1, 36, 4, 19, 4, 16, 1, 36, 67,
  55, 1, 1, 2, 5, 16, 64, 10, 4, 2, 38, 1, 1, 5, 1, 2, 43, 1, 0, 1, 4, 2, 7, 1, 1,
  1, 4, 2, 41, 1, 4, 2, 33, 1, 4, 2, 7, 1, 1, 1, 4, 2, 15, 1, 57, 1, 4, 2, 67, 37,
  16, 16, 86, 2, 6, 3, 0, 2, 17, 1, 26, 5, 75, 3, 11, 7, 20, 11, 21, 12, 20, 12,
  13, 1, 3, 1, 2, 12, 52, 2, 19, 14, 1, 4, 1, 67, 89, 7, 43, 5, 70, 10, 31, 1, 12,
  4, 9, 23, 30, 2, 5, 11, 44, 4, 26, 54, 28, 4, 63, 2, 20, 50, 1, 23, 2, 11, 3, 49,
  52, 1, 15, 1, 8, 51, 42, 2, 4, 10, 44, 1, 11, 14, 55, 22, 3, 10, 36, 2, 11, 5,
  43, 2, 3, 41, 4, 1, 6, 1, 2, 3, 1, 5, 192, 19, 34, 11, 0, 2, 6, 2, 38, 2, 6, 2,
  8, 1, 1, 1, 1, 1, 1, 1, 31, 2, 53, 1, 7, 1, 1, 3, 3, 1, 7, 3, 4, 2, 6, 4, 13, 5,
  3, 1, 7, 116, 1, 13, 1, 16, 13, 101, 1, 4, 1, 2, 10, 1, 1, 3, 5, 6, 1, 1, 1, 1,
  1, 1, 4, 1, 11, 2, 4, 5, 5, 4, 1, 17, 41, 0, 52, 0, 229, 6, 4, 3, 2, 12, 38, 1,
  1, 5, 1, 2, 56, 7, 1, 16, 23, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1,
  32, 47, 1, 0, 3, 25, 9, 7, 5, 2, 5, 4, 86, 6, 3, 1, 90, 1, 4, 5, 43, 1, 94, 17,
  32, 48, 16, 0, 0, 64, 0, 67, 46, 2, 0, 3, 16, 10, 2, 20, 47, 5, 8, 3, 113, 39,
  9, 2, 103, 2, 67, 2, 2, 1, 1, 1, 8, 21, 20, 1, 33, 24, 52, 12, 68, 1, 1, 44, 6,
  3, 1, 1, 3, 10, 33, 5, 35, 13, 29, 3, 51, 1, 12, 15, 1, 16, 16, 10, 5, 1, 55, 9,
  14, 18, 23, 3, 69, 1, 1, 1, 1, 24, 3, 2, 16, 2, 4, 11, 6, 2, 6, 2, 6, 9, 7, 1,
  7, 1, 43, 1, 14, 6, 123, 21, 0, 12, 23, 4, 49, 0, 0, 2, 106, 38, 7, 12, 5, 5, 12,
  1, 13, 1, 5, 1, 1, 1, 2, 1, 2, 1, 108, 33, 0, 18, 64, 2, 54, 40, 12, 116, 5, 1,
  135, 36, 26, 6, 26, 11, 89, 3, 6, 2, 6, 2, 6, 2, 3, 35, 12, 1, 26, 1, 19, 1, 2,
  1, 15, 2, 14, 34, 123, 69, 53, 0, 29, 3, 49, 47, 32, 13, 30, 5, 43, 5, 30, 2, 36,
  4, 8, 1, 5, 42, 158, 18, 36, 4, 36, 4, 40, 8, 52, 12, 11, 1, 15, 1, 7, 1, 2, 1,
  11, 1, 15, 1, 7, 1, 2, 3, 52, 12, 0, 9, 22, 10, 8, 24, 6, 1, 42, 1, 9, 69, 6, 2,
  1, 1, 44, 1, 2, 3, 1, 2, 23, 10, 23, 9, 31, 65, 19, 1, 2, 10, 22, 10, 26, 70, 56,
  6, 2, 64, 4, 1, 2, 5, 8, 1, 3, 1, 29, 42, 29, 3, 29, 35, 8, 1, 28, 27, 54, 10,
  22, 10, 19, 13, 18, 110, 73, 55, 51, 13, 51, 13, 40, 34, 28, 3, 1, 5, 23, 250,
  42, 1, 2, 3, 2, 16, 3, 55, 1, 3, 29, 10, 1, 8, 22, 42, 18, 46, 21, 27, 23, 9, 70,
  43, 5, 10, 57, 9, 1, 13, 25, 23, 51, 17, 4, 8, 35, 3, 1, 9, 64, 1, 4, 9, 2, 10,
  1, 1, 1, 35, 18, 1, 34, 2, 1, 6, 4, 62, 7, 1, 1, 1, 4, 1, 15, 1, 10, 7, 57, 23,
  4, 1, 8, 2, 2, 2, 22, 1, 7, 1, 2, 1, 5, 3, 8, 2, 2, 2, 2, 3, 1, 6, 1, 5, 7, 28,
  10, 1, 1, 2, 1, 1, 38, 1, 10, 1, 1, 2, 1, 1, 4, 1, 2, 3, 1, 1, 1, 44, 66, 1, 3,
  1, 4, 20, 3, 30, 66, 2, 2, 1, 1, 184, 54, 2, 7, 25, 6, 34, 63, 1, 1, 3, 1, 59,
  54, 2, 1, 71, 27, 2, 14, 21, 7, 185, 57, 103, 64, 31, 8, 2, 1, 2, 8, 1, 2, 1, 30,
  1, 2, 2, 2, 2, 4, 93, 8, 2, 46, 2, 6, 1, 1, 1, 2, 27, 51, 2, 10, 17, 72, 5, 1,
  18, 73, 199, 33, 31, 9, 1, 45, 1, 7, 1, 1, 49, 30, 2, 22, 1, 14, 73, 7, 1, 2, 1,
  44, 3, 1, 1, 2, 1, 3, 1, 1, 2, 2, 24, 6, 1, 2, 1, 37, 1, 2, 1, 4, 1, 1, 0, 23,
  9, 17, 1, 41, 3, 3, 111, 1, 79, 0, 102, 111, 17, 196, 0, 97, 15, 0, 17, 6, 25,
  0, 5, 0, 0, 47, 0, 0, 7, 31, 17, 79, 17, 30, 18, 48, 16, 4, 31, 21, 5, 19, 0, 45,
  211, 64, 128, 75, 4, 57, 7, 17, 64, 2, 1, 1, 12, 2, 14, 0, 8, 0, 41, 10, 0, 4,
  1, 7, 1, 2, 1, 0, 15, 1, 29, 3, 2, 1, 14, 4, 8, 0, 0, 107, 5, 13, 3, 9, 7, 10,
  4, 1, 0, 85, 1, 71, 1, 2, 2, 1, 2, 2, 2, 4, 1, 12, 1, 1, 1, 7, 1, 65, 1, 4, 2,
  8, 1, 7, 1, 28, 1, 4, 1, 5, 1, 1, 3, 7, 1, 0, 2, 25, 1, 25, 1, 31, 1, 25, 1, 31,
  1, 25, 1, 31, 1, 25, 1, 31, 1, 25, 1, 8, 0, 31, 6, 6, 213, 7, 1, 17, 2, 7, 1, 2,
  1, 5, 5, 62, 33, 1, 112, 45, 10, 7, 16, 1, 0, 30, 18, 44, 0, 28, 228, 30, 2, 1,
  0, 7, 1, 4, 1, 2, 1, 15, 1, 197, 59, 68, 3, 1, 3, 1, 0, 4, 1, 27, 1, 2, 1, 1, 2,
  1, 1, 10, 1, 4, 1, 1, 1, 1, 6, 1, 4, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1,
  1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 4, 1, 7, 1, 4, 1, 4, 1, 1, 1, 10, 1, 17, 5,
  3, 1, 5, 1, 17, 0, 26, 6, 26, 6, 26, 0, 0, 32, 0, 6, 222, 2, 0, 14, 0, 15, 0, 0,
  0, 0, 0, 5, 0, 0,
]

///|
pub fn is_alphabetic(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_alphabetic` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_alphabetic` are smaller than `offsets_alphabetic.len()`.
  skip_search(c, short_offset_runs_alphabetic, offsets_alphabetic)
}

///|
let short_offset_runs_case_ignorable : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=688),
  ShortOffsetRunHeader::new(start_index=21, prefix_sum=4957),
  ShortOffsetRunHeader::new(start_index=273, prefix_sum=5906),
  ShortOffsetRunHeader::new(start_index=275, prefix_sum=8125),
  ShortOffsetRunHeader::new(start_index=385, prefix_sum=11388),
  ShortOffsetRunHeader::new(start_index=419, prefix_sum=12293),
  ShortOffsetRunHeader::new(start_index=431, prefix_sum=40981),
  ShortOffsetRunHeader::new(start_index=443, prefix_sum=42232),
  ShortOffsetRunHeader::new(start_index=445, prefix_sum=42508),
  ShortOffsetRunHeader::new(start_index=447, prefix_sum=64286),
  ShortOffsetRunHeader::new(start_index=543, prefix_sum=65024),
  ShortOffsetRunHeader::new(start_index=547, prefix_sum=66045),
  ShortOffsetRunHeader::new(start_index=577, prefix_sum=67456),
  ShortOffsetRunHeader::new(start_index=583, prefix_sum=68097),
  ShortOffsetRunHeader::new(start_index=589, prefix_sum=68900),
  ShortOffsetRunHeader::new(start_index=601, prefix_sum=69291),
  ShortOffsetRunHeader::new(start_index=609, prefix_sum=71727),
  ShortOffsetRunHeader::new(start_index=733, prefix_sum=71995),
  ShortOffsetRunHeader::new(start_index=737, prefix_sum=72752),
  ShortOffsetRunHeader::new(start_index=765, prefix_sum=73459),
  ShortOffsetRunHeader::new(start_index=795, prefix_sum=78896),
  ShortOffsetRunHeader::new(start_index=807, prefix_sum=90398),
  ShortOffsetRunHeader::new(start_index=811, prefix_sum=92912),
  ShortOffsetRunHeader::new(start_index=815, prefix_sum=93504),
  ShortOffsetRunHeader::new(start_index=821, prefix_sum=94031),
  ShortOffsetRunHeader::new(start_index=825, prefix_sum=110576),
  ShortOffsetRunHeader::new(start_index=833, prefix_sum=113821),
  ShortOffsetRunHeader::new(start_index=839, prefix_sum=118528),
  ShortOffsetRunHeader::new(start_index=843, prefix_sum=119143),
  ShortOffsetRunHeader::new(start_index=847, prefix_sum=121344),
  ShortOffsetRunHeader::new(start_index=857, prefix_sum=122880),
  ShortOffsetRunHeader::new(start_index=869, prefix_sum=123566),
  ShortOffsetRunHeader::new(start_index=885, prefix_sum=124139),
  ShortOffsetRunHeader::new(start_index=889, prefix_sum=125136),
  ShortOffsetRunHeader::new(start_index=893, prefix_sum=127995),
  ShortOffsetRunHeader::new(start_index=897, prefix_sum=917505),
  ShortOffsetRunHeader::new(start_index=899, prefix_sum=2032112),
]

///|
let offsets_case_ignorable : Bytes = [
  39, 1, 6, 1, 11, 1, 35, 1, 1, 1, 71, 1, 4, 1, 1, 1, 4, 1, 2, 2, 0, 192, 4, 2, 4,
  1, 9, 2, 1, 1, 251, 7, 207, 1, 5, 1, 49, 45, 1, 1, 1, 2, 1, 2, 1, 1, 44, 1, 11,
  6, 10, 11, 1, 1, 35, 1, 10, 21, 16, 1, 101, 8, 1, 10, 1, 4, 33, 1, 1, 1, 30, 27,
  91, 11, 58, 11, 4, 1, 2, 1, 24, 24, 43, 3, 44, 1, 7, 2, 5, 9, 41, 58, 55, 1, 1,
  1, 4, 8, 4, 1, 3, 7, 10, 2, 13, 1, 15, 1, 58, 1, 4, 4, 8, 1, 20, 2, 26, 1, 2, 2,
  57, 1, 4, 2, 4, 2, 2, 3, 3, 1, 30, 2, 3, 1, 11, 2, 57, 1, 4, 5, 1, 2, 4, 1, 20,
  2, 22, 6, 1, 1, 58, 1, 2, 1, 1, 4, 8, 1, 7, 2, 11, 2, 30, 1, 61, 1, 12, 1, 50,
  1, 3, 1, 55, 1, 1, 3, 5, 3, 1, 4, 7, 2, 11, 2, 29, 1, 58, 1, 2, 1, 6, 1, 5, 2,
  20, 2, 28, 2, 57, 2, 4, 4, 8, 1, 20, 2, 29, 1, 72, 1, 7, 3, 1, 1, 90, 1, 2, 7,
  11, 9, 98, 1, 2, 9, 9, 1, 1, 7, 73, 2, 27, 1, 1, 1, 1, 1, 55, 14, 1, 5, 1, 2, 5,
  11, 1, 36, 9, 1, 102, 4, 1, 6, 1, 2, 2, 2, 25, 2, 4, 3, 16, 4, 13, 1, 2, 2, 6,
  1, 15, 1, 94, 1, 0, 3, 0, 3, 29, 2, 30, 2, 30, 2, 64, 2, 1, 7, 8, 1, 2, 11, 3,
  1, 5, 1, 45, 5, 51, 1, 65, 2, 34, 1, 118, 3, 4, 2, 9, 1, 6, 3, 219, 2, 2, 1, 58,
  1, 1, 7, 1, 1, 1, 1, 2, 8, 6, 10, 2, 1, 39, 1, 8, 31, 49, 4, 48, 1, 1, 5, 1, 1,
  5, 1, 40, 9, 12, 2, 32, 4, 2, 2, 1, 3, 56, 1, 1, 2, 3, 1, 1, 3, 58, 8, 2, 2, 64,
  6, 82, 3, 1, 13, 1, 7, 4, 1, 6, 1, 3, 2, 50, 63, 13, 1, 34, 101, 0, 1, 1, 3, 11,
  3, 13, 3, 13, 3, 13, 2, 12, 5, 8, 2, 10, 1, 2, 1, 2, 5, 49, 5, 1, 10, 1, 1, 13,
  1, 16, 13, 51, 33, 0, 2, 113, 3, 125, 1, 15, 1, 96, 32, 47, 1, 0, 1, 36, 4, 3,
  5, 5, 1, 93, 6, 93, 3, 0, 1, 0, 6, 0, 1, 98, 4, 1, 10, 1, 1, 28, 4, 80, 2, 14,
  34, 78, 1, 23, 3, 103, 3, 3, 2, 8, 1, 3, 1, 4, 1, 25, 2, 5, 1, 151, 2, 26, 18,
  13, 1, 38, 8, 25, 11, 46, 3, 48, 1, 2, 4, 2, 2, 17, 1, 21, 2, 66, 6, 2, 2, 2, 2,
  12, 1, 8, 1, 35, 1, 11, 1, 51, 1, 1, 3, 2, 2, 5, 2, 1, 1, 27, 1, 14, 2, 5, 2, 1,
  1, 100, 5, 9, 3, 121, 1, 2, 1, 4, 1, 0, 1, 147, 17, 0, 16, 3, 1, 12, 16, 34, 1,
  2, 1, 169, 1, 7, 1, 6, 1, 11, 1, 35, 1, 1, 1, 47, 1, 45, 2, 67, 1, 21, 3, 0, 1,
  226, 1, 149, 5, 0, 6, 1, 42, 1, 9, 0, 3, 1, 2, 5, 4, 40, 3, 4, 1, 165, 2, 0, 4,
  38, 1, 26, 5, 1, 1, 0, 2, 79, 4, 70, 11, 49, 4, 123, 1, 54, 15, 41, 1, 2, 2, 10,
  3, 49, 4, 2, 2, 2, 1, 4, 1, 10, 1, 50, 3, 36, 5, 1, 8, 62, 1, 12, 2, 52, 9, 10,
  4, 2, 1, 95, 3, 2, 1, 1, 2, 6, 1, 2, 1, 157, 1, 3, 8, 21, 2, 57, 2, 3, 1, 37, 7,
  3, 5, 70, 6, 13, 1, 1, 1, 1, 1, 14, 2, 85, 8, 2, 3, 1, 1, 23, 1, 84, 6, 1, 1, 4,
  2, 1, 2, 238, 4, 6, 2, 1, 2, 27, 2, 85, 8, 2, 1, 1, 2, 106, 1, 1, 1, 2, 6, 1, 1,
  101, 1, 1, 1, 2, 4, 1, 5, 0, 9, 1, 2, 0, 2, 1, 1, 4, 1, 144, 4, 2, 2, 4, 1, 32,
  10, 40, 6, 2, 4, 8, 1, 9, 6, 2, 3, 46, 13, 1, 2, 0, 7, 1, 6, 1, 1, 82, 22, 2, 7,
  1, 2, 1, 2, 122, 6, 3, 1, 1, 2, 1, 7, 1, 1, 72, 2, 3, 1, 1, 1, 0, 2, 11, 2, 52,
  5, 5, 1, 1, 1, 23, 1, 0, 17, 6, 15, 0, 12, 3, 3, 0, 5, 59, 7, 9, 4, 0, 3, 40, 2,
  0, 1, 63, 17, 64, 2, 1, 2, 0, 4, 1, 7, 1, 2, 0, 2, 1, 4, 0, 46, 2, 23, 0, 3, 9,
  16, 2, 7, 30, 4, 148, 3, 0, 55, 4, 50, 8, 1, 14, 1, 22, 5, 1, 15, 0, 7, 1, 17,
  2, 7, 1, 2, 1, 5, 5, 62, 33, 1, 160, 14, 0, 1, 61, 4, 0, 5, 254, 2, 0, 7, 109,
  8, 0, 5, 0, 1, 30, 96, 128, 240, 0,
]

///|
pub fn is_case_ignorable(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_case_ignorable` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_case_ignorable` are smaller than `offsets_case_ignorable.len()`.
  skip_search(c, short_offset_runs_case_ignorable, offsets_case_ignorable)
}

///|
let short_offset_runs_cased : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=4256),
  ShortOffsetRunHeader::new(start_index=55, prefix_sum=5024),
  ShortOffsetRunHeader::new(start_index=65, prefix_sum=7296),
  ShortOffsetRunHeader::new(start_index=69, prefix_sum=7958),
  ShortOffsetRunHeader::new(start_index=78, prefix_sum=9398),
  ShortOffsetRunHeader::new(start_index=153, prefix_sum=11264),
  ShortOffsetRunHeader::new(start_index=155, prefix_sum=42560),
  ShortOffsetRunHeader::new(start_index=167, prefix_sum=43824),
  ShortOffsetRunHeader::new(start_index=187, prefix_sum=64256),
  ShortOffsetRunHeader::new(start_index=193, prefix_sum=65313),
  ShortOffsetRunHeader::new(start_index=197, prefix_sum=66560),
  ShortOffsetRunHeader::new(start_index=201, prefix_sum=67456),
  ShortOffsetRunHeader::new(start_index=223, prefix_sum=68736),
  ShortOffsetRunHeader::new(start_index=231, prefix_sum=71840),
  ShortOffsetRunHeader::new(start_index=239, prefix_sum=93760),
  ShortOffsetRunHeader::new(start_index=241, prefix_sum=119808),
  ShortOffsetRunHeader::new(start_index=243, prefix_sum=120486),
  ShortOffsetRunHeader::new(start_index=280, prefix_sum=122624),
  ShortOffsetRunHeader::new(start_index=303, prefix_sum=122928),
  ShortOffsetRunHeader::new(start_index=309, prefix_sum=125184),
  ShortOffsetRunHeader::new(start_index=311, prefix_sum=127280),
  ShortOffsetRunHeader::new(start_index=313, prefix_sum=1241482),
]

///|
let offsets_cased : Bytes = [
  65, 26, 6, 26, 47, 1, 10, 1, 4, 1, 5, 23, 1, 31, 1, 195, 1, 4, 4, 208, 1, 36, 7,
  2, 30, 5, 96, 1, 42, 4, 2, 2, 2, 4, 1, 1, 6, 1, 1, 3, 1, 1, 1, 20, 1, 83, 1, 139,
  8, 166, 1, 38, 9, 41, 0, 38, 1, 1, 5, 1, 2, 43, 1, 4, 0, 86, 2, 6, 0, 11, 5, 43,
  2, 3, 64, 192, 64, 0, 2, 6, 2, 38, 2, 6, 2, 8, 1, 1, 1, 1, 1, 1, 1, 31, 2, 53,
  1, 7, 1, 1, 3, 3, 1, 7, 3, 4, 2, 6, 4, 13, 5, 3, 1, 7, 116, 1, 13, 1, 16, 13, 101,
  1, 4, 1, 2, 10, 1, 1, 3, 5, 6, 1, 1, 1, 1, 1, 1, 4, 1, 6, 4, 1, 2, 4, 5, 5, 4,
  1, 17, 32, 3, 2, 0, 52, 0, 229, 6, 4, 3, 2, 12, 38, 1, 1, 5, 1, 0, 46, 18, 30,
  132, 102, 3, 4, 1, 62, 2, 2, 1, 1, 1, 8, 21, 5, 1, 3, 0, 43, 1, 14, 6, 80, 0, 7,
  12, 5, 0, 26, 6, 26, 0, 80, 96, 36, 4, 36, 116, 11, 1, 15, 1, 7, 1, 2, 1, 11, 1,
  15, 1, 7, 1, 2, 0, 1, 2, 3, 1, 42, 1, 9, 0, 51, 13, 51, 93, 22, 10, 22, 0, 64,
  0, 64, 0, 85, 1, 71, 1, 2, 2, 1, 2, 2, 2, 4, 1, 12, 1, 1, 1, 7, 1, 65, 1, 4, 2,
  8, 1, 7, 1, 28, 1, 4, 1, 5, 1, 1, 3, 7, 1, 0, 2, 25, 1, 25, 1, 31, 1, 25, 1, 31,
  1, 25, 1, 31, 1, 25, 1, 31, 1, 25, 1, 8, 0, 10, 1, 20, 6, 6, 0, 62, 0, 68, 0, 26,
  6, 26, 6, 26, 0,
]

///|
pub fn is_cased(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_cased` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_cased` are smaller than `offsets_cased.len()`.
  skip_search(c, short_offset_runs_cased, offsets_cased)
}

///|
let short_offset_runs_cc : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=1114272),
]

///|
let offsets_cc : Bytes = [0, 32, 95, 33, 0]

///|
pub fn is_cc(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_cc` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_cc` are smaller than `offsets_cc.len()`.
  skip_search(c, short_offset_runs_cc, offsets_cc)
}

///|
let short_offset_runs_grapheme_extend : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=768),
  ShortOffsetRunHeader::new(start_index=1, prefix_sum=1155),
  ShortOffsetRunHeader::new(start_index=3, prefix_sum=1425),
  ShortOffsetRunHeader::new(start_index=5, prefix_sum=4957),
  ShortOffsetRunHeader::new(start_index=249, prefix_sum=5906),
  ShortOffsetRunHeader::new(start_index=251, prefix_sum=8204),
  ShortOffsetRunHeader::new(start_index=345, prefix_sum=11503),
  ShortOffsetRunHeader::new(start_index=349, prefix_sum=12330),
  ShortOffsetRunHeader::new(start_index=355, prefix_sum=42607),
  ShortOffsetRunHeader::new(start_index=359, prefix_sum=43010),
  ShortOffsetRunHeader::new(start_index=367, prefix_sum=64286),
  ShortOffsetRunHeader::new(start_index=433, prefix_sum=65024),
  ShortOffsetRunHeader::new(start_index=435, prefix_sum=65438),
  ShortOffsetRunHeader::new(start_index=439, prefix_sum=66045),
  ShortOffsetRunHeader::new(start_index=441, prefix_sum=68097),
  ShortOffsetRunHeader::new(start_index=447, prefix_sum=68900),
  ShortOffsetRunHeader::new(start_index=459, prefix_sum=69291),
  ShortOffsetRunHeader::new(start_index=463, prefix_sum=71727),
  ShortOffsetRunHeader::new(start_index=599, prefix_sum=72752),
  ShortOffsetRunHeader::new(start_index=631, prefix_sum=73459),
  ShortOffsetRunHeader::new(start_index=661, prefix_sum=78912),
  ShortOffsetRunHeader::new(start_index=671, prefix_sum=90398),
  ShortOffsetRunHeader::new(start_index=675, prefix_sum=92912),
  ShortOffsetRunHeader::new(start_index=679, prefix_sum=94031),
  ShortOffsetRunHeader::new(start_index=683, prefix_sum=113821),
  ShortOffsetRunHeader::new(start_index=691, prefix_sum=118528),
  ShortOffsetRunHeader::new(start_index=693, prefix_sum=119141),
  ShortOffsetRunHeader::new(start_index=697, prefix_sum=121344),
  ShortOffsetRunHeader::new(start_index=709, prefix_sum=122880),
  ShortOffsetRunHeader::new(start_index=721, prefix_sum=123566),
  ShortOffsetRunHeader::new(start_index=735, prefix_sum=124140),
  ShortOffsetRunHeader::new(start_index=739, prefix_sum=125136),
  ShortOffsetRunHeader::new(start_index=743, prefix_sum=917536),
  ShortOffsetRunHeader::new(start_index=747, prefix_sum=2032112),
]

///|
let offsets_grapheme_extend : Bytes = [
  0, 112, 0, 7, 0, 45, 1, 1, 1, 2, 1, 2, 1, 1, 72, 11, 48, 21, 16, 1, 101, 7, 2,
  6, 2, 2, 1, 4, 35, 1, 30, 27, 91, 11, 58, 9, 9, 1, 24, 4, 1, 9, 1, 3, 1, 5, 43,
  3, 59, 9, 42, 24, 1, 32, 55, 1, 1, 1, 4, 8, 4, 1, 3, 7, 10, 2, 29, 1, 58, 1, 1,
  1, 2, 4, 8, 1, 9, 1, 10, 2, 26, 1, 2, 2, 57, 1, 4, 2, 4, 2, 2, 3, 3, 1, 30, 2,
  3, 1, 11, 2, 57, 1, 4, 5, 1, 2, 4, 1, 20, 2, 22, 6, 1, 1, 58, 1, 1, 2, 1, 4, 8,
  1, 7, 3, 10, 2, 30, 1, 59, 1, 1, 1, 12, 1, 9, 1, 40, 1, 3, 1, 55, 1, 1, 3, 5, 3,
  1, 4, 7, 2, 11, 2, 29, 1, 58, 1, 2, 2, 1, 1, 3, 3, 1, 4, 7, 2, 11, 2, 28, 2, 57,
  2, 1, 1, 2, 4, 8, 1, 9, 1, 10, 2, 29, 1, 72, 1, 4, 1, 2, 3, 1, 1, 8, 1, 81, 1,
  2, 7, 12, 8, 98, 1, 2, 9, 11, 7, 73, 2, 27, 1, 1, 1, 1, 1, 55, 14, 1, 5, 1, 2,
  5, 11, 1, 36, 9, 1, 102, 4, 1, 6, 1, 2, 2, 2, 25, 2, 4, 3, 16, 4, 13, 1, 2, 2,
  6, 1, 15, 1, 0, 3, 0, 4, 28, 3, 29, 2, 30, 2, 64, 2, 1, 7, 8, 1, 2, 11, 9, 1, 45,
  3, 1, 1, 117, 2, 34, 1, 118, 3, 4, 2, 9, 1, 6, 3, 219, 2, 2, 1, 58, 1, 1, 7, 1,
  1, 1, 1, 2, 8, 6, 10, 2, 1, 48, 31, 49, 4, 48, 10, 4, 3, 38, 9, 12, 2, 32, 4, 2,
  6, 56, 1, 1, 2, 3, 1, 1, 5, 56, 8, 2, 2, 152, 3, 1, 13, 1, 7, 4, 1, 6, 1, 3, 2,
  198, 64, 0, 1, 195, 33, 0, 3, 141, 1, 96, 32, 0, 6, 105, 2, 0, 4, 1, 10, 32, 2,
  80, 2, 0, 1, 3, 1, 4, 1, 25, 2, 5, 1, 151, 2, 26, 18, 13, 1, 38, 8, 25, 11, 1,
  1, 44, 3, 48, 1, 2, 4, 2, 2, 2, 1, 36, 1, 67, 6, 2, 2, 2, 2, 12, 1, 8, 1, 47, 1,
  51, 1, 1, 3, 2, 2, 5, 2, 1, 1, 42, 2, 8, 1, 238, 1, 2, 1, 4, 1, 0, 1, 0, 16, 16,
  16, 0, 2, 0, 1, 226, 1, 149, 5, 0, 3, 1, 2, 5, 4, 40, 3, 4, 1, 165, 2, 0, 4, 65,
  5, 0, 2, 79, 4, 70, 11, 49, 4, 123, 1, 54, 15, 41, 1, 2, 2, 10, 3, 49, 4, 2, 2,
  7, 1, 61, 3, 36, 5, 1, 8, 62, 1, 12, 2, 52, 9, 1, 1, 8, 4, 2, 1, 95, 3, 2, 4, 6,
  1, 2, 1, 157, 1, 3, 8, 21, 2, 57, 2, 1, 1, 1, 1, 12, 1, 9, 1, 14, 7, 3, 5, 67,
  1, 2, 6, 1, 1, 2, 1, 1, 3, 4, 3, 1, 1, 14, 2, 85, 8, 2, 3, 1, 1, 23, 1, 81, 1,
  2, 6, 1, 1, 2, 1, 1, 2, 1, 2, 235, 1, 2, 4, 6, 2, 1, 2, 27, 2, 85, 8, 2, 1, 1,
  2, 106, 1, 1, 1, 2, 8, 101, 1, 1, 1, 2, 4, 1, 5, 0, 9, 1, 2, 245, 1, 10, 4, 4,
  1, 144, 4, 2, 2, 4, 1, 32, 10, 40, 6, 2, 4, 8, 1, 9, 6, 2, 3, 46, 13, 1, 2, 0,
  7, 1, 6, 1, 1, 82, 22, 2, 7, 1, 2, 1, 2, 122, 6, 3, 1, 1, 2, 1, 7, 1, 1, 72, 2,
  3, 1, 1, 1, 0, 2, 11, 2, 52, 5, 5, 3, 23, 1, 0, 1, 6, 15, 0, 12, 3, 3, 0, 5, 59,
  7, 0, 1, 63, 4, 81, 1, 11, 2, 0, 2, 0, 46, 2, 23, 0, 5, 3, 6, 8, 8, 2, 7, 30, 4,
  148, 3, 0, 55, 4, 50, 8, 1, 14, 1, 22, 5, 1, 15, 0, 7, 1, 17, 2, 7, 1, 2, 1, 5,
  100, 1, 160, 7, 0, 1, 61, 4, 0, 4, 254, 2, 0, 7, 109, 7, 0, 96, 128, 240, 0,
]

///|
pub fn is_grapheme_extend(c : Char) -> Bool {
  c.to_uint() >= 0x300 && lookup_slow_grapheme_extend(c)
}

///|
fn lookup_slow_grapheme_extend(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_grapheme_extend` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_grapheme_extend` are smaller than `offsets_grapheme_extend.len()`.
  skip_search(c, short_offset_runs_grapheme_extend, offsets_grapheme_extend)
}

///|
let bitset_chunks_map_lowercase : Bytes = [
  14, 17, 0, 0, 9, 0, 0, 12, 13, 10, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 15, 0, 8, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 3, 18, 0, 7,
]

///|
let bitset_index_chunks_lowercase : FixedArray[Bytes] = [
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 14, 56, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 43, 0, 52, 48, 50, 33],
  [0, 0, 0, 0, 10, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 3, 0, 16, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27],
  [0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 46, 0, 56, 56, 56, 0, 22, 22, 69, 22, 36, 25, 24, 37],
  [0, 5, 70, 0, 29, 15, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 66, 34, 17, 23, 53, 54, 49, 47, 8, 35, 42, 0, 28, 13, 31],
  [11, 60, 0, 6, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 32, 0],
  [16, 26, 22, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [16, 51, 2, 21, 68, 9, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [16, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [65, 41, 55, 12, 77, 63, 18, 1, 7, 64, 76, 20, 73, 74, 4, 45],
]

///|
let bitset_canonical_lowercase : FixedArray[UInt64] = [
  0b0000000000000000000000000000000000000000000000000000000000000000, 0b1111111111111111110000000000000000000000000011111111111111111111,
  0b1010101010101010101010101010101010101010101010101010100000000010, 0b0000000000000111111111111111111111111111111111111111111111111111,
  0b1111111111111111111111000000000000000000000000001111110111111111, 0b1000000000000010000000000000000000000000000000000000000000000000,
  0b0000111111111111111111111111111111111111000000000000000000000000, 0b0000111111111111111111111111110000000000000000000000000011111111,
  0b1111111111111111111111111111111111111111111111111010101010000101, 0b1111111111111111111111111111111100000000000000000000000000000000,
  0b1111111111111111111111111111110000000000000000000000000000000000, 0b1111111111111111111111110000000000000000000000000000000000000000,
  0b1111111111111111111111000000000000000000000000001111111111101111, 0b1111111111111111111100000000000000000000000000010000000000000000,
  0b1111111111111111000000111111111111110111111111111111111111111111, 0b1111111111111111000000000000000000000000000000000100001111000000,
  0b1111111111111111000000000000000000000000000000000000000000000000, 0b1111111101111111111111111111111110000000000000000000000000000000,
  0b1111110000000000000000000000000011111111111111111111111111000000, 0b1111011111111111111111111111111111111111111111110000000000000000,
  0b1111000000000000000000000000001111110111111111111111111111111100, 0b1010101010101010101010101010101010101010101010101101010101010100,
  0b1010101010101010101010101010101010101010101010101010101010101010, 0b0101010110101010101010101010101010101010101010101010101010101010,
  0b0100000011011111000000001111111100000000111111110000000011111111, 0b0011111111111111000000001111111100000000111111110000000000111111,
  0b0011111111011010000101010110001011111111111111111111111111111111, 0b0011111100000000000000000000000000000000000000000000000000000000,
  0b0011110010001010000000000000000000000000000000000000000000100000, 0b0011001000010000100000000000000000000000000010001100010000000000,
  0b0001101111111011111111111111101111111111100000000000000000000000, 0b0001100100101111101010101010101010101010111000110111111111111111,
  0b0000011111111101111111111111111111111111111111111111111110111001, 0b0000011101011100000000000000000000001010101010100010010100001010,
  0b0000010000100000000001000000000000000000000000000000000000000000, 0b0000000111111111111111111111111111111111111011111111111111111111,
  0b0000000011111111000000001111111100000000001111110000000011111111, 0b0000000011011100000000001111111100000000110011110000000011011100,
  0b0000000000001000010100000001101010101010101010101010101010101010, 0b0000000000000000001000001011111111111111111111111111111111111111,
  0b0000000000000000000001111110000001111111111111111111101111111111, 0b0000000000000000000000001111111111111111110111111100000000000000,
  0b0000000000000000000000000001111100000000000000000000000000000011, 0b0000000000000000000000000000000000111010101010101010101010101010,
  0b0000000000000000000000000000000000000000111110000000000001111111, 0b0000000000000000000000000000000000000000000000000000101111110111,
  0b0000000000000000000000000000000000000000000000000000010111111111, 0b1001001111111010101010101010101010101010101010101010101010101010,
  0b1001010111111111101010101010101010101010101010101010101010101010, 0b1010101000101001101010101010101010110101010101010101001001000000,
  0b1010101010100000100000101010101010101010101110100101000010101010, 0b1010101010101010101010101010101011111111111111111111111111111111,
  0b1010101010101011101010101010100000000000000000000000000000000000, 0b1101010010101010101010101010101010101010101010101010101101010101,
  0b1110011001010001001011010010101001001110001001000011000100101001, 0b1110101111000000000000000000000000001111111111111111111111111100,
]

///|
let bitset_mapping_lowercase : FixedArray[(Byte, Byte)] = [
  (0, 64),
  (1, 188),
  (1, 186),
  (1, 183),
  (1, 176),
  (1, 109),
  (1, 124),
  (1, 126),
  (1, 66),
  (1, 70),
  (1, 77),
  (2, 146),
  (2, 144),
  (2, 83),
  (3, 93),
  (3, 147),
  (3, 133),
  (4, 12),
  (4, 6),
  (5, 187),
  (6, 78),
  (7, 132),
]

///|
pub fn is_lowercase(c : Char) -> Bool {
  bitset_search(
    c.to_int(),
    bitset_chunks_map_lowercase,
    bitset_index_chunks_lowercase,
    bitset_canonical_lowercase,
    bitset_mapping_lowercase,
  )
}

///|
let short_offset_runs_n : FixedArray[ShortOffsetRunHeader] = [
  ShortOffsetRunHeader::new(start_index=0, prefix_sum=1632),
  ShortOffsetRunHeader::new(start_index=9, prefix_sum=2406),
  ShortOffsetRunHeader::new(start_index=15, prefix_sum=4160),
  ShortOffsetRunHeader::new(start_index=49, prefix_sum=4969),
  ShortOffsetRunHeader::new(start_index=53, prefix_sum=5870),
  ShortOffsetRunHeader::new(start_index=55, prefix_sum=6470),
  ShortOffsetRunHeader::new(start_index=63, prefix_sum=8304),
  ShortOffsetRunHeader::new(start_index=79, prefix_sum=9312),
  ShortOffsetRunHeader::new(start_index=89, prefix_sum=10102),
  ShortOffsetRunHeader::new(start_index=93, prefix_sum=11517),
  ShortOffsetRunHeader::new(start_index=95, prefix_sum=12295),
  ShortOffsetRunHeader::new(start_index=97, prefix_sum=12690),
  ShortOffsetRunHeader::new(start_index=103, prefix_sum=42528),
  ShortOffsetRunHeader::new(start_index=115, prefix_sum=43056),
  ShortOffsetRunHeader::new(start_index=119, prefix_sum=44016),
  ShortOffsetRunHeader::new(start_index=131, prefix_sum=65296),
  ShortOffsetRunHeader::new(start_index=133, prefix_sum=65799),
  ShortOffsetRunHeader::new(start_index=135, prefix_sum=66273),
  ShortOffsetRunHeader::new(start_index=141, prefix_sum=67672),
  ShortOffsetRunHeader::new(start_index=153, prefix_sum=68858),
  ShortOffsetRunHeader::new(start_index=183, prefix_sum=69216),
  ShortOffsetRunHeader::new(start_index=189, prefix_sum=70736),
  ShortOffsetRunHeader::new(start_index=209, prefix_sum=71248),
  ShortOffsetRunHeader::new(start_index=213, prefix_sum=71904),
  ShortOffsetRunHeader::new(start_index=221, prefix_sum=72688),
  ShortOffsetRunHeader::new(start_index=225, prefix_sum=73552),
  ShortOffsetRunHeader::new(start_index=233, prefix_sum=74752),
  ShortOffsetRunHeader::new(start_index=237, prefix_sum=90416),
  ShortOffsetRunHeader::new(start_index=239, prefix_sum=92768),
  ShortOffsetRunHeader::new(start_index=241, prefix_sum=93552),
  ShortOffsetRunHeader::new(start_index=249, prefix_sum=93824),
  ShortOffsetRunHeader::new(start_index=251, prefix_sum=118000),
  ShortOffsetRunHeader::new(start_index=253, prefix_sum=119488),
  ShortOffsetRunHeader::new(start_index=255, prefix_sum=120782),
  ShortOffsetRunHeader::new(start_index=261, prefix_sum=123200),
  ShortOffsetRunHeader::new(start_index=263, prefix_sum=123632),
  ShortOffsetRunHeader::new(start_index=265, prefix_sum=124144),
  ShortOffsetRunHeader::new(start_index=267, prefix_sum=125127),
  ShortOffsetRunHeader::new(start_index=271, prefix_sum=126065),
  ShortOffsetRunHeader::new(start_index=275, prefix_sum=127232),
  ShortOffsetRunHeader::new(start_index=285, prefix_sum=130032),
  ShortOffsetRunHeader::new(start_index=287, prefix_sum=1244154),
]

///|
let offsets_n : Bytes = [
  48, 10, 120, 2, 5, 1, 2, 3, 0, 10, 134, 10, 198, 10, 0, 10, 118, 10, 4, 6, 108,
  10, 118, 10, 118, 10, 2, 6, 110, 13, 115, 10, 8, 7, 103, 10, 104, 7, 7, 19, 109,
  10, 96, 10, 118, 10, 70, 20, 0, 10, 70, 10, 0, 20, 0, 3, 239, 10, 6, 10, 22, 10,
  0, 10, 128, 11, 165, 10, 6, 10, 182, 10, 86, 10, 134, 10, 6, 10, 0, 1, 3, 6, 6,
  10, 198, 51, 2, 5, 0, 60, 78, 22, 0, 30, 0, 1, 0, 1, 25, 9, 14, 3, 0, 4, 138, 10,
  30, 8, 1, 15, 32, 10, 39, 15, 0, 10, 188, 10, 0, 6, 154, 10, 38, 10, 198, 10, 22,
  10, 86, 10, 0, 10, 0, 10, 0, 45, 12, 57, 17, 2, 0, 27, 36, 4, 29, 1, 8, 1, 134,
  5, 202, 10, 0, 8, 25, 7, 39, 9, 75, 5, 22, 6, 160, 2, 2, 16, 2, 46, 64, 9, 52,
  2, 30, 3, 75, 5, 104, 8, 24, 8, 41, 7, 0, 6, 48, 10, 6, 10, 0, 31, 158, 10, 42,
  4, 112, 7, 134, 30, 128, 10, 60, 10, 144, 10, 7, 20, 251, 10, 0, 10, 118, 10, 0,
  10, 102, 10, 6, 20, 76, 12, 0, 19, 93, 10, 0, 10, 86, 29, 227, 10, 70, 10, 0, 10,
  102, 21, 0, 111, 0, 10, 0, 10, 86, 10, 134, 10, 1, 7, 0, 10, 0, 23, 0, 10, 0, 20,
  12, 20, 108, 25, 0, 50, 0, 10, 0, 10, 0, 10, 247, 10, 0, 9, 128, 10, 0, 59, 1,
  3, 1, 4, 76, 45, 1, 15, 0, 13, 0, 10, 0,
]

///|
pub fn is_n(c : Char) -> Bool {
  // SAFETY: We just ensured the last element of `short_offset_runs_n` is greater than `@char.max_value`
  // and the start indices of all elements in `short_offset_runs_n` are smaller than `offsets_n.len()`.
  skip_search(c, short_offset_runs_n, offsets_n)
}

///|
let bitset_chunks_map_uppercase : Bytes = [
  12, 15, 6, 6, 0, 6, 6, 2, 4, 11, 6, 16, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 14, 6, 10, 6, 6, 1, 6, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 13, 6, 6, 6, 6, 9, 6, 3,
]

///|
let bitset_index_chunks_uppercase : FixedArray[Bytes] = [
  [44, 44, 5, 35, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 5, 1],
  [44, 44, 5, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 40, 44, 44, 44, 44, 44, 17, 17, 63, 17, 43, 29, 24, 23],
  [44, 44, 44, 44, 9, 8, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 44, 44, 37, 28, 67, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 44, 44],
  [44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 44, 44, 44, 44, 44, 44, 44, 55, 44, 44, 44, 44, 44, 44],
  [44, 44, 44, 44, 44, 44, 44, 44, 44, 62, 61, 44, 20, 14, 16, 4],
  [44, 44, 44, 44, 56, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 59, 44, 44, 31, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 44, 60, 46, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [44, 49, 44, 32, 36, 21, 22, 15, 13, 34, 44, 44, 44, 11, 30, 39],
  [52, 54, 26, 50, 12, 7, 25, 51, 41, 53, 6, 3, 66, 65, 64, 68],
  [57, 44, 9, 47, 44, 42, 33, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [58, 19, 2, 18, 10, 48, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
  [58, 38, 17, 27, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44],
]

///|
let bitset_canonical_uppercase : FixedArray[UInt64] = [
  0b0000011111111111111111111111111000000000000000000000000000000000, 0b0000000000111111111111111111111111111111111111111111111111111111,
  0b0101010101010101010101010101010101010101010101010101010000000001, 0b0000011111111111111111111111110000000000000000000000000000000001,
  0b0000000000100000000000000000000000010101010000010001101011110101, 0b1111111111111111111111111111111100000000000000000000000000000000,
  0b1111111111111111111111110000000000000000000000000000001111111111, 0b1111111111111111111100000000000000000000000000011111110001011111,
  0b1111111111111111000000111111111111111111111111110000001111111111, 0b1111111111111111000000000000000000000000000000000000000000000000,
  0b1111111111111110010101010101010101010101010101010101010101010101, 0b1000000001000101000000000000000000000000000000000000000000000000,
  0b0111101100000000000000000000000000011111110111111110011110110000, 0b0110110000000101010101010101010101010101010101010101010101010101,
  0b0110101000000000010101010101010101010101010101010101010101010101, 0b0101010111010010010101010101010101001010101010101010010010010000,
  0b0101010101011111011111010101010101010101010001010010100001010101, 0b0101010101010101010101010101010101010101010101010101010101010101,
  0b0101010101010101010101010101010101010101010101010010101010101011, 0b0101010101010101010101010101010100000000000000000000000000000000,
  0b0101010101010100010101010101010000000000000000000000000000000000, 0b0010101101010101010101010101010101010101010101010101010010101010,
  0b0001000110101110110100101101010110110001110110111100111011010110, 0b0000111100000000000111110000000000001111000000000000111100000000,
  0b0000111100000000000000000000000000000000000000000000000000000000, 0b0000001111111111111111111111111100000000000000000000000000111111,
  0b0000000000111111110111100110010011010000000000000000000000000011, 0b0000000000000100001010000000010101010101010101010101010101010101,
  0b0000000000000000111111111111111100000000000000000000000000100000, 0b0000000000000000111111110000000010101010000000000011111100000000,
  0b0000000000000000000011111111101111111111111111101101011101000000, 0b0000000000000000000000000011111111111111111111110000000000000000,
  0b0000000000000000000000000000000001111111011111111111111111111111, 0b0000000000000000000000000000000000000000001101111111011111111111,
  0b0000000000000000000000000000000000000000000000000101010101111010, 0b0000000000000000000000000000000000000000000000000010000010111111,
  0b1010101001010101010101010101010101010101010101010101010101010101, 0b1100000000001111001111010101000000111110001001110011100010000100,
  0b1100000000100101111010101001110100000000000000000000000000000000, 0b1110011010010000010101010101010101010101000111001000000000000000,
  0b1110011111111111111111111111111111111111111111110000001000000000, 0b1111000000000000000000000000001111111111111111111111111100000000,
  0b1111011111111111000000000000000000000000000000000000000000000000, 0b1111111100000000111111110000000000111111000000001111111100000000,
]

///|
let bitset_mapping_uppercase : FixedArray[(Byte, Byte)] = [
  (0, 187),
  (0, 177),
  (0, 171),
  (0, 167),
  (0, 164),
  (0, 32),
  (0, 47),
  (0, 51),
  (0, 121),
  (0, 117),
  (0, 109),
  (1, 150),
  (1, 148),
  (1, 142),
  (1, 134),
  (1, 131),
  (1, 64),
  (2, 164),
  (2, 146),
  (2, 20),
  (3, 146),
  (3, 140),
  (3, 134),
  (4, 178),
  (4, 171),
]

///|
pub fn is_uppercase(c : Char) -> Bool {
  bitset_search(
    c.to_int(),
    bitset_chunks_map_uppercase,
    bitset_index_chunks_uppercase,
    bitset_canonical_uppercase,
    bitset_mapping_uppercase,
  )
}

///|
let whitespace_map : Bytes = [
  2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]

///|
pub fn is_white_space(c : Char) -> Bool {
  match c.to_uint() >> 8 {
    0 =>
      (whitespace_map[(c.to_uint() & 0xff).reinterpret_as_int()] & 1) !=
      (0x00 : Byte)
    22 => c.to_uint() == 0x1680
    32 =>
      (whitespace_map[(c.to_uint() & 0xff).reinterpret_as_int()] & 2) !=
      (0x00 : Byte)
    48 => c.to_uint() == 0x3000
    _ => false
  }
}

///|
const INDEX_MASK : UInt = 0x400000

///|
fn to_ascii_lower(c : Char) -> Char {
  if c is ('A'..='Z') {
    Int::unsafe_to_char(c.to_int() + 32)
  } else {
    return c
  }
}

///|
fn to_ascii_upper(c : Char) -> Char {
  if c is ('a'..='z') {
    Int::unsafe_to_char(c.to_int() - 32)
  } else {
    return c
  }
}

///|
pub fn to_lower(c : Char) -> (Char, Char, Char) {
  if c.is_ascii() {
    (to_ascii_lower(c), '\u{0}', '\u{0}')
  } else {
    binary_search_by(lowercase_table, pair => pair.0.compare(c))
    .map(fn(i) {
      let u = lowercase_table[i].1
      u
      .reinterpret_as_int()
      .to_char()
      .map(fn(c) { (c, '\u{0}', '\u{0}') })
      .unwrap_or_else(fn() {
        lowercase_table_multi.unsafe_get(
          (u & (INDEX_MASK - 1)).reinterpret_as_int(),
        )
      })
    })
    .or_else(fn() { (c, '\u{0}', '\u{0}') })
  }
}

///|
pub fn to_upper(c : Char) -> (Char, Char, Char) {
  if c.is_ascii() {
    (to_ascii_upper(c), '\u{0}', '\u{0}')
  } else {
    binary_search_by(uppercase_table, pair => pair.0.compare(c))
    .map(fn(i) {
      let u = uppercase_table[i].1
      u
      .reinterpret_as_int()
      .to_char()
      .map(fn(c) { (c, '\u{0}', '\u{0}') })
      .unwrap_or_else(fn() {
        uppercase_table_multi.unsafe_get(
          (u & (INDEX_MASK - 1)).reinterpret_as_int(),
        )
      })
    })
    .or_else(fn() { (c, '\u{0}', '\u{0}') })
  }
}

///|
let lowercase_table : FixedArray[(Char, UInt)] = [
  ('\u{c0}', 224),
  ('\u{c1}', 225),
  ('\u{c2}', 226),
  ('\u{c3}', 227),
  ('\u{c4}', 228),
  ('\u{c5}', 229),
  ('\u{c6}', 230),
  ('\u{c7}', 231),
  ('\u{c8}', 232),
  ('\u{c9}', 233),
  ('\u{ca}', 234),
  ('\u{cb}', 235),
  ('\u{cc}', 236),
  ('\u{cd}', 237),
  ('\u{ce}', 238),
  ('\u{cf}', 239),
  ('\u{d0}', 240),
  ('\u{d1}', 241),
  ('\u{d2}', 242),
  ('\u{d3}', 243),
  ('\u{d4}', 244),
  ('\u{d5}', 245),
  ('\u{d6}', 246),
  ('\u{d8}', 248),
  ('\u{d9}', 249),
  ('\u{da}', 250),
  ('\u{db}', 251),
  ('\u{dc}', 252),
  ('\u{dd}', 253),
  ('\u{de}', 254),
  ('\u{100}', 257),
  ('\u{102}', 259),
  ('\u{104}', 261),
  ('\u{106}', 263),
  ('\u{108}', 265),
  ('\u{10a}', 267),
  ('\u{10c}', 269),
  ('\u{10e}', 271),
  ('\u{110}', 273),
  ('\u{112}', 275),
  ('\u{114}', 277),
  ('\u{116}', 279),
  ('\u{118}', 281),
  ('\u{11a}', 283),
  ('\u{11c}', 285),
  ('\u{11e}', 287),
  ('\u{120}', 289),
  ('\u{122}', 291),
  ('\u{124}', 293),
  ('\u{126}', 295),
  ('\u{128}', 297),
  ('\u{12a}', 299),
  ('\u{12c}', 301),
  ('\u{12e}', 303),
  ('\u{130}', 4194304),
  ('\u{132}', 307),
  ('\u{134}', 309),
  ('\u{136}', 311),
  ('\u{139}', 314),
  ('\u{13b}', 316),
  ('\u{13d}', 318),
  ('\u{13f}', 320),
  ('\u{141}', 322),
  ('\u{143}', 324),
  ('\u{145}', 326),
  ('\u{147}', 328),
  ('\u{14a}', 331),
  ('\u{14c}', 333),
  ('\u{14e}', 335),
  ('\u{150}', 337),
  ('\u{152}', 339),
  ('\u{154}', 341),
  ('\u{156}', 343),
  ('\u{158}', 345),
  ('\u{15a}', 347),
  ('\u{15c}', 349),
  ('\u{15e}', 351),
  ('\u{160}', 353),
  ('\u{162}', 355),
  ('\u{164}', 357),
  ('\u{166}', 359),
  ('\u{168}', 361),
  ('\u{16a}', 363),
  ('\u{16c}', 365),
  ('\u{16e}', 367),
  ('\u{170}', 369),
  ('\u{172}', 371),
  ('\u{174}', 373),
  ('\u{176}', 375),
  ('\u{178}', 255),
  ('\u{179}', 378),
  ('\u{17b}', 380),
  ('\u{17d}', 382),
  ('\u{181}', 595),
  ('\u{182}', 387),
  ('\u{184}', 389),
  ('\u{186}', 596),
  ('\u{187}', 392),
  ('\u{189}', 598),
  ('\u{18a}', 599),
  ('\u{18b}', 396),
  ('\u{18e}', 477),
  ('\u{18f}', 601),
  ('\u{190}', 603),
  ('\u{191}', 402),
  ('\u{193}', 608),
  ('\u{194}', 611),
  ('\u{196}', 617),
  ('\u{197}', 616),
  ('\u{198}', 409),
  ('\u{19c}', 623),
  ('\u{19d}', 626),
  ('\u{19f}', 629),
  ('\u{1a0}', 417),
  ('\u{1a2}', 419),
  ('\u{1a4}', 421),
  ('\u{1a6}', 640),
  ('\u{1a7}', 424),
  ('\u{1a9}', 643),
  ('\u{1ac}', 429),
  ('\u{1ae}', 648),
  ('\u{1af}', 432),
  ('\u{1b1}', 650),
  ('\u{1b2}', 651),
  ('\u{1b3}', 436),
  ('\u{1b5}', 438),
  ('\u{1b7}', 658),
  ('\u{1b8}', 441),
  ('\u{1bc}', 445),
  ('\u{1c4}', 454),
  ('\u{1c5}', 454),
  ('\u{1c7}', 457),
  ('\u{1c8}', 457),
  ('\u{1ca}', 460),
  ('\u{1cb}', 460),
  ('\u{1cd}', 462),
  ('\u{1cf}', 464),
  ('\u{1d1}', 466),
  ('\u{1d3}', 468),
  ('\u{1d5}', 470),
  ('\u{1d7}', 472),
  ('\u{1d9}', 474),
  ('\u{1db}', 476),
  ('\u{1de}', 479),
  ('\u{1e0}', 481),
  ('\u{1e2}', 483),
  ('\u{1e4}', 485),
  ('\u{1e6}', 487),
  ('\u{1e8}', 489),
  ('\u{1ea}', 491),
  ('\u{1ec}', 493),
  ('\u{1ee}', 495),
  ('\u{1f1}', 499),
  ('\u{1f2}', 499),
  ('\u{1f4}', 501),
  ('\u{1f6}', 405),
  ('\u{1f7}', 447),
  ('\u{1f8}', 505),
  ('\u{1fa}', 507),
  ('\u{1fc}', 509),
  ('\u{1fe}', 511),
  ('\u{200}', 513),
  ('\u{202}', 515),
  ('\u{204}', 517),
  ('\u{206}', 519),
  ('\u{208}', 521),
  ('\u{20a}', 523),
  ('\u{20c}', 525),
  ('\u{20e}', 527),
  ('\u{210}', 529),
  ('\u{212}', 531),
  ('\u{214}', 533),
  ('\u{216}', 535),
  ('\u{218}', 537),
  ('\u{21a}', 539),
  ('\u{21c}', 541),
  ('\u{21e}', 543),
  ('\u{220}', 414),
  ('\u{222}', 547),
  ('\u{224}', 549),
  ('\u{226}', 551),
  ('\u{228}', 553),
  ('\u{22a}', 555),
  ('\u{22c}', 557),
  ('\u{22e}', 559),
  ('\u{230}', 561),
  ('\u{232}', 563),
  ('\u{23a}', 11365),
  ('\u{23b}', 572),
  ('\u{23d}', 410),
  ('\u{23e}', 11366),
  ('\u{241}', 578),
  ('\u{243}', 384),
  ('\u{244}', 649),
  ('\u{245}', 652),
  ('\u{246}', 583),
  ('\u{248}', 585),
  ('\u{24a}', 587),
  ('\u{24c}', 589),
  ('\u{24e}', 591),
  ('\u{370}', 881),
  ('\u{372}', 883),
  ('\u{376}', 887),
  ('\u{37f}', 1011),
  ('\u{386}', 940),
  ('\u{388}', 941),
  ('\u{389}', 942),
  ('\u{38a}', 943),
  ('\u{38c}', 972),
  ('\u{38e}', 973),
  ('\u{38f}', 974),
  ('\u{391}', 945),
  ('\u{392}', 946),
  ('\u{393}', 947),
  ('\u{394}', 948),
  ('\u{395}', 949),
  ('\u{396}', 950),
  ('\u{397}', 951),
  ('\u{398}', 952),
  ('\u{399}', 953),
  ('\u{39a}', 954),
  ('\u{39b}', 955),
  ('\u{39c}', 956),
  ('\u{39d}', 957),
  ('\u{39e}', 958),
  ('\u{39f}', 959),
  ('\u{3a0}', 960),
  ('\u{3a1}', 961),
  ('\u{3a3}', 963),
  ('\u{3a4}', 964),
  ('\u{3a5}', 965),
  ('\u{3a6}', 966),
  ('\u{3a7}', 967),
  ('\u{3a8}', 968),
  ('\u{3a9}', 969),
  ('\u{3aa}', 970),
  ('\u{3ab}', 971),
  ('\u{3cf}', 983),
  ('\u{3d8}', 985),
  ('\u{3da}', 987),
  ('\u{3dc}', 989),
  ('\u{3de}', 991),
  ('\u{3e0}', 993),
  ('\u{3e2}', 995),
  ('\u{3e4}', 997),
  ('\u{3e6}', 999),
  ('\u{3e8}', 1001),
  ('\u{3ea}', 1003),
  ('\u{3ec}', 1005),
  ('\u{3ee}', 1007),
  ('\u{3f4}', 952),
  ('\u{3f7}', 1016),
  ('\u{3f9}', 1010),
  ('\u{3fa}', 1019),
  ('\u{3fd}', 891),
  ('\u{3fe}', 892),
  ('\u{3ff}', 893),
  ('\u{400}', 1104),
  ('\u{401}', 1105),
  ('\u{402}', 1106),
  ('\u{403}', 1107),
  ('\u{404}', 1108),
  ('\u{405}', 1109),
  ('\u{406}', 1110),
  ('\u{407}', 1111),
  ('\u{408}', 1112),
  ('\u{409}', 1113),
  ('\u{40a}', 1114),
  ('\u{40b}', 1115),
  ('\u{40c}', 1116),
  ('\u{40d}', 1117),
  ('\u{40e}', 1118),
  ('\u{40f}', 1119),
  ('\u{410}', 1072),
  ('\u{411}', 1073),
  ('\u{412}', 1074),
  ('\u{413}', 1075),
  ('\u{414}', 1076),
  ('\u{415}', 1077),
  ('\u{416}', 1078),
  ('\u{417}', 1079),
  ('\u{418}', 1080),
  ('\u{419}', 1081),
  ('\u{41a}', 1082),
  ('\u{41b}', 1083),
  ('\u{41c}', 1084),
  ('\u{41d}', 1085),
  ('\u{41e}', 1086),
  ('\u{41f}', 1087),
  ('\u{420}', 1088),
  ('\u{421}', 1089),
  ('\u{422}', 1090),
  ('\u{423}', 1091),
  ('\u{424}', 1092),
  ('\u{425}', 1093),
  ('\u{426}', 1094),
  ('\u{427}', 1095),
  ('\u{428}', 1096),
  ('\u{429}', 1097),
  ('\u{42a}', 1098),
  ('\u{42b}', 1099),
  ('\u{42c}', 1100),
  ('\u{42d}', 1101),
  ('\u{42e}', 1102),
  ('\u{42f}', 1103),
  ('\u{460}', 1121),
  ('\u{462}', 1123),
  ('\u{464}', 1125),
  ('\u{466}', 1127),
  ('\u{468}', 1129),
  ('\u{46a}', 1131),
  ('\u{46c}', 1133),
  ('\u{46e}', 1135),
  ('\u{470}', 1137),
  ('\u{472}', 1139),
  ('\u{474}', 1141),
  ('\u{476}', 1143),
  ('\u{478}', 1145),
  ('\u{47a}', 1147),
  ('\u{47c}', 1149),
  ('\u{47e}', 1151),
  ('\u{480}', 1153),
  ('\u{48a}', 1163),
  ('\u{48c}', 1165),
  ('\u{48e}', 1167),
  ('\u{490}', 1169),
  ('\u{492}', 1171),
  ('\u{494}', 1173),
  ('\u{496}', 1175),
  ('\u{498}', 1177),
  ('\u{49a}', 1179),
  ('\u{49c}', 1181),
  ('\u{49e}', 1183),
  ('\u{4a0}', 1185),
  ('\u{4a2}', 1187),
  ('\u{4a4}', 1189),
  ('\u{4a6}', 1191),
  ('\u{4a8}', 1193),
  ('\u{4aa}', 1195),
  ('\u{4ac}', 1197),
  ('\u{4ae}', 1199),
  ('\u{4b0}', 1201),
  ('\u{4b2}', 1203),
  ('\u{4b4}', 1205),
  ('\u{4b6}', 1207),
  ('\u{4b8}', 1209),
  ('\u{4ba}', 1211),
  ('\u{4bc}', 1213),
  ('\u{4be}', 1215),
  ('\u{4c0}', 1231),
  ('\u{4c1}', 1218),
  ('\u{4c3}', 1220),
  ('\u{4c5}', 1222),
  ('\u{4c7}', 1224),
  ('\u{4c9}', 1226),
  ('\u{4cb}', 1228),
  ('\u{4cd}', 1230),
  ('\u{4d0}', 1233),
  ('\u{4d2}', 1235),
  ('\u{4d4}', 1237),
  ('\u{4d6}', 1239),
  ('\u{4d8}', 1241),
  ('\u{4da}', 1243),
  ('\u{4dc}', 1245),
  ('\u{4de}', 1247),
  ('\u{4e0}', 1249),
  ('\u{4e2}', 1251),
  ('\u{4e4}', 1253),
  ('\u{4e6}', 1255),
  ('\u{4e8}', 1257),
  ('\u{4ea}', 1259),
  ('\u{4ec}', 1261),
  ('\u{4ee}', 1263),
  ('\u{4f0}', 1265),
  ('\u{4f2}', 1267),
  ('\u{4f4}', 1269),
  ('\u{4f6}', 1271),
  ('\u{4f8}', 1273),
  ('\u{4fa}', 1275),
  ('\u{4fc}', 1277),
  ('\u{4fe}', 1279),
  ('\u{500}', 1281),
  ('\u{502}', 1283),
  ('\u{504}', 1285),
  ('\u{506}', 1287),
  ('\u{508}', 1289),
  ('\u{50a}', 1291),
  ('\u{50c}', 1293),
  ('\u{50e}', 1295),
  ('\u{510}', 1297),
  ('\u{512}', 1299),
  ('\u{514}', 1301),
  ('\u{516}', 1303),
  ('\u{518}', 1305),
  ('\u{51a}', 1307),
  ('\u{51c}', 1309),
  ('\u{51e}', 1311),
  ('\u{520}', 1313),
  ('\u{522}', 1315),
  ('\u{524}', 1317),
  ('\u{526}', 1319),
  ('\u{528}', 1321),
  ('\u{52a}', 1323),
  ('\u{52c}', 1325),
  ('\u{52e}', 1327),
  ('\u{531}', 1377),
  ('\u{532}', 1378),
  ('\u{533}', 1379),
  ('\u{534}', 1380),
  ('\u{535}', 1381),
  ('\u{536}', 1382),
  ('\u{537}', 1383),
  ('\u{538}', 1384),
  ('\u{539}', 1385),
  ('\u{53a}', 1386),
  ('\u{53b}', 1387),
  ('\u{53c}', 1388),
  ('\u{53d}', 1389),
  ('\u{53e}', 1390),
  ('\u{53f}', 1391),
  ('\u{540}', 1392),
  ('\u{541}', 1393),
  ('\u{542}', 1394),
  ('\u{543}', 1395),
  ('\u{544}', 1396),
  ('\u{545}', 1397),
  ('\u{546}', 1398),
  ('\u{547}', 1399),
  ('\u{548}', 1400),
  ('\u{549}', 1401),
  ('\u{54a}', 1402),
  ('\u{54b}', 1403),
  ('\u{54c}', 1404),
  ('\u{54d}', 1405),
  ('\u{54e}', 1406),
  ('\u{54f}', 1407),
  ('\u{550}', 1408),
  ('\u{551}', 1409),
  ('\u{552}', 1410),
  ('\u{553}', 1411),
  ('\u{554}', 1412),
  ('\u{555}', 1413),
  ('\u{556}', 1414),
  ('\u{10a0}', 11520),
  ('\u{10a1}', 11521),
  ('\u{10a2}', 11522),
  ('\u{10a3}', 11523),
  ('\u{10a4}', 11524),
  ('\u{10a5}', 11525),
  ('\u{10a6}', 11526),
  ('\u{10a7}', 11527),
  ('\u{10a8}', 11528),
  ('\u{10a9}', 11529),
  ('\u{10aa}', 11530),
  ('\u{10ab}', 11531),
  ('\u{10ac}', 11532),
  ('\u{10ad}', 11533),
  ('\u{10ae}', 11534),
  ('\u{10af}', 11535),
  ('\u{10b0}', 11536),
  ('\u{10b1}', 11537),
  ('\u{10b2}', 11538),
  ('\u{10b3}', 11539),
  ('\u{10b4}', 11540),
  ('\u{10b5}', 11541),
  ('\u{10b6}', 11542),
  ('\u{10b7}', 11543),
  ('\u{10b8}', 11544),
  ('\u{10b9}', 11545),
  ('\u{10ba}', 11546),
  ('\u{10bb}', 11547),
  ('\u{10bc}', 11548),
  ('\u{10bd}', 11549),
  ('\u{10be}', 11550),
  ('\u{10bf}', 11551),
  ('\u{10c0}', 11552),
  ('\u{10c1}', 11553),
  ('\u{10c2}', 11554),
  ('\u{10c3}', 11555),
  ('\u{10c4}', 11556),
  ('\u{10c5}', 11557),
  ('\u{10c7}', 11559),
  ('\u{10cd}', 11565),
  ('\u{13a0}', 43888),
  ('\u{13a1}', 43889),
  ('\u{13a2}', 43890),
  ('\u{13a3}', 43891),
  ('\u{13a4}', 43892),
  ('\u{13a5}', 43893),
  ('\u{13a6}', 43894),
  ('\u{13a7}', 43895),
  ('\u{13a8}', 43896),
  ('\u{13a9}', 43897),
  ('\u{13aa}', 43898),
  ('\u{13ab}', 43899),
  ('\u{13ac}', 43900),
  ('\u{13ad}', 43901),
  ('\u{13ae}', 43902),
  ('\u{13af}', 43903),
  ('\u{13b0}', 43904),
  ('\u{13b1}', 43905),
  ('\u{13b2}', 43906),
  ('\u{13b3}', 43907),
  ('\u{13b4}', 43908),
  ('\u{13b5}', 43909),
  ('\u{13b6}', 43910),
  ('\u{13b7}', 43911),
  ('\u{13b8}', 43912),
  ('\u{13b9}', 43913),
  ('\u{13ba}', 43914),
  ('\u{13bb}', 43915),
  ('\u{13bc}', 43916),
  ('\u{13bd}', 43917),
  ('\u{13be}', 43918),
  ('\u{13bf}', 43919),
  ('\u{13c0}', 43920),
  ('\u{13c1}', 43921),
  ('\u{13c2}', 43922),
  ('\u{13c3}', 43923),
  ('\u{13c4}', 43924),
  ('\u{13c5}', 43925),
  ('\u{13c6}', 43926),
  ('\u{13c7}', 43927),
  ('\u{13c8}', 43928),
  ('\u{13c9}', 43929),
  ('\u{13ca}', 43930),
  ('\u{13cb}', 43931),
  ('\u{13cc}', 43932),
  ('\u{13cd}', 43933),
  ('\u{13ce}', 43934),
  ('\u{13cf}', 43935),
  ('\u{13d0}', 43936),
  ('\u{13d1}', 43937),
  ('\u{13d2}', 43938),
  ('\u{13d3}', 43939),
  ('\u{13d4}', 43940),
  ('\u{13d5}', 43941),
  ('\u{13d6}', 43942),
  ('\u{13d7}', 43943),
  ('\u{13d8}', 43944),
  ('\u{13d9}', 43945),
  ('\u{13da}', 43946),
  ('\u{13db}', 43947),
  ('\u{13dc}', 43948),
  ('\u{13dd}', 43949),
  ('\u{13de}', 43950),
  ('\u{13df}', 43951),
  ('\u{13e0}', 43952),
  ('\u{13e1}', 43953),
  ('\u{13e2}', 43954),
  ('\u{13e3}', 43955),
  ('\u{13e4}', 43956),
  ('\u{13e5}', 43957),
  ('\u{13e6}', 43958),
  ('\u{13e7}', 43959),
  ('\u{13e8}', 43960),
  ('\u{13e9}', 43961),
  ('\u{13ea}', 43962),
  ('\u{13eb}', 43963),
  ('\u{13ec}', 43964),
  ('\u{13ed}', 43965),
  ('\u{13ee}', 43966),
  ('\u{13ef}', 43967),
  ('\u{13f0}', 5112),
  ('\u{13f1}', 5113),
  ('\u{13f2}', 5114),
  ('\u{13f3}', 5115),
  ('\u{13f4}', 5116),
  ('\u{13f5}', 5117),
  ('\u{1c89}', 7306),
  ('\u{1c90}', 4304),
  ('\u{1c91}', 4305),
  ('\u{1c92}', 4306),
  ('\u{1c93}', 4307),
  ('\u{1c94}', 4308),
  ('\u{1c95}', 4309),
  ('\u{1c96}', 4310),
  ('\u{1c97}', 4311),
  ('\u{1c98}', 4312),
  ('\u{1c99}', 4313),
  ('\u{1c9a}', 4314),
  ('\u{1c9b}', 4315),
  ('\u{1c9c}', 4316),
  ('\u{1c9d}', 4317),
  ('\u{1c9e}', 4318),
  ('\u{1c9f}', 4319),
  ('\u{1ca0}', 4320),
  ('\u{1ca1}', 4321),
  ('\u{1ca2}', 4322),
  ('\u{1ca3}', 4323),
  ('\u{1ca4}', 4324),
  ('\u{1ca5}', 4325),
  ('\u{1ca6}', 4326),
  ('\u{1ca7}', 4327),
  ('\u{1ca8}', 4328),
  ('\u{1ca9}', 4329),
  ('\u{1caa}', 4330),
  ('\u{1cab}', 4331),
  ('\u{1cac}', 4332),
  ('\u{1cad}', 4333),
  ('\u{1cae}', 4334),
  ('\u{1caf}', 4335),
  ('\u{1cb0}', 4336),
  ('\u{1cb1}', 4337),
  ('\u{1cb2}', 4338),
  ('\u{1cb3}', 4339),
  ('\u{1cb4}', 4340),
  ('\u{1cb5}', 4341),
  ('\u{1cb6}', 4342),
  ('\u{1cb7}', 4343),
  ('\u{1cb8}', 4344),
  ('\u{1cb9}', 4345),
  ('\u{1cba}', 4346),
  ('\u{1cbd}', 4349),
  ('\u{1cbe}', 4350),
  ('\u{1cbf}', 4351),
  ('\u{1e00}', 7681),
  ('\u{1e02}', 7683),
  ('\u{1e04}', 7685),
  ('\u{1e06}', 7687),
  ('\u{1e08}', 7689),
  ('\u{1e0a}', 7691),
  ('\u{1e0c}', 7693),
  ('\u{1e0e}', 7695),
  ('\u{1e10}', 7697),
  ('\u{1e12}', 7699),
  ('\u{1e14}', 7701),
  ('\u{1e16}', 7703),
  ('\u{1e18}', 7705),
  ('\u{1e1a}', 7707),
  ('\u{1e1c}', 7709),
  ('\u{1e1e}', 7711),
  ('\u{1e20}', 7713),
  ('\u{1e22}', 7715),
  ('\u{1e24}', 7717),
  ('\u{1e26}', 7719),
  ('\u{1e28}', 7721),
  ('\u{1e2a}', 7723),
  ('\u{1e2c}', 7725),
  ('\u{1e2e}', 7727),
  ('\u{1e30}', 7729),
  ('\u{1e32}', 7731),
  ('\u{1e34}', 7733),
  ('\u{1e36}', 7735),
  ('\u{1e38}', 7737),
  ('\u{1e3a}', 7739),
  ('\u{1e3c}', 7741),
  ('\u{1e3e}', 7743),
  ('\u{1e40}', 7745),
  ('\u{1e42}', 7747),
  ('\u{1e44}', 7749),
  ('\u{1e46}', 7751),
  ('\u{1e48}', 7753),
  ('\u{1e4a}', 7755),
  ('\u{1e4c}', 7757),
  ('\u{1e4e}', 7759),
  ('\u{1e50}', 7761),
  ('\u{1e52}', 7763),
  ('\u{1e54}', 7765),
  ('\u{1e56}', 7767),
  ('\u{1e58}', 7769),
  ('\u{1e5a}', 7771),
  ('\u{1e5c}', 7773),
  ('\u{1e5e}', 7775),
  ('\u{1e60}', 7777),
  ('\u{1e62}', 7779),
  ('\u{1e64}', 7781),
  ('\u{1e66}', 7783),
  ('\u{1e68}', 7785),
  ('\u{1e6a}', 7787),
  ('\u{1e6c}', 7789),
  ('\u{1e6e}', 7791),
  ('\u{1e70}', 7793),
  ('\u{1e72}', 7795),
  ('\u{1e74}', 7797),
  ('\u{1e76}', 7799),
  ('\u{1e78}', 7801),
  ('\u{1e7a}', 7803),
  ('\u{1e7c}', 7805),
  ('\u{1e7e}', 7807),
  ('\u{1e80}', 7809),
  ('\u{1e82}', 7811),
  ('\u{1e84}', 7813),
  ('\u{1e86}', 7815),
  ('\u{1e88}', 7817),
  ('\u{1e8a}', 7819),
  ('\u{1e8c}', 7821),
  ('\u{1e8e}', 7823),
  ('\u{1e90}', 7825),
  ('\u{1e92}', 7827),
  ('\u{1e94}', 7829),
  ('\u{1e9e}', 223),
  ('\u{1ea0}', 7841),
  ('\u{1ea2}', 7843),
  ('\u{1ea4}', 7845),
  ('\u{1ea6}', 7847),
  ('\u{1ea8}', 7849),
  ('\u{1eaa}', 7851),
  ('\u{1eac}', 7853),
  ('\u{1eae}', 7855),
  ('\u{1eb0}', 7857),
  ('\u{1eb2}', 7859),
  ('\u{1eb4}', 7861),
  ('\u{1eb6}', 7863),
  ('\u{1eb8}', 7865),
  ('\u{1eba}', 7867),
  ('\u{1ebc}', 7869),
  ('\u{1ebe}', 7871),
  ('\u{1ec0}', 7873),
  ('\u{1ec2}', 7875),
  ('\u{1ec4}', 7877),
  ('\u{1ec6}', 7879),
  ('\u{1ec8}', 7881),
  ('\u{1eca}', 7883),
  ('\u{1ecc}', 7885),
  ('\u{1ece}', 7887),
  ('\u{1ed0}', 7889),
  ('\u{1ed2}', 7891),
  ('\u{1ed4}', 7893),
  ('\u{1ed6}', 7895),
  ('\u{1ed8}', 7897),
  ('\u{1eda}', 7899),
  ('\u{1edc}', 7901),
  ('\u{1ede}', 7903),
  ('\u{1ee0}', 7905),
  ('\u{1ee2}', 7907),
  ('\u{1ee4}', 7909),
  ('\u{1ee6}', 7911),
  ('\u{1ee8}', 7913),
  ('\u{1eea}', 7915),
  ('\u{1eec}', 7917),
  ('\u{1eee}', 7919),
  ('\u{1ef0}', 7921),
  ('\u{1ef2}', 7923),
  ('\u{1ef4}', 7925),
  ('\u{1ef6}', 7927),
  ('\u{1ef8}', 7929),
  ('\u{1efa}', 7931),
  ('\u{1efc}', 7933),
  ('\u{1efe}', 7935),
  ('\u{1f08}', 7936),
  ('\u{1f09}', 7937),
  ('\u{1f0a}', 7938),
  ('\u{1f0b}', 7939),
  ('\u{1f0c}', 7940),
  ('\u{1f0d}', 7941),
  ('\u{1f0e}', 7942),
  ('\u{1f0f}', 7943),
  ('\u{1f18}', 7952),
  ('\u{1f19}', 7953),
  ('\u{1f1a}', 7954),
  ('\u{1f1b}', 7955),
  ('\u{1f1c}', 7956),
  ('\u{1f1d}', 7957),
  ('\u{1f28}', 7968),
  ('\u{1f29}', 7969),
  ('\u{1f2a}', 7970),
  ('\u{1f2b}', 7971),
  ('\u{1f2c}', 7972),
  ('\u{1f2d}', 7973),
  ('\u{1f2e}', 7974),
  ('\u{1f2f}', 7975),
  ('\u{1f38}', 7984),
  ('\u{1f39}', 7985),
  ('\u{1f3a}', 7986),
  ('\u{1f3b}', 7987),
  ('\u{1f3c}', 7988),
  ('\u{1f3d}', 7989),
  ('\u{1f3e}', 7990),
  ('\u{1f3f}', 7991),
  ('\u{1f48}', 8000),
  ('\u{1f49}', 8001),
  ('\u{1f4a}', 8002),
  ('\u{1f4b}', 8003),
  ('\u{1f4c}', 8004),
  ('\u{1f4d}', 8005),
  ('\u{1f59}', 8017),
  ('\u{1f5b}', 8019),
  ('\u{1f5d}', 8021),
  ('\u{1f5f}', 8023),
  ('\u{1f68}', 8032),
  ('\u{1f69}', 8033),
  ('\u{1f6a}', 8034),
  ('\u{1f6b}', 8035),
  ('\u{1f6c}', 8036),
  ('\u{1f6d}', 8037),
  ('\u{1f6e}', 8038),
  ('\u{1f6f}', 8039),
  ('\u{1f88}', 8064),
  ('\u{1f89}', 8065),
  ('\u{1f8a}', 8066),
  ('\u{1f8b}', 8067),
  ('\u{1f8c}', 8068),
  ('\u{1f8d}', 8069),
  ('\u{1f8e}', 8070),
  ('\u{1f8f}', 8071),
  ('\u{1f98}', 8080),
  ('\u{1f99}', 8081),
  ('\u{1f9a}', 8082),
  ('\u{1f9b}', 8083),
  ('\u{1f9c}', 8084),
  ('\u{1f9d}', 8085),
  ('\u{1f9e}', 8086),
  ('\u{1f9f}', 8087),
  ('\u{1fa8}', 8096),
  ('\u{1fa9}', 8097),
  ('\u{1faa}', 8098),
  ('\u{1fab}', 8099),
  ('\u{1fac}', 8100),
  ('\u{1fad}', 8101),
  ('\u{1fae}', 8102),
  ('\u{1faf}', 8103),
  ('\u{1fb8}', 8112),
  ('\u{1fb9}', 8113),
  ('\u{1fba}', 8048),
  ('\u{1fbb}', 8049),
  ('\u{1fbc}', 8115),
  ('\u{1fc8}', 8050),
  ('\u{1fc9}', 8051),
  ('\u{1fca}', 8052),
  ('\u{1fcb}', 8053),
  ('\u{1fcc}', 8131),
  ('\u{1fd8}', 8144),
  ('\u{1fd9}', 8145),
  ('\u{1fda}', 8054),
  ('\u{1fdb}', 8055),
  ('\u{1fe8}', 8160),
  ('\u{1fe9}', 8161),
  ('\u{1fea}', 8058),
  ('\u{1feb}', 8059),
  ('\u{1fec}', 8165),
  ('\u{1ff8}', 8056),
  ('\u{1ff9}', 8057),
  ('\u{1ffa}', 8060),
  ('\u{1ffb}', 8061),
  ('\u{1ffc}', 8179),
  ('\u{2126}', 969),
  ('\u{212a}', 107),
  ('\u{212b}', 229),
  ('\u{2132}', 8526),
  ('\u{2160}', 8560),
  ('\u{2161}', 8561),
  ('\u{2162}', 8562),
  ('\u{2163}', 8563),
  ('\u{2164}', 8564),
  ('\u{2165}', 8565),
  ('\u{2166}', 8566),
  ('\u{2167}', 8567),
  ('\u{2168}', 8568),
  ('\u{2169}', 8569),
  ('\u{216a}', 8570),
  ('\u{216b}', 8571),
  ('\u{216c}', 8572),
  ('\u{216d}', 8573),
  ('\u{216e}', 8574),
  ('\u{216f}', 8575),
  ('\u{2183}', 8580),
  ('\u{24b6}', 9424),
  ('\u{24b7}', 9425),
  ('\u{24b8}', 9426),
  ('\u{24b9}', 9427),
  ('\u{24ba}', 9428),
  ('\u{24bb}', 9429),
  ('\u{24bc}', 9430),
  ('\u{24bd}', 9431),
  ('\u{24be}', 9432),
  ('\u{24bf}', 9433),
  ('\u{24c0}', 9434),
  ('\u{24c1}', 9435),
  ('\u{24c2}', 9436),
  ('\u{24c3}', 9437),
  ('\u{24c4}', 9438),
  ('\u{24c5}', 9439),
  ('\u{24c6}', 9440),
  ('\u{24c7}', 9441),
  ('\u{24c8}', 9442),
  ('\u{24c9}', 9443),
  ('\u{24ca}', 9444),
  ('\u{24cb}', 9445),
  ('\u{24cc}', 9446),
  ('\u{24cd}', 9447),
  ('\u{24ce}', 9448),
  ('\u{24cf}', 9449),
  ('\u{2c00}', 11312),
  ('\u{2c01}', 11313),
  ('\u{2c02}', 11314),
  ('\u{2c03}', 11315),
  ('\u{2c04}', 11316),
  ('\u{2c05}', 11317),
  ('\u{2c06}', 11318),
  ('\u{2c07}', 11319),
  ('\u{2c08}', 11320),
  ('\u{2c09}', 11321),
  ('\u{2c0a}', 11322),
  ('\u{2c0b}', 11323),
  ('\u{2c0c}', 11324),
  ('\u{2c0d}', 11325),
  ('\u{2c0e}', 11326),
  ('\u{2c0f}', 11327),
  ('\u{2c10}', 11328),
  ('\u{2c11}', 11329),
  ('\u{2c12}', 11330),
  ('\u{2c13}', 11331),
  ('\u{2c14}', 11332),
  ('\u{2c15}', 11333),
  ('\u{2c16}', 11334),
  ('\u{2c17}', 11335),
  ('\u{2c18}', 11336),
  ('\u{2c19}', 11337),
  ('\u{2c1a}', 11338),
  ('\u{2c1b}', 11339),
  ('\u{2c1c}', 11340),
  ('\u{2c1d}', 11341),
  ('\u{2c1e}', 11342),
  ('\u{2c1f}', 11343),
  ('\u{2c20}', 11344),
  ('\u{2c21}', 11345),
  ('\u{2c22}', 11346),
  ('\u{2c23}', 11347),
  ('\u{2c24}', 11348),
  ('\u{2c25}', 11349),
  ('\u{2c26}', 11350),
  ('\u{2c27}', 11351),
  ('\u{2c28}', 11352),
  ('\u{2c29}', 11353),
  ('\u{2c2a}', 11354),
  ('\u{2c2b}', 11355),
  ('\u{2c2c}', 11356),
  ('\u{2c2d}', 11357),
  ('\u{2c2e}', 11358),
  ('\u{2c2f}', 11359),
  ('\u{2c60}', 11361),
  ('\u{2c62}', 619),
  ('\u{2c63}', 7549),
  ('\u{2c64}', 637),
  ('\u{2c67}', 11368),
  ('\u{2c69}', 11370),
  ('\u{2c6b}', 11372),
  ('\u{2c6d}', 593),
  ('\u{2c6e}', 625),
  ('\u{2c6f}', 592),
  ('\u{2c70}', 594),
  ('\u{2c72}', 11379),
  ('\u{2c75}', 11382),
  ('\u{2c7e}', 575),
  ('\u{2c7f}', 576),
  ('\u{2c80}', 11393),
  ('\u{2c82}', 11395),
  ('\u{2c84}', 11397),
  ('\u{2c86}', 11399),
  ('\u{2c88}', 11401),
  ('\u{2c8a}', 11403),
  ('\u{2c8c}', 11405),
  ('\u{2c8e}', 11407),
  ('\u{2c90}', 11409),
  ('\u{2c92}', 11411),
  ('\u{2c94}', 11413),
  ('\u{2c96}', 11415),
  ('\u{2c98}', 11417),
  ('\u{2c9a}', 11419),
  ('\u{2c9c}', 11421),
  ('\u{2c9e}', 11423),
  ('\u{2ca0}', 11425),
  ('\u{2ca2}', 11427),
  ('\u{2ca4}', 11429),
  ('\u{2ca6}', 11431),
  ('\u{2ca8}', 11433),
  ('\u{2caa}', 11435),
  ('\u{2cac}', 11437),
  ('\u{2cae}', 11439),
  ('\u{2cb0}', 11441),
  ('\u{2cb2}', 11443),
  ('\u{2cb4}', 11445),
  ('\u{2cb6}', 11447),
  ('\u{2cb8}', 11449),
  ('\u{2cba}', 11451),
  ('\u{2cbc}', 11453),
  ('\u{2cbe}', 11455),
  ('\u{2cc0}', 11457),
  ('\u{2cc2}', 11459),
  ('\u{2cc4}', 11461),
  ('\u{2cc6}', 11463),
  ('\u{2cc8}', 11465),
  ('\u{2cca}', 11467),
  ('\u{2ccc}', 11469),
  ('\u{2cce}', 11471),
  ('\u{2cd0}', 11473),
  ('\u{2cd2}', 11475),
  ('\u{2cd4}', 11477),
  ('\u{2cd6}', 11479),
  ('\u{2cd8}', 11481),
  ('\u{2cda}', 11483),
  ('\u{2cdc}', 11485),
  ('\u{2cde}', 11487),
  ('\u{2ce0}', 11489),
  ('\u{2ce2}', 11491),
  ('\u{2ceb}', 11500),
  ('\u{2ced}', 11502),
  ('\u{2cf2}', 11507),
  ('\u{a640}', 42561),
  ('\u{a642}', 42563),
  ('\u{a644}', 42565),
  ('\u{a646}', 42567),
  ('\u{a648}', 42569),
  ('\u{a64a}', 42571),
  ('\u{a64c}', 42573),
  ('\u{a64e}', 42575),
  ('\u{a650}', 42577),
  ('\u{a652}', 42579),
  ('\u{a654}', 42581),
  ('\u{a656}', 42583),
  ('\u{a658}', 42585),
  ('\u{a65a}', 42587),
  ('\u{a65c}', 42589),
  ('\u{a65e}', 42591),
  ('\u{a660}', 42593),
  ('\u{a662}', 42595),
  ('\u{a664}', 42597),
  ('\u{a666}', 42599),
  ('\u{a668}', 42601),
  ('\u{a66a}', 42603),
  ('\u{a66c}', 42605),
  ('\u{a680}', 42625),
  ('\u{a682}', 42627),
  ('\u{a684}', 42629),
  ('\u{a686}', 42631),
  ('\u{a688}', 42633),
  ('\u{a68a}', 42635),
  ('\u{a68c}', 42637),
  ('\u{a68e}', 42639),
  ('\u{a690}', 42641),
  ('\u{a692}', 42643),
  ('\u{a694}', 42645),
  ('\u{a696}', 42647),
  ('\u{a698}', 42649),
  ('\u{a69a}', 42651),
  ('\u{a722}', 42787),
  ('\u{a724}', 42789),
  ('\u{a726}', 42791),
  ('\u{a728}', 42793),
  ('\u{a72a}', 42795),
  ('\u{a72c}', 42797),
  ('\u{a72e}', 42799),
  ('\u{a732}', 42803),
  ('\u{a734}', 42805),
  ('\u{a736}', 42807),
  ('\u{a738}', 42809),
  ('\u{a73a}', 42811),
  ('\u{a73c}', 42813),
  ('\u{a73e}', 42815),
  ('\u{a740}', 42817),
  ('\u{a742}', 42819),
  ('\u{a744}', 42821),
  ('\u{a746}', 42823),
  ('\u{a748}', 42825),
  ('\u{a74a}', 42827),
  ('\u{a74c}', 42829),
  ('\u{a74e}', 42831),
  ('\u{a750}', 42833),
  ('\u{a752}', 42835),
  ('\u{a754}', 42837),
  ('\u{a756}', 42839),
  ('\u{a758}', 42841),
  ('\u{a75a}', 42843),
  ('\u{a75c}', 42845),
  ('\u{a75e}', 42847),
  ('\u{a760}', 42849),
  ('\u{a762}', 42851),
  ('\u{a764}', 42853),
  ('\u{a766}', 42855),
  ('\u{a768}', 42857),
  ('\u{a76a}', 42859),
  ('\u{a76c}', 42861),
  ('\u{a76e}', 42863),
  ('\u{a779}', 42874),
  ('\u{a77b}', 42876),
  ('\u{a77d}', 7545),
  ('\u{a77e}', 42879),
  ('\u{a780}', 42881),
  ('\u{a782}', 42883),
  ('\u{a784}', 42885),
  ('\u{a786}', 42887),
  ('\u{a78b}', 42892),
  ('\u{a78d}', 613),
  ('\u{a790}', 42897),
  ('\u{a792}', 42899),
  ('\u{a796}', 42903),
  ('\u{a798}', 42905),
  ('\u{a79a}', 42907),
  ('\u{a79c}', 42909),
  ('\u{a79e}', 42911),
  ('\u{a7a0}', 42913),
  ('\u{a7a2}', 42915),
  ('\u{a7a4}', 42917),
  ('\u{a7a6}', 42919),
  ('\u{a7a8}', 42921),
  ('\u{a7aa}', 614),
  ('\u{a7ab}', 604),
  ('\u{a7ac}', 609),
  ('\u{a7ad}', 620),
  ('\u{a7ae}', 618),
  ('\u{a7b0}', 670),
  ('\u{a7b1}', 647),
  ('\u{a7b2}', 669),
  ('\u{a7b3}', 43859),
  ('\u{a7b4}', 42933),
  ('\u{a7b6}', 42935),
  ('\u{a7b8}', 42937),
  ('\u{a7ba}', 42939),
  ('\u{a7bc}', 42941),
  ('\u{a7be}', 42943),
  ('\u{a7c0}', 42945),
  ('\u{a7c2}', 42947),
  ('\u{a7c4}', 42900),
  ('\u{a7c5}', 642),
  ('\u{a7c6}', 7566),
  ('\u{a7c7}', 42952),
  ('\u{a7c9}', 42954),
  ('\u{a7cb}', 612),
  ('\u{a7cc}', 42957),
  ('\u{a7d0}', 42961),
  ('\u{a7d6}', 42967),
  ('\u{a7d8}', 42969),
  ('\u{a7da}', 42971),
  ('\u{a7dc}', 411),
  ('\u{a7f5}', 42998),
  ('\u{ff21}', 65345),
  ('\u{ff22}', 65346),
  ('\u{ff23}', 65347),
  ('\u{ff24}', 65348),
  ('\u{ff25}', 65349),
  ('\u{ff26}', 65350),
  ('\u{ff27}', 65351),
  ('\u{ff28}', 65352),
  ('\u{ff29}', 65353),
  ('\u{ff2a}', 65354),
  ('\u{ff2b}', 65355),
  ('\u{ff2c}', 65356),
  ('\u{ff2d}', 65357),
  ('\u{ff2e}', 65358),
  ('\u{ff2f}', 65359),
  ('\u{ff30}', 65360),
  ('\u{ff31}', 65361),
  ('\u{ff32}', 65362),
  ('\u{ff33}', 65363),
  ('\u{ff34}', 65364),
  ('\u{ff35}', 65365),
  ('\u{ff36}', 65366),
  ('\u{ff37}', 65367),
  ('\u{ff38}', 65368),
  ('\u{ff39}', 65369),
  ('\u{ff3a}', 65370),
  ('\u{10400}', 66600),
  ('\u{10401}', 66601),
  ('\u{10402}', 66602),
  ('\u{10403}', 66603),
  ('\u{10404}', 66604),
  ('\u{10405}', 66605),
  ('\u{10406}', 66606),
  ('\u{10407}', 66607),
  ('\u{10408}', 66608),
  ('\u{10409}', 66609),
  ('\u{1040a}', 66610),
  ('\u{1040b}', 66611),
  ('\u{1040c}', 66612),
  ('\u{1040d}', 66613),
  ('\u{1040e}', 66614),
  ('\u{1040f}', 66615),
  ('\u{10410}', 66616),
  ('\u{10411}', 66617),
  ('\u{10412}', 66618),
  ('\u{10413}', 66619),
  ('\u{10414}', 66620),
  ('\u{10415}', 66621),
  ('\u{10416}', 66622),
  ('\u{10417}', 66623),
  ('\u{10418}', 66624),
  ('\u{10419}', 66625),
  ('\u{1041a}', 66626),
  ('\u{1041b}', 66627),
  ('\u{1041c}', 66628),
  ('\u{1041d}', 66629),
  ('\u{1041e}', 66630),
  ('\u{1041f}', 66631),
  ('\u{10420}', 66632),
  ('\u{10421}', 66633),
  ('\u{10422}', 66634),
  ('\u{10423}', 66635),
  ('\u{10424}', 66636),
  ('\u{10425}', 66637),
  ('\u{10426}', 66638),
  ('\u{10427}', 66639),
  ('\u{104b0}', 66776),
  ('\u{104b1}', 66777),
  ('\u{104b2}', 66778),
  ('\u{104b3}', 66779),
  ('\u{104b4}', 66780),
  ('\u{104b5}', 66781),
  ('\u{104b6}', 66782),
  ('\u{104b7}', 66783),
  ('\u{104b8}', 66784),
  ('\u{104b9}', 66785),
  ('\u{104ba}', 66786),
  ('\u{104bb}', 66787),
  ('\u{104bc}', 66788),
  ('\u{104bd}', 66789),
  ('\u{104be}', 66790),
  ('\u{104bf}', 66791),
  ('\u{104c0}', 66792),
  ('\u{104c1}', 66793),
  ('\u{104c2}', 66794),
  ('\u{104c3}', 66795),
  ('\u{104c4}', 66796),
  ('\u{104c5}', 66797),
  ('\u{104c6}', 66798),
  ('\u{104c7}', 66799),
  ('\u{104c8}', 66800),
  ('\u{104c9}', 66801),
  ('\u{104ca}', 66802),
  ('\u{104cb}', 66803),
  ('\u{104cc}', 66804),
  ('\u{104cd}', 66805),
  ('\u{104ce}', 66806),
  ('\u{104cf}', 66807),
  ('\u{104d0}', 66808),
  ('\u{104d1}', 66809),
  ('\u{104d2}', 66810),
  ('\u{104d3}', 66811),
  ('\u{10570}', 66967),
  ('\u{10571}', 66968),
  ('\u{10572}', 66969),
  ('\u{10573}', 66970),
  ('\u{10574}', 66971),
  ('\u{10575}', 66972),
  ('\u{10576}', 66973),
  ('\u{10577}', 66974),
  ('\u{10578}', 66975),
  ('\u{10579}', 66976),
  ('\u{1057a}', 66977),
  ('\u{1057c}', 66979),
  ('\u{1057d}', 66980),
  ('\u{1057e}', 66981),
  ('\u{1057f}', 66982),
  ('\u{10580}', 66983),
  ('\u{10581}', 66984),
  ('\u{10582}', 66985),
  ('\u{10583}', 66986),
  ('\u{10584}', 66987),
  ('\u{10585}', 66988),
  ('\u{10586}', 66989),
  ('\u{10587}', 66990),
  ('\u{10588}', 66991),
  ('\u{10589}', 66992),
  ('\u{1058a}', 66993),
  ('\u{1058c}', 66995),
  ('\u{1058d}', 66996),
  ('\u{1058e}', 66997),
  ('\u{1058f}', 66998),
  ('\u{10590}', 66999),
  ('\u{10591}', 67000),
  ('\u{10592}', 67001),
  ('\u{10594}', 67003),
  ('\u{10595}', 67004),
  ('\u{10c80}', 68800),
  ('\u{10c81}', 68801),
  ('\u{10c82}', 68802),
  ('\u{10c83}', 68803),
  ('\u{10c84}', 68804),
  ('\u{10c85}', 68805),
  ('\u{10c86}', 68806),
  ('\u{10c87}', 68807),
  ('\u{10c88}', 68808),
  ('\u{10c89}', 68809),
  ('\u{10c8a}', 68810),
  ('\u{10c8b}', 68811),
  ('\u{10c8c}', 68812),
  ('\u{10c8d}', 68813),
  ('\u{10c8e}', 68814),
  ('\u{10c8f}', 68815),
  ('\u{10c90}', 68816),
  ('\u{10c91}', 68817),
  ('\u{10c92}', 68818),
  ('\u{10c93}', 68819),
  ('\u{10c94}', 68820),
  ('\u{10c95}', 68821),
  ('\u{10c96}', 68822),
  ('\u{10c97}', 68823),
  ('\u{10c98}', 68824),
  ('\u{10c99}', 68825),
  ('\u{10c9a}', 68826),
  ('\u{10c9b}', 68827),
  ('\u{10c9c}', 68828),
  ('\u{10c9d}', 68829),
  ('\u{10c9e}', 68830),
  ('\u{10c9f}', 68831),
  ('\u{10ca0}', 68832),
  ('\u{10ca1}', 68833),
  ('\u{10ca2}', 68834),
  ('\u{10ca3}', 68835),
  ('\u{10ca4}', 68836),
  ('\u{10ca5}', 68837),
  ('\u{10ca6}', 68838),
  ('\u{10ca7}', 68839),
  ('\u{10ca8}', 68840),
  ('\u{10ca9}', 68841),
  ('\u{10caa}', 68842),
  ('\u{10cab}', 68843),
  ('\u{10cac}', 68844),
  ('\u{10cad}', 68845),
  ('\u{10cae}', 68846),
  ('\u{10caf}', 68847),
  ('\u{10cb0}', 68848),
  ('\u{10cb1}', 68849),
  ('\u{10cb2}', 68850),
  ('\u{10d50}', 68976),
  ('\u{10d51}', 68977),
  ('\u{10d52}', 68978),
  ('\u{10d53}', 68979),
  ('\u{10d54}', 68980),
  ('\u{10d55}', 68981),
  ('\u{10d56}', 68982),
  ('\u{10d57}', 68983),
  ('\u{10d58}', 68984),
  ('\u{10d59}', 68985),
  ('\u{10d5a}', 68986),
  ('\u{10d5b}', 68987),
  ('\u{10d5c}', 68988),
  ('\u{10d5d}', 68989),
  ('\u{10d5e}', 68990),
  ('\u{10d5f}', 68991),
  ('\u{10d60}', 68992),
  ('\u{10d61}', 68993),
  ('\u{10d62}', 68994),
  ('\u{10d63}', 68995),
  ('\u{10d64}', 68996),
  ('\u{10d65}', 68997),
  ('\u{118a0}', 71872),
  ('\u{118a1}', 71873),
  ('\u{118a2}', 71874),
  ('\u{118a3}', 71875),
  ('\u{118a4}', 71876),
  ('\u{118a5}', 71877),
  ('\u{118a6}', 71878),
  ('\u{118a7}', 71879),
  ('\u{118a8}', 71880),
  ('\u{118a9}', 71881),
  ('\u{118aa}', 71882),
  ('\u{118ab}', 71883),
  ('\u{118ac}', 71884),
  ('\u{118ad}', 71885),
  ('\u{118ae}', 71886),
  ('\u{118af}', 71887),
  ('\u{118b0}', 71888),
  ('\u{118b1}', 71889),
  ('\u{118b2}', 71890),
  ('\u{118b3}', 71891),
  ('\u{118b4}', 71892),
  ('\u{118b5}', 71893),
  ('\u{118b6}', 71894),
  ('\u{118b7}', 71895),
  ('\u{118b8}', 71896),
  ('\u{118b9}', 71897),
  ('\u{118ba}', 71898),
  ('\u{118bb}', 71899),
  ('\u{118bc}', 71900),
  ('\u{118bd}', 71901),
  ('\u{118be}', 71902),
  ('\u{118bf}', 71903),
  ('\u{16e40}', 93792),
  ('\u{16e41}', 93793),
  ('\u{16e42}', 93794),
  ('\u{16e43}', 93795),
  ('\u{16e44}', 93796),
  ('\u{16e45}', 93797),
  ('\u{16e46}', 93798),
  ('\u{16e47}', 93799),
  ('\u{16e48}', 93800),
  ('\u{16e49}', 93801),
  ('\u{16e4a}', 93802),
  ('\u{16e4b}', 93803),
  ('\u{16e4c}', 93804),
  ('\u{16e4d}', 93805),
  ('\u{16e4e}', 93806),
  ('\u{16e4f}', 93807),
  ('\u{16e50}', 93808),
  ('\u{16e51}', 93809),
  ('\u{16e52}', 93810),
  ('\u{16e53}', 93811),
  ('\u{16e54}', 93812),
  ('\u{16e55}', 93813),
  ('\u{16e56}', 93814),
  ('\u{16e57}', 93815),
  ('\u{16e58}', 93816),
  ('\u{16e59}', 93817),
  ('\u{16e5a}', 93818),
  ('\u{16e5b}', 93819),
  ('\u{16e5c}', 93820),
  ('\u{16e5d}', 93821),
  ('\u{16e5e}', 93822),
  ('\u{16e5f}', 93823),
  ('\u{1e900}', 125218),
  ('\u{1e901}', 125219),
  ('\u{1e902}', 125220),
  ('\u{1e903}', 125221),
  ('\u{1e904}', 125222),
  ('\u{1e905}', 125223),
  ('\u{1e906}', 125224),
  ('\u{1e907}', 125225),
  ('\u{1e908}', 125226),
  ('\u{1e909}', 125227),
  ('\u{1e90a}', 125228),
  ('\u{1e90b}', 125229),
  ('\u{1e90c}', 125230),
  ('\u{1e90d}', 125231),
  ('\u{1e90e}', 125232),
  ('\u{1e90f}', 125233),
  ('\u{1e910}', 125234),
  ('\u{1e911}', 125235),
  ('\u{1e912}', 125236),
  ('\u{1e913}', 125237),
  ('\u{1e914}', 125238),
  ('\u{1e915}', 125239),
  ('\u{1e916}', 125240),
  ('\u{1e917}', 125241),
  ('\u{1e918}', 125242),
  ('\u{1e919}', 125243),
  ('\u{1e91a}', 125244),
  ('\u{1e91b}', 125245),
  ('\u{1e91c}', 125246),
  ('\u{1e91d}', 125247),
  ('\u{1e91e}', 125248),
  ('\u{1e91f}', 125249),
  ('\u{1e920}', 125250),
  ('\u{1e921}', 125251),
]

///|
let lowercase_table_multi : FixedArray[(Char, Char, Char)] = [
  ('i', '\u{307}', '\u{0}'),
]

///|
let uppercase_table : FixedArray[(Char, UInt)] = [
  ('\u{b5}', 924),
  ('\u{df}', 4194304),
  ('\u{e0}', 192),
  ('\u{e1}', 193),
  ('\u{e2}', 194),
  ('\u{e3}', 195),
  ('\u{e4}', 196),
  ('\u{e5}', 197),
  ('\u{e6}', 198),
  ('\u{e7}', 199),
  ('\u{e8}', 200),
  ('\u{e9}', 201),
  ('\u{ea}', 202),
  ('\u{eb}', 203),
  ('\u{ec}', 204),
  ('\u{ed}', 205),
  ('\u{ee}', 206),
  ('\u{ef}', 207),
  ('\u{f0}', 208),
  ('\u{f1}', 209),
  ('\u{f2}', 210),
  ('\u{f3}', 211),
  ('\u{f4}', 212),
  ('\u{f5}', 213),
  ('\u{f6}', 214),
  ('\u{f8}', 216),
  ('\u{f9}', 217),
  ('\u{fa}', 218),
  ('\u{fb}', 219),
  ('\u{fc}', 220),
  ('\u{fd}', 221),
  ('\u{fe}', 222),
  ('\u{ff}', 376),
  ('\u{101}', 256),
  ('\u{103}', 258),
  ('\u{105}', 260),
  ('\u{107}', 262),
  ('\u{109}', 264),
  ('\u{10b}', 266),
  ('\u{10d}', 268),
  ('\u{10f}', 270),
  ('\u{111}', 272),
  ('\u{113}', 274),
  ('\u{115}', 276),
  ('\u{117}', 278),
  ('\u{119}', 280),
  ('\u{11b}', 282),
  ('\u{11d}', 284),
  ('\u{11f}', 286),
  ('\u{121}', 288),
  ('\u{123}', 290),
  ('\u{125}', 292),
  ('\u{127}', 294),
  ('\u{129}', 296),
  ('\u{12b}', 298),
  ('\u{12d}', 300),
  ('\u{12f}', 302),
  ('\u{131}', 73),
  ('\u{133}', 306),
  ('\u{135}', 308),
  ('\u{137}', 310),
  ('\u{13a}', 313),
  ('\u{13c}', 315),
  ('\u{13e}', 317),
  ('\u{140}', 319),
  ('\u{142}', 321),
  ('\u{144}', 323),
  ('\u{146}', 325),
  ('\u{148}', 327),
  ('\u{149}', 4194305),
  ('\u{14b}', 330),
  ('\u{14d}', 332),
  ('\u{14f}', 334),
  ('\u{151}', 336),
  ('\u{153}', 338),
  ('\u{155}', 340),
  ('\u{157}', 342),
  ('\u{159}', 344),
  ('\u{15b}', 346),
  ('\u{15d}', 348),
  ('\u{15f}', 350),
  ('\u{161}', 352),
  ('\u{163}', 354),
  ('\u{165}', 356),
  ('\u{167}', 358),
  ('\u{169}', 360),
  ('\u{16b}', 362),
  ('\u{16d}', 364),
  ('\u{16f}', 366),
  ('\u{171}', 368),
  ('\u{173}', 370),
  ('\u{175}', 372),
  ('\u{177}', 374),
  ('\u{17a}', 377),
  ('\u{17c}', 379),
  ('\u{17e}', 381),
  ('\u{17f}', 83),
  ('\u{180}', 579),
  ('\u{183}', 386),
  ('\u{185}', 388),
  ('\u{188}', 391),
  ('\u{18c}', 395),
  ('\u{192}', 401),
  ('\u{195}', 502),
  ('\u{199}', 408),
  ('\u{19a}', 573),
  ('\u{19b}', 42972),
  ('\u{19e}', 544),
  ('\u{1a1}', 416),
  ('\u{1a3}', 418),
  ('\u{1a5}', 420),
  ('\u{1a8}', 423),
  ('\u{1ad}', 428),
  ('\u{1b0}', 431),
  ('\u{1b4}', 435),
  ('\u{1b6}', 437),
  ('\u{1b9}', 440),
  ('\u{1bd}', 444),
  ('\u{1bf}', 503),
  ('\u{1c5}', 452),
  ('\u{1c6}', 452),
  ('\u{1c8}', 455),
  ('\u{1c9}', 455),
  ('\u{1cb}', 458),
  ('\u{1cc}', 458),
  ('\u{1ce}', 461),
  ('\u{1d0}', 463),
  ('\u{1d2}', 465),
  ('\u{1d4}', 467),
  ('\u{1d6}', 469),
  ('\u{1d8}', 471),
  ('\u{1da}', 473),
  ('\u{1dc}', 475),
  ('\u{1dd}', 398),
  ('\u{1df}', 478),
  ('\u{1e1}', 480),
  ('\u{1e3}', 482),
  ('\u{1e5}', 484),
  ('\u{1e7}', 486),
  ('\u{1e9}', 488),
  ('\u{1eb}', 490),
  ('\u{1ed}', 492),
  ('\u{1ef}', 494),
  ('\u{1f0}', 4194306),
  ('\u{1f2}', 497),
  ('\u{1f3}', 497),
  ('\u{1f5}', 500),
  ('\u{1f9}', 504),
  ('\u{1fb}', 506),
  ('\u{1fd}', 508),
  ('\u{1ff}', 510),
  ('\u{201}', 512),
  ('\u{203}', 514),
  ('\u{205}', 516),
  ('\u{207}', 518),
  ('\u{209}', 520),
  ('\u{20b}', 522),
  ('\u{20d}', 524),
  ('\u{20f}', 526),
  ('\u{211}', 528),
  ('\u{213}', 530),
  ('\u{215}', 532),
  ('\u{217}', 534),
  ('\u{219}', 536),
  ('\u{21b}', 538),
  ('\u{21d}', 540),
  ('\u{21f}', 542),
  ('\u{223}', 546),
  ('\u{225}', 548),
  ('\u{227}', 550),
  ('\u{229}', 552),
  ('\u{22b}', 554),
  ('\u{22d}', 556),
  ('\u{22f}', 558),
  ('\u{231}', 560),
  ('\u{233}', 562),
  ('\u{23c}', 571),
  ('\u{23f}', 11390),
  ('\u{240}', 11391),
  ('\u{242}', 577),
  ('\u{247}', 582),
  ('\u{249}', 584),
  ('\u{24b}', 586),
  ('\u{24d}', 588),
  ('\u{24f}', 590),
  ('\u{250}', 11375),
  ('\u{251}', 11373),
  ('\u{252}', 11376),
  ('\u{253}', 385),
  ('\u{254}', 390),
  ('\u{256}', 393),
  ('\u{257}', 394),
  ('\u{259}', 399),
  ('\u{25b}', 400),
  ('\u{25c}', 42923),
  ('\u{260}', 403),
  ('\u{261}', 42924),
  ('\u{263}', 404),
  ('\u{264}', 42955),
  ('\u{265}', 42893),
  ('\u{266}', 42922),
  ('\u{268}', 407),
  ('\u{269}', 406),
  ('\u{26a}', 42926),
  ('\u{26b}', 11362),
  ('\u{26c}', 42925),
  ('\u{26f}', 412),
  ('\u{271}', 11374),
  ('\u{272}', 413),
  ('\u{275}', 415),
  ('\u{27d}', 11364),
  ('\u{280}', 422),
  ('\u{282}', 42949),
  ('\u{283}', 425),
  ('\u{287}', 42929),
  ('\u{288}', 430),
  ('\u{289}', 580),
  ('\u{28a}', 433),
  ('\u{28b}', 434),
  ('\u{28c}', 581),
  ('\u{292}', 439),
  ('\u{29d}', 42930),
  ('\u{29e}', 42928),
  ('\u{345}', 921),
  ('\u{371}', 880),
  ('\u{373}', 882),
  ('\u{377}', 886),
  ('\u{37b}', 1021),
  ('\u{37c}', 1022),
  ('\u{37d}', 1023),
  ('\u{390}', 4194307),
  ('\u{3ac}', 902),
  ('\u{3ad}', 904),
  ('\u{3ae}', 905),
  ('\u{3af}', 906),
  ('\u{3b0}', 4194308),
  ('\u{3b1}', 913),
  ('\u{3b2}', 914),
  ('\u{3b3}', 915),
  ('\u{3b4}', 916),
  ('\u{3b5}', 917),
  ('\u{3b6}', 918),
  ('\u{3b7}', 919),
  ('\u{3b8}', 920),
  ('\u{3b9}', 921),
  ('\u{3ba}', 922),
  ('\u{3bb}', 923),
  ('\u{3bc}', 924),
  ('\u{3bd}', 925),
  ('\u{3be}', 926),
  ('\u{3bf}', 927),
  ('\u{3c0}', 928),
  ('\u{3c1}', 929),
  ('\u{3c2}', 931),
  ('\u{3c3}', 931),
  ('\u{3c4}', 932),
  ('\u{3c5}', 933),
  ('\u{3c6}', 934),
  ('\u{3c7}', 935),
  ('\u{3c8}', 936),
  ('\u{3c9}', 937),
  ('\u{3ca}', 938),
  ('\u{3cb}', 939),
  ('\u{3cc}', 908),
  ('\u{3cd}', 910),
  ('\u{3ce}', 911),
  ('\u{3d0}', 914),
  ('\u{3d1}', 920),
  ('\u{3d5}', 934),
  ('\u{3d6}', 928),
  ('\u{3d7}', 975),
  ('\u{3d9}', 984),
  ('\u{3db}', 986),
  ('\u{3dd}', 988),
  ('\u{3df}', 990),
  ('\u{3e1}', 992),
  ('\u{3e3}', 994),
  ('\u{3e5}', 996),
  ('\u{3e7}', 998),
  ('\u{3e9}', 1000),
  ('\u{3eb}', 1002),
  ('\u{3ed}', 1004),
  ('\u{3ef}', 1006),
  ('\u{3f0}', 922),
  ('\u{3f1}', 929),
  ('\u{3f2}', 1017),
  ('\u{3f3}', 895),
  ('\u{3f5}', 917),
  ('\u{3f8}', 1015),
  ('\u{3fb}', 1018),
  ('\u{430}', 1040),
  ('\u{431}', 1041),
  ('\u{432}', 1042),
  ('\u{433}', 1043),
  ('\u{434}', 1044),
  ('\u{435}', 1045),
  ('\u{436}', 1046),
  ('\u{437}', 1047),
  ('\u{438}', 1048),
  ('\u{439}', 1049),
  ('\u{43a}', 1050),
  ('\u{43b}', 1051),
  ('\u{43c}', 1052),
  ('\u{43d}', 1053),
  ('\u{43e}', 1054),
  ('\u{43f}', 1055),
  ('\u{440}', 1056),
  ('\u{441}', 1057),
  ('\u{442}', 1058),
  ('\u{443}', 1059),
  ('\u{444}', 1060),
  ('\u{445}', 1061),
  ('\u{446}', 1062),
  ('\u{447}', 1063),
  ('\u{448}', 1064),
  ('\u{449}', 1065),
  ('\u{44a}', 1066),
  ('\u{44b}', 1067),
  ('\u{44c}', 1068),
  ('\u{44d}', 1069),
  ('\u{44e}', 1070),
  ('\u{44f}', 1071),
  ('\u{450}', 1024),
  ('\u{451}', 1025),
  ('\u{452}', 1026),
  ('\u{453}', 1027),
  ('\u{454}', 1028),
  ('\u{455}', 1029),
  ('\u{456}', 1030),
  ('\u{457}', 1031),
  ('\u{458}', 1032),
  ('\u{459}', 1033),
  ('\u{45a}', 1034),
  ('\u{45b}', 1035),
  ('\u{45c}', 1036),
  ('\u{45d}', 1037),
  ('\u{45e}', 1038),
  ('\u{45f}', 1039),
  ('\u{461}', 1120),
  ('\u{463}', 1122),
  ('\u{465}', 1124),
  ('\u{467}', 1126),
  ('\u{469}', 1128),
  ('\u{46b}', 1130),
  ('\u{46d}', 1132),
  ('\u{46f}', 1134),
  ('\u{471}', 1136),
  ('\u{473}', 1138),
  ('\u{475}', 1140),
  ('\u{477}', 1142),
  ('\u{479}', 1144),
  ('\u{47b}', 1146),
  ('\u{47d}', 1148),
  ('\u{47f}', 1150),
  ('\u{481}', 1152),
  ('\u{48b}', 1162),
  ('\u{48d}', 1164),
  ('\u{48f}', 1166),
  ('\u{491}', 1168),
  ('\u{493}', 1170),
  ('\u{495}', 1172),
  ('\u{497}', 1174),
  ('\u{499}', 1176),
  ('\u{49b}', 1178),
  ('\u{49d}', 1180),
  ('\u{49f}', 1182),
  ('\u{4a1}', 1184),
  ('\u{4a3}', 1186),
  ('\u{4a5}', 1188),
  ('\u{4a7}', 1190),
  ('\u{4a9}', 1192),
  ('\u{4ab}', 1194),
  ('\u{4ad}', 1196),
  ('\u{4af}', 1198),
  ('\u{4b1}', 1200),
  ('\u{4b3}', 1202),
  ('\u{4b5}', 1204),
  ('\u{4b7}', 1206),
  ('\u{4b9}', 1208),
  ('\u{4bb}', 1210),
  ('\u{4bd}', 1212),
  ('\u{4bf}', 1214),
  ('\u{4c2}', 1217),
  ('\u{4c4}', 1219),
  ('\u{4c6}', 1221),
  ('\u{4c8}', 1223),
  ('\u{4ca}', 1225),
  ('\u{4cc}', 1227),
  ('\u{4ce}', 1229),
  ('\u{4cf}', 1216),
  ('\u{4d1}', 1232),
  ('\u{4d3}', 1234),
  ('\u{4d5}', 1236),
  ('\u{4d7}', 1238),
  ('\u{4d9}', 1240),
  ('\u{4db}', 1242),
  ('\u{4dd}', 1244),
  ('\u{4df}', 1246),
  ('\u{4e1}', 1248),
  ('\u{4e3}', 1250),
  ('\u{4e5}', 1252),
  ('\u{4e7}', 1254),
  ('\u{4e9}', 1256),
  ('\u{4eb}', 1258),
  ('\u{4ed}', 1260),
  ('\u{4ef}', 1262),
  ('\u{4f1}', 1264),
  ('\u{4f3}', 1266),
  ('\u{4f5}', 1268),
  ('\u{4f7}', 1270),
  ('\u{4f9}', 1272),
  ('\u{4fb}', 1274),
  ('\u{4fd}', 1276),
  ('\u{4ff}', 1278),
  ('\u{501}', 1280),
  ('\u{503}', 1282),
  ('\u{505}', 1284),
  ('\u{507}', 1286),
  ('\u{509}', 1288),
  ('\u{50b}', 1290),
  ('\u{50d}', 1292),
  ('\u{50f}', 1294),
  ('\u{511}', 1296),
  ('\u{513}', 1298),
  ('\u{515}', 1300),
  ('\u{517}', 1302),
  ('\u{519}', 1304),
  ('\u{51b}', 1306),
  ('\u{51d}', 1308),
  ('\u{51f}', 1310),
  ('\u{521}', 1312),
  ('\u{523}', 1314),
  ('\u{525}', 1316),
  ('\u{527}', 1318),
  ('\u{529}', 1320),
  ('\u{52b}', 1322),
  ('\u{52d}', 1324),
  ('\u{52f}', 1326),
  ('\u{561}', 1329),
  ('\u{562}', 1330),
  ('\u{563}', 1331),
  ('\u{564}', 1332),
  ('\u{565}', 1333),
  ('\u{566}', 1334),
  ('\u{567}', 1335),
  ('\u{568}', 1336),
  ('\u{569}', 1337),
  ('\u{56a}', 1338),
  ('\u{56b}', 1339),
  ('\u{56c}', 1340),
  ('\u{56d}', 1341),
  ('\u{56e}', 1342),
  ('\u{56f}', 1343),
  ('\u{570}', 1344),
  ('\u{571}', 1345),
  ('\u{572}', 1346),
  ('\u{573}', 1347),
  ('\u{574}', 1348),
  ('\u{575}', 1349),
  ('\u{576}', 1350),
  ('\u{577}', 1351),
  ('\u{578}', 1352),
  ('\u{579}', 1353),
  ('\u{57a}', 1354),
  ('\u{57b}', 1355),
  ('\u{57c}', 1356),
  ('\u{57d}', 1357),
  ('\u{57e}', 1358),
  ('\u{57f}', 1359),
  ('\u{580}', 1360),
  ('\u{581}', 1361),
  ('\u{582}', 1362),
  ('\u{583}', 1363),
  ('\u{584}', 1364),
  ('\u{585}', 1365),
  ('\u{586}', 1366),
  ('\u{587}', 4194309),
  ('\u{10d0}', 7312),
  ('\u{10d1}', 7313),
  ('\u{10d2}', 7314),
  ('\u{10d3}', 7315),
  ('\u{10d4}', 7316),
  ('\u{10d5}', 7317),
  ('\u{10d6}', 7318),
  ('\u{10d7}', 7319),
  ('\u{10d8}', 7320),
  ('\u{10d9}', 7321),
  ('\u{10da}', 7322),
  ('\u{10db}', 7323),
  ('\u{10dc}', 7324),
  ('\u{10dd}', 7325),
  ('\u{10de}', 7326),
  ('\u{10df}', 7327),
  ('\u{10e0}', 7328),
  ('\u{10e1}', 7329),
  ('\u{10e2}', 7330),
  ('\u{10e3}', 7331),
  ('\u{10e4}', 7332),
  ('\u{10e5}', 7333),
  ('\u{10e6}', 7334),
  ('\u{10e7}', 7335),
  ('\u{10e8}', 7336),
  ('\u{10e9}', 7337),
  ('\u{10ea}', 7338),
  ('\u{10eb}', 7339),
  ('\u{10ec}', 7340),
  ('\u{10ed}', 7341),
  ('\u{10ee}', 7342),
  ('\u{10ef}', 7343),
  ('\u{10f0}', 7344),
  ('\u{10f1}', 7345),
  ('\u{10f2}', 7346),
  ('\u{10f3}', 7347),
  ('\u{10f4}', 7348),
  ('\u{10f5}', 7349),
  ('\u{10f6}', 7350),
  ('\u{10f7}', 7351),
  ('\u{10f8}', 7352),
  ('\u{10f9}', 7353),
  ('\u{10fa}', 7354),
  ('\u{10fd}', 7357),
  ('\u{10fe}', 7358),
  ('\u{10ff}', 7359),
  ('\u{13f8}', 5104),
  ('\u{13f9}', 5105),
  ('\u{13fa}', 5106),
  ('\u{13fb}', 5107),
  ('\u{13fc}', 5108),
  ('\u{13fd}', 5109),
  ('\u{1c80}', 1042),
  ('\u{1c81}', 1044),
  ('\u{1c82}', 1054),
  ('\u{1c83}', 1057),
  ('\u{1c84}', 1058),
  ('\u{1c85}', 1058),
  ('\u{1c86}', 1066),
  ('\u{1c87}', 1122),
  ('\u{1c88}', 42570),
  ('\u{1c8a}', 7305),
  ('\u{1d79}', 42877),
  ('\u{1d7d}', 11363),
  ('\u{1d8e}', 42950),
  ('\u{1e01}', 7680),
  ('\u{1e03}', 7682),
  ('\u{1e05}', 7684),
  ('\u{1e07}', 7686),
  ('\u{1e09}', 7688),
  ('\u{1e0b}', 7690),
  ('\u{1e0d}', 7692),
  ('\u{1e0f}', 7694),
  ('\u{1e11}', 7696),
  ('\u{1e13}', 7698),
  ('\u{1e15}', 7700),
  ('\u{1e17}', 7702),
  ('\u{1e19}', 7704),
  ('\u{1e1b}', 7706),
  ('\u{1e1d}', 7708),
  ('\u{1e1f}', 7710),
  ('\u{1e21}', 7712),
  ('\u{1e23}', 7714),
  ('\u{1e25}', 7716),
  ('\u{1e27}', 7718),
  ('\u{1e29}', 7720),
  ('\u{1e2b}', 7722),
  ('\u{1e2d}', 7724),
  ('\u{1e2f}', 7726),
  ('\u{1e31}', 7728),
  ('\u{1e33}', 7730),
  ('\u{1e35}', 7732),
  ('\u{1e37}', 7734),
  ('\u{1e39}', 7736),
  ('\u{1e3b}', 7738),
  ('\u{1e3d}', 7740),
  ('\u{1e3f}', 7742),
  ('\u{1e41}', 7744),
  ('\u{1e43}', 7746),
  ('\u{1e45}', 7748),
  ('\u{1e47}', 7750),
  ('\u{1e49}', 7752),
  ('\u{1e4b}', 7754),
  ('\u{1e4d}', 7756),
  ('\u{1e4f}', 7758),
  ('\u{1e51}', 7760),
  ('\u{1e53}', 7762),
  ('\u{1e55}', 7764),
  ('\u{1e57}', 7766),
  ('\u{1e59}', 7768),
  ('\u{1e5b}', 7770),
  ('\u{1e5d}', 7772),
  ('\u{1e5f}', 7774),
  ('\u{1e61}', 7776),
  ('\u{1e63}', 7778),
  ('\u{1e65}', 7780),
  ('\u{1e67}', 7782),
  ('\u{1e69}', 7784),
  ('\u{1e6b}', 7786),
  ('\u{1e6d}', 7788),
  ('\u{1e6f}', 7790),
  ('\u{1e71}', 7792),
  ('\u{1e73}', 7794),
  ('\u{1e75}', 7796),
  ('\u{1e77}', 7798),
  ('\u{1e79}', 7800),
  ('\u{1e7b}', 7802),
  ('\u{1e7d}', 7804),
  ('\u{1e7f}', 7806),
  ('\u{1e81}', 7808),
  ('\u{1e83}', 7810),
  ('\u{1e85}', 7812),
  ('\u{1e87}', 7814),
  ('\u{1e89}', 7816),
  ('\u{1e8b}', 7818),
  ('\u{1e8d}', 7820),
  ('\u{1e8f}', 7822),
  ('\u{1e91}', 7824),
  ('\u{1e93}', 7826),
  ('\u{1e95}', 7828),
  ('\u{1e96}', 4194310),
  ('\u{1e97}', 4194311),
  ('\u{1e98}', 4194312),
  ('\u{1e99}', 4194313),
  ('\u{1e9a}', 4194314),
  ('\u{1e9b}', 7776),
  ('\u{1ea1}', 7840),
  ('\u{1ea3}', 7842),
  ('\u{1ea5}', 7844),
  ('\u{1ea7}', 7846),
  ('\u{1ea9}', 7848),
  ('\u{1eab}', 7850),
  ('\u{1ead}', 7852),
  ('\u{1eaf}', 7854),
  ('\u{1eb1}', 7856),
  ('\u{1eb3}', 7858),
  ('\u{1eb5}', 7860),
  ('\u{1eb7}', 7862),
  ('\u{1eb9}', 7864),
  ('\u{1ebb}', 7866),
  ('\u{1ebd}', 7868),
  ('\u{1ebf}', 7870),
  ('\u{1ec1}', 7872),
  ('\u{1ec3}', 7874),
  ('\u{1ec5}', 7876),
  ('\u{1ec7}', 7878),
  ('\u{1ec9}', 7880),
  ('\u{1ecb}', 7882),
  ('\u{1ecd}', 7884),
  ('\u{1ecf}', 7886),
  ('\u{1ed1}', 7888),
  ('\u{1ed3}', 7890),
  ('\u{1ed5}', 7892),
  ('\u{1ed7}', 7894),
  ('\u{1ed9}', 7896),
  ('\u{1edb}', 7898),
  ('\u{1edd}', 7900),
  ('\u{1edf}', 7902),
  ('\u{1ee1}', 7904),
  ('\u{1ee3}', 7906),
  ('\u{1ee5}', 7908),
  ('\u{1ee7}', 7910),
  ('\u{1ee9}', 7912),
  ('\u{1eeb}', 7914),
  ('\u{1eed}', 7916),
  ('\u{1eef}', 7918),
  ('\u{1ef1}', 7920),
  ('\u{1ef3}', 7922),
  ('\u{1ef5}', 7924),
  ('\u{1ef7}', 7926),
  ('\u{1ef9}', 7928),
  ('\u{1efb}', 7930),
  ('\u{1efd}', 7932),
  ('\u{1eff}', 7934),
  ('\u{1f00}', 7944),
  ('\u{1f01}', 7945),
  ('\u{1f02}', 7946),
  ('\u{1f03}', 7947),
  ('\u{1f04}', 7948),
  ('\u{1f05}', 7949),
  ('\u{1f06}', 7950),
  ('\u{1f07}', 7951),
  ('\u{1f10}', 7960),
  ('\u{1f11}', 7961),
  ('\u{1f12}', 7962),
  ('\u{1f13}', 7963),
  ('\u{1f14}', 7964),
  ('\u{1f15}', 7965),
  ('\u{1f20}', 7976),
  ('\u{1f21}', 7977),
  ('\u{1f22}', 7978),
  ('\u{1f23}', 7979),
  ('\u{1f24}', 7980),
  ('\u{1f25}', 7981),
  ('\u{1f26}', 7982),
  ('\u{1f27}', 7983),
  ('\u{1f30}', 7992),
  ('\u{1f31}', 7993),
  ('\u{1f32}', 7994),
  ('\u{1f33}', 7995),
  ('\u{1f34}', 7996),
  ('\u{1f35}', 7997),
  ('\u{1f36}', 7998),
  ('\u{1f37}', 7999),
  ('\u{1f40}', 8008),
  ('\u{1f41}', 8009),
  ('\u{1f42}', 8010),
  ('\u{1f43}', 8011),
  ('\u{1f44}', 8012),
  ('\u{1f45}', 8013),
  ('\u{1f50}', 4194315),
  ('\u{1f51}', 8025),
  ('\u{1f52}', 4194316),
  ('\u{1f53}', 8027),
  ('\u{1f54}', 4194317),
  ('\u{1f55}', 8029),
  ('\u{1f56}', 4194318),
  ('\u{1f57}', 8031),
  ('\u{1f60}', 8040),
  ('\u{1f61}', 8041),
  ('\u{1f62}', 8042),
  ('\u{1f63}', 8043),
  ('\u{1f64}', 8044),
  ('\u{1f65}', 8045),
  ('\u{1f66}', 8046),
  ('\u{1f67}', 8047),
  ('\u{1f70}', 8122),
  ('\u{1f71}', 8123),
  ('\u{1f72}', 8136),
  ('\u{1f73}', 8137),
  ('\u{1f74}', 8138),
  ('\u{1f75}', 8139),
  ('\u{1f76}', 8154),
  ('\u{1f77}', 8155),
  ('\u{1f78}', 8184),
  ('\u{1f79}', 8185),
  ('\u{1f7a}', 8170),
  ('\u{1f7b}', 8171),
  ('\u{1f7c}', 8186),
  ('\u{1f7d}', 8187),
  ('\u{1f80}', 4194319),
  ('\u{1f81}', 4194320),
  ('\u{1f82}', 4194321),
  ('\u{1f83}', 4194322),
  ('\u{1f84}', 4194323),
  ('\u{1f85}', 4194324),
  ('\u{1f86}', 4194325),
  ('\u{1f87}', 4194326),
  ('\u{1f88}', 4194327),
  ('\u{1f89}', 4194328),
  ('\u{1f8a}', 4194329),
  ('\u{1f8b}', 4194330),
  ('\u{1f8c}', 4194331),
  ('\u{1f8d}', 4194332),
  ('\u{1f8e}', 4194333),
  ('\u{1f8f}', 4194334),
  ('\u{1f90}', 4194335),
  ('\u{1f91}', 4194336),
  ('\u{1f92}', 4194337),
  ('\u{1f93}', 4194338),
  ('\u{1f94}', 4194339),
  ('\u{1f95}', 4194340),
  ('\u{1f96}', 4194341),
  ('\u{1f97}', 4194342),
  ('\u{1f98}', 4194343),
  ('\u{1f99}', 4194344),
  ('\u{1f9a}', 4194345),
  ('\u{1f9b}', 4194346),
  ('\u{1f9c}', 4194347),
  ('\u{1f9d}', 4194348),
  ('\u{1f9e}', 4194349),
  ('\u{1f9f}', 4194350),
  ('\u{1fa0}', 4194351),
  ('\u{1fa1}', 4194352),
  ('\u{1fa2}', 4194353),
  ('\u{1fa3}', 4194354),
  ('\u{1fa4}', 4194355),
  ('\u{1fa5}', 4194356),
  ('\u{1fa6}', 4194357),
  ('\u{1fa7}', 4194358),
  ('\u{1fa8}', 4194359),
  ('\u{1fa9}', 4194360),
  ('\u{1faa}', 4194361),
  ('\u{1fab}', 4194362),
  ('\u{1fac}', 4194363),
  ('\u{1fad}', 4194364),
  ('\u{1fae}', 4194365),
  ('\u{1faf}', 4194366),
  ('\u{1fb0}', 8120),
  ('\u{1fb1}', 8121),
  ('\u{1fb2}', 4194367),
  ('\u{1fb3}', 4194368),
  ('\u{1fb4}', 4194369),
  ('\u{1fb6}', 4194370),
  ('\u{1fb7}', 4194371),
  ('\u{1fbc}', 4194372),
  ('\u{1fbe}', 921),
  ('\u{1fc2}', 4194373),
  ('\u{1fc3}', 4194374),
  ('\u{1fc4}', 4194375),
  ('\u{1fc6}', 4194376),
  ('\u{1fc7}', 4194377),
  ('\u{1fcc}', 4194378),
  ('\u{1fd0}', 8152),
  ('\u{1fd1}', 8153),
  ('\u{1fd2}', 4194379),
  ('\u{1fd3}', 4194380),
  ('\u{1fd6}', 4194381),
  ('\u{1fd7}', 4194382),
  ('\u{1fe0}', 8168),
  ('\u{1fe1}', 8169),
  ('\u{1fe2}', 4194383),
  ('\u{1fe3}', 4194384),
  ('\u{1fe4}', 4194385),
  ('\u{1fe5}', 8172),
  ('\u{1fe6}', 4194386),
  ('\u{1fe7}', 4194387),
  ('\u{1ff2}', 4194388),
  ('\u{1ff3}', 4194389),
  ('\u{1ff4}', 4194390),
  ('\u{1ff6}', 4194391),
  ('\u{1ff7}', 4194392),
  ('\u{1ffc}', 4194393),
  ('\u{214e}', 8498),
  ('\u{2170}', 8544),
  ('\u{2171}', 8545),
  ('\u{2172}', 8546),
  ('\u{2173}', 8547),
  ('\u{2174}', 8548),
  ('\u{2175}', 8549),
  ('\u{2176}', 8550),
  ('\u{2177}', 8551),
  ('\u{2178}', 8552),
  ('\u{2179}', 8553),
  ('\u{217a}', 8554),
  ('\u{217b}', 8555),
  ('\u{217c}', 8556),
  ('\u{217d}', 8557),
  ('\u{217e}', 8558),
  ('\u{217f}', 8559),
  ('\u{2184}', 8579),
  ('\u{24d0}', 9398),
  ('\u{24d1}', 9399),
  ('\u{24d2}', 9400),
  ('\u{24d3}', 9401),
  ('\u{24d4}', 9402),
  ('\u{24d5}', 9403),
  ('\u{24d6}', 9404),
  ('\u{24d7}', 9405),
  ('\u{24d8}', 9406),
  ('\u{24d9}', 9407),
  ('\u{24da}', 9408),
  ('\u{24db}', 9409),
  ('\u{24dc}', 9410),
  ('\u{24dd}', 9411),
  ('\u{24de}', 9412),
  ('\u{24df}', 9413),
  ('\u{24e0}', 9414),
  ('\u{24e1}', 9415),
  ('\u{24e2}', 9416),
  ('\u{24e3}', 9417),
  ('\u{24e4}', 9418),
  ('\u{24e5}', 9419),
  ('\u{24e6}', 9420),
  ('\u{24e7}', 9421),
  ('\u{24e8}', 9422),
  ('\u{24e9}', 9423),
  ('\u{2c30}', 11264),
  ('\u{2c31}', 11265),
  ('\u{2c32}', 11266),
  ('\u{2c33}', 11267),
  ('\u{2c34}', 11268),
  ('\u{2c35}', 11269),
  ('\u{2c36}', 11270),
  ('\u{2c37}', 11271),
  ('\u{2c38}', 11272),
  ('\u{2c39}', 11273),
  ('\u{2c3a}', 11274),
  ('\u{2c3b}', 11275),
  ('\u{2c3c}', 11276),
  ('\u{2c3d}', 11277),
  ('\u{2c3e}', 11278),
  ('\u{2c3f}', 11279),
  ('\u{2c40}', 11280),
  ('\u{2c41}', 11281),
  ('\u{2c42}', 11282),
  ('\u{2c43}', 11283),
  ('\u{2c44}', 11284),
  ('\u{2c45}', 11285),
  ('\u{2c46}', 11286),
  ('\u{2c47}', 11287),
  ('\u{2c48}', 11288),
  ('\u{2c49}', 11289),
  ('\u{2c4a}', 11290),
  ('\u{2c4b}', 11291),
  ('\u{2c4c}', 11292),
  ('\u{2c4d}', 11293),
  ('\u{2c4e}', 11294),
  ('\u{2c4f}', 11295),
  ('\u{2c50}', 11296),
  ('\u{2c51}', 11297),
  ('\u{2c52}', 11298),
  ('\u{2c53}', 11299),
  ('\u{2c54}', 11300),
  ('\u{2c55}', 11301),
  ('\u{2c56}', 11302),
  ('\u{2c57}', 11303),
  ('\u{2c58}', 11304),
  ('\u{2c59}', 11305),
  ('\u{2c5a}', 11306),
  ('\u{2c5b}', 11307),
  ('\u{2c5c}', 11308),
  ('\u{2c5d}', 11309),
  ('\u{2c5e}', 11310),
  ('\u{2c5f}', 11311),
  ('\u{2c61}', 11360),
  ('\u{2c65}', 570),
  ('\u{2c66}', 574),
  ('\u{2c68}', 11367),
  ('\u{2c6a}', 11369),
  ('\u{2c6c}', 11371),
  ('\u{2c73}', 11378),
  ('\u{2c76}', 11381),
  ('\u{2c81}', 11392),
  ('\u{2c83}', 11394),
  ('\u{2c85}', 11396),
  ('\u{2c87}', 11398),
  ('\u{2c89}', 11400),
  ('\u{2c8b}', 11402),
  ('\u{2c8d}', 11404),
  ('\u{2c8f}', 11406),
  ('\u{2c91}', 11408),
  ('\u{2c93}', 11410),
  ('\u{2c95}', 11412),
  ('\u{2c97}', 11414),
  ('\u{2c99}', 11416),
  ('\u{2c9b}', 11418),
  ('\u{2c9d}', 11420),
  ('\u{2c9f}', 11422),
  ('\u{2ca1}', 11424),
  ('\u{2ca3}', 11426),
  ('\u{2ca5}', 11428),
  ('\u{2ca7}', 11430),
  ('\u{2ca9}', 11432),
  ('\u{2cab}', 11434),
  ('\u{2cad}', 11436),
  ('\u{2caf}', 11438),
  ('\u{2cb1}', 11440),
  ('\u{2cb3}', 11442),
  ('\u{2cb5}', 11444),
  ('\u{2cb7}', 11446),
  ('\u{2cb9}', 11448),
  ('\u{2cbb}', 11450),
  ('\u{2cbd}', 11452),
  ('\u{2cbf}', 11454),
  ('\u{2cc1}', 11456),
  ('\u{2cc3}', 11458),
  ('\u{2cc5}', 11460),
  ('\u{2cc7}', 11462),
  ('\u{2cc9}', 11464),
  ('\u{2ccb}', 11466),
  ('\u{2ccd}', 11468),
  ('\u{2ccf}', 11470),
  ('\u{2cd1}', 11472),
  ('\u{2cd3}', 11474),
  ('\u{2cd5}', 11476),
  ('\u{2cd7}', 11478),
  ('\u{2cd9}', 11480),
  ('\u{2cdb}', 11482),
  ('\u{2cdd}', 11484),
  ('\u{2cdf}', 11486),
  ('\u{2ce1}', 11488),
  ('\u{2ce3}', 11490),
  ('\u{2cec}', 11499),
  ('\u{2cee}', 11501),
  ('\u{2cf3}', 11506),
  ('\u{2d00}', 4256),
  ('\u{2d01}', 4257),
  ('\u{2d02}', 4258),
  ('\u{2d03}', 4259),
  ('\u{2d04}', 4260),
  ('\u{2d05}', 4261),
  ('\u{2d06}', 4262),
  ('\u{2d07}', 4263),
  ('\u{2d08}', 4264),
  ('\u{2d09}', 4265),
  ('\u{2d0a}', 4266),
  ('\u{2d0b}', 4267),
  ('\u{2d0c}', 4268),
  ('\u{2d0d}', 4269),
  ('\u{2d0e}', 4270),
  ('\u{2d0f}', 4271),
  ('\u{2d10}', 4272),
  ('\u{2d11}', 4273),
  ('\u{2d12}', 4274),
  ('\u{2d13}', 4275),
  ('\u{2d14}', 4276),
  ('\u{2d15}', 4277),
  ('\u{2d16}', 4278),
  ('\u{2d17}', 4279),
  ('\u{2d18}', 4280),
  ('\u{2d19}', 4281),
  ('\u{2d1a}', 4282),
  ('\u{2d1b}', 4283),
  ('\u{2d1c}', 4284),
  ('\u{2d1d}', 4285),
  ('\u{2d1e}', 4286),
  ('\u{2d1f}', 4287),
  ('\u{2d20}', 4288),
  ('\u{2d21}', 4289),
  ('\u{2d22}', 4290),
  ('\u{2d23}', 4291),
  ('\u{2d24}', 4292),
  ('\u{2d25}', 4293),
  ('\u{2d27}', 4295),
  ('\u{2d2d}', 4301),
  ('\u{a641}', 42560),
  ('\u{a643}', 42562),
  ('\u{a645}', 42564),
  ('\u{a647}', 42566),
  ('\u{a649}', 42568),
  ('\u{a64b}', 42570),
  ('\u{a64d}', 42572),
  ('\u{a64f}', 42574),
  ('\u{a651}', 42576),
  ('\u{a653}', 42578),
  ('\u{a655}', 42580),
  ('\u{a657}', 42582),
  ('\u{a659}', 42584),
  ('\u{a65b}', 42586),
  ('\u{a65d}', 42588),
  ('\u{a65f}', 42590),
  ('\u{a661}', 42592),
  ('\u{a663}', 42594),
  ('\u{a665}', 42596),
  ('\u{a667}', 42598),
  ('\u{a669}', 42600),
  ('\u{a66b}', 42602),
  ('\u{a66d}', 42604),
  ('\u{a681}', 42624),
  ('\u{a683}', 42626),
  ('\u{a685}', 42628),
  ('\u{a687}', 42630),
  ('\u{a689}', 42632),
  ('\u{a68b}', 42634),
  ('\u{a68d}', 42636),
  ('\u{a68f}', 42638),
  ('\u{a691}', 42640),
  ('\u{a693}', 42642),
  ('\u{a695}', 42644),
  ('\u{a697}', 42646),
  ('\u{a699}', 42648),
  ('\u{a69b}', 42650),
  ('\u{a723}', 42786),
  ('\u{a725}', 42788),
  ('\u{a727}', 42790),
  ('\u{a729}', 42792),
  ('\u{a72b}', 42794),
  ('\u{a72d}', 42796),
  ('\u{a72f}', 42798),
  ('\u{a733}', 42802),
  ('\u{a735}', 42804),
  ('\u{a737}', 42806),
  ('\u{a739}', 42808),
  ('\u{a73b}', 42810),
  ('\u{a73d}', 42812),
  ('\u{a73f}', 42814),
  ('\u{a741}', 42816),
  ('\u{a743}', 42818),
  ('\u{a745}', 42820),
  ('\u{a747}', 42822),
  ('\u{a749}', 42824),
  ('\u{a74b}', 42826),
  ('\u{a74d}', 42828),
  ('\u{a74f}', 42830),
  ('\u{a751}', 42832),
  ('\u{a753}', 42834),
  ('\u{a755}', 42836),
  ('\u{a757}', 42838),
  ('\u{a759}', 42840),
  ('\u{a75b}', 42842),
  ('\u{a75d}', 42844),
  ('\u{a75f}', 42846),
  ('\u{a761}', 42848),
  ('\u{a763}', 42850),
  ('\u{a765}', 42852),
  ('\u{a767}', 42854),
  ('\u{a769}', 42856),
  ('\u{a76b}', 42858),
  ('\u{a76d}', 42860),
  ('\u{a76f}', 42862),
  ('\u{a77a}', 42873),
  ('\u{a77c}', 42875),
  ('\u{a77f}', 42878),
  ('\u{a781}', 42880),
  ('\u{a783}', 42882),
  ('\u{a785}', 42884),
  ('\u{a787}', 42886),
  ('\u{a78c}', 42891),
  ('\u{a791}', 42896),
  ('\u{a793}', 42898),
  ('\u{a794}', 42948),
  ('\u{a797}', 42902),
  ('\u{a799}', 42904),
  ('\u{a79b}', 42906),
  ('\u{a79d}', 42908),
  ('\u{a79f}', 42910),
  ('\u{a7a1}', 42912),
  ('\u{a7a3}', 42914),
  ('\u{a7a5}', 42916),
  ('\u{a7a7}', 42918),
  ('\u{a7a9}', 42920),
  ('\u{a7b5}', 42932),
  ('\u{a7b7}', 42934),
  ('\u{a7b9}', 42936),
  ('\u{a7bb}', 42938),
  ('\u{a7bd}', 42940),
  ('\u{a7bf}', 42942),
  ('\u{a7c1}', 42944),
  ('\u{a7c3}', 42946),
  ('\u{a7c8}', 42951),
  ('\u{a7ca}', 42953),
  ('\u{a7cd}', 42956),
  ('\u{a7d1}', 42960),
  ('\u{a7d7}', 42966),
  ('\u{a7d9}', 42968),
  ('\u{a7db}', 42970),
  ('\u{a7f6}', 42997),
  ('\u{ab53}', 42931),
  ('\u{ab70}', 5024),
  ('\u{ab71}', 5025),
  ('\u{ab72}', 5026),
  ('\u{ab73}', 5027),
  ('\u{ab74}', 5028),
  ('\u{ab75}', 5029),
  ('\u{ab76}', 5030),
  ('\u{ab77}', 5031),
  ('\u{ab78}', 5032),
  ('\u{ab79}', 5033),
  ('\u{ab7a}', 5034),
  ('\u{ab7b}', 5035),
  ('\u{ab7c}', 5036),
  ('\u{ab7d}', 5037),
  ('\u{ab7e}', 5038),
  ('\u{ab7f}', 5039),
  ('\u{ab80}', 5040),
  ('\u{ab81}', 5041),
  ('\u{ab82}', 5042),
  ('\u{ab83}', 5043),
  ('\u{ab84}', 5044),
  ('\u{ab85}', 5045),
  ('\u{ab86}', 5046),
  ('\u{ab87}', 5047),
  ('\u{ab88}', 5048),
  ('\u{ab89}', 5049),
  ('\u{ab8a}', 5050),
  ('\u{ab8b}', 5051),
  ('\u{ab8c}', 5052),
  ('\u{ab8d}', 5053),
  ('\u{ab8e}', 5054),
  ('\u{ab8f}', 5055),
  ('\u{ab90}', 5056),
  ('\u{ab91}', 5057),
  ('\u{ab92}', 5058),
  ('\u{ab93}', 5059),
  ('\u{ab94}', 5060),
  ('\u{ab95}', 5061),
  ('\u{ab96}', 5062),
  ('\u{ab97}', 5063),
  ('\u{ab98}', 5064),
  ('\u{ab99}', 5065),
  ('\u{ab9a}', 5066),
  ('\u{ab9b}', 5067),
  ('\u{ab9c}', 5068),
  ('\u{ab9d}', 5069),
  ('\u{ab9e}', 5070),
  ('\u{ab9f}', 5071),
  ('\u{aba0}', 5072),
  ('\u{aba1}', 5073),
  ('\u{aba2}', 5074),
  ('\u{aba3}', 5075),
  ('\u{aba4}', 5076),
  ('\u{aba5}', 5077),
  ('\u{aba6}', 5078),
  ('\u{aba7}', 5079),
  ('\u{aba8}', 5080),
  ('\u{aba9}', 5081),
  ('\u{abaa}', 5082),
  ('\u{abab}', 5083),
  ('\u{abac}', 5084),
  ('\u{abad}', 5085),
  ('\u{abae}', 5086),
  ('\u{abaf}', 5087),
  ('\u{abb0}', 5088),
  ('\u{abb1}', 5089),
  ('\u{abb2}', 5090),
  ('\u{abb3}', 5091),
  ('\u{abb4}', 5092),
  ('\u{abb5}', 5093),
  ('\u{abb6}', 5094),
  ('\u{abb7}', 5095),
  ('\u{abb8}', 5096),
  ('\u{abb9}', 5097),
  ('\u{abba}', 5098),
  ('\u{abbb}', 5099),
  ('\u{abbc}', 5100),
  ('\u{abbd}', 5101),
  ('\u{abbe}', 5102),
  ('\u{abbf}', 5103),
  ('\u{fb00}', 4194394),
  ('\u{fb01}', 4194395),
  ('\u{fb02}', 4194396),
  ('\u{fb03}', 4194397),
  ('\u{fb04}', 4194398),
  ('\u{fb05}', 4194399),
  ('\u{fb06}', 4194400),
  ('\u{fb13}', 4194401),
  ('\u{fb14}', 4194402),
  ('\u{fb15}', 4194403),
  ('\u{fb16}', 4194404),
  ('\u{fb17}', 4194405),
  ('\u{ff41}', 65313),
  ('\u{ff42}', 65314),
  ('\u{ff43}', 65315),
  ('\u{ff44}', 65316),
  ('\u{ff45}', 65317),
  ('\u{ff46}', 65318),
  ('\u{ff47}', 65319),
  ('\u{ff48}', 65320),
  ('\u{ff49}', 65321),
  ('\u{ff4a}', 65322),
  ('\u{ff4b}', 65323),
  ('\u{ff4c}', 65324),
  ('\u{ff4d}', 65325),
  ('\u{ff4e}', 65326),
  ('\u{ff4f}', 65327),
  ('\u{ff50}', 65328),
  ('\u{ff51}', 65329),
  ('\u{ff52}', 65330),
  ('\u{ff53}', 65331),
  ('\u{ff54}', 65332),
  ('\u{ff55}', 65333),
  ('\u{ff56}', 65334),
  ('\u{ff57}', 65335),
  ('\u{ff58}', 65336),
  ('\u{ff59}', 65337),
  ('\u{ff5a}', 65338),
  ('\u{10428}', 66560),
  ('\u{10429}', 66561),
  ('\u{1042a}', 66562),
  ('\u{1042b}', 66563),
  ('\u{1042c}', 66564),
  ('\u{1042d}', 66565),
  ('\u{1042e}', 66566),
  ('\u{1042f}', 66567),
  ('\u{10430}', 66568),
  ('\u{10431}', 66569),
  ('\u{10432}', 66570),
  ('\u{10433}', 66571),
  ('\u{10434}', 66572),
  ('\u{10435}', 66573),
  ('\u{10436}', 66574),
  ('\u{10437}', 66575),
  ('\u{10438}', 66576),
  ('\u{10439}', 66577),
  ('\u{1043a}', 66578),
  ('\u{1043b}', 66579),
  ('\u{1043c}', 66580),
  ('\u{1043d}', 66581),
  ('\u{1043e}', 66582),
  ('\u{1043f}', 66583),
  ('\u{10440}', 66584),
  ('\u{10441}', 66585),
  ('\u{10442}', 66586),
  ('\u{10443}', 66587),
  ('\u{10444}', 66588),
  ('\u{10445}', 66589),
  ('\u{10446}', 66590),
  ('\u{10447}', 66591),
  ('\u{10448}', 66592),
  ('\u{10449}', 66593),
  ('\u{1044a}', 66594),
  ('\u{1044b}', 66595),
  ('\u{1044c}', 66596),
  ('\u{1044d}', 66597),
  ('\u{1044e}', 66598),
  ('\u{1044f}', 66599),
  ('\u{104d8}', 66736),
  ('\u{104d9}', 66737),
  ('\u{104da}', 66738),
  ('\u{104db}', 66739),
  ('\u{104dc}', 66740),
  ('\u{104dd}', 66741),
  ('\u{104de}', 66742),
  ('\u{104df}', 66743),
  ('\u{104e0}', 66744),
  ('\u{104e1}', 66745),
  ('\u{104e2}', 66746),
  ('\u{104e3}', 66747),
  ('\u{104e4}', 66748),
  ('\u{104e5}', 66749),
  ('\u{104e6}', 66750),
  ('\u{104e7}', 66751),
  ('\u{104e8}', 66752),
  ('\u{104e9}', 66753),
  ('\u{104ea}', 66754),
  ('\u{104eb}', 66755),
  ('\u{104ec}', 66756),
  ('\u{104ed}', 66757),
  ('\u{104ee}', 66758),
  ('\u{104ef}', 66759),
  ('\u{104f0}', 66760),
  ('\u{104f1}', 66761),
  ('\u{104f2}', 66762),
  ('\u{104f3}', 66763),
  ('\u{104f4}', 66764),
  ('\u{104f5}', 66765),
  ('\u{104f6}', 66766),
  ('\u{104f7}', 66767),
  ('\u{104f8}', 66768),
  ('\u{104f9}', 66769),
  ('\u{104fa}', 66770),
  ('\u{104fb}', 66771),
  ('\u{10597}', 66928),
  ('\u{10598}', 66929),
  ('\u{10599}', 66930),
  ('\u{1059a}', 66931),
  ('\u{1059b}', 66932),
  ('\u{1059c}', 66933),
  ('\u{1059d}', 66934),
  ('\u{1059e}', 66935),
  ('\u{1059f}', 66936),
  ('\u{105a0}', 66937),
  ('\u{105a1}', 66938),
  ('\u{105a3}', 66940),
  ('\u{105a4}', 66941),
  ('\u{105a5}', 66942),
  ('\u{105a6}', 66943),
  ('\u{105a7}', 66944),
  ('\u{105a8}', 66945),
  ('\u{105a9}', 66946),
  ('\u{105aa}', 66947),
  ('\u{105ab}', 66948),
  ('\u{105ac}', 66949),
  ('\u{105ad}', 66950),
  ('\u{105ae}', 66951),
  ('\u{105af}', 66952),
  ('\u{105b0}', 66953),
  ('\u{105b1}', 66954),
  ('\u{105b3}', 66956),
  ('\u{105b4}', 66957),
  ('\u{105b5}', 66958),
  ('\u{105b6}', 66959),
  ('\u{105b7}', 66960),
  ('\u{105b8}', 66961),
  ('\u{105b9}', 66962),
  ('\u{105bb}', 66964),
  ('\u{105bc}', 66965),
  ('\u{10cc0}', 68736),
  ('\u{10cc1}', 68737),
  ('\u{10cc2}', 68738),
  ('\u{10cc3}', 68739),
  ('\u{10cc4}', 68740),
  ('\u{10cc5}', 68741),
  ('\u{10cc6}', 68742),
  ('\u{10cc7}', 68743),
  ('\u{10cc8}', 68744),
  ('\u{10cc9}', 68745),
  ('\u{10cca}', 68746),
  ('\u{10ccb}', 68747),
  ('\u{10ccc}', 68748),
  ('\u{10ccd}', 68749),
  ('\u{10cce}', 68750),
  ('\u{10ccf}', 68751),
  ('\u{10cd0}', 68752),
  ('\u{10cd1}', 68753),
  ('\u{10cd2}', 68754),
  ('\u{10cd3}', 68755),
  ('\u{10cd4}', 68756),
  ('\u{10cd5}', 68757),
  ('\u{10cd6}', 68758),
  ('\u{10cd7}', 68759),
  ('\u{10cd8}', 68760),
  ('\u{10cd9}', 68761),
  ('\u{10cda}', 68762),
  ('\u{10cdb}', 68763),
  ('\u{10cdc}', 68764),
  ('\u{10cdd}', 68765),
  ('\u{10cde}', 68766),
  ('\u{10cdf}', 68767),
  ('\u{10ce0}', 68768),
  ('\u{10ce1}', 68769),
  ('\u{10ce2}', 68770),
  ('\u{10ce3}', 68771),
  ('\u{10ce4}', 68772),
  ('\u{10ce5}', 68773),
  ('\u{10ce6}', 68774),
  ('\u{10ce7}', 68775),
  ('\u{10ce8}', 68776),
  ('\u{10ce9}', 68777),
  ('\u{10cea}', 68778),
  ('\u{10ceb}', 68779),
  ('\u{10cec}', 68780),
  ('\u{10ced}', 68781),
  ('\u{10cee}', 68782),
  ('\u{10cef}', 68783),
  ('\u{10cf0}', 68784),
  ('\u{10cf1}', 68785),
  ('\u{10cf2}', 68786),
  ('\u{10d70}', 68944),
  ('\u{10d71}', 68945),
  ('\u{10d72}', 68946),
  ('\u{10d73}', 68947),
  ('\u{10d74}', 68948),
  ('\u{10d75}', 68949),
  ('\u{10d76}', 68950),
  ('\u{10d77}', 68951),
  ('\u{10d78}', 68952),
  ('\u{10d79}', 68953),
  ('\u{10d7a}', 68954),
  ('\u{10d7b}', 68955),
  ('\u{10d7c}', 68956),
  ('\u{10d7d}', 68957),
  ('\u{10d7e}', 68958),
  ('\u{10d7f}', 68959),
  ('\u{10d80}', 68960),
  ('\u{10d81}', 68961),
  ('\u{10d82}', 68962),
  ('\u{10d83}', 68963),
  ('\u{10d84}', 68964),
  ('\u{10d85}', 68965),
  ('\u{118c0}', 71840),
  ('\u{118c1}', 71841),
  ('\u{118c2}', 71842),
  ('\u{118c3}', 71843),
  ('\u{118c4}', 71844),
  ('\u{118c5}', 71845),
  ('\u{118c6}', 71846),
  ('\u{118c7}', 71847),
  ('\u{118c8}', 71848),
  ('\u{118c9}', 71849),
  ('\u{118ca}', 71850),
  ('\u{118cb}', 71851),
  ('\u{118cc}', 71852),
  ('\u{118cd}', 71853),
  ('\u{118ce}', 71854),
  ('\u{118cf}', 71855),
  ('\u{118d0}', 71856),
  ('\u{118d1}', 71857),
  ('\u{118d2}', 71858),
  ('\u{118d3}', 71859),
  ('\u{118d4}', 71860),
  ('\u{118d5}', 71861),
  ('\u{118d6}', 71862),
  ('\u{118d7}', 71863),
  ('\u{118d8}', 71864),
  ('\u{118d9}', 71865),
  ('\u{118da}', 71866),
  ('\u{118db}', 71867),
  ('\u{118dc}', 71868),
  ('\u{118dd}', 71869),
  ('\u{118de}', 71870),
  ('\u{118df}', 71871),
  ('\u{16e60}', 93760),
  ('\u{16e61}', 93761),
  ('\u{16e62}', 93762),
  ('\u{16e63}', 93763),
  ('\u{16e64}', 93764),
  ('\u{16e65}', 93765),
  ('\u{16e66}', 93766),
  ('\u{16e67}', 93767),
  ('\u{16e68}', 93768),
  ('\u{16e69}', 93769),
  ('\u{16e6a}', 93770),
  ('\u{16e6b}', 93771),
  ('\u{16e6c}', 93772),
  ('\u{16e6d}', 93773),
  ('\u{16e6e}', 93774),
  ('\u{16e6f}', 93775),
  ('\u{16e70}', 93776),
  ('\u{16e71}', 93777),
  ('\u{16e72}', 93778),
  ('\u{16e73}', 93779),
  ('\u{16e74}', 93780),
  ('\u{16e75}', 93781),
  ('\u{16e76}', 93782),
  ('\u{16e77}', 93783),
  ('\u{16e78}', 93784),
  ('\u{16e79}', 93785),
  ('\u{16e7a}', 93786),
  ('\u{16e7b}', 93787),
  ('\u{16e7c}', 93788),
  ('\u{16e7d}', 93789),
  ('\u{16e7e}', 93790),
  ('\u{16e7f}', 93791),
  ('\u{1e922}', 125184),
  ('\u{1e923}', 125185),
  ('\u{1e924}', 125186),
  ('\u{1e925}', 125187),
  ('\u{1e926}', 125188),
  ('\u{1e927}', 125189),
  ('\u{1e928}', 125190),
  ('\u{1e929}', 125191),
  ('\u{1e92a}', 125192),
  ('\u{1e92b}', 125193),
  ('\u{1e92c}', 125194),
  ('\u{1e92d}', 125195),
  ('\u{1e92e}', 125196),
  ('\u{1e92f}', 125197),
  ('\u{1e930}', 125198),
  ('\u{1e931}', 125199),
  ('\u{1e932}', 125200),
  ('\u{1e933}', 125201),
  ('\u{1e934}', 125202),
  ('\u{1e935}', 125203),
  ('\u{1e936}', 125204),
  ('\u{1e937}', 125205),
  ('\u{1e938}', 125206),
  ('\u{1e939}', 125207),
  ('\u{1e93a}', 125208),
  ('\u{1e93b}', 125209),
  ('\u{1e93c}', 125210),
  ('\u{1e93d}', 125211),
  ('\u{1e93e}', 125212),
  ('\u{1e93f}', 125213),
  ('\u{1e940}', 125214),
  ('\u{1e941}', 125215),
  ('\u{1e942}', 125216),
  ('\u{1e943}', 125217),
]

///|
let uppercase_table_multi : FixedArray[(Char, Char, Char)] = [
  ('S', 'S', '\u{0}'),
  ('\u{2bc}', 'N', '\u{0}'),
  ('J', '\u{30c}', '\u{0}'),
  ('\u{399}', '\u{308}', '\u{301}'),
  ('\u{3a5}', '\u{308}', '\u{301}'),
  ('\u{535}', '\u{552}', '\u{0}'),
  ('H', '\u{331}', '\u{0}'),
  ('T', '\u{308}', '\u{0}'),
  ('W', '\u{30a}', '\u{0}'),
  ('Y', '\u{30a}', '\u{0}'),
  ('A', '\u{2be}', '\u{0}'),
  ('\u{3a5}', '\u{313}', '\u{0}'),
  ('\u{3a5}', '\u{313}', '\u{300}'),
  ('\u{3a5}', '\u{313}', '\u{301}'),
  ('\u{3a5}', '\u{313}', '\u{342}'),
  ('\u{1f08}', '\u{399}', '\u{0}'),
  ('\u{1f09}', '\u{399}', '\u{0}'),
  ('\u{1f0a}', '\u{399}', '\u{0}'),
  ('\u{1f0b}', '\u{399}', '\u{0}'),
  ('\u{1f0c}', '\u{399}', '\u{0}'),
  ('\u{1f0d}', '\u{399}', '\u{0}'),
  ('\u{1f0e}', '\u{399}', '\u{0}'),
  ('\u{1f0f}', '\u{399}', '\u{0}'),
  ('\u{1f08}', '\u{399}', '\u{0}'),
  ('\u{1f09}', '\u{399}', '\u{0}'),
  ('\u{1f0a}', '\u{399}', '\u{0}'),
  ('\u{1f0b}', '\u{399}', '\u{0}'),
  ('\u{1f0c}', '\u{399}', '\u{0}'),
  ('\u{1f0d}', '\u{399}', '\u{0}'),
  ('\u{1f0e}', '\u{399}', '\u{0}'),
  ('\u{1f0f}', '\u{399}', '\u{0}'),
  ('\u{1f28}', '\u{399}', '\u{0}'),
  ('\u{1f29}', '\u{399}', '\u{0}'),
  ('\u{1f2a}', '\u{399}', '\u{0}'),
  ('\u{1f2b}', '\u{399}', '\u{0}'),
  ('\u{1f2c}', '\u{399}', '\u{0}'),
  ('\u{1f2d}', '\u{399}', '\u{0}'),
  ('\u{1f2e}', '\u{399}', '\u{0}'),
  ('\u{1f2f}', '\u{399}', '\u{0}'),
  ('\u{1f28}', '\u{399}', '\u{0}'),
  ('\u{1f29}', '\u{399}', '\u{0}'),
  ('\u{1f2a}', '\u{399}', '\u{0}'),
  ('\u{1f2b}', '\u{399}', '\u{0}'),
  ('\u{1f2c}', '\u{399}', '\u{0}'),
  ('\u{1f2d}', '\u{399}', '\u{0}'),
  ('\u{1f2e}', '\u{399}', '\u{0}'),
  ('\u{1f2f}', '\u{399}', '\u{0}'),
  ('\u{1f68}', '\u{399}', '\u{0}'),
  ('\u{1f69}', '\u{399}', '\u{0}'),
  ('\u{1f6a}', '\u{399}', '\u{0}'),
  ('\u{1f6b}', '\u{399}', '\u{0}'),
  ('\u{1f6c}', '\u{399}', '\u{0}'),
  ('\u{1f6d}', '\u{399}', '\u{0}'),
  ('\u{1f6e}', '\u{399}', '\u{0}'),
  ('\u{1f6f}', '\u{399}', '\u{0}'),
  ('\u{1f68}', '\u{399}', '\u{0}'),
  ('\u{1f69}', '\u{399}', '\u{0}'),
  ('\u{1f6a}', '\u{399}', '\u{0}'),
  ('\u{1f6b}', '\u{399}', '\u{0}'),
  ('\u{1f6c}', '\u{399}', '\u{0}'),
  ('\u{1f6d}', '\u{399}', '\u{0}'),
  ('\u{1f6e}', '\u{399}', '\u{0}'),
  ('\u{1f6f}', '\u{399}', '\u{0}'),
  ('\u{1fba}', '\u{399}', '\u{0}'),
  ('\u{391}', '\u{399}', '\u{0}'),
  ('\u{386}', '\u{399}', '\u{0}'),
  ('\u{391}', '\u{342}', '\u{0}'),
  ('\u{391}', '\u{342}', '\u{399}'),
  ('\u{391}', '\u{399}', '\u{0}'),
  ('\u{1fca}', '\u{399}', '\u{0}'),
  ('\u{397}', '\u{399}', '\u{0}'),
  ('\u{389}', '\u{399}', '\u{0}'),
  ('\u{397}', '\u{342}', '\u{0}'),
  ('\u{397}', '\u{342}', '\u{399}'),
  ('\u{397}', '\u{399}', '\u{0}'),
  ('\u{399}', '\u{308}', '\u{300}'),
  ('\u{399}', '\u{308}', '\u{301}'),
  ('\u{399}', '\u{342}', '\u{0}'),
  ('\u{399}', '\u{308}', '\u{342}'),
  ('\u{3a5}', '\u{308}', '\u{300}'),
  ('\u{3a5}', '\u{308}', '\u{301}'),
  ('\u{3a1}', '\u{313}', '\u{0}'),
  ('\u{3a5}', '\u{342}', '\u{0}'),
  ('\u{3a5}', '\u{308}', '\u{342}'),
  ('\u{1ffa}', '\u{399}', '\u{0}'),
  ('\u{3a9}', '\u{399}', '\u{0}'),
  ('\u{38f}', '\u{399}', '\u{0}'),
  ('\u{3a9}', '\u{342}', '\u{0}'),
  ('\u{3a9}', '\u{342}', '\u{399}'),
  ('\u{3a9}', '\u{399}', '\u{0}'),
  ('F', 'F', '\u{0}'),
  ('F', 'I', '\u{0}'),
  ('F', 'L', '\u{0}'),
  ('F', 'F', 'I'),
  ('F', 'F', 'L'),
  ('S', 'T', '\u{0}'),
  ('S', 'T', '\u{0}'),
  ('\u{544}', '\u{546}', '\u{0}'),
  ('\u{544}', '\u{535}', '\u{0}'),
  ('\u{544}', '\u{53b}', '\u{0}'),
  ('\u{54e}', '\u{546}', '\u{0}'),
  ('\u{544}', '\u{53d}', '\u{0}'),
]